/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "./node_modules/@linusborg/vue-simple-portal/dist/index.esm.js": /*!*********************************************************************!*\ !*** ./node_modules/@linusborg/vue-simple-portal/dist/index.esm.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Portal: () => (/* binding */ Portal), /* harmony export */ config: () => (/* binding */ config), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ setSelector: () => (/* binding */ setSelector) /* harmony export */ }); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); /* harmony import */ var nanoid_non_secure__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! nanoid/non-secure */ "./node_modules/nanoid/non-secure/index.js"); /** * vue-simple-portal * version: 0.1.5, * (c) Thorsten Lünborg, 2021 - present * LICENCE: Apache-2.0 * http://github.com/linusborg/vue-simple-portal */ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { return typeof obj; }; } else { _typeof = function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var config = { selector: "vue-portal-target-".concat((0,nanoid_non_secure__WEBPACK_IMPORTED_MODULE_0__.nanoid)()) }; var setSelector = function setSelector(selector) { return config.selector = selector; }; var isBrowser = typeof window !== 'undefined' && (typeof document === "undefined" ? "undefined" : _typeof(document)) !== undefined; var TargetContainer = vue__WEBPACK_IMPORTED_MODULE_1__["default"].extend({ // as an abstract component, it doesn't appear in // the $parent chain of components. // which means the next parent of any component rendered inside of this oen // will be the parent from which is was sent // @ts-expect-error abstract: true, name: 'PortalOutlet', props: ['nodes', 'tag'], data: function data(vm) { return { updatedNodes: vm.nodes }; }, render: function render(h) { var nodes = this.updatedNodes && this.updatedNodes(); if (!nodes) return h(); return nodes.length === 1 && !nodes[0].text ? nodes : h(this.tag || 'DIV', nodes); }, destroyed: function destroyed() { var el = this.$el; el && el.parentNode.removeChild(el); } }); var Portal = vue__WEBPACK_IMPORTED_MODULE_1__["default"].extend({ name: 'VueSimplePortal', props: { disabled: { type: Boolean }, prepend: { type: Boolean }, selector: { type: String, default: function _default() { return "#".concat(config.selector); } }, tag: { type: String, default: 'DIV' } }, render: function render(h) { if (this.disabled) { var nodes = this.$scopedSlots && this.$scopedSlots.default(); if (!nodes) return h(); return nodes.length < 2 && !nodes[0].text ? nodes : h(this.tag, nodes); } return h(); }, created: function created() { if (!this.getTargetEl()) { this.insertTargetEl(); } }, updated: function updated() { var _this = this; // We only update the target container component // if the scoped slot function is a fresh one // The new slot syntax (since Vue 2.6) can cache unchanged slot functions // and we want to respect that here. this.$nextTick(function () { if (!_this.disabled && _this.slotFn !== _this.$scopedSlots.default) { _this.container.updatedNodes = _this.$scopedSlots.default; } _this.slotFn = _this.$scopedSlots.default; }); }, beforeDestroy: function beforeDestroy() { this.unmount(); }, watch: { disabled: { immediate: true, handler: function handler(disabled) { disabled ? this.unmount() : this.$nextTick(this.mount); } } }, methods: { // This returns the element into which the content should be mounted. getTargetEl: function getTargetEl() { if (!isBrowser) return; return document.querySelector(this.selector); }, insertTargetEl: function insertTargetEl() { if (!isBrowser) return; var parent = document.querySelector('body'); var child = document.createElement(this.tag); child.id = this.selector.substring(1); parent.appendChild(child); }, mount: function mount() { if (!isBrowser) return; var targetEl = this.getTargetEl(); var el = document.createElement('DIV'); if (this.prepend && targetEl.firstChild) { targetEl.insertBefore(el, targetEl.firstChild); } else { targetEl.appendChild(el); } this.container = new TargetContainer({ el: el, parent: this, propsData: { tag: this.tag, nodes: this.$scopedSlots.default } }); }, unmount: function unmount() { if (this.container) { this.container.$destroy(); delete this.container; } } } }); function install(_Vue) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _Vue.component(options.name || 'portal', Portal); if (options.defaultSelector) { setSelector(options.defaultSelector); } } if (typeof window !== 'undefined' && window.Vue && window.Vue === vue__WEBPACK_IMPORTED_MODULE_1__["default"]) { // plugin was inlcuded directly in a browser vue__WEBPACK_IMPORTED_MODULE_1__["default"].use(install); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (install); /***/ }), /***/ "./node_modules/@mapbox/hast-util-table-cell-style/index.js": /*!******************************************************************!*\ !*** ./node_modules/@mapbox/hast-util-table-cell-style/index.js ***! \******************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var visit = __webpack_require__(/*! unist-util-visit */ "./node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit/index.js"); var hasOwnProperty = Object.prototype.hasOwnProperty; var hastCssPropertyMap = { align: 'text-align', valign: 'vertical-align', height: 'height', width: 'width', }; module.exports = function tableCellStyle(node) { visit(node, 'element', visitor); return node; }; function visitor(node) { if (node.tagName !== 'tr' && node.tagName !== 'td' && node.tagName !== 'th') { return; } var hastName; var cssName; for (hastName in hastCssPropertyMap) { if ( !hasOwnProperty.call(hastCssPropertyMap, hastName) || node.properties[hastName] === undefined ) { continue; } cssName = hastCssPropertyMap[hastName]; appendStyle(node, cssName, node.properties[hastName]); delete node.properties[hastName]; } } function appendStyle(node, property, value) { var prevStyle = (node.properties.style || '').trim(); if (prevStyle && !/;\s*/.test(prevStyle)) { prevStyle += ';'; } if (prevStyle) { prevStyle += ' '; } var nextStyle = prevStyle + property + ': ' + value + ';'; node.properties.style = nextStyle; } /***/ }), /***/ "./node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-is/convert.js": /*!***********************************************************************************************!*\ !*** ./node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-is/convert.js ***! \***********************************************************************************************/ /***/ ((module) => { "use strict"; module.exports = convert function convert(test) { if (typeof test === 'string') { return typeFactory(test) } if (test === null || test === undefined) { return ok } if (typeof test === 'object') { return ('length' in test ? anyFactory : matchesFactory)(test) } if (typeof test === 'function') { return test } throw new Error('Expected function, string, or object as test') } function convertAll(tests) { var results = [] var length = tests.length var index = -1 while (++index < length) { results[index] = convert(tests[index]) } return results } // Utility assert each property in `test` is represented in `node`, and each // values are strictly equal. function matchesFactory(test) { return matches function matches(node) { var key for (key in test) { if (node[key] !== test[key]) { return false } } return true } } function anyFactory(tests) { var checks = convertAll(tests) var length = checks.length return matches function matches() { var index = -1 while (++index < length) { if (checks[index].apply(this, arguments)) { return true } } return false } } // Utility to convert a string into a function which checks a given node’s type // for said string. function typeFactory(test) { return type function type(node) { return Boolean(node && node.type === test) } } // Utility to return true. function ok() { return true } /***/ }), /***/ "./node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit-parents/index.js": /*!********************************************************************************************************!*\ !*** ./node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit-parents/index.js ***! \********************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; module.exports = visitParents var convert = __webpack_require__(/*! unist-util-is/convert */ "./node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-is/convert.js") var CONTINUE = true var SKIP = 'skip' var EXIT = false visitParents.CONTINUE = CONTINUE visitParents.SKIP = SKIP visitParents.EXIT = EXIT function visitParents(tree, test, visitor, reverse) { var is if (typeof test === 'function' && typeof visitor !== 'function') { reverse = visitor visitor = test test = null } is = convert(test) one(tree, null, []) // Visit a single node. function one(node, index, parents) { var result = [] var subresult if (!test || is(node, index, parents[parents.length - 1] || null)) { result = toResult(visitor(node, parents)) if (result[0] === EXIT) { return result } } if (node.children && result[0] !== SKIP) { subresult = toResult(all(node.children, parents.concat(node))) return subresult[0] === EXIT ? subresult : result } return result } // Visit children in `parent`. function all(children, parents) { var min = -1 var step = reverse ? -1 : 1 var index = (reverse ? children.length : min) + step var result while (index > min && index < children.length) { result = one(children[index], index, parents) if (result[0] === EXIT) { return result } index = typeof result[1] === 'number' ? result[1] : index + step } } } function toResult(value) { if (value !== null && typeof value === 'object' && 'length' in value) { return value } if (typeof value === 'number') { return [CONTINUE, value] } return [value] } /***/ }), /***/ "./node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit/index.js": /*!************************************************************************************************!*\ !*** ./node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit/index.js ***! \************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; module.exports = visit var visitParents = __webpack_require__(/*! unist-util-visit-parents */ "./node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit-parents/index.js") var CONTINUE = visitParents.CONTINUE var SKIP = visitParents.SKIP var EXIT = visitParents.EXIT visit.CONTINUE = CONTINUE visit.SKIP = SKIP visit.EXIT = EXIT function visit(tree, test, visitor, reverse) { if (typeof test === 'function' && typeof visitor !== 'function') { reverse = visitor visitor = test test = null } visitParents(tree, test, overload, reverse) function overload(node, parents) { var parent = parents[parents.length - 1] var index = parent ? parent.children.indexOf(node) : null return visitor(node, index, parent) } } /***/ }), /***/ "./node_modules/@nextcloud/auth/dist/index.js": /*!****************************************************!*\ !*** ./node_modules/@nextcloud/auth/dist/index.js ***! \****************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var eventBus = __webpack_require__(/*! @nextcloud/event-bus */ "./node_modules/@nextcloud/event-bus/dist/index.cjs"); var token = undefined; var observers = []; /** * Get current request token * * @return {string|null} Current request token or null if not set */ function getRequestToken() { if (token === undefined) { // Only on first load, try to get token from document var tokenElement = document === null || document === void 0 ? void 0 : document.getElementsByTagName('head')[0]; token = tokenElement ? tokenElement.getAttribute('data-requesttoken') : null; } return token; } /** * Add an observer which is called when the CSRF token changes * * @param observer The observer */ function onRequestTokenUpdate(observer) { observers.push(observer); } // Listen to server event and keep token in sync eventBus.subscribe('csrf-token-update', function (e) { token = e.token; observers.forEach(function (observer) { try { observer(e.token); } catch (e) { console.error('error updating CSRF token observer', e); } }); }); var getAttribute = function (el, attribute) { if (el) { return el.getAttribute(attribute); } return null; }; var currentUser = undefined; function getCurrentUser() { if (currentUser !== undefined) { return currentUser; } var head = document === null || document === void 0 ? void 0 : document.getElementsByTagName('head')[0]; if (!head) { return null; } // No user logged in so cache and return null var uid = getAttribute(head, 'data-user'); if (uid === null) { currentUser = null; return currentUser; } currentUser = { uid: uid, displayName: getAttribute(head, 'data-user-displayname'), isAdmin: !!window._oc_isadmin, }; return currentUser; } exports.getCurrentUser = getCurrentUser; exports.getRequestToken = getRequestToken; exports.onRequestTokenUpdate = onRequestTokenUpdate; //# sourceMappingURL=index.js.map /***/ }), /***/ "./node_modules/@nextcloud/axios/node_modules/@nextcloud/router/dist/index.js": /*!************************************************************************************!*\ !*** ./node_modules/@nextcloud/axios/node_modules/@nextcloud/router/dist/index.js ***! \************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.generateUrl = exports.generateRemoteUrl = exports.generateOcsUrl = exports.generateFilePath = void 0; exports.getAppRootUrl = getAppRootUrl; exports.getRootUrl = getRootUrl; exports.linkTo = exports.imagePath = void 0; __webpack_require__(/*! core-js/modules/es.string.replace.js */ "./node_modules/core-js/modules/es.string.replace.js"); /** * Get an url with webroot to a file in an app * * @param {string} app the id of the app the file belongs to * @param {string} file the file path relative to the app folder * @return {string} URL with webroot to a file */ const linkTo = (app, file) => generateFilePath(app, '', file); /** * Creates a relative url for remote use * * @param {string} service id * @return {string} the url */ exports.linkTo = linkTo; const linkToRemoteBase = service => getRootUrl() + '/remote.php/' + service; /** * @brief Creates an absolute url for remote use * @param {string} service id * @return {string} the url */ const generateRemoteUrl = service => window.location.protocol + '//' + window.location.host + linkToRemoteBase(service); /** * Get the base path for the given OCS API service * * @param {string} url OCS API service url * @param {object} params parameters to be replaced into the service url * @param {UrlOptions} options options for the parameter replacement * @param {boolean} options.escape Set to false if parameters should not be URL encoded (default true) * @param {Number} options.ocsVersion OCS version to use (defaults to 2) * @return {string} Absolute path for the OCS URL */ exports.generateRemoteUrl = generateRemoteUrl; const generateOcsUrl = (url, params, options) => { const allOptions = Object.assign({ ocsVersion: 2 }, options || {}); const version = allOptions.ocsVersion === 1 ? 1 : 2; return window.location.protocol + '//' + window.location.host + getRootUrl() + '/ocs/v' + version + '.php' + _generateUrlPath(url, params, options); }; exports.generateOcsUrl = generateOcsUrl; /** * Generate a url path, which can contain parameters * * Parameters will be URL encoded automatically * * @param {string} url address (can contain placeholders e.g. /call/{token} would replace {token} with the value of params.token * @param {object} params parameters to be replaced into the address * @param {UrlOptions} options options for the parameter replacement * @return {string} Path part for the given URL */ const _generateUrlPath = (url, params, options) => { const allOptions = Object.assign({ escape: true }, options || {}); const _build = function (text, vars) { vars = vars || {}; return text.replace(/{([^{}]*)}/g, function (a, b) { var r = vars[b]; if (allOptions.escape) { return typeof r === 'string' || typeof r === 'number' ? encodeURIComponent(r.toString()) : encodeURIComponent(a); } else { return typeof r === 'string' || typeof r === 'number' ? r.toString() : a; } }); }; if (url.charAt(0) !== '/') { url = '/' + url; } return _build(url, params || {}); }; /** * Generate the url with webroot for the given relative url, which can contain parameters * * Parameters will be URL encoded automatically * * @param {string} url address (can contain placeholders e.g. /call/{token} would replace {token} with the value of params.token * @param {object} params parameters to be replaced into the url * @param {UrlOptions} options options for the parameter replacement * @param {boolean} options.noRewrite True if you want to force index.php being added * @param {boolean} options.escape Set to false if parameters should not be URL encoded (default true) * @return {string} URL with webroot for the given relative URL */ const generateUrl = (url, params, options) => { var _window; const allOptions = Object.assign({ noRewrite: false }, options || {}); if (((_window = window) === null || _window === void 0 || (_window = _window.OC) === null || _window === void 0 || (_window = _window.config) === null || _window === void 0 ? void 0 : _window.modRewriteWorking) === true && !allOptions.noRewrite) { return getRootUrl() + _generateUrlPath(url, params, options); } return getRootUrl() + '/index.php' + _generateUrlPath(url, params, options); }; /** * Get the path with webroot to an image file * if no extension is given for the image, it will automatically decide * between .png and .svg based on what the browser supports * * @param {string} app the app id to which the image belongs * @param {string} file the name of the image file * @return {string} */ exports.generateUrl = generateUrl; const imagePath = (app, file) => { if (file.indexOf('.') === -1) { //if no extension is given, use svg return generateFilePath(app, 'img', file + '.svg'); } return generateFilePath(app, 'img', file); }; /** * Get the url with webroot for a file in an app * * @param {string} app the id of the app * @param {string} type the type of the file to link to (e.g. css,img,ajax.template) * @param {string} file the filename * @return {string} URL with webroot for a file in an app */ exports.imagePath = imagePath; const generateFilePath = (app, type, file) => { var _window2; const isCore = ((_window2 = window) === null || _window2 === void 0 || (_window2 = _window2.OC) === null || _window2 === void 0 || (_window2 = _window2.coreApps) === null || _window2 === void 0 ? void 0 : _window2.indexOf(app)) !== -1; let link = getRootUrl(); if (file.substring(file.length - 3) === 'php' && !isCore) { link += '/index.php/apps/' + app; if (file !== 'index.php') { link += '/'; if (type) { link += encodeURI(type + '/'); } link += file; } } else if (file.substring(file.length - 3) !== 'php' && !isCore) { link = getAppRootUrl(app); if (type) { link += '/' + type + '/'; } if (link.substring(link.length - 1) !== '/') { link += '/'; } link += file; } else { if ((app === 'settings' || app === 'core' || app === 'search') && type === 'ajax') { link += '/index.php/'; } else { link += '/'; } if (!isCore) { link += 'apps/'; } if (app !== '') { app += '/'; link += app; } if (type) { link += type + '/'; } link += file; } return link; }; /** * Return the web root path where this Nextcloud instance * is accessible, with a leading slash. * For example "/nextcloud". * * @return {string} web root path */ exports.generateFilePath = generateFilePath; function getRootUrl() { let webroot = window._oc_webroot; if (typeof webroot === 'undefined') { webroot = location.pathname; const pos = webroot.indexOf('/index.php/'); if (pos !== -1) { webroot = webroot.substr(0, pos); } else { webroot = webroot.substr(0, webroot.lastIndexOf('/')); } } return webroot; } /** * Return the web root path for a given app * @param {string} app The ID of the app */ function getAppRootUrl(app) { var _window$_oc_appswebro, _webroots$app; const webroots = (_window$_oc_appswebro = window._oc_appswebroots) !== null && _window$_oc_appswebro !== void 0 ? _window$_oc_appswebro : {}; return (_webroots$app = webroots[app]) !== null && _webroots$app !== void 0 ? _webroots$app : ''; } //# sourceMappingURL=index.js.map /***/ }), /***/ "./node_modules/@nextcloud/capabilities/dist/index.js": /*!************************************************************!*\ !*** ./node_modules/@nextcloud/capabilities/dist/index.js ***! \************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getCapabilities = getCapabilities; var _initialState = __webpack_require__(/*! @nextcloud/initial-state */ "./node_modules/@nextcloud/capabilities/node_modules/@nextcloud/initial-state/dist/index.js"); function getCapabilities() { try { return (0, _initialState.loadState)('core', 'capabilities'); } catch (error) { console.debug('Could not find capabilities initial state fall back to _oc_capabilities'); if (!('_oc_capabilities' in window)) { return {}; } return window['_oc_capabilities']; } } //# sourceMappingURL=index.js.map /***/ }), /***/ "./node_modules/@nextcloud/capabilities/node_modules/@nextcloud/initial-state/dist/index.js": /*!**************************************************************************************************!*\ !*** ./node_modules/@nextcloud/capabilities/node_modules/@nextcloud/initial-state/dist/index.js ***! \**************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.loadState = loadState; __webpack_require__(/*! core-js/modules/es.array.concat.js */ "./node_modules/core-js/modules/es.array.concat.js"); /** * @param app app ID, e.g. "mail" * @param key name of the property * @param fallback optional parameter to use as default value * @throws if the key can't be found */ function loadState(app, key, fallback) { var elem = document.querySelector("#initial-state-".concat(app, "-").concat(key)); if (elem === null) { if (fallback !== undefined) { return fallback; } throw new Error("Could not find initial state ".concat(key, " of ").concat(app)); } try { return JSON.parse(atob(elem.value)); } catch (e) { throw new Error("Could not parse initial state ".concat(key, " of ").concat(app)); } } //# sourceMappingURL=index.js.map /***/ }), /***/ "./node_modules/@nextcloud/cdav-library/dist/dist.js": /*!***********************************************************!*\ !*** ./node_modules/@nextcloud/cdav-library/dist/dist.js ***! \***********************************************************/ /***/ ((module) => { /*! For license information please see dist.js.LICENSE.txt */ !function(e,t){ true?module.exports=t():0}(self,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var s in r)e.o(r,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:r[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{debug:()=>R,default:()=>ne,namespaces:()=>r});var r={};e.r(r),e.d(r,{APPLE:()=>c,CALENDARSERVER:()=>u,DAV:()=>a,IETF_CALDAV:()=>n,IETF_CARDDAV:()=>i,NEXTCLOUD:()=>o,NS_MAP:()=>d,OWNCLOUD:()=>l,SABREDAV:()=>p,resolve:()=>h});class s{constructor(){this._parser={},this._registerDefaultParsers()}canParse(e){return Object.prototype.hasOwnProperty.call(this._parser,e)}parse(e,t,r){const s=`{${t.namespaceURI}}${t.localName}`;if(!this.canParse(s))throw new Error(`Unable to parse unknown property "${s}"`);return this._parser[s](e,t,r)}registerParser(e,t){this._parser[e]=t}unregisterParser(e){delete this._parser[e]}_registerDefaultParsers(){this.registerParser("{DAV:}displayname",s.text),this.registerParser("{DAV:}creationdate",s.text),this.registerParser("{DAV:}getcontentlength",s.decInt),this.registerParser("{DAV:}getcontenttype",s.text),this.registerParser("{DAV:}getcontentlanguage",s.text),this.registerParser("{DAV:}getlastmodified",s.rfc1123Date),this.registerParser("{DAV:}getetag",s.text),this.registerParser("{DAV:}resourcetype",s.resourceType),this.registerParser("{DAV:}inherited-acl-set",s.hrefs),this.registerParser("{DAV:}group",s.href),this.registerParser("{DAV:}owner",s.href),this.registerParser("{DAV:}current-user-privilege-set",s.privileges),this.registerParser("{DAV:}principal-collection-set",s.hrefs),this.registerParser("{DAV:}principal-URL",s.href),this.registerParser("{DAV:}alternate-URI-set",s.hrefs),this.registerParser("{DAV:}group-member-set",s.hrefs),this.registerParser("{DAV:}group-membership",s.hrefs),this.registerParser("{DAV:}current-user-principal",s.currentUserPrincipal),this.registerParser("{DAV:}sync-token",s.text),this.registerParser("{urn:ietf:params:xml:ns:carddav}address-data",s.text),this.registerParser("{urn:ietf:params:xml:ns:carddav}addressbook-description",s.text),this.registerParser("{urn:ietf:params:xml:ns:carddav}supported-address-data",s.addressDataTypes),this.registerParser("{urn:ietf:params:xml:ns:carddav}max-resource-size",s.decInt),this.registerParser("{urn:ietf:params:xml:ns:carddav}addressbook-home-set",s.hrefs),this.registerParser("{urn:ietf:params:xml:ns:carddav}principal-address",s.href),this.registerParser("{urn:ietf:params:xml:ns:carddav}supported-collation-set",s.supportedCardDAVCollations),this.registerParser("{urn:ietf:params:xml:ns:caldav}calendar-data",s.text),this.registerParser("{urn:ietf:params:xml:ns:caldav}calendar-home-set",s.hrefs),this.registerParser("{urn:ietf:params:xml:ns:caldav}calendar-description",s.text),this.registerParser("{urn:ietf:params:xml:ns:caldav}calendar-timezone",s.text),this.registerParser("{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set",s.calendarComps),this.registerParser("{urn:ietf:params:xml:ns:caldav}supported-calendar-data",s.calendarDatas),this.registerParser("{urn:ietf:params:xml:ns:caldav}max-resource-size",s.decInt),this.registerParser("{urn:ietf:params:xml:ns:caldav}min-date-time",s.iCalendarTimestamp),this.registerParser("{urn:ietf:params:xml:ns:caldav}max-date-time",s.iCalendarTimestamp),this.registerParser("{urn:ietf:params:xml:ns:caldav}max-instances",s.decInt),this.registerParser("{urn:ietf:params:xml:ns:caldav}max-attendees-per-instance",s.decInt),this.registerParser("{urn:ietf:params:xml:ns:caldav}supported-collation-set",s.supportedCalDAVCollations),this.registerParser("{urn:ietf:params:xml:ns:caldav}schedule-outbox-URL",s.href),this.registerParser("{urn:ietf:params:xml:ns:caldav}schedule-inbox-URL",s.href),this.registerParser("{urn:ietf:params:xml:ns:caldav}calendar-user-address-set",s.hrefs),this.registerParser("{urn:ietf:params:xml:ns:caldav}calendar-user-type",s.text),this.registerParser("{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp",s.scheduleCalendarTransp),this.registerParser("{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL",s.href),this.registerParser("{urn:ietf:params:xml:ns:caldav}schedule-tag",s.text),this.registerParser("{urn:ietf:params:xml:ns:caldav}timezone-service-set",s.hrefs),this.registerParser("{urn:ietf:params:xml:ns:caldav}calendar-timezone-id",s.text),this.registerParser("{urn:ietf:params:xml:ns:caldav}calendar-availability",s.text),this.registerParser("{http://apple.com/ns/ical/}calendar-order",s.decInt),this.registerParser("{http://apple.com/ns/ical/}calendar-color",s.color),this.registerParser("{http://calendarserver.org/ns/}source",s.href),this.registerParser("{urn:ietf:params:xml:ns:caldav}default-alarm-vevent-datetime",s.text),this.registerParser("{urn:ietf:params:xml:ns:caldav}default-alarm-vevent-date",s.text),this.registerParser("{urn:ietf:params:xml:ns:caldav}default-alarm-vtodo-datetime",s.text),this.registerParser("{urn:ietf:params:xml:ns:caldav}default-alarm-vtodo-date",s.text),this.registerParser("{http://calendarserver.org/ns/}getctag",s.text),this.registerParser("{http://calendarserver.org/ns/}calendar-proxy-read-for",s.hrefs),this.registerParser("{http://calendarserver.org/ns/}calendar-proxy-write-for",s.hrefs),this.registerParser("{http://calendarserver.org/ns/}allowed-sharing-modes",s.allowedSharingModes),this.registerParser("{http://calendarserver.org/ns/}shared-url",s.href),this.registerParser("{http://sabredav.org/ns}owner-principal",s.href),this.registerParser("{http://sabredav.org/ns}read-only",s.bool),this.registerParser("{http://calendarserver.org/ns/}pre-publish-url",s.href),this.registerParser("{http://calendarserver.org/ns/}publish-url",s.href),this.registerParser("{http://owncloud.org/ns}invite",s.ocInvite),this.registerParser("{http://owncloud.org/ns}calendar-enabled",s.bool),this.registerParser("{http://owncloud.org/ns}enabled",s.bool),this.registerParser("{http://owncloud.org/ns}read-only",s.bool),this.registerParser("{http://nextcloud.com/ns}owner-displayname",s.text),this.registerParser("{http://nextcloud.com/ns}deleted-at",s.iso8601DateTime),this.registerParser("{http://nextcloud.com/ns}calendar-uri",s.text),this.registerParser("{http://nextcloud.com/ns}has-photo",s.bool),this.registerParser("{http://nextcloud.com/ns}trash-bin-retention-duration",s.decInt),this.registerParser("{http://nextcloud.com/ns}language",s.text),this.registerParser("{http://nextcloud.com/ns}room-type",s.text),this.registerParser("{http://nextcloud.com/ns}room-seating-capacity",s.decInt),this.registerParser("{http://nextcloud.com/ns}room-building-address",s.text),this.registerParser("{http://nextcloud.com/ns}room-building-story",s.text),this.registerParser("{http://nextcloud.com/ns}room-building-room-number",s.text),this.registerParser("{http://nextcloud.com/ns}room-features",s.text),this.registerParser("{http://sabredav.org/ns}email-address",s.text)}static text(e,t,r){return e.evaluate("string(.)",t,r,XPathResult.ANY_TYPE,null).stringValue}static bool(e,t,r){return"1"===s.text(e,t,r)}static decInt(e,t,r){return parseInt(s.text(e,t,r),10)}static rfc1123Date(e,t,r){const a=s.text(e,t,r);return new Date(a)}static iso8601DateTime(e,t,r){const a=s.text(e,t,r);return new Date(a)}static iCalendarTimestamp(e,t,r){const a=s.text(e,t,r),n=parseInt(a.slice(0,4),10),i=parseInt(a.slice(4,6),10)-1,l=parseInt(a.slice(6,8),10),o=parseInt(a.slice(9,11),10),c=parseInt(a.slice(11,13),10),u=parseInt(a.slice(13,15),10),p=new Date;return p.setUTCFullYear(n,i,l),p.setUTCHours(o,c,u,0),p}static resourceType(e,t,r){const s=[],a=e.evaluate("*",t,r,XPathResult.ANY_TYPE,null);let n;for(;null!==(n=a.iterateNext());){const t=e.evaluate("namespace-uri(.)",n,r,XPathResult.ANY_TYPE,null).stringValue,a=e.evaluate("local-name(.)",n,r,XPathResult.ANY_TYPE,null).stringValue;s.push(`{${t}}${a}`)}return s}static href(e,t,r){return e.evaluate("string(d:href)",t,r,XPathResult.ANY_TYPE,null).stringValue}static hrefs(e,t,r){const s=[],a=e.evaluate("d:href",t,r,XPathResult.ANY_TYPE,null);let n;for(;null!==(n=a.iterateNext());)s.push(e.evaluate("string(.)",n,r,XPathResult.ANY_TYPE,null).stringValue);return s}static privileges(e,t,r){const s=[],a=e.evaluate("d:privilege/*",t,r,XPathResult.ANY_TYPE,null);let n;for(;null!==(n=a.iterateNext());){const t=e.evaluate("namespace-uri(.)",n,r,XPathResult.ANY_TYPE,null).stringValue,a=e.evaluate("local-name(.)",n,r,XPathResult.ANY_TYPE,null).stringValue;s.push(`{${t}}${a}`)}return s}static currentUserPrincipal(e,t,r){return 0!==e.evaluate("count(d:unauthenticated)",t,r,XPathResult.ANY_TYPE,null).numberValue?{type:"unauthenticated",href:null}:{type:"href",href:s.href(...arguments)}}static addressDataTypes(e,t,r){const s=[],a=e.evaluate("cr:address-data-type",t,r,XPathResult.ANY_TYPE,null);let n;for(;null!==(n=a.iterateNext());)s.push({"content-type":e.evaluate("string(@content-type)",n,r,XPathResult.ANY_TYPE,null).stringValue,version:e.evaluate("string(@version)",n,r,XPathResult.ANY_TYPE,null).stringValue});return s}static supportedCardDAVCollations(e,t,r){const s=[],a=e.evaluate("cr:supported-collation",t,r,XPathResult.ANY_TYPE,null);let n;for(;null!==(n=a.iterateNext());)s.push(e.evaluate("string(.)",n,r,XPathResult.ANY_TYPE,null).stringValue);return s}static supportedCalDAVCollations(e,t,r){const s=[],a=e.evaluate("cl:supported-collation",t,r,XPathResult.ANY_TYPE,null);let n;for(;null!==(n=a.iterateNext());)s.push(e.evaluate("string(.)",n,r,XPathResult.ANY_TYPE,null).stringValue);return s}static calendarComps(e,t,r){const s=[],a=e.evaluate("cl:comp",t,r,XPathResult.ANY_TYPE,null);let n;for(;null!==(n=a.iterateNext());)s.push(e.evaluate("string(@name)",n,r,XPathResult.ANY_TYPE,null).stringValue);return s}static calendarDatas(e,t,r){const s=[],a=e.evaluate("cl:calendar-data",t,r,XPathResult.ANY_TYPE,null);let n;for(;null!==(n=a.iterateNext());)s.push({"content-type":e.evaluate("string(@content-type)",n,r,XPathResult.ANY_TYPE,null).stringValue,version:e.evaluate("string(@version)",n,r,XPathResult.ANY_TYPE,null).stringValue});return s}static scheduleCalendarTransp(e,t,r){const s=e.evaluate("cl:opaque | cl:transparent",t,r,XPathResult.ANY_TYPE,null).iterateNext();if(s)return e.evaluate("local-name(.)",s,r,XPathResult.ANY_TYPE,null).stringValue}static color(e,t,r){const a=s.text(e,t,r);return 9===a.length?a.slice(0,7):a}static allowedSharingModes(e,t,r){const s=[],a=e.evaluate("cs:can-be-shared | cs:can-be-published",t,r,XPathResult.ANY_TYPE,null);let n;for(;null!==(n=a.iterateNext());){const t=e.evaluate("namespace-uri(.)",n,r,XPathResult.ANY_TYPE,null).stringValue,a=e.evaluate("local-name(.)",n,r,XPathResult.ANY_TYPE,null).stringValue;s.push(`{${t}}${a}`)}return s}static ocInvite(e,t,r){const a=[],n=e.evaluate("oc:user",t,r,XPathResult.ANY_TYPE,null);let i;for(;null!==(i=n.iterateNext());)a.push({href:s.href(e,i,r),"common-name":e.evaluate("string(oc:common-name)",i,r,XPathResult.ANY_TYPE,null).stringValue,"invite-accepted":1===e.evaluate("count(oc:invite-accepted)",i,r,XPathResult.ANY_TYPE,null).numberValue,access:s.ocAccess(e,i,r)});return a}static ocAccess(e,t,r){const s=[],a=e.evaluate("oc:access/*",t,r,XPathResult.ANY_TYPE,null);let n;for(;null!==(n=a.iterateNext());){const t=e.evaluate("namespace-uri(.)",n,r,XPathResult.ANY_TYPE,null).stringValue,a=e.evaluate("local-name(.)",n,r,XPathResult.ANY_TYPE,null).stringValue;s.push(`{${t}}${a}`)}return s}}const a="DAV:",n="urn:ietf:params:xml:ns:caldav",i="urn:ietf:params:xml:ns:carddav",l="http://owncloud.org/ns",o="http://nextcloud.com/ns",c="http://apple.com/ns/ical/",u="http://calendarserver.org/ns/",p="http://sabredav.org/ns",d={d:a,cl:n,cr:i,oc:l,nc:o,aapl:c,cs:u,sd:p};function h(e){return d[e]||null}const m=new XMLSerializer;let g={};function y(){if(0===arguments.length)return[{},null];const e={name:arguments[0],children:[]};let t=e.children;return Array.prototype.slice.call(arguments,1).forEach((function(e){const r={name:e,children:[]};t.push(r),t=r.children})),[e,t]}function f(e){if("object"!=typeof(e=e||{})||!Object.prototype.hasOwnProperty.call(e,"name"))return"";const t=document.implementation.createDocument("","",null);return P(t,t,e),m.serializeToString(t)}function P(e,t,r){const[s,a]=r.name,n=e.createElementNS(s,function(e,t){return Object.prototype.hasOwnProperty.call(g,e)||(g[e]="x"+Object.keys(g).length),g[e]+":"+t}(s,a));r.attributes=r.attributes||[],r.attributes.forEach((e=>{if(2===e.length){const[t,r]=e;n.setAttribute(t,r)}else{const[t,r,s]=e;n.setAttributeNS(t,r,s)}})),r.value?n.textContent=r.value:r.children&&r.children.forEach((t=>{P(e,n,t)})),t.appendChild(n)}class v extends Error{constructor(e){super(),Object.assign(this,e)}}class _ extends v{}class b extends v{}class x extends v{}class A extends x{}class w extends x{}class D{constructor(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:()=>new XMLHttpRequest;this.baseUrl=e,this.parser=t,this.xhrProvider=r}async get(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:()=>null,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>null;return this.request("GET",e,t,r,s,a)}async patch(e,t,r){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:()=>null,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>null;return this.request("PATCH",e,t,r,s,a)}async post(e,t,r){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:()=>null,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>null;return this.request("POST",e,t,r,s,a)}async put(e,t,r){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:()=>null,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>null;return this.request("PUT",e,t,r,s,a)}async delete(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:()=>null,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>null;return this.request("DELETE",e,t,r,s,a)}async copy(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:()=>null,l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:()=>null;return a.Destination=t,a.Depth=r,a.Overwrite=s?"T":"F",this.request("COPY",e,a,n,i,l)}async move(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:()=>null,i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:()=>null;return s.Destination=t,s.Depth="Infinity",s.Overwrite=r?"T":"F",this.request("MOVE",e,s,a,n,i)}async lock(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:()=>null,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>null;return this.request("LOCK",e,t,r,s,a)}async unlock(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:()=>null,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>null;return this.request("UNLOCK",e,t,r,s,a)}async propFind(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>null,i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:()=>null;s.Depth=r;const[l,o]=y([a,"propfind"],[a,"prop"]);o.push(...t.map((e=>({name:e}))));const c=f(l);return this.request("PROPFIND",e,s,c,n,i)}async propPatch(e,t,r){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:()=>null,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>null;return this.request("PROPPATCH",e,t,r,s,a)}async mkCol(e,t,r){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:()=>null,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>null;return this.request("MKCOL",e,t,r,s,a)}async report(e,t,r){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:()=>null,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>null;return this.request("REPORT",e,t,r,s,a)}async request(e,t,r,s){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>null,n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:()=>null;const i=this.xhrProvider(),l=Object.assign({},{Depth:"0","Content-Type":"application/xml; charset=utf-8"},r);i.open(e,this.absoluteUrl(t),!0);for(const e in l)i.setRequestHeader(e,l[e]);return a(i),null==s?i.send():i.send(s),new Promise(((t,r)=>{i.onreadystatechange=()=>{if(4!==i.readyState)return;n(i);let s=i.response;if(!C(i.status))return i.status>=400&&i.status<500?void r(new w({body:s,status:i.status,xhr:i})):i.status>=500&&i.status<600?void r(new A({body:s,status:i.status,xhr:i})):void r(new x({body:s,status:i.status,xhr:i}));207===i.status&&(s=this._parseMultiStatusResponse(s),0===parseInt(l.Depth,10)&&"PROPFIND"===e&&(s=s[Object.keys(s)[0]])),t({body:s,status:i.status,xhr:i})},i.onerror=()=>r(new b({body:null,status:-1,xhr:i})),i.onabort=()=>r(new _({body:null,status:-1,xhr:i}))}))}filename(e){let t=this.pathname(e);"/"===t.slice(-1)&&(t=t.slice(0,-1));const r=t.lastIndexOf("/");return t.slice(r)}pathname(e){return new URL(e,this.baseUrl).pathname}absoluteUrl(e){return new URL(e,this.baseUrl).href}_parseMultiStatusResponse(e){const t={},r=(new DOMParser).parseFromString(e,"application/xml"),s=r.evaluate("/d:multistatus/d:response",r,h,XPathResult.ANY_TYPE,null);let a;for(;null!==(a=s.iterateNext());){const e=r.evaluate("string(d:href)",a,h,XPathResult.ANY_TYPE,null).stringValue,s={},i=r.evaluate("d:propstat",a,h,XPathResult.ANY_TYPE,null);let l;for(;null!==(l=i.iterateNext());){if(!C((n=r.evaluate("string(d:status)",l,h,XPathResult.ANY_TYPE,null).stringValue,parseInt(n.split(" ")[1],10))))continue;const e=r.evaluate("d:prop/*",l,h,XPathResult.ANY_TYPE,null);let t;for(;null!==(t=e.iterateNext());)this.parser.canParse(`{${t.namespaceURI}}${t.localName}`)&&(s[`{${t.namespaceURI}}${t.localName}`]=this.parser.parse(r,t,h))}t[e]=s}var n;return t}}function C(e){return e>=200&&e<300}function F(e,t){return""!==(e=e||"")&&(e+="-"),""!==(t=t||"")&&(t="."+t),e+"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16).toUpperCase()}))+t}class T{constructor(){this._eventListeners={}}addEventListener(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;this._eventListeners[e]=this._eventListeners[e]||[],this._eventListeners[e].push({listener:t,options:r})}removeEventListener(e,t){if(!this._eventListeners[e])return;const r=this._eventListeners[e].findIndex((e=>{let{listener:r}=e;return r===t}));-1!==r&&this._eventListeners[e].splice(r,1)}dispatchEvent(e,t){if(!this._eventListeners[e])return;const r=[],s=[];this._eventListeners[e].forEach((e=>{let{listener:t,options:a}=e;a&&a.once?s.push(t):r.push(t)})),s.forEach((r=>{this.removeEventListener(e,r),r(t)})),r.forEach((e=>{e(t)}))}}function R(e){return function(){if(R.enabled){for(var t=arguments.length,r=new Array(t),s=0;s{let[r,s]=e;"{DAV:}displayname"===r&&t.push({name:[a,"displayname"],value:s})})),t}R.enabled=!1;const V=R("DavObject");class L extends T{constructor(e,t,r,s){let n=arguments.length>4&&void 0!==arguments[4]&&arguments[4];super(),Object.assign(this,{_parent:e,_request:t,_url:r,_props:s,_isPartial:n,_isDirty:!1}),this._exposeProperty("etag",a,"getetag",!0),this._exposeProperty("contenttype",a,"getcontenttype"),Object.defineProperty(this,"url",{get:()=>this._url})}async fetchCompleteData(){if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]||this.isPartial()))return;const e=await this._request.propFind(this._url,this.constructor.getPropFindList(),0);this._props=e.body,this._isDirty=!1,this._isPartial=!1}async copy(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(V(`copying ${this.url} from ${this._parent.url} to ${e.url}`),this._parent===e)throw new Error("Copying an object to the collection it's already part of is not supported");if(!this._parent.isSameCollectionTypeAs(e))throw new Error("Copying an object to a collection of a different type is not supported");if(!e.isWriteable())throw new Error("Can not copy object into read-only destination collection");const s=this.url.split("/").splice(-1,1)[0],a=e.url+s;return await this._request.copy(this.url,a,0,t,r),e.find(s)}async move(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(V(`moving ${this.url} from ${this._parent.url} to ${e.url}`),this._parent===e)throw new Error("Moving an object to the collection it's already part of is not supported");if(!this._parent.isSameCollectionTypeAs(e))throw new Error("Moving an object to a collection of a different type is not supported");if(!e.isWriteable())throw new Error("Can not move object into read-only destination collection");const s=this.url.split("/").splice(-1,1)[0],a=e.url+s;await this._request.move(this.url,a,t,r),this._parent=e,this._url=a}async update(){if(this.isPartial()||!this.isDirty()||!this.data)return;const e={};return this.contenttype&&(e["Content-Type"]=`${this.contenttype}; charset=utf-8`),this.etag&&(e["If-Match"]=this.etag),this._request.put(this.url,e,this.data).then((e=>{this._isDirty=!1,this._props["{DAV:}getetag"]=e.xhr.getResponseHeader("etag")})).catch((e=>{throw this._isDirty=!0,e instanceof w&&412===e.status&&(this._isPartial=!0),e}))}async delete(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._request.delete(this.url,e)}isPartial(){return this._isPartial}isDirty(){return this._isDirty}_exposeProperty(e,t,r){arguments.length>3&&void 0!==arguments[3]&&arguments[3]?Object.defineProperty(this,e,{get:()=>this._props[`{${t}}${r}`],set:e=>{this._isDirty=!0,this._props[`{${t}}${r}`]=e}}):Object.defineProperty(this,e,{get:()=>this._props[`{${t}}${r}`]})}static getPropFindList(){return[[a,"getcontenttype"],[a,"getetag"],[a,"resourcetype"]]}}const N=R("DavCollection");class q extends T{constructor(e,t,r,s){super(),"/"!==r.slice(-1)&&(r+="/"),Object.assign(this,{_parent:e,_request:t,_url:r,_props:s,_collectionFactoryMapper:{},_objectFactoryMapper:{},_updatedProperties:[],_childrenNames:[],_propFindList:[],_propSetFactory:[]}),this._registerPropSetFactory(E),this._exposeProperty("displayname",a,"displayname",!0),this._exposeProperty("owner",a,"owner"),this._exposeProperty("resourcetype",a,"resourcetype"),this._exposeProperty("syncToken",a,"sync-token"),this._exposeProperty("currentUserPrivilegeSet",a,"current-user-privilege-set"),Object.defineProperty(this,"url",{get:()=>this._url}),this._propFindList.push(...L.getPropFindList()),this._propFindList.push(...q.getPropFindList())}async findAll(){const e=await this._request.propFind(this._url,this._propFindList,1);return this._handleMultiStatusResponse(e,!1)}async findAllByFilter(e){return(await this.findAll()).filter(e)}async find(e){const t=await this._request.propFind(this._url+e,this._propFindList,0);return t.body={[this._url+e]:t.body},this._handleMultiStatusResponse(t,!1)[0]}async createCollection(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;N("creating a collection"),t||(t=[{name:[a,"resourcetype"],children:[{name:[a,"collection"]}]}]);const[r,s]=y([a,"mkcol"],[a,"set"],[a,"prop"]);s.push(...t);const n=this._getAvailableNameFromToken(e),i=f(r);return await this._request.mkCol(this.url+n,{},i),this.find(n+"/")}async createObject(e,t,r){return N("creating an object"),await this._request.put(this.url+e,t,r),this.find(e)}async update(){if(0===this._updatedProperties.length)return;const e={};this._updatedProperties.forEach((t=>{e[t]=this._props[t]}));const t=this._propSetFactory.reduce(((t,r)=>[...t,...r(e)]),[]),[r,s]=y([a,"propertyupdate"],[a,"set"],[a,"prop"]);s.push(...t);const n=f(r);await this._request.propPatch(this._url,{},n)}async delete(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};await this._request.delete(this._url,e)}isReadable(){return this.currentUserPrivilegeSet.includes("{DAV:}read")}isWriteable(){return this.currentUserPrivilegeSet.includes("{DAV:}write")}isSameCollectionTypeAs(e){const t=this.resourcetype,r=e.resourcetype,s=t.find((e=>-1===r.indexOf(e))),a=r.find((e=>-1===t.indexOf(e)));return void 0===s&&void 0===a}_registerCollectionFactory(e,t){this._collectionFactoryMapper[e]=t,"function"==typeof t.getPropFindList&&this._propFindList.push(...t.getPropFindList())}_registerObjectFactory(e,t){this._objectFactoryMapper[e]=t,"function"==typeof t.getPropFindList&&this._propFindList.push(...t.getPropFindList())}_registerPropSetFactory(e){this._propSetFactory.push(e)}_exposeProperty(e,t,r){arguments.length>3&&void 0!==arguments[3]&&arguments[3]?Object.defineProperty(this,e,{get:()=>this._props[`{${t}}${r}`],set:e=>{this._props[`{${t}}${r}`]=e,-1===this._updatedProperties.indexOf(`{${t}}${r}`)&&this._updatedProperties.push(`{${t}}${r}`)}}):Object.defineProperty(this,e,{get:()=>this._props[`{${t}}${r}`]})}_getAvailableNameFromToken(e){return function(e,t){let r=(e=e||"").toString().toLowerCase().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,"");if(""===r&&(r="-"),t(r))return r;if(-1===r.indexOf("-")&&(r+="-1",t(r)))return r;do{const e=r.lastIndexOf("-"),t=r.slice(0,e);let s=r.slice(e+1);s.match(/^\d+$/)?(s=parseInt(s),s++,r=t+"-"+s):r+="-1"}while(!1===t(r));return r}(e,(e=>-1===this._childrenNames.indexOf(this._url+e)&&-1===this._childrenNames.indexOf(this._url+e+"/")))}async _updatePropsFromServer(){const e=await this._request.propFind(this.url,this.constructor.getPropFindList());this._props=e.body}_handleMultiStatusResponse(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const r=[],s=[];return Object.entries(e.body).forEach((e=>{let[n,i]=e;if(n===this._url||n+"/"===this.url)return;r.push(n);const l=this._request.pathname(n);if(i["{DAV:}resourcetype"]&&0!==i["{DAV:}resourcetype"].length||!i["{DAV:}getcontenttype"]){N(`${n} was identified as a collection`);const e=i["{DAV:}resourcetype"].find((e=>e!==`{${a}}collection`));if(!e)return N(`Collection-type of ${n} was not specified, treating as generic collection`),void s.push(new q(this,this._request,l,i));if(!this._collectionFactoryMapper[e])return N(`No constructor for collection-type ${e} (${n}) registered, treating as generic collection`),void s.push(new q(this,this._request,l,i));s.push(new this._collectionFactoryMapper[e](this,this._request,l,i))}else{N(`${n} was identified as a file`);const e=i["{DAV:}getcontenttype"].split(";")[0];if(!this._objectFactoryMapper[e])return N(`No constructor for content-type ${e} (${n}) registered, treating as generic object`),void s.push(new L(this,this._request,l,i));s.push(new this._objectFactoryMapper[e](this,this._request,l,i,t))}})),this._childrenNames.push(...r),s}static getPropFindList(){return[[a,"displayname"],[a,"owner"],[a,"resourcetype"],[a,"sync-token"],[a,"current-user-privilege-set"]]}}const Y=R("DavCollectionPublishable"),O=R("DavCollectionShareable");function S(e){return class extends e{constructor(){super(...arguments),super._exposeProperty("shares",l,"invite"),super._exposeProperty("allowedSharingModes",u,"allowed-sharing-modes")}async share(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";O(`Sharing ${this.url} with ${e}`);const[s,n]=y([l,"share"],[l,"set"]);n.push({name:[a,"href"],value:e}),t&&n.push({name:[l,"read-write"]}),""!==r&&n.push({name:[l,"summary"],value:r});const i=f(s);return this._request.post(this._url,{"Content-Type":"application/xml; charset=utf-8"},i).then((()=>{const r=this.shares.findIndex((t=>t.href===e));-1===r?this.shares.push({href:e,access:[t?"{http://owncloud.org/ns}read-write":"{http://owncloud.org/ns}read"],"common-name":null,"invite-accepted":!0}):this.shares[r].access=[t?"{http://owncloud.org/ns}read-write":"{http://owncloud.org/ns}read"]}))}async unshare(e){O(`Unsharing ${this.url} with ${e}`);const[t,r]=y([l,"share"],[l,"remove"]);r.push({name:[a,"href"],value:e});const s=f(t);return this._request.post(this._url,{"Content-Type":"application/xml; charset=utf-8"},s).then((()=>{const t=this.shares.findIndex((t=>t.href===e));-1!==t&&this.shares.splice(t,1)}))}isShareable(){return!!Array.isArray(this.allowedSharingModes)&&this.allowedSharingModes.includes(`{${u}}can-be-shared`)}isPublishable(){return!!Array.isArray(this.allowedSharingModes)&&this.allowedSharingModes.includes(`{${u}}can-be-published`)}static getPropFindList(){return super.getPropFindList().concat([[l,"invite"],[u,"allowed-sharing-modes"]])}}}class U extends L{constructor(){super(...arguments),super._exposeProperty("data",n,"calendar-data",!0)}static getPropFindList(){return super.getPropFindList().concat([[n,"calendar-data"]])}}function $(e){const t=[];return Object.entries(e).forEach((e=>{let[r,s]=e;switch(r){case"{http://apple.com/ns/ical/}calendar-order":t.push({name:[c,"calendar-order"],value:s.toString()});break;case"{http://apple.com/ns/ical/}calendar-color":t.push({name:[c,"calendar-color"],value:s});break;case"{http://calendarserver.org/ns/}source":t.push({name:[u,"source"],children:[{name:[a,"href"],value:s}]});break;case"{urn:ietf:params:xml:ns:caldav}calendar-description":t.push({name:[n,"calendar-description"],value:s});break;case"{urn:ietf:params:xml:ns:caldav}calendar-timezone":t.push({name:[n,"calendar-timezone"],value:s});break;case"{http://owncloud.org/ns}calendar-enabled":t.push({name:[l,"calendar-enabled"],value:s?"1":"0"})}})),t}const j=R("Calendar");class k extends(function(e){return class extends e{constructor(){super(...arguments),super._exposeProperty("publishURL",u,"publish-url")}async publish(){Y(`Publishing ${this.url}`);const[e]=y([u,"publish-calendar"]),t=f(e);await this._request.post(this._url,{"Content-Type":"application/xml; charset=utf-8"},t),await this._updatePropsFromServer()}async unpublish(){Y(`Unpublishing ${this.url}`);const[e]=y([u,"unpublish-calendar"]),t=f(e);await this._request.post(this._url,{"Content-Type":"application/xml; charset=utf-8"},t),delete this._props["{http://calendarserver.org/ns/}publish-url"]}static getPropFindList(){return super.getPropFindList().concat([[u,"publish-url"]])}}}(S(q))){constructor(){super(...arguments),super._registerObjectFactory("text/calendar",U),super._registerPropSetFactory($),super._exposeProperty("color",c,"calendar-color",!0),super._exposeProperty("enabled",l,"calendar-enabled",!0),super._exposeProperty("order",c,"calendar-order",!0),super._exposeProperty("timezone",n,"calendar-timezone",!0),super._exposeProperty("components",n,"supported-calendar-component-set")}async findAllVObjects(){return super.findAllByFilter((e=>e instanceof U))}async findByType(e){return this.calendarQuery([{name:[n,"comp-filter"],attributes:[["name","VCALENDAR"]],children:[{name:[n,"comp-filter"],attributes:[["name",e]]}]}])}async findByTypeInTimeRange(e,t,r){return this.calendarQuery([{name:[n,"comp-filter"],attributes:[["name","VCALENDAR"]],children:[{name:[n,"comp-filter"],attributes:[["name",e]],children:[{name:[n,"time-range"],attributes:[["start",k._getICalendarDateTimeFromDateObject(t)],["end",k._getICalendarDateTimeFromDateObject(r)]]}]}]}])}async createVObject(e){const t=F("","ics");return super.createObject(t,{"Content-Type":"text/calendar; charset=utf-8"},e)}async calendarQuery(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;j("sending an calendar-query request");const[s]=y([n,"calendar-query"]);t?s.children.push({name:[a,"prop"],children:t}):s.children.push({name:[a,"prop"],children:this._propFindList.map((e=>({name:e})))}),e&&s.children.push({name:[n,"filter"],children:e}),r&&s.children.push({name:[n,"timezone"],value:r});const i=f(s),l=await this._request.report(this.url,{Depth:"1"},i);return super._handleMultiStatusResponse(l,k._isRetrievalPartial(t))}async calendarMultiget(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0;if(j("sending an calendar-multiget request"),0===e.length)return[];const[r]=y([n,"calendar-multiget"]);t?r.children.push({name:[a,"prop"],children:t}):r.children.push({name:[a,"prop"],children:this._propFindList.map((e=>({name:e})))}),e.forEach((e=>{r.children.push({name:[a,"href"],value:e})}));const s=f(r),i=await this._request.report(this.url,{Depth:"1"},s);return super._handleMultiStatusResponse(i,k._isRetrievalPartial(t))}async freeBusyQuery(e,t){}static getPropFindList(){return super.getPropFindList().concat([[c,"calendar-order"],[c,"calendar-color"],[u,"getctag"],[n,"calendar-description"],[n,"calendar-timezone"],[n,"supported-calendar-component-set"],[n,"supported-calendar-data"],[n,"max-resource-size"],[n,"min-date-time"],[n,"max-date-time"],[n,"max-instances"],[n,"max-attendees-per-instance"],[n,"supported-collation-set"],[n,"calendar-free-busy-set"],[n,"schedule-calendar-transp"],[n,"schedule-default-calendar-URL"],[l,"calendar-enabled"],[o,"owner-displayname"],[o,"trash-bin-retention-duration"],[o,"deleted-at"]])}static _isRetrievalPartial(e){if(!e)return!1;const t=e.find((e=>e.name[0]===n&&"calendar-data"===e.name[1]));return!!t&&!!t.children}static _getICalendarDateTimeFromDateObject(e){return[e.getUTCFullYear(),("0"+(e.getUTCMonth()+1)).slice(-2),("0"+e.getUTCDate()).slice(-2),"T",("0"+e.getUTCHours()).slice(-2),("0"+e.getUTCMinutes()).slice(-2),("0"+e.getUTCSeconds()).slice(-2),"Z"].join("")}}class I extends k{constructor(){super(...arguments),super._exposeProperty("source",u,"source",!0),super._exposeProperty("refreshRate",c,"refreshrate",!0),super._exposeProperty("stripTodos",u,"subscribed-strip-todos",!0),super._exposeProperty("stripAlarms",u,"subscribed-strip-alarms",!0),super._exposeProperty("stripAttachments",u,"subscribed-strip-attachments",!0)}static getPropFindList(){return super.getPropFindList().concat([[u,"source"],[c,"refreshrate"],[u,"subscribed-strip-todos"],[u,"subscribed-strip-alarms"],[u,"subscribed-strip-attachments"]])}}function M(e){const t=[];return Object.entries(e).forEach((e=>{let[r,s]=e;"{urn:ietf:params:xml:ns:caldav}calendar-availability"===r&&t.push({name:[n,"calendar-availability"],value:s.toString()})})),t}class X extends k{constructor(){super(...arguments),super._registerPropSetFactory(M),super._exposeProperty("availability",n,"calendar-availability",!0)}static getPropFindList(){return super.getPropFindList().concat([[n,"calendar-availability"]])}}class B extends q{async freeBusyRequest(e){const t={},r=await this._request.post(this.url,{"Content-Type":'text/calendar; charset="utf-8"'},e),s=(new DOMParser).parseFromString(r.body,"application/xml"),a=s.evaluate("/cl:schedule-response/cl:response",s,h,XPathResult.ANY_TYPE,null);let n;for(;null!==(n=a.iterateNext());){const e=s.evaluate("string(cl:recipient/d:href)",n,h,XPathResult.ANY_TYPE,null).stringValue,r=s.evaluate("string(cl:request-status)",n,h,XPathResult.ANY_TYPE,null).stringValue,a=s.evaluate("string(cl:calendar-data)",n,h,XPathResult.ANY_TYPE,null).stringValue,i=/^2.\d(;.+)?$/.test(r);t[e]={calendarData:a,status:r,success:i}}return t}}class H extends q{constructor(){super(...arguments),super._registerObjectFactory("text/calendar",U),super._exposeProperty("retentionDuration",o,"trash-bin-retention-duration")}async findDeletedObjects(){const[e]=y([n,"calendar-query"]);e.children.push({name:[a,"prop"],children:U.getPropFindList().map((e=>({name:e}))).concat([{name:[o,"calendar-uri"]},{name:[o,"deleted-at"]}])}),e.children.push({name:[n,"filter"],children:[{name:[n,"comp-filter"],attributes:[["name","VCALENDAR"]],children:[{name:[n,"comp-filter"],attributes:[["name","VEVENT"]],children:[]}]}]});const t=f(e),r=await this._request.report(this._url+"objects",{Depth:"1"},t);return super._handleMultiStatusResponse(r)}async restore(e){await this._request.move(e,this._url+"restore/file")}}class z extends k{}const W=R("CalendarHome");class G extends q{constructor(){super(...arguments),super._registerCollectionFactory("{"+n+"}calendar",k),super._registerCollectionFactory("{"+o+"}deleted-calendar",z),super._registerCollectionFactory("{"+u+"}subscribed",I),super._registerCollectionFactory("{"+n+"}schedule-inbox",X),super._registerCollectionFactory("{"+n+"}schedule-outbox",B),super._registerCollectionFactory("{"+o+"}trash-bin",H)}async findAllCalDAVCollections(){return super.findAllByFilter((e=>e instanceof k||e instanceof H||e instanceof I||e instanceof X||e instanceof B||e instanceof z))}async findAllCalDAVCollectionsGrouped(){const e=await super.findAll();return{calendars:e.filter((e=>!(!(e instanceof k)||e instanceof X||e instanceof I||e instanceof z))),deletedCalendars:e.filter((e=>e instanceof z)),trashBins:e.filter((e=>e instanceof H)),subscriptions:e.filter((e=>e instanceof I)),scheduleInboxes:e.filter((e=>e instanceof X)),scheduleOutboxes:e.filter((e=>e instanceof B))}}async findAllCalendars(){return super.findAllByFilter((e=>!(!(e instanceof k)||e instanceof X||e instanceof I||e instanceof z)))}async findAllDeletedCalendars(){return super.findAllByFilter((e=>e instanceof z))}async findAllSubscriptions(){return super.findAllByFilter((e=>e instanceof I))}async findAllScheduleInboxes(){return super.findAllByFilter((e=>e instanceof X))}async findAllScheduleOutboxes(){return super.findAllByFilter((e=>e instanceof B))}async createCalendarCollection(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;W("creating a calendar collection");const o=[{name:[a,"resourcetype"],children:[{name:[a,"collection"]},{name:[n,"calendar"]}]},{name:[a,"displayname"],value:e},{name:[c,"calendar-color"],value:t},{name:[l,"calendar-enabled"],value:"1"}];i&&o.push({name:[n,"calendar-timezone"],value:i}),r&&o.push({name:[n,"supported-calendar-component-set"],children:r.map((e=>({name:[n,"comp"],attributes:[["name",e]]})))}),s&&o.push({name:[c,"calendar-order"],value:s});const u=super._getAvailableNameFromToken(e);return super.createCollection(u,o)}async createSubscribedCollection(e,t,r){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;W("creating a subscribed collection");const n=[{name:[a,"resourcetype"],children:[{name:[a,"collection"]},{name:[u,"subscribed"]}]},{name:[a,"displayname"],value:e},{name:[c,"calendar-color"],value:t},{name:[l,"calendar-enabled"],value:"1"},{name:[u,"source"],children:[{name:[a,"href"],value:r}]}];s&&n.push({name:[c,"calendar-order"],value:s});const i=super._getAvailableNameFromToken(e);return super.createCollection(i,n)}async search(){}async enableBirthdayCalendar(){const[e]=y([o,"enable-birthday-calendar"]),t=f(e);await this._request.post(this.url,{},t)}}function Q(e){const t=[];return Object.entries(e).forEach((e=>{let[r,s]=e;switch(r){case"{urn:ietf:params:xml:ns:carddav}addressbook-description":t.push({name:[i,"addressbook-description"],value:s});break;case"{http://owncloud.org/ns}enabled":t.push({name:[l,"enabled"],value:s?"1":"0"})}})),t}class K extends L{constructor(){super(...arguments),super._exposeProperty("data",i,"address-data",!0),super._exposeProperty("hasphoto",o,"has-photo",!1)}static getPropFindList(){return super.getPropFindList().concat([[i,"address-data"]])}}const Z=R("AddressBook");class J extends(S(q)){constructor(){super(...arguments),super._registerObjectFactory("text/vcard",K),super._registerPropSetFactory(Q),super._exposeProperty("description",i,"addressbook-description",!0),super._exposeProperty("enabled",l,"enabled",!0),super._exposeProperty("readOnly",l,"read-only")}findAllVCards(){return super.findAllByFilter((e=>e instanceof K))}async findAllAndFilterBySimpleProperties(e){const t=[];return e.forEach((e=>{t.push({name:[i,"prop"],attributes:[["name",e]]})})),this.addressbookQuery(null,[{name:[a,"getetag"]},{name:[a,"getcontenttype"]},{name:[a,"resourcetype"]},{name:[i,"address-data"],children:t},{name:[o,"has-photo"]}])}async createVCard(e){Z("creating VCard object");const t=F("","vcf");return super.createObject(t,{"Content-Type":"text/vcard; charset=utf-8"},e)}async addressbookQuery(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"anyof";Z("sending an addressbook-query request");const[n]=y([i,"addressbook-query"]);t?n.children.push({name:[a,"prop"],children:t}):n.children.push({name:[a,"prop"],children:this._propFindList.map((e=>({name:e})))}),e&&n.children.push({name:[i,"filter"],attributes:[["test",s]],children:e}),r&&n.children.push({name:[i,"limit"],children:[{name:[i,"nresults"],value:r}]});const l=f(n),o=await this._request.report(this.url,{Depth:"1"},l);return super._handleMultiStatusResponse(o,J._isRetrievalPartial(t))}async addressbookMultiget(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0;if(Z("sending an addressbook-multiget request"),0===e.length)return[];const r=this._buildMultiGetBody(e,t),s=await this._request.report(this.url,{Depth:"1"},r);return super._handleMultiStatusResponse(s,J._isRetrievalPartial(t))}async addressbookMultigetExport(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0;if(Z("sending an addressbook-multiget request and request download"),0===e.length)return"";const r=this._buildMultiGetBody(e,t);return this._request.report(this.url+"?export",{Depth:"1"},r)}_buildMultiGetBody(e,t){const[r]=y([i,"addressbook-multiget"]);return t?r.children.push({name:[a,"prop"],children:t}):r.children.push({name:[a,"prop"],children:this._propFindList.map((e=>({name:e})))}),e.forEach((e=>{r.children.push({name:[a,"href"],value:e})})),f(r)}static getPropFindList(){return super.getPropFindList().concat([[i,"addressbook-description"],[i,"supported-address-data"],[i,"max-resource-size"],[u,"getctag"],[l,"enabled"],[l,"read-only"]])}static _isRetrievalPartial(e){if(!e)return!1;const t=e.find((e=>e.name[0]===i&&"address-data"===e.name[1]));return!!t&&!!t.children}}const ee=R("AddressBookHome");class te extends q{constructor(){super(...arguments),super._registerCollectionFactory("{"+i+"}addressbook",J)}async findAllAddressBooks(){return super.findAllByFilter((e=>e instanceof J))}async createAddressBookCollection(e){ee("creating an addressbook collection");const t=[{name:[a,"resourcetype"],children:[{name:[a,"collection"]},{name:[i,"addressbook"]}]},{name:[a,"displayname"],value:e}],r=super._getAvailableNameFromToken(e);return super.createCollection(r,t)}}function re(e){const t=[];return Object.entries(e).forEach((e=>{let[r,s]=e;"{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL"===r&&t.push({name:[n,"schedule-default-calendar-URL"],children:[{name:["DAV:","href"],value:s}]})})),t}class se extends L{constructor(){super(...arguments),Object.assign(this,{_updatedProperties:[],_propSetFactory:[]}),this._registerPropSetFactory(re),this._exposeProperty("displayname",a,"displayname"),this._exposeProperty("calendarUserType",n,"calendar-user-type"),this._exposeProperty("calendarUserAddressSet",n,"calendar-user-address-set"),this._exposeProperty("principalUrl",a,"principal-URL"),this._exposeProperty("email",p,"email-address"),this._exposeProperty("language",o,"language"),this._exposeProperty("calendarHomes",n,"calendar-home-set"),this._exposeProperty("scheduleInbox",n,"schedule-inbox-URL"),this._exposeProperty("scheduleOutbox",n,"schedule-outbox-URL"),this._exposeProperty("scheduleDefaultCalendarUrl",n,"schedule-default-calendar-URL",!0),this._exposeProperty("addressBookHomes",i,"addressbook-home-set"),this._exposeProperty("roomType",o,"room-type"),this._exposeProperty("roomSeatingCapacity",o,"room-seating-capacity"),this._exposeProperty("roomBuildingAddress",o,"room-building-address"),this._exposeProperty("roomBuildingStory",o,"room-building-story"),this._exposeProperty("roomBuildingRoomNumber",o,"room-building-room-number"),this._exposeProperty("roomFeatures",o,"room-features"),Object.defineProperties(this,{principalScheme:{get:()=>{const e=this._request.pathname(this._request.baseUrl);let t=this.url.slice(e.length);return"/"===t.slice(-1)&&(t=t.slice(0,-1)),"principal:"+t}},userId:{get:()=>"INDIVIDUAL"!==this.calendarUserType?null:this.url.split("/").splice(-2,2)[this.url.endsWith("/")?0:1]},groupId:{get:()=>"GROUP"!==this.calendarUserType?null:this.url.split("/").splice(-2,2)[this.url.endsWith("/")?0:1]},resourceId:{get:()=>"RESOURCE"!==this.calendarUserType?null:this.url.split("/").splice(-2,2)[this.url.endsWith("/")?0:1]},roomId:{get:()=>"ROOM"!==this.calendarUserType?null:this.url.split("/").splice(-2,2)[this.url.endsWith("/")?0:1]},roomAddress:{get:()=>[this.roomBuildingRoomNumber,this.roomBuildingStory,this.roomBuildingAddress].filter((e=>!!e)).join(", ")}})}_exposeProperty(e,t,r){arguments.length>3&&void 0!==arguments[3]&&arguments[3]?Object.defineProperty(this,e,{get:()=>this._props[`{${t}}${r}`],set:e=>{this._props[`{${t}}${r}`]=e,-1===this._updatedProperties.indexOf(`{${t}}${r}`)&&this._updatedProperties.push(`{${t}}${r}`)}}):Object.defineProperty(this,e,{get:()=>this._props[`{${t}}${r}`]})}_registerPropSetFactory(e){this._propSetFactory.push(e)}static getPropFindList(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=[[a,"displayname"],[n,"calendar-user-type"],[n,"calendar-user-address-set"],[a,"principal-URL"],[a,"alternate-URI-set"],[p,"email-address"],[o,"language"]];return e.enableCalDAV&&t.push([n,"calendar-home-set"],[n,"schedule-inbox-URL"],[n,"schedule-outbox-URL"],[n,"schedule-default-calendar-URL"],[o,"resource-type"],[o,"resource-vehicle-type"],[o,"resource-vehicle-make"],[o,"resource-vehicle-model"],[o,"resource-vehicle-is-electric"],[o,"resource-vehicle-range"],[o,"resource-vehicle-seating-capacity"],[o,"resource-contact-person"],[o,"resource-contact-person-vcard"],[o,"room-type"],[o,"room-seating-capacity"],[o,"room-building-address"],[o,"room-building-story"],[o,"room-building-room-number"],[o,"room-features"]),e.enableCardDAV&&t.push([i,"addressbook-home-set"]),t}async update(){if(0===this._updatedProperties.length)return;const e={};this._updatedProperties.forEach((t=>{e[t]=this._props[t]}));const t=this._propSetFactory.reduce(((t,r)=>[...t,...r(e)]),[]),[r,s]=y([a,"propertyupdate"],[a,"set"],[a,"prop"]);s.push(...t);const n=f(r);await this._request.propPatch(this._url,{},n)}}const ae=R("index.js");class ne{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.rootUrl=null,"/"!==e.rootUrl.slice(-1)&&(e.rootUrl+="/"),Object.assign(this,e),this.advertisedFeatures=[],this.currentUserPrincipal=null,this.principalCollections=[],this.calendarHomes=[],this.publicCalendarHome=null,this.addressBookHomes=[],this.parser=new s,this._isConnected=!1,this._request=new D(this.rootUrl,this.parser,t)}async connect(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{enableCalDAV:!1,enableCardDAV:!1};if(this._isConnected)return this;if(!this.rootUrl)throw new Error("No rootUrl configured");const t=await this._discoverPrincipalUri();ae(`PrincipalURL: ${t}`);const r=se.getPropFindList(e);(e.enableCalDAV||e.enableCardDAV)&&r.push([a,"principal-collection-set"],[a,"supported-report-set"]);const s=await this._request.propFind(t,r);return this.currentUserPrincipal=new se(null,this._request,t,s.body),this._extractAdvertisedDavFeatures(s.xhr),this._extractAddressBookHomes(s.body),this._extractCalendarHomes(s.body),this._extractPrincipalCollectionSets(s.body),this._createPublicCalendarHome(),this._isConnected=!0,this}async principalPropertySearchByDisplayname(e){return this.principalPropertySearch([{name:[a,"displayname"]}],e)}async principalPropertySearchByDisplaynameOrEmail(e){return this.principalPropertySearch([{name:[a,"displayname"]},{name:[p,"email-address"]}],e,"anyof")}async principalPropertySearchByAddress(e){return this.principalPropertySearch([{name:[o,"room-building-address"]}],e)}async principalPropertySearchByAddressAndStory(e,t){const[r]=y([a,"principal-property-search"]);r.children.push({name:[a,"property-search"],children:[{name:[a,"prop"],children:[{name:[o,"room-building-address"]}]},{name:[a,"match"],value:e}]}),r.children.push({name:[a,"property-search"],children:[{name:[a,"prop"],children:[{name:[o,"room-building-story"]}]},{name:[a,"match"],value:t}]}),r.children.push({name:[a,"prop"],children:se.getPropFindList({enableCalDAV:!0}).map((e=>({name:e})))}),r.children.push({name:[a,"apply-to-principal-collection-set"]});const s=f(r);return this._request.report(this.rootUrl,{Depth:0},s).then((e=>{const t=[];return Object.entries(e.body).forEach((e=>{let[r,s]=e;const a=this._request.pathname(r);t.push(new se(null,this._request,a,s))})),t}))}async advancedPrincipalPropertySearch(e){const[t]=y([a,"principal-property-search"]);t.attributes=[["test","allof"]];const{displayName:r,capacity:s,features:n,roomType:i}=e;if(r&&t.children.push({name:[a,"property-search"],children:[{name:[a,"prop"],children:[{name:[a,"displayname"]}]},{name:[a,"match"],value:r}]}),s&&t.children.push({name:[a,"property-search"],children:[{name:[a,"prop"],children:[{name:[o,"room-seating-capacity"]}]},{name:[a,"match"],value:s}]}),n&&n.length>0&&t.children.push({name:[a,"property-search"],children:[{name:[a,"prop"],children:[{name:[o,"room-features"]}]},{name:[a,"match"],value:n.join(",")}]}),i&&t.children.push({name:[a,"property-search"],children:[{name:[a,"prop"],children:[{name:[o,"room-type"]}]},{name:[a,"match"],value:i}]}),0===t.children.length)return[];t.children.push({name:[a,"prop"],children:se.getPropFindList({enableCalDAV:!0}).map((e=>({name:e})))}),t.children.push({name:[a,"apply-to-principal-collection-set"]});const l=f(t),c=await this._request.report(this.rootUrl,{Depth:0},l);return Object.entries(c.body).map((e=>{let[t,r]=e;const s=this._request.pathname(t);return new se(null,this._request,s,r)}))}async principalPropertySearch(e,t,r){const[s,n]=y([a,"principal-property-search"],[a,"property-search"]);r&&(s.attributes=[["test",r]]),n.push({name:[a,"prop"],children:e},{name:[a,"match"],value:t}),s.children.push({name:[a,"prop"],children:se.getPropFindList({enableCalDAV:!0}).map((e=>({name:e})))}),s.children.push({name:[a,"apply-to-principal-collection-set"]});const i=f(s);return this._request.report(this.rootUrl,{Depth:0},i).then((e=>{const t=[];return Object.entries(e.body).forEach((e=>{let[r,s]=e;const a=this._request.pathname(r);t.push(new se(null,this._request,a,s))})),t}))}async findPrincipal(e){return this._request.propFind(e,se.getPropFindList()).then((t=>{let{body:r}=t;return new se(null,this._request,e,r)})).catch((e=>{console.debug(e)}))}async _discoverPrincipalUri(){const e=await this._request.propFind(this.rootUrl,[[a,"current-user-principal"]],0);if(!e.body["{DAV:}current-user-principal"])throw new Error("Error retrieving current user principal");if("unauthenticated"===e.body["{DAV:}current-user-principal"].type)throw new Error("Current user is not authenticated");return this._request.pathname(e.body["{DAV:}current-user-principal"].href)}async _extractCalendarHomes(e){const t=e[`{${n}}calendar-home-set`];t&&(this.calendarHomes=t.map((t=>{const r=this._request.pathname(t);return new G(this,this._request,r,e)})))}async _extractAddressBookHomes(e){const t=e[`{${i}}addressbook-home-set`];t&&(this.addressBookHomes=t.map((t=>{const r=this._request.pathname(t);return new te(this,this._request,r,e)})))}_extractPrincipalCollectionSets(e){const t=e[`{${a}}principal-collection-set`];this.principalCollections=t.map((e=>this._request.pathname(e)))}_extractAdvertisedDavFeatures(e){const t=e.getResponseHeader("DAV");this.advertisedFeatures.push(...t.split(",").map((e=>e.trim())))}_createPublicCalendarHome(){const e=this._request.pathname(this.rootUrl)+"public-calendars/";this.publicCalendarHome=new G(this,this._request,e,{})}}return t})())); //# sourceMappingURL=dist.js.map /***/ }), /***/ "./node_modules/@nextcloud/event-bus/node_modules/semver/classes/semver.js": /*!*********************************************************************************!*\ !*** ./node_modules/@nextcloud/event-bus/node_modules/semver/classes/semver.js ***! \*********************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { const debug = __webpack_require__(/*! ../internal/debug */ "./node_modules/@nextcloud/event-bus/node_modules/semver/internal/debug.js") const { MAX_LENGTH, MAX_SAFE_INTEGER } = __webpack_require__(/*! ../internal/constants */ "./node_modules/@nextcloud/event-bus/node_modules/semver/internal/constants.js") const { safeRe: re, t } = __webpack_require__(/*! ../internal/re */ "./node_modules/@nextcloud/event-bus/node_modules/semver/internal/re.js") const parseOptions = __webpack_require__(/*! ../internal/parse-options */ "./node_modules/@nextcloud/event-bus/node_modules/semver/internal/parse-options.js") const { compareIdentifiers } = __webpack_require__(/*! ../internal/identifiers */ "./node_modules/@nextcloud/event-bus/node_modules/semver/internal/identifiers.js") class SemVer { constructor (version, options) { options = parseOptions(options) if (version instanceof SemVer) { if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) { return version } else { version = version.version } } else if (typeof version !== 'string') { throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`) } if (version.length > MAX_LENGTH) { throw new TypeError( `version is longer than ${MAX_LENGTH} characters` ) } debug('SemVer', version, options) this.options = options this.loose = !!options.loose // this isn't actually relevant for versions, but keep it so that we // don't run into trouble passing this.options around. this.includePrerelease = !!options.includePrerelease const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) if (!m) { throw new TypeError(`Invalid Version: ${version}`) } this.raw = version // these are actually numbers this.major = +m[1] this.minor = +m[2] this.patch = +m[3] if (this.major > MAX_SAFE_INTEGER || this.major < 0) { throw new TypeError('Invalid major version') } if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { throw new TypeError('Invalid minor version') } if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { throw new TypeError('Invalid patch version') } // numberify any prerelease numeric ids if (!m[4]) { this.prerelease = [] } else { this.prerelease = m[4].split('.').map((id) => { if (/^[0-9]+$/.test(id)) { const num = +id if (num >= 0 && num < MAX_SAFE_INTEGER) { return num } } return id }) } this.build = m[5] ? m[5].split('.') : [] this.format() } format () { this.version = `${this.major}.${this.minor}.${this.patch}` if (this.prerelease.length) { this.version += `-${this.prerelease.join('.')}` } return this.version } toString () { return this.version } compare (other) { debug('SemVer.compare', this.version, this.options, other) if (!(other instanceof SemVer)) { if (typeof other === 'string' && other === this.version) { return 0 } other = new SemVer(other, this.options) } if (other.version === this.version) { return 0 } return this.compareMain(other) || this.comparePre(other) } compareMain (other) { if (!(other instanceof SemVer)) { other = new SemVer(other, this.options) } return ( compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch) ) } comparePre (other) { if (!(other instanceof SemVer)) { other = new SemVer(other, this.options) } // NOT having a prerelease is > having one if (this.prerelease.length && !other.prerelease.length) { return -1 } else if (!this.prerelease.length && other.prerelease.length) { return 1 } else if (!this.prerelease.length && !other.prerelease.length) { return 0 } let i = 0 do { const a = this.prerelease[i] const b = other.prerelease[i] debug('prerelease compare', i, a, b) if (a === undefined && b === undefined) { return 0 } else if (b === undefined) { return 1 } else if (a === undefined) { return -1 } else if (a === b) { continue } else { return compareIdentifiers(a, b) } } while (++i) } compareBuild (other) { if (!(other instanceof SemVer)) { other = new SemVer(other, this.options) } let i = 0 do { const a = this.build[i] const b = other.build[i] debug('prerelease compare', i, a, b) if (a === undefined && b === undefined) { return 0 } else if (b === undefined) { return 1 } else if (a === undefined) { return -1 } else if (a === b) { continue } else { return compareIdentifiers(a, b) } } while (++i) } // preminor will bump the version up to the next minor release, and immediately // down to pre-release. premajor and prepatch work the same way. inc (release, identifier, identifierBase) { switch (release) { case 'premajor': this.prerelease.length = 0 this.patch = 0 this.minor = 0 this.major++ this.inc('pre', identifier, identifierBase) break case 'preminor': this.prerelease.length = 0 this.patch = 0 this.minor++ this.inc('pre', identifier, identifierBase) break case 'prepatch': // If this is already a prerelease, it will bump to the next version // drop any prereleases that might already exist, since they are not // relevant at this point. this.prerelease.length = 0 this.inc('patch', identifier, identifierBase) this.inc('pre', identifier, identifierBase) break // If the input is a non-prerelease version, this acts the same as // prepatch. case 'prerelease': if (this.prerelease.length === 0) { this.inc('patch', identifier, identifierBase) } this.inc('pre', identifier, identifierBase) break case 'major': // If this is a pre-major version, bump up to the same major version. // Otherwise increment major. // 1.0.0-5 bumps to 1.0.0 // 1.1.0 bumps to 2.0.0 if ( this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0 ) { this.major++ } this.minor = 0 this.patch = 0 this.prerelease = [] break case 'minor': // If this is a pre-minor version, bump up to the same minor version. // Otherwise increment minor. // 1.2.0-5 bumps to 1.2.0 // 1.2.1 bumps to 1.3.0 if (this.patch !== 0 || this.prerelease.length === 0) { this.minor++ } this.patch = 0 this.prerelease = [] break case 'patch': // If this is not a pre-release version, it will increment the patch. // If it is a pre-release it will bump up to the same patch version. // 1.2.0-5 patches to 1.2.0 // 1.2.0 patches to 1.2.1 if (this.prerelease.length === 0) { this.patch++ } this.prerelease = [] break // This probably shouldn't be used publicly. // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. case 'pre': { const base = Number(identifierBase) ? 1 : 0 if (!identifier && identifierBase === false) { throw new Error('invalid increment argument: identifier is empty') } if (this.prerelease.length === 0) { this.prerelease = [base] } else { let i = this.prerelease.length while (--i >= 0) { if (typeof this.prerelease[i] === 'number') { this.prerelease[i]++ i = -2 } } if (i === -1) { // didn't increment anything if (identifier === this.prerelease.join('.') && identifierBase === false) { throw new Error('invalid increment argument: identifier already exists') } this.prerelease.push(base) } } if (identifier) { // 1.2.0-beta.1 bumps to 1.2.0-beta.2, // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 let prerelease = [identifier, base] if (identifierBase === false) { prerelease = [identifier] } if (compareIdentifiers(this.prerelease[0], identifier) === 0) { if (isNaN(this.prerelease[1])) { this.prerelease = prerelease } } else { this.prerelease = prerelease } } break } default: throw new Error(`invalid increment argument: ${release}`) } this.raw = this.format() if (this.build.length) { this.raw += `+${this.build.join('.')}` } return this } } module.exports = SemVer /***/ }), /***/ "./node_modules/@nextcloud/event-bus/node_modules/semver/functions/major.js": /*!**********************************************************************************!*\ !*** ./node_modules/@nextcloud/event-bus/node_modules/semver/functions/major.js ***! \**********************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { const SemVer = __webpack_require__(/*! ../classes/semver */ "./node_modules/@nextcloud/event-bus/node_modules/semver/classes/semver.js") const major = (a, loose) => new SemVer(a, loose).major module.exports = major /***/ }), /***/ "./node_modules/@nextcloud/event-bus/node_modules/semver/functions/parse.js": /*!**********************************************************************************!*\ !*** ./node_modules/@nextcloud/event-bus/node_modules/semver/functions/parse.js ***! \**********************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { const SemVer = __webpack_require__(/*! ../classes/semver */ "./node_modules/@nextcloud/event-bus/node_modules/semver/classes/semver.js") const parse = (version, options, throwErrors = false) => { if (version instanceof SemVer) { return version } try { return new SemVer(version, options) } catch (er) { if (!throwErrors) { return null } throw er } } module.exports = parse /***/ }), /***/ "./node_modules/@nextcloud/event-bus/node_modules/semver/functions/valid.js": /*!**********************************************************************************!*\ !*** ./node_modules/@nextcloud/event-bus/node_modules/semver/functions/valid.js ***! \**********************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { const parse = __webpack_require__(/*! ./parse */ "./node_modules/@nextcloud/event-bus/node_modules/semver/functions/parse.js") const valid = (version, options) => { const v = parse(version, options) return v ? v.version : null } module.exports = valid /***/ }), /***/ "./node_modules/@nextcloud/event-bus/node_modules/semver/internal/constants.js": /*!*************************************************************************************!*\ !*** ./node_modules/@nextcloud/event-bus/node_modules/semver/internal/constants.js ***! \*************************************************************************************/ /***/ ((module) => { // Note: this is the semver.org version of the spec that it implements // Not necessarily the package version of this code. const SEMVER_SPEC_VERSION = '2.0.0' const MAX_LENGTH = 256 const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */ 9007199254740991 // Max safe segment length for coercion. const MAX_SAFE_COMPONENT_LENGTH = 16 // Max safe length for a build identifier. The max length minus 6 characters for // the shortest version with a build 0.0.0+BUILD. const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6 const RELEASE_TYPES = [ 'major', 'premajor', 'minor', 'preminor', 'patch', 'prepatch', 'prerelease', ] module.exports = { MAX_LENGTH, MAX_SAFE_COMPONENT_LENGTH, MAX_SAFE_BUILD_LENGTH, MAX_SAFE_INTEGER, RELEASE_TYPES, SEMVER_SPEC_VERSION, FLAG_INCLUDE_PRERELEASE: 0b001, FLAG_LOOSE: 0b010, } /***/ }), /***/ "./node_modules/@nextcloud/event-bus/node_modules/semver/internal/debug.js": /*!*********************************************************************************!*\ !*** ./node_modules/@nextcloud/event-bus/node_modules/semver/internal/debug.js ***! \*********************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { /* provided dependency */ var process = __webpack_require__(/*! ./node_modules/process/browser.js */ "./node_modules/process/browser.js"); const debug = ( typeof process === 'object' && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ) ? (...args) => console.error('SEMVER', ...args) : () => {} module.exports = debug /***/ }), /***/ "./node_modules/@nextcloud/event-bus/node_modules/semver/internal/identifiers.js": /*!***************************************************************************************!*\ !*** ./node_modules/@nextcloud/event-bus/node_modules/semver/internal/identifiers.js ***! \***************************************************************************************/ /***/ ((module) => { const numeric = /^[0-9]+$/ const compareIdentifiers = (a, b) => { const anum = numeric.test(a) const bnum = numeric.test(b) if (anum && bnum) { a = +a b = +b } return a === b ? 0 : (anum && !bnum) ? -1 : (bnum && !anum) ? 1 : a < b ? -1 : 1 } const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) module.exports = { compareIdentifiers, rcompareIdentifiers, } /***/ }), /***/ "./node_modules/@nextcloud/event-bus/node_modules/semver/internal/parse-options.js": /*!*****************************************************************************************!*\ !*** ./node_modules/@nextcloud/event-bus/node_modules/semver/internal/parse-options.js ***! \*****************************************************************************************/ /***/ ((module) => { // parse out just the options we care about const looseOption = Object.freeze({ loose: true }) const emptyOpts = Object.freeze({ }) const parseOptions = options => { if (!options) { return emptyOpts } if (typeof options !== 'object') { return looseOption } return options } module.exports = parseOptions /***/ }), /***/ "./node_modules/@nextcloud/event-bus/node_modules/semver/internal/re.js": /*!******************************************************************************!*\ !*** ./node_modules/@nextcloud/event-bus/node_modules/semver/internal/re.js ***! \******************************************************************************/ /***/ ((module, exports, __webpack_require__) => { const { MAX_SAFE_COMPONENT_LENGTH, MAX_SAFE_BUILD_LENGTH, MAX_LENGTH, } = __webpack_require__(/*! ./constants */ "./node_modules/@nextcloud/event-bus/node_modules/semver/internal/constants.js") const debug = __webpack_require__(/*! ./debug */ "./node_modules/@nextcloud/event-bus/node_modules/semver/internal/debug.js") exports = module.exports = {} // The actual regexps go on exports.re const re = exports.re = [] const safeRe = exports.safeRe = [] const src = exports.src = [] const t = exports.t = {} let R = 0 const LETTERDASHNUMBER = '[a-zA-Z0-9-]' // Replace some greedy regex tokens to prevent regex dos issues. These regex are // used internally via the safeRe object since all inputs in this library get // normalized first to trim and collapse all extra whitespace. The original // regexes are exported for userland consumption and lower level usage. A // future breaking change could export the safer regex only with a note that // all input should have extra whitespace removed. const safeRegexReplacements = [ ['\\s', 1], ['\\d', MAX_LENGTH], [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH], ] const makeSafeRegex = (value) => { for (const [token, max] of safeRegexReplacements) { value = value .split(`${token}*`).join(`${token}{0,${max}}`) .split(`${token}+`).join(`${token}{1,${max}}`) } return value } const createToken = (name, value, isGlobal) => { const safe = makeSafeRegex(value) const index = R++ debug(name, index, value) t[name] = index src[index] = value re[index] = new RegExp(value, isGlobal ? 'g' : undefined) safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined) } // The following Regular Expressions can be used for tokenizing, // validating, and parsing SemVer version strings. // ## Numeric Identifier // A single `0`, or a non-zero digit followed by zero or more digits. createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') createToken('NUMERICIDENTIFIERLOOSE', '\\d+') // ## Non-numeric Identifier // Zero or more digits, followed by a letter or hyphen, and then zero or // more letters, digits, or hyphens. createToken('NONNUMERICIDENTIFIER', `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`) // ## Main Version // Three dot-separated numeric identifiers. createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + `(${src[t.NUMERICIDENTIFIER]})\\.` + `(${src[t.NUMERICIDENTIFIER]})`) createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + `(${src[t.NUMERICIDENTIFIERLOOSE]})`) // ## Pre-release Version Identifier // A numeric identifier, or a non-numeric identifier. createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] }|${src[t.NONNUMERICIDENTIFIER]})`) createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] }|${src[t.NONNUMERICIDENTIFIER]})`) // ## Pre-release Version // Hyphen, followed by one or more dot-separated pre-release version // identifiers. createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] }(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] }(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) // ## Build Metadata Identifier // Any combination of digits, letters, or hyphens. createToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`) // ## Build Metadata // Plus sign, followed by one or more period-separated build metadata // identifiers. createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] }(?:\\.${src[t.BUILDIDENTIFIER]})*))`) // ## Full Version String // A main version, followed optionally by a pre-release version and // build metadata. // Note that the only major, minor, patch, and pre-release sections of // the version string are capturing groups. The build metadata is not a // capturing group, because it should not ever be used in version // comparison. createToken('FULLPLAIN', `v?${src[t.MAINVERSION] }${src[t.PRERELEASE]}?${ src[t.BUILD]}?`) createToken('FULL', `^${src[t.FULLPLAIN]}$`) // like full, but allows v1.2.3 and =1.2.3, which people do sometimes. // also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty // common in the npm registry. createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] }${src[t.PRERELEASELOOSE]}?${ src[t.BUILD]}?`) createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) createToken('GTLT', '((?:<|>)?=?)') // Something like "2.*" or "1.2.x". // Note that "x.x" is a valid xRange identifer, meaning "any version" // Only the first item is strictly required. createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + `(?:${src[t.PRERELEASE]})?${ src[t.BUILD]}?` + `)?)?`) createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:${src[t.PRERELEASELOOSE]})?${ src[t.BUILD]}?` + `)?)?`) createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) // Coercion. // Extract anything that could conceivably be a part of a valid semver createToken('COERCEPLAIN', `${'(^|[^\\d])' + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`) createToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\d])`) createToken('COERCEFULL', src[t.COERCEPLAIN] + `(?:${src[t.PRERELEASE]})?` + `(?:${src[t.BUILD]})?` + `(?:$|[^\\d])`) createToken('COERCERTL', src[t.COERCE], true) createToken('COERCERTLFULL', src[t.COERCEFULL], true) // Tilde ranges. // Meaning is "reasonably at or greater than" createToken('LONETILDE', '(?:~>?)') createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) exports.tildeTrimReplace = '$1~' createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) // Caret ranges. // Meaning is "at least and backwards compatible with" createToken('LONECARET', '(?:\\^)') createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) exports.caretTrimReplace = '$1^' createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) // A simple gt/lt/eq thing, or just "" to indicate "any version" createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) // An expression to strip any whitespace between the gtlt and the thing // it modifies, so that `> 1.2.3` ==> `>1.2.3` createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] }\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) exports.comparatorTrimReplace = '$1$2$3' // Something like `1.2.3 - 1.2.4` // Note that these all use the loose form, because they'll be // checked against either the strict or loose comparator form // later. createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + `\\s+-\\s+` + `(${src[t.XRANGEPLAIN]})` + `\\s*$`) createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + `\\s+-\\s+` + `(${src[t.XRANGEPLAINLOOSE]})` + `\\s*$`) // Star ranges basically just allow anything at all. createToken('STAR', '(<|>)?=?\\s*\\*') // >=0.0.0 is like a star createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$') createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$') /***/ }), /***/ "./node_modules/@nextcloud/l10n/node_modules/@nextcloud/router/dist/index.js": /*!***********************************************************************************!*\ !*** ./node_modules/@nextcloud/l10n/node_modules/@nextcloud/router/dist/index.js ***! \***********************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.generateUrl = exports.generateRemoteUrl = exports.generateOcsUrl = exports.generateFilePath = void 0; exports.getAppRootUrl = getAppRootUrl; exports.getRootUrl = getRootUrl; exports.linkTo = exports.imagePath = void 0; __webpack_require__(/*! core-js/modules/es.string.replace.js */ "./node_modules/core-js/modules/es.string.replace.js"); /** * Get an url with webroot to a file in an app * * @param {string} app the id of the app the file belongs to * @param {string} file the file path relative to the app folder * @return {string} URL with webroot to a file */ const linkTo = (app, file) => generateFilePath(app, '', file); /** * Creates a relative url for remote use * * @param {string} service id * @return {string} the url */ exports.linkTo = linkTo; const linkToRemoteBase = service => getRootUrl() + '/remote.php/' + service; /** * @brief Creates an absolute url for remote use * @param {string} service id * @return {string} the url */ const generateRemoteUrl = service => window.location.protocol + '//' + window.location.host + linkToRemoteBase(service); /** * Get the base path for the given OCS API service * * @param {string} url OCS API service url * @param {object} params parameters to be replaced into the service url * @param {UrlOptions} options options for the parameter replacement * @param {boolean} options.escape Set to false if parameters should not be URL encoded (default true) * @param {Number} options.ocsVersion OCS version to use (defaults to 2) * @return {string} Absolute path for the OCS URL */ exports.generateRemoteUrl = generateRemoteUrl; const generateOcsUrl = (url, params, options) => { const allOptions = Object.assign({ ocsVersion: 2 }, options || {}); const version = allOptions.ocsVersion === 1 ? 1 : 2; return window.location.protocol + '//' + window.location.host + getRootUrl() + '/ocs/v' + version + '.php' + _generateUrlPath(url, params, options); }; exports.generateOcsUrl = generateOcsUrl; /** * Generate a url path, which can contain parameters * * Parameters will be URL encoded automatically * * @param {string} url address (can contain placeholders e.g. /call/{token} would replace {token} with the value of params.token * @param {object} params parameters to be replaced into the address * @param {UrlOptions} options options for the parameter replacement * @return {string} Path part for the given URL */ const _generateUrlPath = (url, params, options) => { const allOptions = Object.assign({ escape: true }, options || {}); const _build = function (text, vars) { vars = vars || {}; return text.replace(/{([^{}]*)}/g, function (a, b) { var r = vars[b]; if (allOptions.escape) { return typeof r === 'string' || typeof r === 'number' ? encodeURIComponent(r.toString()) : encodeURIComponent(a); } else { return typeof r === 'string' || typeof r === 'number' ? r.toString() : a; } }); }; if (url.charAt(0) !== '/') { url = '/' + url; } return _build(url, params || {}); }; /** * Generate the url with webroot for the given relative url, which can contain parameters * * Parameters will be URL encoded automatically * * @param {string} url address (can contain placeholders e.g. /call/{token} would replace {token} with the value of params.token * @param {object} params parameters to be replaced into the url * @param {UrlOptions} options options for the parameter replacement * @param {boolean} options.noRewrite True if you want to force index.php being added * @param {boolean} options.escape Set to false if parameters should not be URL encoded (default true) * @return {string} URL with webroot for the given relative URL */ const generateUrl = (url, params, options) => { var _window; const allOptions = Object.assign({ noRewrite: false }, options || {}); if (((_window = window) === null || _window === void 0 || (_window = _window.OC) === null || _window === void 0 || (_window = _window.config) === null || _window === void 0 ? void 0 : _window.modRewriteWorking) === true && !allOptions.noRewrite) { return getRootUrl() + _generateUrlPath(url, params, options); } return getRootUrl() + '/index.php' + _generateUrlPath(url, params, options); }; /** * Get the path with webroot to an image file * if no extension is given for the image, it will automatically decide * between .png and .svg based on what the browser supports * * @param {string} app the app id to which the image belongs * @param {string} file the name of the image file * @return {string} */ exports.generateUrl = generateUrl; const imagePath = (app, file) => { if (file.indexOf('.') === -1) { //if no extension is given, use svg return generateFilePath(app, 'img', file + '.svg'); } return generateFilePath(app, 'img', file); }; /** * Get the url with webroot for a file in an app * * @param {string} app the id of the app * @param {string} type the type of the file to link to (e.g. css,img,ajax.template) * @param {string} file the filename * @return {string} URL with webroot for a file in an app */ exports.imagePath = imagePath; const generateFilePath = (app, type, file) => { var _window2; const isCore = ((_window2 = window) === null || _window2 === void 0 || (_window2 = _window2.OC) === null || _window2 === void 0 || (_window2 = _window2.coreApps) === null || _window2 === void 0 ? void 0 : _window2.indexOf(app)) !== -1; let link = getRootUrl(); if (file.substring(file.length - 3) === 'php' && !isCore) { link += '/index.php/apps/' + app; if (file !== 'index.php') { link += '/'; if (type) { link += encodeURI(type + '/'); } link += file; } } else if (file.substring(file.length - 3) !== 'php' && !isCore) { link = getAppRootUrl(app); if (type) { link += '/' + type + '/'; } if (link.substring(link.length - 1) !== '/') { link += '/'; } link += file; } else { if ((app === 'settings' || app === 'core' || app === 'search') && type === 'ajax') { link += '/index.php/'; } else { link += '/'; } if (!isCore) { link += 'apps/'; } if (app !== '') { app += '/'; link += app; } if (type) { link += type + '/'; } link += file; } return link; }; /** * Return the web root path where this Nextcloud instance * is accessible, with a leading slash. * For example "/nextcloud". * * @return {string} web root path */ exports.generateFilePath = generateFilePath; function getRootUrl() { let webroot = window._oc_webroot; if (typeof webroot === 'undefined') { webroot = location.pathname; const pos = webroot.indexOf('/index.php/'); if (pos !== -1) { webroot = webroot.substr(0, pos); } else { webroot = webroot.substr(0, webroot.lastIndexOf('/')); } } return webroot; } /** * Return the web root path for a given app * @param {string} app The ID of the app */ function getAppRootUrl(app) { var _window$_oc_appswebro, _webroots$app; const webroots = (_window$_oc_appswebro = window._oc_appswebroots) !== null && _window$_oc_appswebro !== void 0 ? _window$_oc_appswebro : {}; return (_webroots$app = webroots[app]) !== null && _webroots$app !== void 0 ? _webroots$app : ''; } //# sourceMappingURL=index.js.map /***/ }), /***/ "./node_modules/@nextcloud/logger/dist/ConsoleLogger.js": /*!**************************************************************!*\ !*** ./node_modules/@nextcloud/logger/dist/ConsoleLogger.js ***! \**************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ConsoleLogger = void 0; exports.buildConsoleLogger = buildConsoleLogger; __webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); __webpack_require__(/*! core-js/modules/es.symbol.to-primitive.js */ "./node_modules/core-js/modules/es.symbol.to-primitive.js"); __webpack_require__(/*! core-js/modules/es.date.to-primitive.js */ "./node_modules/core-js/modules/es.date.to-primitive.js"); __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); __webpack_require__(/*! core-js/modules/es.number.constructor.js */ "./node_modules/core-js/modules/es.number.constructor.js"); var _contracts = __webpack_require__(/*! ./contracts */ "./node_modules/@nextcloud/logger/dist/contracts.js"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } var ConsoleLogger = /*#__PURE__*/function () { function ConsoleLogger(context) { _classCallCheck(this, ConsoleLogger); _defineProperty(this, "context", void 0); this.context = context || {}; } _createClass(ConsoleLogger, [{ key: "formatMessage", value: function formatMessage(message, level, context) { var msg = '[' + _contracts.LogLevel[level].toUpperCase() + '] '; if (context && context.app) { msg += context.app + ': '; } if (typeof message === 'string') return msg + message; // basic error formatting msg += "Unexpected ".concat(message.name); if (message.message) msg += " \"".concat(message.message, "\""); // only add stack trace when debugging if (level === _contracts.LogLevel.Debug && message.stack) msg += "\n\nStack trace:\n".concat(message.stack); return msg; } }, { key: "log", value: function log(level, message, context) { var _this$context, _this$context2; // Skip if level is configured and this is below the level if (typeof ((_this$context = this.context) === null || _this$context === void 0 ? void 0 : _this$context.level) === 'number' && level < ((_this$context2 = this.context) === null || _this$context2 === void 0 ? void 0 : _this$context2.level)) { return; } // Add error object to context if (_typeof(message) === 'object' && (context === null || context === void 0 ? void 0 : context.error) === undefined) { context.error = message; } switch (level) { case _contracts.LogLevel.Debug: console.debug(this.formatMessage(message, _contracts.LogLevel.Debug, context), context); break; case _contracts.LogLevel.Info: console.info(this.formatMessage(message, _contracts.LogLevel.Info, context), context); break; case _contracts.LogLevel.Warn: console.warn(this.formatMessage(message, _contracts.LogLevel.Warn, context), context); break; case _contracts.LogLevel.Error: console.error(this.formatMessage(message, _contracts.LogLevel.Error, context), context); break; case _contracts.LogLevel.Fatal: default: console.error(this.formatMessage(message, _contracts.LogLevel.Fatal, context), context); break; } } }, { key: "debug", value: function debug(message, context) { this.log(_contracts.LogLevel.Debug, message, Object.assign({}, this.context, context)); } }, { key: "info", value: function info(message, context) { this.log(_contracts.LogLevel.Info, message, Object.assign({}, this.context, context)); } }, { key: "warn", value: function warn(message, context) { this.log(_contracts.LogLevel.Warn, message, Object.assign({}, this.context, context)); } }, { key: "error", value: function error(message, context) { this.log(_contracts.LogLevel.Error, message, Object.assign({}, this.context, context)); } }, { key: "fatal", value: function fatal(message, context) { this.log(_contracts.LogLevel.Fatal, message, Object.assign({}, this.context, context)); } }]); return ConsoleLogger; }(); /** * Create a new console logger * * @param context Optional global context which should be included for all logging messages */ exports.ConsoleLogger = ConsoleLogger; function buildConsoleLogger(context) { return new ConsoleLogger(context); } //# sourceMappingURL=ConsoleLogger.js.map /***/ }), /***/ "./node_modules/@nextcloud/logger/dist/LoggerBuilder.js": /*!**************************************************************!*\ !*** ./node_modules/@nextcloud/logger/dist/LoggerBuilder.js ***! \**************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports.LoggerBuilder = void 0; __webpack_require__(/*! core-js/modules/es.symbol.to-primitive.js */ "./node_modules/core-js/modules/es.symbol.to-primitive.js"); __webpack_require__(/*! core-js/modules/es.date.to-primitive.js */ "./node_modules/core-js/modules/es.date.to-primitive.js"); __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); __webpack_require__(/*! core-js/modules/es.number.constructor.js */ "./node_modules/core-js/modules/es.number.constructor.js"); var _auth = __webpack_require__(/*! @nextcloud/auth */ "./node_modules/@nextcloud/auth/dist/index.js"); var _contracts = __webpack_require__(/*! ./contracts */ "./node_modules/@nextcloud/logger/dist/contracts.js"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } /** * @notExported */ var LoggerBuilder = /*#__PURE__*/function () { function LoggerBuilder(factory) { _classCallCheck(this, LoggerBuilder); _defineProperty(this, "context", void 0); _defineProperty(this, "factory", void 0); this.context = {}; this.factory = factory; } /** * Set the app name within the logging context * * @param appId App name */ _createClass(LoggerBuilder, [{ key: "setApp", value: function setApp(appId) { this.context.app = appId; return this; } /** * Set the logging level within the logging context * * @param level Logging level */ }, { key: "setLogLevel", value: function setLogLevel(level) { this.context.level = level; return this; } /* eslint-disable jsdoc/no-undefined-types */ /** * Set the user id within the logging context * @param uid User ID * @see {@link detectUser} */ /* eslint-enable jsdoc/no-undefined-types */ }, { key: "setUid", value: function setUid(uid) { this.context.uid = uid; return this; } /** * Detect the currently logged in user and set the user id within the logging context */ }, { key: "detectUser", value: function detectUser() { var user = (0, _auth.getCurrentUser)(); if (user !== null) { this.context.uid = user.uid; } return this; } /** * Detect and use logging level configured in nextcloud config */ }, { key: "detectLogLevel", value: function detectLogLevel() { // eslint-disable-next-line @typescript-eslint/no-this-alias var self = this; // Use arrow function to prevent undefined `this` within event handler var onLoaded = function onLoaded() { if (document.readyState === 'complete' || document.readyState === 'interactive') { var _window$_oc_config$lo, _window$_oc_config; // Up to, including, nextcloud 24 the loglevel was not exposed self.context.level = (_window$_oc_config$lo = (_window$_oc_config = window._oc_config) === null || _window$_oc_config === void 0 ? void 0 : _window$_oc_config.loglevel) !== null && _window$_oc_config$lo !== void 0 ? _window$_oc_config$lo : _contracts.LogLevel.Warn; // Override loglevel if we are in debug mode if (window._oc_debug) { self.context.level = _contracts.LogLevel.Debug; } document.removeEventListener('readystatechange', onLoaded); } else { document.addEventListener('readystatechange', onLoaded); } }; onLoaded(); return this; } /** Build a logger using the logging context and factory */ }, { key: "build", value: function build() { if (this.context.level === undefined) { // No logging level set manually, use the configured one this.detectLogLevel(); } return this.factory(this.context); } }]); return LoggerBuilder; }(); exports.LoggerBuilder = LoggerBuilder; //# sourceMappingURL=LoggerBuilder.js.map /***/ }), /***/ "./node_modules/@nextcloud/logger/dist/contracts.js": /*!**********************************************************!*\ !*** ./node_modules/@nextcloud/logger/dist/contracts.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports.LogLevel = void 0; var LogLevel = /*#__PURE__*/function (LogLevel) { LogLevel[LogLevel["Debug"] = 0] = "Debug"; LogLevel[LogLevel["Info"] = 1] = "Info"; LogLevel[LogLevel["Warn"] = 2] = "Warn"; LogLevel[LogLevel["Error"] = 3] = "Error"; LogLevel[LogLevel["Fatal"] = 4] = "Fatal"; return LogLevel; }({}); exports.LogLevel = LogLevel; //# sourceMappingURL=contracts.js.map /***/ }), /***/ "./node_modules/@nextcloud/logger/dist/index.js": /*!******************************************************!*\ !*** ./node_modules/@nextcloud/logger/dist/index.js ***! \******************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "LogLevel", ({ enumerable: true, get: function get() { return _contracts.LogLevel; } })); exports.getLogger = getLogger; exports.getLoggerBuilder = getLoggerBuilder; var _ConsoleLogger = __webpack_require__(/*! ./ConsoleLogger */ "./node_modules/@nextcloud/logger/dist/ConsoleLogger.js"); var _LoggerBuilder = __webpack_require__(/*! ./LoggerBuilder */ "./node_modules/@nextcloud/logger/dist/LoggerBuilder.js"); var _contracts = __webpack_require__(/*! ./contracts */ "./node_modules/@nextcloud/logger/dist/contracts.js"); /** * Build a customized logger instance */ function getLoggerBuilder() { return new _LoggerBuilder.LoggerBuilder(_ConsoleLogger.buildConsoleLogger); } /** * Get a default logger instance without any configuration */ function getLogger() { return getLoggerBuilder().build(); } //# sourceMappingURL=index.js.map /***/ }), /***/ "./node_modules/@nextcloud/vue-select/dist/vue-select.js": /*!***************************************************************!*\ !*** ./node_modules/@nextcloud/vue-select/dist/vue-select.js ***! \***************************************************************/ /***/ (function(module) { !function(e,t){ true?module.exports=t():0}("undefined"!=typeof self?self:this,(function(){return(()=>{var e={646:e=>{e.exports=function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t{e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},860:e=>{e.exports=function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}},206:e=>{e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}},319:(e,t,n)=>{var o=n(646),i=n(860),s=n(206);e.exports=function(e){return o(e)||i(e)||s()}},8:e=>{function t(n){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?e.exports=t=function(e){return typeof e}:e.exports=t=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(n)}e.exports=t}},t={};function n(o){var i=t[o];if(void 0!==i)return i.exports;var s=t[o]={exports:{}};return e[o](s,s.exports,n),s.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};return(()=>{"use strict";n.r(o),n.d(o,{VueSelect:()=>m,default:()=>_,mixins:()=>O});var e=n(319),t=n.n(e),i=n(8),s=n.n(i),r=n(713),a=n.n(r);const l={props:{autoscroll:{type:Boolean,default:!0}},watch:{typeAheadPointer:function(){this.autoscroll&&this.maybeAdjustScroll()},open:function(e){var t=this;this.autoscroll&&e&&this.$nextTick((function(){return t.maybeAdjustScroll()}))}},methods:{maybeAdjustScroll:function(){var e,t=(null===(e=this.$refs.dropdownMenu)||void 0===e?void 0:e.children[this.typeAheadPointer])||!1;if(t){var n=this.getDropdownViewport(),o=t.getBoundingClientRect(),i=o.top,s=o.bottom,r=o.height;if(in.bottom)return this.$refs.dropdownMenu.scrollTop=t.offsetTop-(n.height-r)}},getDropdownViewport:function(){return this.$refs.dropdownMenu?this.$refs.dropdownMenu.getBoundingClientRect():{height:0,top:0,bottom:0}}}},c={data:function(){return{typeAheadPointer:-1}},watch:{filteredOptions:function(){if(this.resetFocusOnOptionsChange)for(var e=0;e=0;e--)if(this.selectable(this.filteredOptions[e])){this.typeAheadPointer=e;break}},typeAheadDown:function(){for(var e=this.typeAheadPointer+1;e0&&void 0!==arguments[0]?arguments[0]:null;return this.mutableLoading=null==e?!this.mutableLoading:e}}};function p(e,t,n,o,i,s,r,a){var l,c="function"==typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),o&&(c.functional=!0),s&&(c._scopeId="data-v-"+s),r?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(r)},c._ssrRegister=l):i&&(l=a?function(){i.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:i),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var p=c.beforeCreate;c.beforeCreate=p?[].concat(p,l):[l]}return{exports:e,options:c}}const d={Deselect:p({},(function(){var e=this.$createElement,t=this._self._c||e;return t("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",width:"10",height:"10"}},[t("path",{attrs:{d:"M6.895455 5l2.842897-2.842898c.348864-.348863.348864-.914488 0-1.263636L9.106534.261648c-.348864-.348864-.914489-.348864-1.263636 0L5 3.104545 2.157102.261648c-.348863-.348864-.914488-.348864-1.263636 0L.261648.893466c-.348864.348864-.348864.914489 0 1.263636L3.104545 5 .261648 7.842898c-.348864.348863-.348864.914488 0 1.263636l.631818.631818c.348864.348864.914773.348864 1.263636 0L5 6.895455l2.842898 2.842897c.348863.348864.914772.348864 1.263636 0l.631818-.631818c.348864-.348864.348864-.914489 0-1.263636L6.895455 5z"}})])}),[],!1,null,null,null).exports,OpenIndicator:p({},(function(){var e=this.$createElement,t=this._self._c||e;return t("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"10"}},[t("path",{attrs:{d:"M9.211364 7.59931l4.48338-4.867229c.407008-.441854.407008-1.158247 0-1.60046l-.73712-.80023c-.407008-.441854-1.066904-.441854-1.474243 0L7 5.198617 2.51662.33139c-.407008-.441853-1.066904-.441853-1.474243 0l-.737121.80023c-.407008.441854-.407008 1.158248 0 1.600461l4.48338 4.867228L7 10l2.211364-2.40069z"}})])}),[],!1,null,null,null).exports},h={inserted:function(e,t,n){var o=n.context;if(o.appendToBody){document.body.appendChild(e);var i=o.$refs.toggle.getBoundingClientRect(),s=i.height,r=i.top,a=i.left,l=i.width,c=window.scrollX||window.pageXOffset,u=window.scrollY||window.pageYOffset;e.unbindPosition=o.calculatePosition(e,o,{width:l+"px",left:c+a+"px",top:u+r+s+"px"})}},unbind:function(e,t,n){n.context.appendToBody&&(e.unbindPosition&&"function"==typeof e.unbindPosition&&e.unbindPosition(),e.parentNode&&e.parentNode.removeChild(e))}};const f=function(e){var t={};return Object.keys(e).sort().forEach((function(n){t[n]=e[n]})),JSON.stringify(t)};var y=0;const b=function(){return++y};function g(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function v(e){for(var t=1;t-1}},filter:{type:Function,default:function(e,t){var n=this;return e.filter((function(e){var o=n.getOptionLabel(e);return"number"==typeof o&&(o=o.toString()),n.filterBy(e,o,t)}))}},createOption:{type:Function,default:function(e){return"object"===s()(this.optionList[0])?a()({},this.label,e):e}},resetFocusOnOptionsChange:{type:Boolean,default:!0},resetOnOptionsChange:{default:!1,validator:function(e){return["function","boolean"].includes(s()(e))}},clearSearchOnBlur:{type:Function,default:function(e){var t=e.clearSearchOnSelect,n=e.multiple;return t&&!n}},noDrop:{type:Boolean,default:!1},inputId:{type:String},dir:{type:String,default:"auto"},selectOnTab:{type:Boolean,default:!1},selectOnKeyCodes:{type:Array,default:function(){return[13]}},searchInputQuerySelector:{type:String,default:"[type=search]"},mapKeydown:{type:Function,default:function(e,t){return e}},appendToBody:{type:Boolean,default:!1},calculatePosition:{type:Function,default:function(e,t,n){var o=n.width,i=n.top,s=n.left;e.style.top=i,e.style.left=s,e.style.width=o}},dropdownShouldOpen:{type:Function,default:function(e){var t=e.noDrop,n=e.open,o=e.mutableLoading;return!t&&(n&&!o)}},keyboardFocusBorder:{type:Boolean,default:!1},uid:{type:[String,Number],default:function(){return b()}}},data:function(){return{search:"",open:!1,isComposing:!1,isKeyboardNavigation:!1,pushedTags:[],_value:[]}},computed:{isTrackingValues:function(){return void 0===this.value||this.$options.propsData.hasOwnProperty("reduce")},selectedValue:function(){var e=this.value;return this.isTrackingValues&&(e=this.$data._value),null!=e&&""!==e?[].concat(e):[]},optionList:function(){return this.options.concat(this.pushTags?this.pushedTags:[])},searchEl:function(){return this.$scopedSlots.search?this.$refs.selectedOptions.querySelector(this.searchInputQuerySelector):this.$refs.search},scope:function(){var e=this,t={search:this.search,loading:this.loading,searching:this.searching,filteredOptions:this.filteredOptions};return{search:{attributes:v({id:this.inputId,disabled:this.disabled,placeholder:this.searchPlaceholder,tabindex:this.tabindex,readonly:!this.searchable,role:"combobox","aria-autocomplete":"list","aria-label":this.ariaLabelCombobox,"aria-controls":"vs".concat(this.uid,"__listbox"),"aria-owns":"vs".concat(this.uid,"__listbox"),"aria-expanded":this.dropdownOpen.toString(),ref:"search",type:"search",autocomplete:this.autocomplete,value:this.search},this.dropdownOpen&&this.filteredOptions[this.typeAheadPointer]?{"aria-activedescendant":"vs".concat(this.uid,"__option-").concat(this.typeAheadPointer)}:{}),events:{compositionstart:function(){return e.isComposing=!0},compositionend:function(){return e.isComposing=!1},keydown:this.onSearchKeyDown,keypress:this.onSearchKeyPress,blur:this.onSearchBlur,focus:this.onSearchFocus,input:function(t){return e.search=t.target.value}}},spinner:{loading:this.mutableLoading},noOptions:{search:this.search,loading:this.mutableLoading,searching:this.searching},openIndicator:{attributes:{ref:"openIndicator",role:"presentation",class:"vs__open-indicator"}},listHeader:t,listFooter:t,header:v({},t,{deselect:this.deselect}),footer:v({},t,{deselect:this.deselect})}},childComponents:function(){return v({},d,{},this.components)},stateClasses:function(){return{"vs--open":this.dropdownOpen,"vs--single":!this.multiple,"vs--multiple":this.multiple,"vs--searching":this.searching&&!this.noDrop,"vs--searchable":this.searchable&&!this.noDrop,"vs--unsearchable":!this.searchable,"vs--loading":this.mutableLoading,"vs--disabled":this.disabled}},searching:function(){return!!this.search},dropdownOpen:function(){return this.dropdownShouldOpen(this)},searchPlaceholder:function(){return this.isValueEmpty&&this.placeholder?this.placeholder:void 0},filteredOptions:function(){var e=this,t=function(t){return null!==e.limit?t.slice(0,e.limit):t},n=[].concat(this.optionList);if(!this.filterable&&!this.taggable)return t(n);var o=this.search.length?this.filter(n,this.search,this):n;if(this.taggable&&this.search.length){var i=this.createOption(this.search);this.optionExists(i)||o.unshift(i)}return t(o)},isValueEmpty:function(){return 0===this.selectedValue.length},showClearButton:function(){return!this.multiple&&this.clearable&&!this.open&&!this.isValueEmpty}},watch:{options:function(e,t){var n=this;!this.taggable&&("function"==typeof n.resetOnOptionsChange?n.resetOnOptionsChange(e,t,n.selectedValue):n.resetOnOptionsChange)&&this.clearSelection(),this.value&&this.isTrackingValues&&this.setInternalValueFromOptions(this.value)},value:{immediate:!0,handler:function(e){this.isTrackingValues&&this.setInternalValueFromOptions(e)}},multiple:function(){this.clearSelection()},open:function(e){this.$emit(e?"open":"close")},search:function(e){e.length&&(this.open=!0)}},created:function(){this.mutableLoading=this.loading,this.$on("option:created",this.pushTag)},methods:{setInternalValueFromOptions:function(e){var t=this;Array.isArray(e)?this.$data._value=e.map((function(e){return t.findOptionFromReducedValue(e)})):this.$data._value=this.findOptionFromReducedValue(e)},select:function(e){this.$emit("option:selecting",e),this.isOptionSelected(e)?this.deselectFromDropdown&&(this.clearable||this.multiple&&this.selectedValue.length>1)&&this.deselect(e):(this.taggable&&!this.optionExists(e)&&this.$emit("option:created",e),this.multiple&&(e=this.selectedValue.concat(e)),this.updateValue(e),this.$emit("option:selected",e)),this.onAfterSelect(e)},deselect:function(e){var t=this;this.$emit("option:deselecting",e),this.updateValue(this.selectedValue.filter((function(n){return!t.optionComparator(n,e)}))),this.$emit("option:deselected",e)},keyboardDeselect:function(e,t){var n,o;this.deselect(e);var i=null===(n=this.$refs.deselectButtons)||void 0===n?void 0:n[t+1],s=null===(o=this.$refs.deselectButtons)||void 0===o?void 0:o[t-1],r=null!=i?i:s;r?r.focus():this.searchEl.focus()},clearSelection:function(){this.updateValue(this.multiple?[]:null),this.searchEl.focus()},onAfterSelect:function(e){var t=this;this.closeOnSelect&&(this.open=!this.open),this.clearSearchOnSelect&&(this.search=""),this.noDrop&&this.multiple&&this.$nextTick((function(){return t.$refs.search.focus()}))},updateValue:function(e){var t=this;void 0===this.value&&(this.$data._value=e),null!==e&&(e=Array.isArray(e)?e.map((function(e){return t.reduce(e)})):this.reduce(e)),this.$emit("input",e)},toggleDropdown:function(e){var n=e.target!==this.searchEl;n&&e.preventDefault();var o=[].concat(t()(this.$refs.deselectButtons||[]),t()([this.$refs.clearButton]||0));void 0===this.searchEl||o.filter(Boolean).some((function(t){return t.contains(e.target)||t===e.target}))?e.preventDefault():this.open&&n?this.searchEl.blur():this.disabled||(this.open=!0,this.searchEl.focus())},isOptionSelected:function(e){var t=this;return this.selectedValue.some((function(n){return t.optionComparator(n,e)}))},isOptionDeselectable:function(e){return this.isOptionSelected(e)&&this.deselectFromDropdown},hasKeyboardFocusBorder:function(e){return!(!this.keyboardFocusBorder||!this.isKeyboardNavigation)&&e===this.typeAheadPointer},optionComparator:function(e,t){return this.getOptionKey(e)===this.getOptionKey(t)},findOptionFromReducedValue:function(e){var n=this,o=[].concat(t()(this.options),t()(this.pushedTags)).filter((function(t){return JSON.stringify(n.reduce(t))===JSON.stringify(e)}));return 1===o.length?o[0]:o.find((function(e){return n.optionComparator(e,n.$data._value)}))||e},closeSearchOptions:function(){this.open=!1,this.$emit("search:blur")},maybeDeleteValue:function(){if(!this.searchEl.value.length&&this.selectedValue&&this.selectedValue.length&&this.clearable){var e=null;this.multiple&&(e=t()(this.selectedValue.slice(0,this.selectedValue.length-1))),this.updateValue(e)}},optionExists:function(e){var t=this;return this.optionList.some((function(n){return t.optionComparator(n,e)}))},optionAriaSelected:function(e){return this.selectable(e)?String(this.isOptionSelected(e)):null},normalizeOptionForSlot:function(e){return"object"===s()(e)?e:a()({},this.label,e)},pushTag:function(e){this.pushedTags.push(e)},onEscape:function(){this.search.length?this.search="":this.open=!1},onSearchBlur:function(){if(!this.mousedown||this.searching){var e=this.clearSearchOnSelect,t=this.multiple;return this.clearSearchOnBlur({clearSearchOnSelect:e,multiple:t})&&(this.search=""),void this.closeSearchOptions()}this.mousedown=!1,0!==this.search.length||0!==this.options.length||this.closeSearchOptions()},onSearchFocus:function(){this.open=!0,this.$emit("search:focus")},onMousedown:function(){this.mousedown=!0},onMouseUp:function(){this.mousedown=!1},onMouseMove:function(e,t){this.isKeyboardNavigation=!1,this.selectable(e)&&(this.typeAheadPointer=t)},onSearchKeyDown:function(e){var t=this,n=function(e){if(e.preventDefault(),t.open)return!t.isComposing&&t.typeAheadSelect();t.open=!0},o={8:function(e){return t.maybeDeleteValue()},9:function(e){return t.onTab()},27:function(e){return t.onEscape()},38:function(e){if(e.preventDefault(),t.isKeyboardNavigation=!0,t.open)return t.typeAheadUp();t.open=!0},40:function(e){if(e.preventDefault(),t.isKeyboardNavigation=!0,t.open)return t.typeAheadDown();t.open=!0}};this.selectOnKeyCodes.forEach((function(e){return o[e]=n}));var i=this.mapKeydown(o,this);if("function"==typeof i[e.keyCode])return i[e.keyCode](e)},onSearchKeyPress:function(e){this.open||32!==e.keyCode||(e.preventDefault(),this.open=!0)}}},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"v-select",class:e.stateClasses,attrs:{id:"v-select-"+e.uid,dir:e.dir}},[e._t("header",null,null,e.scope.header),e._v(" "),n("div",{ref:"toggle",staticClass:"vs__dropdown-toggle"},[n("div",{ref:"selectedOptions",staticClass:"vs__selected-options",on:{mousedown:e.toggleDropdown}},[e._l(e.selectedValue,(function(t,o){return e._t("selected-option-container",[n("span",{key:e.getOptionKey(t),staticClass:"vs__selected"},[e._t("selected-option",[e._v("\n "+e._s(e.getOptionLabel(t))+"\n ")],null,e.normalizeOptionForSlot(t)),e._v(" "),e.multiple?n("button",{ref:"deselectButtons",refInFor:!0,staticClass:"vs__deselect",attrs:{disabled:e.disabled,type:"button",title:e.ariaLabelDeselectOption(e.getOptionLabel(t)),"aria-label":e.ariaLabelDeselectOption(e.getOptionLabel(t))},on:{mousedown:function(n){return n.stopPropagation(),e.deselect(t)},keydown:function(n){return!n.type.indexOf("key")&&e._k(n.keyCode,"enter",13,n.key,"Enter")?null:e.keyboardDeselect(t,o)}}},[n(e.childComponents.Deselect,{tag:"component"})],1):e._e()],2)],{option:e.normalizeOptionForSlot(t),deselect:e.deselect,multiple:e.multiple,disabled:e.disabled})})),e._v(" "),e._t("search",[n("input",e._g(e._b({staticClass:"vs__search"},"input",e.scope.search.attributes,!1),e.scope.search.events))],null,e.scope.search)],2),e._v(" "),n("div",{ref:"actions",staticClass:"vs__actions"},[n("button",{directives:[{name:"show",rawName:"v-show",value:e.showClearButton,expression:"showClearButton"}],ref:"clearButton",staticClass:"vs__clear",attrs:{disabled:e.disabled,type:"button",title:e.ariaLabelClearSelected,"aria-label":e.ariaLabelClearSelected},on:{click:e.clearSelection}},[n(e.childComponents.Deselect,{tag:"component"})],1),e._v(" "),e.noDrop?e._e():n("button",{ref:"openIndicatorButton",staticClass:"vs__open-indicator-button",attrs:{type:"button",tabindex:"-1","aria-labelledby":"vs"+e.uid+"__listbox","aria-controls":"vs"+e.uid+"__listbox","aria-expanded":e.dropdownOpen.toString()},on:{mousedown:e.toggleDropdown}},[e._t("open-indicator",[n(e.childComponents.OpenIndicator,e._b({tag:"component"},"component",e.scope.openIndicator.attributes,!1))],null,e.scope.openIndicator)],2),e._v(" "),e._t("spinner",[n("div",{directives:[{name:"show",rawName:"v-show",value:e.mutableLoading,expression:"mutableLoading"}],staticClass:"vs__spinner"},[e._v("Loading...")])],null,e.scope.spinner)],2)]),e._v(" "),n("transition",{attrs:{name:e.transition}},[e.dropdownOpen?n("ul",{directives:[{name:"append-to-body",rawName:"v-append-to-body"}],key:"vs"+e.uid+"__listbox",ref:"dropdownMenu",staticClass:"vs__dropdown-menu",attrs:{id:"vs"+e.uid+"__listbox",role:"listbox","aria-label":e.ariaLabelListbox,"aria-multiselectable":e.multiple,tabindex:"-1"},on:{mousedown:function(t){return t.preventDefault(),e.onMousedown(t)},mouseup:e.onMouseUp}},[e._t("list-header",null,null,e.scope.listHeader),e._v(" "),e._l(e.filteredOptions,(function(t,o){return n("li",{key:e.getOptionKey(t),staticClass:"vs__dropdown-option",class:{"vs__dropdown-option--deselect":e.isOptionDeselectable(t)&&o===e.typeAheadPointer,"vs__dropdown-option--selected":e.isOptionSelected(t),"vs__dropdown-option--highlight":o===e.typeAheadPointer,"vs__dropdown-option--kb-focus":e.hasKeyboardFocusBorder(o),"vs__dropdown-option--disabled":!e.selectable(t)},attrs:{id:"vs"+e.uid+"__option-"+o,role:"option","aria-selected":e.optionAriaSelected(t)},on:{mousemove:function(n){return e.onMouseMove(t,o)},click:function(n){n.preventDefault(),n.stopPropagation(),e.selectable(t)&&e.select(t)}}},[e._t("option",[e._v("\n "+e._s(e.getOptionLabel(t))+"\n ")],null,e.normalizeOptionForSlot(t))],2)})),e._v(" "),0===e.filteredOptions.length?n("li",{staticClass:"vs__no-options"},[e._t("no-options",[e._v("\n Sorry, no matching options.\n ")],null,e.scope.noOptions)],2):e._e(),e._v(" "),e._t("list-footer",null,null,e.scope.listFooter)],2):n("ul",{staticStyle:{display:"none",visibility:"hidden"},attrs:{id:"vs"+e.uid+"__listbox",role:"listbox","aria-label":e.ariaLabelListbox}})]),e._v(" "),e._t("footer",null,null,e.scope.footer)],2)}),[],!1,null,null,null).exports,O={ajax:u,pointer:c,pointerScroll:l},_=m})(),o})()})); //# sourceMappingURL=vue-select.js.map /***/ }), /***/ "./node_modules/@nextcloud/vue/node_modules/@nextcloud/browser-storage/dist/index.js": /*!*******************************************************************************************!*\ !*** ./node_modules/@nextcloud/vue/node_modules/@nextcloud/browser-storage/dist/index.js ***! \*******************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.clearAll = clearAll; exports.clearNonPersistent = clearNonPersistent; exports.getBuilder = getBuilder; var _storagebuilder = _interopRequireDefault(__webpack_require__(/*! ./storagebuilder */ "./node_modules/@nextcloud/vue/node_modules/@nextcloud/browser-storage/dist/storagebuilder.js")); var _scopedstorage = _interopRequireDefault(__webpack_require__(/*! ./scopedstorage */ "./node_modules/@nextcloud/vue/node_modules/@nextcloud/browser-storage/dist/scopedstorage.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function getBuilder(appId) { return new _storagebuilder.default(appId); } function clearStorage(storage, pred) { Object.keys(storage).filter(k => pred ? pred(k) : true).map(storage.removeItem.bind(storage)); } function clearAll() { const storages = [window.sessionStorage, window.localStorage]; storages.map(s => clearStorage(s)); } function clearNonPersistent() { const storages = [window.sessionStorage, window.localStorage]; storages.map(s => clearStorage(s, k => !k.startsWith(_scopedstorage.default.GLOBAL_SCOPE_PERSISTENT))); } //# sourceMappingURL=index.js.map /***/ }), /***/ "./node_modules/@nextcloud/vue/node_modules/@nextcloud/browser-storage/dist/scopedstorage.js": /*!***************************************************************************************************!*\ !*** ./node_modules/@nextcloud/vue/node_modules/@nextcloud/browser-storage/dist/scopedstorage.js ***! \***************************************************************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } class ScopedStorage { constructor(scope, wrapped, persistent) { _defineProperty(this, "scope", void 0); _defineProperty(this, "wrapped", void 0); this.scope = `${persistent ? ScopedStorage.GLOBAL_SCOPE_PERSISTENT : ScopedStorage.GLOBAL_SCOPE_VOLATILE}_${btoa(scope)}_`; this.wrapped = wrapped; } scopeKey(key) { return `${this.scope}${key}`; } setItem(key, value) { this.wrapped.setItem(this.scopeKey(key), value); } getItem(key) { return this.wrapped.getItem(this.scopeKey(key)); } removeItem(key) { this.wrapped.removeItem(this.scopeKey(key)); } clear() { Object.keys(this.wrapped).filter(key => key.startsWith(this.scope)).map(this.wrapped.removeItem.bind(this.wrapped)); } } exports["default"] = ScopedStorage; _defineProperty(ScopedStorage, "GLOBAL_SCOPE_VOLATILE", 'nextcloud_vol'); _defineProperty(ScopedStorage, "GLOBAL_SCOPE_PERSISTENT", 'nextcloud_per'); //# sourceMappingURL=scopedstorage.js.map /***/ }), /***/ "./node_modules/@nextcloud/vue/node_modules/@nextcloud/browser-storage/dist/storagebuilder.js": /*!****************************************************************************************************!*\ !*** ./node_modules/@nextcloud/vue/node_modules/@nextcloud/browser-storage/dist/storagebuilder.js ***! \****************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _scopedstorage = _interopRequireDefault(__webpack_require__(/*! ./scopedstorage */ "./node_modules/@nextcloud/vue/node_modules/@nextcloud/browser-storage/dist/scopedstorage.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } class StorageBuilder { constructor(appId) { _defineProperty(this, "appId", void 0); _defineProperty(this, "persisted", false); _defineProperty(this, "clearedOnLogout", false); this.appId = appId; } persist() { let persist = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; this.persisted = persist; return this; } clearOnLogout() { let clear = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; this.clearedOnLogout = clear; return this; } build() { return new _scopedstorage.default(this.appId, this.persisted ? window.localStorage : window.sessionStorage, !this.clearedOnLogout); } } exports["default"] = StorageBuilder; //# sourceMappingURL=storagebuilder.js.map /***/ }), /***/ "./node_modules/@vue/devtools-api/lib/esm/const.js": /*!*********************************************************!*\ !*** ./node_modules/@vue/devtools-api/lib/esm/const.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HOOK_PLUGIN_SETTINGS_SET: () => (/* binding */ HOOK_PLUGIN_SETTINGS_SET), /* harmony export */ HOOK_SETUP: () => (/* binding */ HOOK_SETUP) /* harmony export */ }); const HOOK_SETUP = 'devtools-plugin:setup'; const HOOK_PLUGIN_SETTINGS_SET = 'plugin:settings:set'; /***/ }), /***/ "./node_modules/@vue/devtools-api/lib/esm/env.js": /*!*******************************************************!*\ !*** ./node_modules/@vue/devtools-api/lib/esm/env.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getDevtoolsGlobalHook: () => (/* binding */ getDevtoolsGlobalHook), /* harmony export */ getTarget: () => (/* binding */ getTarget), /* harmony export */ isProxyAvailable: () => (/* binding */ isProxyAvailable) /* harmony export */ }); function getDevtoolsGlobalHook() { return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__; } function getTarget() { // @ts-expect-error navigator and windows are not available in all environments return (typeof navigator !== 'undefined' && typeof window !== 'undefined') ? window : typeof globalThis !== 'undefined' ? globalThis : {}; } const isProxyAvailable = typeof Proxy === 'function'; /***/ }), /***/ "./node_modules/@vue/devtools-api/lib/esm/index.js": /*!*********************************************************!*\ !*** ./node_modules/@vue/devtools-api/lib/esm/index.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isPerformanceSupported: () => (/* reexport safe */ _time_js__WEBPACK_IMPORTED_MODULE_0__.isPerformanceSupported), /* harmony export */ now: () => (/* reexport safe */ _time_js__WEBPACK_IMPORTED_MODULE_0__.now), /* harmony export */ setupDevtoolsPlugin: () => (/* binding */ setupDevtoolsPlugin) /* harmony export */ }); /* harmony import */ var _env_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./env.js */ "./node_modules/@vue/devtools-api/lib/esm/env.js"); /* harmony import */ var _const_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./const.js */ "./node_modules/@vue/devtools-api/lib/esm/const.js"); /* harmony import */ var _proxy_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./proxy.js */ "./node_modules/@vue/devtools-api/lib/esm/proxy.js"); /* harmony import */ var _time_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./time.js */ "./node_modules/@vue/devtools-api/lib/esm/time.js"); function setupDevtoolsPlugin(pluginDescriptor, setupFn) { const descriptor = pluginDescriptor; const target = (0,_env_js__WEBPACK_IMPORTED_MODULE_1__.getTarget)(); const hook = (0,_env_js__WEBPACK_IMPORTED_MODULE_1__.getDevtoolsGlobalHook)(); const enableProxy = _env_js__WEBPACK_IMPORTED_MODULE_1__.isProxyAvailable && descriptor.enableEarlyProxy; if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) { hook.emit(_const_js__WEBPACK_IMPORTED_MODULE_2__.HOOK_SETUP, pluginDescriptor, setupFn); } else { const proxy = enableProxy ? new _proxy_js__WEBPACK_IMPORTED_MODULE_3__.ApiProxy(descriptor, hook) : null; const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || []; list.push({ pluginDescriptor: descriptor, setupFn, proxy, }); if (proxy) { setupFn(proxy.proxiedTarget); } } } /***/ }), /***/ "./node_modules/@vue/devtools-api/lib/esm/proxy.js": /*!*********************************************************!*\ !*** ./node_modules/@vue/devtools-api/lib/esm/proxy.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ApiProxy: () => (/* binding */ ApiProxy) /* harmony export */ }); /* harmony import */ var _const_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./const.js */ "./node_modules/@vue/devtools-api/lib/esm/const.js"); /* harmony import */ var _time_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./time.js */ "./node_modules/@vue/devtools-api/lib/esm/time.js"); class ApiProxy { constructor(plugin, hook) { this.target = null; this.targetQueue = []; this.onQueue = []; this.plugin = plugin; this.hook = hook; const defaultSettings = {}; if (plugin.settings) { for (const id in plugin.settings) { const item = plugin.settings[id]; defaultSettings[id] = item.defaultValue; } } const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`; let currentSettings = Object.assign({}, defaultSettings); try { const raw = localStorage.getItem(localSettingsSaveId); const data = JSON.parse(raw); Object.assign(currentSettings, data); } catch (e) { // noop } this.fallbacks = { getSettings() { return currentSettings; }, setSettings(value) { try { localStorage.setItem(localSettingsSaveId, JSON.stringify(value)); } catch (e) { // noop } currentSettings = value; }, now() { return (0,_time_js__WEBPACK_IMPORTED_MODULE_0__.now)(); }, }; if (hook) { hook.on(_const_js__WEBPACK_IMPORTED_MODULE_1__.HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => { if (pluginId === this.plugin.id) { this.fallbacks.setSettings(value); } }); } this.proxiedOn = new Proxy({}, { get: (_target, prop) => { if (this.target) { return this.target.on[prop]; } else { return (...args) => { this.onQueue.push({ method: prop, args, }); }; } }, }); this.proxiedTarget = new Proxy({}, { get: (_target, prop) => { if (this.target) { return this.target[prop]; } else if (prop === 'on') { return this.proxiedOn; } else if (Object.keys(this.fallbacks).includes(prop)) { return (...args) => { this.targetQueue.push({ method: prop, args, resolve: () => { }, }); return this.fallbacks[prop](...args); }; } else { return (...args) => { return new Promise((resolve) => { this.targetQueue.push({ method: prop, args, resolve, }); }); }; } }, }); } async setRealTarget(target) { this.target = target; for (const item of this.onQueue) { this.target.on[item.method](...item.args); } for (const item of this.targetQueue) { item.resolve(await this.target[item.method](...item.args)); } } } /***/ }), /***/ "./node_modules/@vue/devtools-api/lib/esm/time.js": /*!********************************************************!*\ !*** ./node_modules/@vue/devtools-api/lib/esm/time.js ***! \********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isPerformanceSupported: () => (/* binding */ isPerformanceSupported), /* harmony export */ now: () => (/* binding */ now) /* harmony export */ }); let supported; let perf; function isPerformanceSupported() { var _a; if (supported !== undefined) { return supported; } if (typeof window !== 'undefined' && window.performance) { supported = true; perf = window.performance; } else if (typeof globalThis !== 'undefined' && ((_a = globalThis.perf_hooks) === null || _a === void 0 ? void 0 : _a.performance)) { supported = true; perf = globalThis.perf_hooks.performance; } else { supported = false; } return supported; } function now() { return isPerformanceSupported() ? perf.now() : Date.now(); } /***/ }), /***/ "./node_modules/autosize/dist/autosize.esm.js": /*!****************************************************!*\ !*** ./node_modules/autosize/dist/autosize.esm.js ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); var e=new Map;function t(t){var o=e.get(t);o&&o.destroy()}function o(t){var o=e.get(t);o&&o.update()}var r=null;"undefined"==typeof window?((r=function(e){return e}).destroy=function(e){return e},r.update=function(e){return e}):((r=function(t,o){return t&&Array.prototype.forEach.call(t.length?t:[t],function(t){return function(t){if(t&&t.nodeName&&"TEXTAREA"===t.nodeName&&!e.has(t)){var o,r=null,n=window.getComputedStyle(t),i=(o=t.value,function(){a({testForHeightReduction:""===o||!t.value.startsWith(o),restoreTextAlign:null}),o=t.value}),l=function(o){t.removeEventListener("autosize:destroy",l),t.removeEventListener("autosize:update",s),t.removeEventListener("input",i),window.removeEventListener("resize",s),Object.keys(o).forEach(function(e){return t.style[e]=o[e]}),e.delete(t)}.bind(t,{height:t.style.height,resize:t.style.resize,textAlign:t.style.textAlign,overflowY:t.style.overflowY,overflowX:t.style.overflowX,wordWrap:t.style.wordWrap});t.addEventListener("autosize:destroy",l),t.addEventListener("autosize:update",s),t.addEventListener("input",i),window.addEventListener("resize",s),t.style.overflowX="hidden",t.style.wordWrap="break-word",e.set(t,{destroy:l,update:s}),s()}function a(e){var o,i,l=e.restoreTextAlign,s=void 0===l?null:l,d=e.testForHeightReduction,u=void 0===d||d,c=n.overflowY;if(0!==t.scrollHeight&&("vertical"===n.resize?t.style.resize="none":"both"===n.resize&&(t.style.resize="horizontal"),u&&(o=function(e){for(var t=[];e&&e.parentNode&&e.parentNode instanceof Element;)e.parentNode.scrollTop&&t.push([e.parentNode,e.parentNode.scrollTop]),e=e.parentNode;return function(){return t.forEach(function(e){var t=e[0],o=e[1];t.style.scrollBehavior="auto",t.scrollTop=o,t.style.scrollBehavior=null})}}(t),t.style.height=""),i="content-box"===n.boxSizing?t.scrollHeight-(parseFloat(n.paddingTop)+parseFloat(n.paddingBottom)):t.scrollHeight+parseFloat(n.borderTopWidth)+parseFloat(n.borderBottomWidth),"none"!==n.maxHeight&&i>parseFloat(n.maxHeight)?("hidden"===n.overflowY&&(t.style.overflow="scroll"),i=parseFloat(n.maxHeight)):"hidden"!==n.overflowY&&(t.style.overflow="hidden"),t.style.height=i+"px",s&&(t.style.textAlign=s),o&&o(),r!==i&&(t.dispatchEvent(new Event("autosize:resized",{bubbles:!0})),r=i),c!==n.overflow&&!s)){var v=n.textAlign;"hidden"===n.overflow&&(t.style.textAlign="start"===v?"end":"start"),a({restoreTextAlign:v,testForHeightReduction:!0})}}function s(){a({testForHeightReduction:!0,restoreTextAlign:null})}}(t)}),t}).destroy=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],t),e},r.update=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],o),e});var n=r;/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (n); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader.vue?vue&type=script&lang=js": /*!******************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader.vue?vue&type=script&lang=js ***! \******************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _AppNavigationHeader_AppNavigationHeaderDatePicker_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AppNavigationHeader/AppNavigationHeaderDatePicker.vue */ "./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderDatePicker.vue"); /* harmony import */ var _AppNavigationHeader_AppNavigationHeaderTodayButton_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AppNavigationHeader/AppNavigationHeaderTodayButton.vue */ "./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderTodayButton.vue"); /* harmony import */ var _AppNavigationHeader_AppNavigationHeaderNewEvent_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AppNavigationHeader/AppNavigationHeaderNewEvent.vue */ "./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderNewEvent.vue"); /* harmony import */ var _AppNavigationHeader_AppNavigationHeaderViewMenu_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AppNavigationHeader/AppNavigationHeaderViewMenu.vue */ "./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderViewMenu.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'AppNavigationHeader', components: { AppNavigationHeaderDatePicker: _AppNavigationHeader_AppNavigationHeaderDatePicker_vue__WEBPACK_IMPORTED_MODULE_0__["default"], AppNavigationHeaderTodayButton: _AppNavigationHeader_AppNavigationHeaderTodayButton_vue__WEBPACK_IMPORTED_MODULE_1__["default"], AppNavigationHeaderNewEvent: _AppNavigationHeader_AppNavigationHeaderNewEvent_vue__WEBPACK_IMPORTED_MODULE_2__["default"], AppNavigationHeaderViewMenu: _AppNavigationHeader_AppNavigationHeaderViewMenu_vue__WEBPACK_IMPORTED_MODULE_3__["default"] }, props: { isPublic: { type: Boolean, required: true }, canAccessPreviousEvent: { type: Boolean, default: true } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderDatePicker.vue?vue&type=script&lang=js": /*!************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderDatePicker.vue?vue&type=script&lang=js ***! \************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _utils_date_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../utils/date.js */ "./src/utils/date.js"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _filters_dateRangeFormat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../filters/dateRangeFormat.js */ "./src/filters/dateRangeFormat.js"); /* harmony import */ var _Shared_DatePicker_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Shared/DatePicker.vue */ "./src/components/Shared/DatePicker.vue"); /* harmony import */ var vue_material_design_icons_ChevronLeft_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-material-design-icons/ChevronLeft.vue */ "./node_modules/vue-material-design-icons/ChevronLeft.vue"); /* harmony import */ var vue_material_design_icons_ChevronRight_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-material-design-icons/ChevronRight.vue */ "./node_modules/vue-material-design-icons/ChevronRight.vue"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'AppNavigationHeaderDatePicker', components: { DatePicker: _Shared_DatePicker_vue__WEBPACK_IMPORTED_MODULE_2__["default"], ChevronLeftIcon: vue_material_design_icons_ChevronLeft_vue__WEBPACK_IMPORTED_MODULE_3__["default"], ChevronRightIcon: vue_material_design_icons_ChevronRight_vue__WEBPACK_IMPORTED_MODULE_4__["default"], NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_5__.NcButton }, filters: { formatDateRange: _filters_dateRangeFormat_js__WEBPACK_IMPORTED_MODULE_1__["default"] }, props: { isWidget: { type: Boolean, default: false }, canAccessPreviousEvent: { type: Boolean, default: true } }, data() { return { isDatepickerOpen: false }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapState)({ locale: state => state.settings.momentLocale }), minimumDate() { return this.canAccessPreviousEvent ? new Date(this.$store.state.davRestrictions.minimumDate) : new Date(); }, selectedDate() { var _this$$route$params$f, _this$$route$params; if (this.isWidget) { return (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_0__.getDateFromFirstdayParam)(this.$store.getters.widgetDate); } return (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_0__.getDateFromFirstdayParam)((_this$$route$params$f = (_this$$route$params = this.$route.params) === null || _this$$route$params === void 0 ? void 0 : _this$$route$params.firstDay) !== null && _this$$route$params$f !== void 0 ? _this$$route$params$f : 'now'); }, previousShortKeyConf() { return { previous_p: ['p'], previous_k: ['k'] }; }, previousLabel() { switch (this.view) { case 'timeGridDay': return this.$t('calendar', 'Previous day'); case 'timeGridWeek': return this.$t('calendar', 'Previous week'); case 'multiMonthYear': return this.$t('calendar', 'Previous year'); case 'dayGridMonth': default: return this.$t('calendar', 'Previous month'); } }, nextShortKeyConf() { return { next_j: ['j'], next_n: ['n'] }; }, nextLabel() { switch (this.view) { case 'timeGridDay': return this.$t('calendar', 'Next day'); case 'timeGridWeek': return this.$t('calendar', 'Next week'); case 'multiMonthYear': return this.$t('calendar', 'Next year'); case 'dayGridMonth': default: return this.$t('calendar', 'Next month'); } }, view() { if (this.isWidget) { return this.$store.getters.widgetView; } return this.$route.params.view; } }, methods: { navigateToPreviousTimeRange() { return this.navigateTimeRangeByFactor(-1); }, navigateToNextTimeRange() { return this.navigateTimeRangeByFactor(1); }, navigateTimeRangeByFactor(factor) { let newDate; switch (this.$route.params.view) { case 'timeGridDay': newDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_0__.modifyDate)(this.selectedDate, { day: factor }); break; case 'timeGridWeek': newDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_0__.modifyDate)(this.selectedDate, { week: factor }); break; case 'multiMonthYear': newDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_0__.modifyDate)(this.selectedDate, { year: factor }); break; case 'dayGridMonth': case 'listMonth': default: { // modifyDate is just adding one month, so we have to manually // set the date of month to 1. Otherwise if your date is set to // January 30th and you add one month, February 30th doesn't exist // and it automatically changes to March 1st. Same happens on March 31st. const firstDayOfCurrentMonth = new Date(this.selectedDate.getTime()); firstDayOfCurrentMonth.setDate(1); newDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_0__.modifyDate)(firstDayOfCurrentMonth, { month: factor }); break; } } this.navigateToDate(newDate); }, navigateToDate(date) { if (this.isWidget) { this.$store.commit('setWidgetDate', { widgetDate: (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_0__.getYYYYMMDDFromDate)(date) }); } else { const name = this.$route.name; const params = Object.assign({}, this.$route.params, { firstDay: (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_0__.getYYYYMMDDFromDate)(date) }); // Don't push new route when day didn't change if (this.$route.params.firstDay === (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_0__.getYYYYMMDDFromDate)(date)) { return; } this.$router.push({ name, params }); } }, toggleDatepicker() { this.isDatepickerOpen = !this.isDatepickerOpen; }, doNothing() { // This function does nothing in itself, // it only captures and prevents the mousedown and mouseup of vue2-datepicker } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderNewEvent.vue?vue&type=script&lang=js": /*!**********************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderNewEvent.vue?vue&type=script&lang=js ***! \**********************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vue_material_design_icons_Plus_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-material-design-icons/Plus.vue */ "./node_modules/vue-material-design-icons/Plus.vue"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'AppNavigationHeaderNewEvent', components: { Plus: vue_material_design_icons_Plus_vue__WEBPACK_IMPORTED_MODULE_0__["default"], NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcButton }, computed: { newEventButtonAriaLabel() { return this.$t('calendar', 'Create new event'); } }, methods: { /** * Opens the new event dialog */ newEvent() { this.$router.push("/new/".concat(this.$route.params.view)); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderTodayButton.vue?vue&type=script&lang=js": /*!*************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderTodayButton.vue?vue&type=script&lang=js ***! \*************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'AppNavigationHeaderTodayButton', components: { NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton }, methods: { today() { const name = this.$route.name; const params = Object.assign({}, this.$route.params, { firstDay: 'now' }); // Don't push new route when day didn't change if (this.$route.params.firstDay === 'now') { return; } this.$router.push({ name, params }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderViewMenu.vue?vue&type=script&lang=js": /*!**********************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderViewMenu.vue?vue&type=script&lang=js ***! \**********************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_ViewDay_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-material-design-icons/ViewDay.vue */ "./node_modules/vue-material-design-icons/ViewDay.vue"); /* harmony import */ var vue_material_design_icons_ViewGrid_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-material-design-icons/ViewGrid.vue */ "./node_modules/vue-material-design-icons/ViewGrid.vue"); /* harmony import */ var vue_material_design_icons_ViewList_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-material-design-icons/ViewList.vue */ "./node_modules/vue-material-design-icons/ViewList.vue"); /* harmony import */ var vue_material_design_icons_ViewModule_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-material-design-icons/ViewModule.vue */ "./node_modules/vue-material-design-icons/ViewModule.vue"); /* harmony import */ var vue_material_design_icons_ViewWeek_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-material-design-icons/ViewWeek.vue */ "./node_modules/vue-material-design-icons/ViewWeek.vue"); /* harmony import */ var vue_material_design_icons_ViewComfy_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-material-design-icons/ViewComfy.vue */ "./node_modules/vue-material-design-icons/ViewComfy.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'AppNavigationHeaderViewMenu', components: { Actions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActions, ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, ViewDay: vue_material_design_icons_ViewDay_vue__WEBPACK_IMPORTED_MODULE_1__["default"], ViewGrid: vue_material_design_icons_ViewGrid_vue__WEBPACK_IMPORTED_MODULE_2__["default"], ViewComfy: vue_material_design_icons_ViewComfy_vue__WEBPACK_IMPORTED_MODULE_6__["default"], ViewList: vue_material_design_icons_ViewList_vue__WEBPACK_IMPORTED_MODULE_3__["default"], ViewModule: vue_material_design_icons_ViewModule_vue__WEBPACK_IMPORTED_MODULE_4__["default"], ViewWeek: vue_material_design_icons_ViewWeek_vue__WEBPACK_IMPORTED_MODULE_5__["default"] }, props: { canAccessPreviousEvent: { type: Boolean, default: true } }, computed: { views() { let menus = [{ id: 'timeGridDay', icon: 'ViewDay', label: this.$t('calendar', 'Day') }, { id: 'timeGridWeek', icon: 'ViewWeek', label: this.$t('calendar', 'Week') }]; if (this.canAccessPreviousEvent) { let additionalMenus = [{ id: 'dayGridMonth', icon: 'ViewModule', label: this.$t('calendar', 'Month') }, { id: 'multiMonthYear', icon: 'ViewComfy', label: this.$t('calendar', 'Year') }, { id: 'listMonth', icon: 'ViewList', label: this.$t('calendar', 'List') }]; menus = menus.concat(additionalMenus); } return menus; }, shortKeyConf() { return { timeGridDay: ['d'], timeGridDay_Num: [1], timeGridWeek: ['w'], timeGridWeek_Num: [2], dayGridMonth: ['m'], dayGridMonth_Num: [3], multiMonthYear: ['y'], multiMonthYear_Num: [4], listMonth: ['l'], listMonth_Num: [5] }; }, defaultIcon() { for (const view of this.views) { if (view.id === this.$route.params.view) { return view.icon; } } return 'ViewGrid'; } }, methods: { selectView(viewName) { const name = this.$route.name; const params = Object.assign({}, this.$route.params, { view: viewName }); // Don't push new route when view didn't change if (this.$route.params.view === viewName) { return; } this.$router.push({ name, params }); }, selectViewFromShortcut(event) { this.selectView(event.srcKey.split('_')[0]); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppointmentConfigList.vue?vue&type=script&lang=js": /*!********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppointmentConfigList.vue?vue&type=script&lang=js ***! \********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _AppointmentConfigList_AppointmentConfigListItem_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AppointmentConfigList/AppointmentConfigListItem.vue */ "./src/components/AppNavigation/AppointmentConfigList/AppointmentConfigListItem.vue"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_Plus_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-material-design-icons/Plus.vue */ "./node_modules/vue-material-design-icons/Plus.vue"); /* harmony import */ var _AppointmentConfigModal_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../AppointmentConfigModal.vue */ "./src/components/AppointmentConfigModal.vue"); /* harmony import */ var _models_appointmentConfig_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../models/appointmentConfig.js */ "./src/models/appointmentConfig.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _AppointmentConfigModal_NoEmailAddressWarning_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../AppointmentConfigModal/NoEmailAddressWarning.vue */ "./src/components/AppointmentConfigModal/NoEmailAddressWarning.vue"); /* harmony import */ var _store_appointmentConfigs_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../store/appointmentConfigs.js */ "./src/store/appointmentConfigs.js"); /* harmony import */ var pinia__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! pinia */ "./node_modules/pinia/dist/pinia.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'AppointmentConfigList', components: { AppointmentConfigListItem: _AppointmentConfigList_AppointmentConfigListItem_vue__WEBPACK_IMPORTED_MODULE_0__["default"], AppNavigationCaption: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcAppNavigationCaption, ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcActionButton, PlusIcon: vue_material_design_icons_Plus_vue__WEBPACK_IMPORTED_MODULE_2__["default"], AppointmentConfigModal: _AppointmentConfigModal_vue__WEBPACK_IMPORTED_MODULE_3__["default"], NoEmailAddressWarning: _AppointmentConfigModal_NoEmailAddressWarning_vue__WEBPACK_IMPORTED_MODULE_6__["default"] }, data() { return { showModalForNewConfig: false }; }, computed: { ...(0,pinia__WEBPACK_IMPORTED_MODULE_8__.mapStores)(_store_appointmentConfigs_js__WEBPACK_IMPORTED_MODULE_7__["default"]), configs() { return this.appointmentConfigStore.allConfigs; }, defaultConfig() { return _models_appointmentConfig_js__WEBPACK_IMPORTED_MODULE_4__["default"].createDefault(this.calendarUrlToUri(this.$store.getters.ownSortedCalendars[0].url), this.$store.getters.scheduleInbox, this.$store.getters.getResolvedTimezone); }, hasAtLeastOneCalendar() { return !!this.$store.getters.ownSortedCalendars[0]; }, hasUserEmailAddress() { const principal = this.$store.getters.getCurrentUserPrincipal; if (!principal) { return false; } return !!principal.emailAddress; }, sortedConfigs() { return [...this.configs].sort((config1, config2) => config1.name.localeCompare(config2.name)); } }, methods: { closeModal() { this.showModalForNewConfig = false; }, calendarUrlToUri(url) { // Trim trailing slash and split into URL parts const parts = url.replace(/\/$/, '').split('/'); // The last one is the URI return parts[parts.length - 1]; }, async deleteConfig(config) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__["default"].info('Deleting config', { config }); try { await this.appointmentConfigStore.deleteConfig({ id: config.id }); _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__["default"].info('Config deleted', { config }); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__["default"].error('Deleting appointment config failed', { config }); } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppointmentConfigList/AppointmentConfigListItem.vue?vue&type=script&lang=js": /*!**********************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppointmentConfigList/AppointmentConfigListItem.vue?vue&type=script&lang=js ***! \**********************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_CalendarCheck_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-material-design-icons/CalendarCheck.vue */ "./node_modules/vue-material-design-icons/CalendarCheck.vue"); /* harmony import */ var vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-material-design-icons/Delete.vue */ "./node_modules/vue-material-design-icons/Delete.vue"); /* harmony import */ var vue_material_design_icons_OpenInNew_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-material-design-icons/OpenInNew.vue */ "./node_modules/vue-material-design-icons/OpenInNew.vue"); /* harmony import */ var vue_material_design_icons_Pencil_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-material-design-icons/Pencil.vue */ "./node_modules/vue-material-design-icons/Pencil.vue"); /* harmony import */ var _models_appointmentConfig_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../models/appointmentConfig.js */ "./src/models/appointmentConfig.js"); /* harmony import */ var _AppointmentConfigModal_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../AppointmentConfigModal.vue */ "./src/components/AppointmentConfigModal.vue"); /* harmony import */ var vue_material_design_icons_LinkVariant_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue-material-design-icons/LinkVariant.vue */ "./node_modules/vue-material-design-icons/LinkVariant.vue"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../utils/logger.js */ "./src/utils/logger.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'AppointmentConfigListItem', components: { AppointmentConfigModal: _AppointmentConfigModal_vue__WEBPACK_IMPORTED_MODULE_6__["default"], AppNavigationItem: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAppNavigationItem, ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, ActionLink: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionLink, DeleteIcon: vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_2__["default"], OpenInNewIcon: vue_material_design_icons_OpenInNew_vue__WEBPACK_IMPORTED_MODULE_3__["default"], PencilIcon: vue_material_design_icons_Pencil_vue__WEBPACK_IMPORTED_MODULE_4__["default"], CalendarCheckIcon: vue_material_design_icons_CalendarCheck_vue__WEBPACK_IMPORTED_MODULE_1__["default"], LinkVariantIcon: vue_material_design_icons_LinkVariant_vue__WEBPACK_IMPORTED_MODULE_7__["default"] }, props: { config: { type: _models_appointmentConfig_js__WEBPACK_IMPORTED_MODULE_5__["default"], required: true } }, data() { return { showModal: false, loading: false }; }, computed: { hasClipboard() { return navigator && navigator.clipboard; } }, methods: { closeModal() { this.showModal = false; }, async copyLink() { try { await navigator.clipboard.writeText(this.config.bookingUrl); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_8__.showSuccess)(this.$t('calendar', 'Appointment link was copied to clipboard')); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_9__["default"].error('Failed to copy appointment link to clipboard', { error }); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_8__.showError)(this.$t('calendar', 'Appointment link could not be copied to clipboard')); } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList.vue?vue&type=script&lang=js": /*!***********************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList.vue?vue&type=script&lang=js ***! \***********************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _CalendarList_CalendarListItem_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CalendarList/CalendarListItem.vue */ "./src/components/AppNavigation/CalendarList/CalendarListItem.vue"); /* harmony import */ var _CalendarList_PublicCalendarListItem_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CalendarList/PublicCalendarListItem.vue */ "./src/components/AppNavigation/CalendarList/PublicCalendarListItem.vue"); /* harmony import */ var _CalendarList_CalendarListItemLoadingPlaceholder_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./CalendarList/CalendarListItemLoadingPlaceholder.vue */ "./src/components/AppNavigation/CalendarList/CalendarListItemLoadingPlaceholder.vue"); /* harmony import */ var vuedraggable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vuedraggable */ "./node_modules/vuedraggable/dist/vuedraggable.umd.js"); /* harmony import */ var vuedraggable__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vuedraggable__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! debounce */ "./node_modules/debounce/index.js"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(debounce__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var p_limit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! p-limit */ "./node_modules/p-limit/index.js"); const limit = (0,p_limit__WEBPACK_IMPORTED_MODULE_5__["default"])(1); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'CalendarList', components: { CalendarListItem: _CalendarList_CalendarListItem_vue__WEBPACK_IMPORTED_MODULE_0__["default"], CalendarListItemLoadingPlaceholder: _CalendarList_CalendarListItemLoadingPlaceholder_vue__WEBPACK_IMPORTED_MODULE_2__["default"], PublicCalendarListItem: _CalendarList_PublicCalendarListItem_vue__WEBPACK_IMPORTED_MODULE_1__["default"], draggable: (vuedraggable__WEBPACK_IMPORTED_MODULE_3___default()) }, props: { isPublic: { type: Boolean, required: true }, loadingCalendars: { type: Boolean, default: false } }, data() { return { calendars: [], disableDragging: false }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapGetters)({ serverCalendars: 'sortedCalendarsSubscriptions' }), loadingKeyCalendars() { return this._uid + '-loading-placeholder-calendars'; } }, watch: { serverCalendars(val) { this.calendars = val; } }, methods: { update: debounce__WEBPACK_IMPORTED_MODULE_7___default()(async function () { this.disableDragging = true; const newOrder = this.calendars.reduce((newOrderObj, currentItem, currentIndex) => { newOrderObj[currentItem.id] = currentIndex; return newOrderObj; }, {}); try { await limit(() => this.$store.dispatch('updateCalendarListOrder', { newOrder })); } catch (err) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showError)(this.$t('calendar', 'Could not update calendar order.')); // Reset calendar list order on error this.calendars = this.serverCalendars; } finally { this.disableDragging = false; } }, 2500) } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/CalendarListItem.vue?vue&type=script&lang=js": /*!****************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/CalendarListItem.vue?vue&type=script&lang=js ***! \****************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_CheckboxBlankCircle_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-material-design-icons/CheckboxBlankCircle.vue */ "./node_modules/vue-material-design-icons/CheckboxBlankCircle.vue"); /* harmony import */ var vue_material_design_icons_CheckboxBlankCircleOutline_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-material-design-icons/CheckboxBlankCircleOutline.vue */ "./node_modules/vue-material-design-icons/CheckboxBlankCircleOutline.vue"); /* harmony import */ var vue_material_design_icons_Pencil_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-material-design-icons/Pencil.vue */ "./node_modules/vue-material-design-icons/Pencil.vue"); /* harmony import */ var vue_material_design_icons_Undo_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-material-design-icons/Undo.vue */ "./node_modules/vue-material-design-icons/Undo.vue"); /* harmony import */ var vue_material_design_icons_LinkVariant_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-material-design-icons/LinkVariant.vue */ "./node_modules/vue-material-design-icons/LinkVariant.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'CalendarListItem', components: { NcAvatar: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAvatar, ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, AppNavigationItem: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAppNavigationItem, CheckboxBlankCircle: vue_material_design_icons_CheckboxBlankCircle_vue__WEBPACK_IMPORTED_MODULE_2__["default"], CheckboxBlankCircleOutline: vue_material_design_icons_CheckboxBlankCircleOutline_vue__WEBPACK_IMPORTED_MODULE_3__["default"], Pencil: vue_material_design_icons_Pencil_vue__WEBPACK_IMPORTED_MODULE_4__["default"], Undo: vue_material_design_icons_Undo_vue__WEBPACK_IMPORTED_MODULE_5__["default"], LinkVariant: vue_material_design_icons_LinkVariant_vue__WEBPACK_IMPORTED_MODULE_6__["default"], NcActionText: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionText, NcActionSeparator: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionSeparator, NcActionCaption: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionCaption }, props: { calendar: { type: Object, required: true } }, data() { return { actionsMenuOpen: false }; }, computed: { /** * Whether to show the sharing section * * @return {boolean} */ canBeShared() { // The backend falsely reports incoming editable shares as being shareable // Ref https://github.com/nextcloud/calendar/issues/5755 if (this.calendar.isSharedWithMe) { return false; } return this.calendar.canBeShared || this.calendar.canBePublished; }, /** * Is the calendar shared with me? * * @return {boolean} */ isSharedWithMe() { return this.calendar.isSharedWithMe; }, /** * Is the calendar shared by me or published via a link? * * @return {boolean} */ isSharedByMe() { return this.calendar.shares.length > 0 || this.calendar.publishURL !== null; }, /** * Whether or not the information about the owner principal was loaded * * @return {boolean} */ loadedOwnerPrincipal() { return this.$store.getters.getPrincipalByUrl(this.calendar.owner) !== undefined; }, ownerUserId() { const principal = this.$store.getters.getPrincipalByUrl(this.calendar.owner); if (principal) { return principal.userId; } return ''; }, ownerDisplayname() { const principal = this.$store.getters.getPrincipalByUrl(this.calendar.owner); if (principal) { return principal.displayname; } return ''; }, /** * compute aria-description for AppNavigationItem link * * @return {string} */ descriptionAppNavigationItem() { if (this.calendar.enabled && this.calendar.displayName) { return t('calendar', 'Disable calendar "{calendar}"', { calendar: this.calendar.displayName }); } else if (this.calendar.enabled && !this.calendar.displayName) { return t('calendar', 'Disable untitled calendar'); } else if (!this.calendar.enabled && this.calendar.displayName) { return t('calendar', 'Enable calendar "{calendar}"', { calendar: this.calendar.displayName }); } else { return t('calendar', 'Enable untitled calendar'); } }, /** * Whether the calendar is currently being deleted * * @return {boolean} */ isBeingDeleted() { return !!this.calendar.deleteInterval; }, /** * Countdown to the deletion of the calendar * * @return {number|undefined} */ countdown() { return this.calendar.countdown; } }, methods: { /** * Toggles the enabled state of this calendar */ toggleEnabled() { this.$store.dispatch('toggleCalendarEnabled', { calendar: this.calendar }).catch(error => { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_1__.showError)(this.$t('calendar', 'An error occurred, unable to change visibility of the calendar.')); console.error(error); }); }, /** * Cancels the deletion of a calendar */ cancelDeleteCalendar() { this.$store.dispatch('cancelCalendarDeletion', { calendar: this.calendar }); }, /** * Open the calendar modal for this calendar item. */ showEditModal() { this.$store.commit('showEditCalendarModal', { calendarId: this.calendar.id }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/CalendarListItemLoadingPlaceholder.vue?vue&type=script&lang=js": /*!**********************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/CalendarListItemLoadingPlaceholder.vue?vue&type=script&lang=js ***! \**********************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'CalendarListItemLoadingPlaceholder' }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/CalendarListNew.vue?vue&type=script&lang=js": /*!***************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/CalendarListNew.vue?vue&type=script&lang=js ***! \***************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var _utils_color_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/color.js */ "./src/utils/color.js"); /* harmony import */ var vue_material_design_icons_CalendarBlank_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-material-design-icons/CalendarBlank.vue */ "./node_modules/vue-material-design-icons/CalendarBlank.vue"); /* harmony import */ var vue_material_design_icons_CalendarCheck_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-material-design-icons/CalendarCheck.vue */ "./node_modules/vue-material-design-icons/CalendarCheck.vue"); /* harmony import */ var vue_material_design_icons_LinkVariant_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-material-design-icons/LinkVariant.vue */ "./node_modules/vue-material-design-icons/LinkVariant.vue"); /* harmony import */ var vue_material_design_icons_Plus_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-material-design-icons/Plus.vue */ "./node_modules/vue-material-design-icons/Plus.vue"); /* harmony import */ var vue_material_design_icons_Web_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue-material-design-icons/Web.vue */ "./node_modules/vue-material-design-icons/Web.vue"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'CalendarListNew', components: { ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, ActionInput: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionInput, ActionSeparator: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionSeparator, ActionText: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionText, AppNavigationItem: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAppNavigationItem, CalendarBlank: vue_material_design_icons_CalendarBlank_vue__WEBPACK_IMPORTED_MODULE_3__["default"], CalendarCheck: vue_material_design_icons_CalendarCheck_vue__WEBPACK_IMPORTED_MODULE_4__["default"], PublicCalendarSubscriptionPicker: () => __webpack_require__.e(/*! import() | public-calendar-subscription-picker */ "public-calendar-subscription-picker").then(__webpack_require__.bind(__webpack_require__, /*! ../../Subscription/PublicCalendarSubscriptionPicker.vue */ "./src/components/Subscription/PublicCalendarSubscriptionPicker.vue")), LinkVariant: vue_material_design_icons_LinkVariant_vue__WEBPACK_IMPORTED_MODULE_5__["default"], Plus: vue_material_design_icons_Plus_vue__WEBPACK_IMPORTED_MODULE_6__["default"], Web: vue_material_design_icons_Web_vue__WEBPACK_IMPORTED_MODULE_7__["default"] }, data() { return { // Open state isOpen: false, // New calendar showCreateCalendarLabel: true, showCreateCalendarInput: false, showCreateCalendarSaving: false, // New calendar with task list showCreateCalendarTaskListLabel: true, showCreateCalendarTaskListInput: false, showCreateCalendarTaskListSaving: false, // New subscription showCreateSubscriptionLabel: true, showCreateSubscriptionInput: false, showCreateSubscriptionSaving: false, showHolidaySubscriptionPicker: false, showPublicCalendarSubscriptionPicker: false }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_8__.mapState)({ canSubscribeLink: state => state.settings.canSubscribeLink, hasPublicCalendars: state => Boolean(state.settings.publicCalendars) }) }, watch: { isOpen() { if (this.isOpen) { return; } this.closeMenu(); } }, methods: { /** * Opens the Actions menu when clicking on the main item label */ toggleDialog() { this.isOpen = !this.isOpen; }, /** * Opens the create calendar input */ openCreateCalendarInput() { this.showCreateCalendarLabel = false; this.showCreateCalendarInput = true; this.showCreateCalendarSaving = false; this.showCreateCalendarTaskListLabel = true; this.showCreateCalendarTaskListInput = false; this.showCreateSubscriptionLabel = true; this.showCreateSubscriptionInput = false; }, /** * Opens the create calendar with task list input */ openCreateCalendarTaskListInput() { this.showCreateCalendarTaskListLabel = false; this.showCreateCalendarTaskListInput = true; this.showCreateCalendarTaskListSaving = false; this.showCreateCalendarLabel = true; this.showCreateCalendarInput = false; this.showCreateSubscriptionLabel = true; this.showCreateSubscriptionInput = false; }, /** * Opens the create subscription input */ openCreateSubscriptionInput() { this.showCreateSubscriptionLabel = false; this.showCreateSubscriptionInput = true; this.showCreateSubscriptionSaving = false; this.showCreateCalendarLabel = true; this.showCreateCalendarInput = false; this.showCreateCalendarTaskListLabel = true; this.showCreateCalendarTaskListInput = false; }, /** * Creates a new calendar * * @param {Event} event The submit event */ async createNewCalendar(event) { this.showCreateCalendarInput = false; this.showCreateCalendarSaving = true; const displayName = event.target.querySelector('input[type=text]').value; try { await this.$store.dispatch('appendCalendar', { displayName, color: (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_2__.uidToHexColor)(displayName) }); } catch (error) { console.debug(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_1__.showError)(this.$t('calendar', 'An error occurred, unable to create the calendar.')); } finally { this.showCreateCalendarSaving = false; this.showCreateCalendarLabel = true; this.isOpen = false; this.closeMenu(); } }, /** * Creates a new calendar with task list * * @param {Event} event The submit event */ async createNewCalendarTaskList(event) { this.showCreateCalendarTaskListInput = false; this.showCreateCalendarTaskListSaving = true; const displayName = event.target.querySelector('input[type=text]').value; try { await this.$store.dispatch('appendCalendar', { displayName, color: (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_2__.uidToHexColor)(displayName), components: ['VEVENT', 'VTODO'] }); } catch (error) { console.debug(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_1__.showError)(this.$t('calendar', 'An error occurred, unable to create the calendar.')); } finally { this.showCreateCalendarTaskListSaving = false; this.showCreateCalendarTaskListLabel = true; this.isOpen = false; this.closeMenu(); } }, /** * Creates a new subscription * * @param {Event} event The submit event */ async createNewSubscription(event) { this.showCreateSubscriptionInput = false; this.showCreateSubscriptionSaving = true; const link = event.target.querySelector('input[type=text]').value; let url; let hostname; try { url = new URL(link); hostname = url.hostname; } catch (error) { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_1__.showError)(this.$t('calendar', 'Please enter a valid link (starting with http://, https://, webcal://, or webcals://)')); return; } try { await this.$store.dispatch('appendSubscription', { displayName: hostname, color: (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_2__.uidToHexColor)(link), source: link }); } catch (error) { console.debug(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_1__.showError)(this.$t('calendar', 'An error occurred, unable to create the calendar.')); } finally { this.showCreateSubscriptionSaving = false; this.showCreateSubscriptionLabel = true; this.isOpen = false; this.closeMenu(); } }, /** * This resets the actions on close of menu */ closeMenu() { this.showCreateCalendarLabel = true; this.showCreateCalendarInput = false; this.showCreateCalendarSaving = false; this.showCreateCalendarTaskListLabel = true; this.showCreateCalendarTaskListInput = false; this.showCreateCalendarTaskListSaving = false; this.showCreateSubscriptionLabel = true; this.showCreateSubscriptionInput = false; this.showCreateSubscriptionSaving = false; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/Moment.vue?vue&type=script&lang=js": /*!******************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/Moment.vue?vue&type=script&lang=js ***! \******************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'Moment', props: { timestamp: { type: [Date, Number], required: true }, format: { type: String, default: 'LLL' } }, computed: { title() { return _nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"].unix(this.numericTimestamp).format(this.format); }, formatted() { return _nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"].unix(this.numericTimestamp).fromNow(); }, numericTimestamp() { if (this.timestamp instanceof Date) { return this.timestamp.getTime() / 1000; } return this.timestamp; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/PublicCalendarListItem.vue?vue&type=script&lang=js": /*!**********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/PublicCalendarListItem.vue?vue&type=script&lang=js ***! \**********************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_Download_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-material-design-icons/Download.vue */ "./node_modules/vue-material-design-icons/Download.vue"); /* harmony import */ var vue_material_design_icons_LinkVariant_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-material-design-icons/LinkVariant.vue */ "./node_modules/vue-material-design-icons/LinkVariant.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PublicCalendarListItem', components: { Avatar: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAvatar, ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, ActionLink: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionLink, ActionText: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionText, AppNavigationIconBullet: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAppNavigationIconBullet, AppNavigationItem: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAppNavigationItem, Download: vue_material_design_icons_Download_vue__WEBPACK_IMPORTED_MODULE_3__["default"], LinkVariant: vue_material_design_icons_LinkVariant_vue__WEBPACK_IMPORTED_MODULE_4__["default"] }, props: { calendar: { type: Object, required: true } }, data() { return { // copy subscription link: showCopySubscriptionLinkLabel: true, showCopySubscriptionLinkSpinner: false, showCopySubscriptionLinkSuccess: false, showCopySubscriptionLinkError: false, // Status of actions menu: menuOpen: false }; }, computed: { /** * Download url of the calendar * * @return {string} */ downloadUrl() { return this.calendar.url + '?export'; }, /** * TODO: this should use principals and principal.userId * * @return {string} */ owner() { const lastIndex = this.calendar.owner.lastIndexOf('dav/principals/users/'); if (lastIndex === -1) { return null; } // 'dav/principals/users/'.length => 21 const userId = this.calendar.owner.slice(lastIndex + 21); if (userId.endsWith('/')) { return userId.slice(0, -1); } return userId; } }, methods: { async copySubscriptionLink() { this.menuOpen = true; this.showCopySubscriptionLinkLabel = false; this.showCopySubscriptionLinkSpinner = true; this.showCopySubscriptionLinkSuccess = false; this.showCopySubscriptionLinkError = false; const rootURL = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateRemoteUrl)('dav'); const url = new URL(this.calendar.url + '?export', rootURL); url.protocol = 'webcal:'; // copy link for calendar to clipboard try { await navigator.clipboard.writeText(url); this.menuOpen = true; this.showCopySubscriptionLinkLabel = false; this.showCopySubscriptionLinkSpinner = false; this.showCopySubscriptionLinkSuccess = true; this.showCopySubscriptionLinkError = false; (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showSuccess)(this.$t('calendar', 'Calendar link copied to clipboard.')); } catch (error) { console.debug(error); this.menuOpen = true; this.showCopySubscriptionLinkLabel = false; this.showCopySubscriptionLinkSpinner = false; this.showCopySubscriptionLinkSuccess = false; this.showCopySubscriptionLinkError = true; (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)(this.$t('calendar', 'Calendar link could not be copied to clipboard.')); } finally { setTimeout(() => { this.showCopySubscriptionLinkLabel = true; this.showCopySubscriptionLinkSpinner = false; this.showCopySubscriptionLinkSuccess = false; this.showCopySubscriptionLinkError = false; }, 2000); } }, toggleEnabled() { this.$store.commit('toggleCalendarEnabled', { calendar: this.calendar }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/Trashbin.vue?vue&type=script&lang=js": /*!********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/Trashbin.vue?vue&type=script&lang=js ***! \********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _Moment_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Moment.vue */ "./src/components/AppNavigation/CalendarList/Moment.vue"); /* harmony import */ var _utils_color_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../utils/color.js */ "./src/utils/color.js"); /* harmony import */ var vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-material-design-icons/Delete.vue */ "./node_modules/vue-material-design-icons/Delete.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'Trashbin', components: { AppNavigationItem: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAppNavigationItem, EmptyContent: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcEmptyContent, Modal: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcModal, Moment: _Moment_vue__WEBPACK_IMPORTED_MODULE_4__["default"], Actions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActions, ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, Delete: vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_6__["default"], NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton }, data() { return { showModal: false, loading: true }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapGetters)({ trashBin: 'trashBin', timezoneObject: 'getResolvedTimezoneObject' }), calendars() { return this.$store.getters.sortedDeletedCalendars; }, objects() { return this.$store.getters.deletedCalendarObjects; }, items() { const formattedCalendars = this.calendars.map(calendar => { var _calendar$color; return { calendar, type: 'calendar', key: calendar.url, name: calendar.displayname, url: calendar._url, deletedAt: calendar._props['{http://nextcloud.com/ns}deleted-at'], color: (_calendar$color = calendar.color) !== null && _calendar$color !== void 0 ? _calendar$color : (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_5__.uidToHexColor)(calendar.displayname) }; }); const formattedCalendarObjects = this.objects.map(vobject => { var _vobject$calendar, _ref, _vobject$calendarComp2, _vobject$calendarComp3, _vobject$calendar2; let eventSummary = t('calendar', 'Untitled item'); try { var _vobject$calendarComp; eventSummary = vobject === null || vobject === void 0 || (_vobject$calendarComp = vobject.calendarComponent.getComponentIterator().next().value) === null || _vobject$calendarComp === void 0 ? void 0 : _vobject$calendarComp.title; } catch (e) { // ignore } let subline = ((_vobject$calendar = vobject.calendar) === null || _vobject$calendar === void 0 ? void 0 : _vobject$calendar.displayName) || t('calendar', 'Unknown calendar'); if (vobject.isEvent) { var _event$startDate$getI; const event = vobject === null || vobject === void 0 ? void 0 : vobject.calendarComponent.getFirstComponent('VEVENT'); const utcOffset = ((_event$startDate$getI = event === null || event === void 0 ? void 0 : event.startDate.getInTimezone(this.timezoneObject).utcOffset()) !== null && _event$startDate$getI !== void 0 ? _event$startDate$getI : 0) / 60; if (event !== null && event !== void 0 && event.startDate.jsDate && event !== null && event !== void 0 && event.isAllDay()) { subline += ' · ' + (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"])(event.startDate.jsDate).utcOffset(utcOffset).format('LL'); } else if (event !== null && event !== void 0 && event.startDate.jsDate) { subline += ' · ' + (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"])(event === null || event === void 0 ? void 0 : event.startDate.jsDate).utcOffset(utcOffset).format('LLL'); } } const color = (_ref = (_vobject$calendarComp2 = (_vobject$calendarComp3 = vobject.calendarComponent.getComponentIterator().next().value) === null || _vobject$calendarComp3 === void 0 ? void 0 : _vobject$calendarComp3.color) !== null && _vobject$calendarComp2 !== void 0 ? _vobject$calendarComp2 : (_vobject$calendar2 = vobject.calendar) === null || _vobject$calendar2 === void 0 ? void 0 : _vobject$calendar2.color) !== null && _ref !== void 0 ? _ref : (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_5__.uidToHexColor)(subline); return { vobject, type: 'object', key: vobject.id, name: eventSummary, subline, url: vobject.uri, deletedAt: vobject.dav._props['{http://nextcloud.com/ns}deleted-at'], color }; }); return formattedCalendars.concat(formattedCalendarObjects).sort((item1, item2) => item2.deletedAt - item1.deletedAt); }, retentionDuration() { return Math.ceil(this.trashBin.retentionDuration / (60 * 60 * 24)); } }, methods: { async onShow() { this.showModal = true; this.loading = true; try { await Promise.all([this.$store.dispatch('loadDeletedCalendars'), this.$store.dispatch('loadDeletedCalendarObjects')]); _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__["default"].debug('deleted calendars and objects loaded', { calendars: this.calendars, objects: this.objects }); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__["default"].error('could not load deleted calendars and objects', { error }); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showError)(t('calendar', 'Could not load deleted calendars and objects')); } this.loading = false; }, async onDeletePermanently(item) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__["default"].debug('deleting ' + item.url + ' permanently', item); try { switch (item.type) { case 'calendar': await this.$store.dispatch('deleteCalendarPermanently', { calendar: item.calendar }); break; case 'object': await this.$store.dispatch('deleteCalendarObjectPermanently', { vobject: item.vobject }); break; } } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__["default"].error('could not restore ' + item.url, { error }); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showError)(t('calendar', 'Could not restore calendar or event')); } }, async restore(item) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__["default"].debug('restoring ' + item.url, item); try { switch (item.type) { case 'calendar': await this.$store.dispatch('restoreCalendar', { calendar: item.calendar }); this.$store.dispatch('loadCollections'); break; case 'object': await this.$store.dispatch('restoreCalendarObject', { vobject: item.vobject }); break; } } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__["default"].error('could not restore ' + item.url, { error }); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showError)(t('calendar', 'Could not restore calendar or event')); } }, onEmptyTrashBin() { OC.dialogs.confirm(t('calendar', 'Do you really want to empty the trash bin?'), t('calendar', 'Empty trash bin'), this.emptyTrashBin, true); }, emptyTrashBin(confirm) { if (!confirm) { return; } this.items.forEach(item => { this.onDeletePermanently(item); }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal.vue?vue&type=script&lang=js": /*!****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal.vue?vue&type=script&lang=js ***! \****************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _EditCalendarModal_PublishCalendar_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./EditCalendarModal/PublishCalendar.vue */ "./src/components/AppNavigation/EditCalendarModal/PublishCalendar.vue"); /* harmony import */ var _EditCalendarModal_SharingSearch_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./EditCalendarModal/SharingSearch.vue */ "./src/components/AppNavigation/EditCalendarModal/SharingSearch.vue"); /* harmony import */ var _EditCalendarModal_ShareItem_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./EditCalendarModal/ShareItem.vue */ "./src/components/AppNavigation/EditCalendarModal/ShareItem.vue"); /* harmony import */ var _EditCalendarModal_InternalLink_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./EditCalendarModal/InternalLink.vue */ "./src/components/AppNavigation/EditCalendarModal/InternalLink.vue"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-material-design-icons/Delete.vue */ "./node_modules/vue-material-design-icons/Delete.vue"); /* harmony import */ var vue_material_design_icons_Download_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue-material-design-icons/Download.vue */ "./node_modules/vue-material-design-icons/Download.vue"); /* harmony import */ var vue_material_design_icons_Close_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! vue-material-design-icons/Close.vue */ "./node_modules/vue-material-design-icons/Close.vue"); /* harmony import */ var vue_material_design_icons_Check_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! vue-material-design-icons/Check.vue */ "./node_modules/vue-material-design-icons/Check.vue"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'EditCalendarModal', components: { NcModal: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcModal, NcColorPicker: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcColorPicker, NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton, PublishCalendar: _EditCalendarModal_PublishCalendar_vue__WEBPACK_IMPORTED_MODULE_1__["default"], SharingSearch: _EditCalendarModal_SharingSearch_vue__WEBPACK_IMPORTED_MODULE_2__["default"], ShareItem: _EditCalendarModal_ShareItem_vue__WEBPACK_IMPORTED_MODULE_3__["default"], DeleteIcon: vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_6__["default"], DownloadIcon: vue_material_design_icons_Download_vue__WEBPACK_IMPORTED_MODULE_7__["default"], CloseIcon: vue_material_design_icons_Close_vue__WEBPACK_IMPORTED_MODULE_8__["default"], CheckIcon: vue_material_design_icons_Check_vue__WEBPACK_IMPORTED_MODULE_9__["default"], InternalLink: _EditCalendarModal_InternalLink_vue__WEBPACK_IMPORTED_MODULE_4__["default"] }, data() { return { calendarColor: undefined, calendarColorChanged: false, calendarName: undefined, calendarNameChanged: false }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_11__.mapGetters)(['editCalendarModal']), calendar() { var _this$editCalendarMod; const id = (_this$editCalendarMod = this.editCalendarModal) === null || _this$editCalendarMod === void 0 ? void 0 : _this$editCalendarMod.calendarId; if (!id) { return undefined; } return this.$store.getters.getCalendarById(id); }, /** * Whether to show the publishing action. * * @return {boolean} */ canBePublished() { return this.calendar.canBePublished; }, /** * Whether to show the sharing section * * @return {boolean} */ canBeShared() { // The backend falsely reports incoming editable shares as being shareable // Ref https://github.com/nextcloud/calendar/issues/5755 if (this.calendar.isSharedWithMe) { return false; } return this.calendar.canBeShared || this.calendar.canBePublished; }, /** * Download url of the calendar * * @return {string} */ downloadUrl() { return this.calendar.url + '?export'; } }, watch: { editCalendarModal(value) { if (!value) { return; } this.calendarName = this.calendar.displayName; this.calendarColor = this.calendar.color; this.calendarNameChanged = false; this.calendarColorChanged = false; } }, methods: { /** * Close the modal (without saving). */ closeModal() { this.$store.commit('hideEditCalendarModal'); }, /** * Save the calendar color. */ async saveColor() { try { await this.$store.dispatch('changeCalendarColor', { calendar: this.calendar, newColor: this.calendarColor }); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__["default"].error('Failed to save calendar color', { calendar: this.calendar, newColor: this.calendarColor }); throw error; } }, /** * Save the calendar name. */ async saveName() { try { await this.$store.dispatch('renameCalendar', { calendar: this.calendar, newName: this.calendarName }); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__["default"].error('Failed to save calendar name', { calendar: this.calendar, newName: this.calendarName }); throw error; } }, /** * Save unsaved changes and close the modal. * * @return {Promise} */ async saveAndClose() { try { if (this.calendarColorChanged) { await this.saveColor(); } if (this.calendarNameChanged) { await this.saveName(); } } catch (error) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_10__.showError)(this.$t('calendar', 'Failed to save calendar name and color')); } this.closeModal(); }, /** * Deletes or unshares the calendar */ deleteCalendar() { this.$store.dispatch('deleteCalendarAfterTimeout', { calendar: this.calendar }); this.closeModal(); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/InternalLink.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/InternalLink.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_OpenInNew_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-material-design-icons/OpenInNew.vue */ "./node_modules/vue-material-design-icons/OpenInNew.vue"); /* harmony import */ var vue_material_design_icons_ClipboardArrowLeftOutline_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-material-design-icons/ClipboardArrowLeftOutline.vue */ "./node_modules/vue-material-design-icons/ClipboardArrowLeftOutline.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'InternalLink', components: { NcActions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActions, NcActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, OpenInNewIcon: vue_material_design_icons_OpenInNew_vue__WEBPACK_IMPORTED_MODULE_3__["default"], ClipboardArrowLeftOutline: vue_material_design_icons_ClipboardArrowLeftOutline_vue__WEBPACK_IMPORTED_MODULE_4__["default"] }, props: { calendar: { type: Object, required: true } }, methods: { /** * Copies the private calendar link * to be used with clients like Thunderbird */ async copyLink() { const rootUrl = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateRemoteUrl)('dav'); const url = new URL(this.calendar.url, rootUrl); try { await navigator.clipboard.writeText(url); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showSuccess)(this.$t('calendar', 'Calendar link copied to clipboard.')); } catch (error) { console.debug(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)(this.$t('calendar', 'Calendar link could not be copied to clipboard.')); } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/PublishCalendar.vue?vue&type=script&lang=js": /*!********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/PublishCalendar.vue?vue&type=script&lang=js ***! \********************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_click_outside__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-click-outside */ "./node_modules/vue-click-outside/index.js"); /* harmony import */ var vue_click_outside__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue_click_outside__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var vue_material_design_icons_CalendarBlank_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-material-design-icons/CalendarBlank.vue */ "./node_modules/vue-material-design-icons/CalendarBlank.vue"); /* harmony import */ var vue_material_design_icons_ClipboardArrowLeftOutline_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-material-design-icons/ClipboardArrowLeftOutline.vue */ "./node_modules/vue-material-design-icons/ClipboardArrowLeftOutline.vue"); /* harmony import */ var vue_material_design_icons_CodeBrackets_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue-material-design-icons/CodeBrackets.vue */ "./node_modules/vue-material-design-icons/CodeBrackets.vue"); /* harmony import */ var vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! vue-material-design-icons/Delete.vue */ "./node_modules/vue-material-design-icons/Delete.vue"); /* harmony import */ var vue_material_design_icons_Email_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! vue-material-design-icons/Email.vue */ "./node_modules/vue-material-design-icons/Email.vue"); /* harmony import */ var vue_material_design_icons_LinkVariant_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! vue-material-design-icons/LinkVariant.vue */ "./node_modules/vue-material-design-icons/LinkVariant.vue"); /* harmony import */ var vue_material_design_icons_Plus_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! vue-material-design-icons/Plus.vue */ "./node_modules/vue-material-design-icons/Plus.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PublishCalendar', components: { NcActions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActions, NcActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, NcActionInput: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionInput, NcActionText: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionText, CalendarBlank: vue_material_design_icons_CalendarBlank_vue__WEBPACK_IMPORTED_MODULE_5__["default"], ClipboardArrowLeftOutline: vue_material_design_icons_ClipboardArrowLeftOutline_vue__WEBPACK_IMPORTED_MODULE_6__["default"], CodeBrackets: vue_material_design_icons_CodeBrackets_vue__WEBPACK_IMPORTED_MODULE_7__["default"], Delete: vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_8__["default"], Email: vue_material_design_icons_Email_vue__WEBPACK_IMPORTED_MODULE_9__["default"], LinkVariant: vue_material_design_icons_LinkVariant_vue__WEBPACK_IMPORTED_MODULE_10__["default"], PlusIcon: vue_material_design_icons_Plus_vue__WEBPACK_IMPORTED_MODULE_11__["default"] }, directives: { ClickOutside: (vue_click_outside__WEBPACK_IMPORTED_MODULE_1___default()) }, props: { calendar: { type: Object, required: true } }, data() { return { // is the calendar being published right now? publishingCalendar: false, // Send email action showEMailLabel: true, showEMailInput: false, showEMailSending: false, // copy public link: showCopyPublicLinkLabel: true, showCopyPublicLinkSpinner: false, // copy subscription link: showCopySubscriptionLinkLabel: true, showCopySubscriptionLinkSpinner: false, showCopySubscriptionLinkSuccess: false, showCopySubscriptionLinkError: false, // copy embed code: showCopyEmbedCodeLinkLabel: true, showCopyEmbedCodeLinkSpinner: false, showCopyEmbedCodeLinkSuccess: false, showCopyEmbedCodeLinkError: false, // delete public link unpublishingCalendar: false, // Status of actions menu: menuOpen: false }; }, computed: { isPublished() { return this.calendar.publishURL !== null; } }, methods: { async publishCalendar() { this.publishingCalendar = true; try { await this.$store.dispatch('publishCalendar', { calendar: this.calendar }); } catch (error) { console.debug(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showError)(this.$t('calendar', 'An error occurred, unable to publish calendar.')); } finally { this.publishingCalendar = false; } }, openEMailLinkInput() { this.showEMailLabel = false; this.showEMailInput = true; this.showEMailSending = false; }, async sendLinkViaEMail(event) { this.showEMailLabel = false; this.showEMailInput = false; this.showEMailSending = true; const emailAddress = event.target.querySelector('input[type=text]').value; try { const url = [(0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.linkTo)('calendar', 'index.php'), 'v1/public/sendmail'].join('/'); await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_4__["default"].post(url, { recipient: emailAddress, token: this.calendar.publishURL.split('/').slice(-1)[0], calendarName: this.calendar.displayName }); } catch (error) { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showError)(this.$t('calendar', 'An error occurred, unable to send email.')); } finally { this.showEMailLabel = true; this.showEMailInput = false; this.showEMailSending = false; } }, async copyPublicLink() { this.showCopyPublicLinkLabel = false; this.showCopyPublicLinkSpinner = true; const rootURL = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateRemoteUrl)('dav'); const token = this.calendar.publishURL.split('/').slice(-1)[0]; const url = new URL((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateUrl)('apps/calendar') + '/p/' + token, rootURL); // copy link for calendar to clipboard try { await navigator.clipboard.writeText(url); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showSuccess)(this.$t('calendar', 'Calendar link copied to clipboard.')); } catch (error) { console.debug(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showError)(this.$t('calendar', 'Calendar link could not be copied to clipboard.')); } finally { this.showCopyPublicLinkLabel = true; this.showCopyPublicLinkSpinner = false; } }, async copySubscriptionLink() { this.menuOpen = true; this.showCopySubscriptionLinkLabel = false; this.showCopySubscriptionLinkSpinner = true; this.showCopySubscriptionLinkSuccess = false; this.showCopySubscriptionLinkError = false; const rootURL = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateRemoteUrl)('dav'); const url = new URL(this.calendar.publishURL + '?export', rootURL); // copy link for calendar to clipboard try { await navigator.clipboard.writeText(url); this.menuOpen = true; this.showCopySubscriptionLinkLabel = false; this.showCopySubscriptionLinkSpinner = false; this.showCopySubscriptionLinkSuccess = true; this.showCopySubscriptionLinkError = false; (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showSuccess)(this.$t('calendar', 'Calendar link copied to clipboard.')); } catch (error) { console.debug(error); this.menuOpen = true; this.showCopySubscriptionLinkLabel = false; this.showCopySubscriptionLinkSpinner = false; this.showCopySubscriptionLinkSuccess = false; this.showCopySubscriptionLinkError = true; (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showError)(this.$t('calendar', 'Calendar link could not be copied to clipboard.')); } finally { setTimeout(() => { this.showCopySubscriptionLinkLabel = true; this.showCopySubscriptionLinkSpinner = false; this.showCopySubscriptionLinkSuccess = false; this.showCopySubscriptionLinkError = false; }, 2000); } }, async copyEmbedCode() { this.menuOpen = true; this.showCopyEmbedCodeLinkLabel = false; this.showCopyEmbedCodeLinkSpinner = true; this.showCopyEmbedCodeLinkSuccess = false; this.showCopyEmbedCodeLinkError = false; const rootURL = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateRemoteUrl)('dav'); const token = this.calendar.publishURL.split('/').slice(-1)[0]; const url = new URL((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateUrl)('apps/calendar') + '/embed/' + token, rootURL); const code = ''; // copy link for calendar to clipboard try { await navigator.clipboard.writeText(code); this.menuOpen = true; this.showCopyEmbedCodeLinkLabel = false; this.showCopyEmbedCodeLinkSpinner = false; this.showCopyEmbedCodeLinkSuccess = true; this.showCopyEmbedCodeLinkError = false; (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showSuccess)(this.$t('calendar', 'Embed code copied to clipboard.')); } catch (error) { console.debug(error); this.menuOpen = true; this.showCopyEmbedCodeLinkLabel = false; this.showCopyEmbedCodeLinkSpinner = false; this.showCopyEmbedCodeLinkSuccess = false; this.showCopyEmbedCodeLinkError = true; (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showError)(this.$t('calendar', 'Embed code could not be copied to clipboard.')); } finally { setTimeout(() => { this.showCopyEmbedCodeLinkLabel = true; this.showCopyEmbedCodeLinkSpinner = false; this.showCopyEmbedCodeLinkSuccess = false; this.showCopyEmbedCodeLinkError = false; }, 2000); } }, async unpublishCalendar() { this.unpublishingCalendar = true; const calendar = this.calendar; try { await this.$store.dispatch('unpublishCalendar', { calendar }); this.unpublishingCalendar = false; } catch (error) { console.debug(error); this.unpublishingCalendar = false; (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showError)(this.$t('calendar', 'Unpublishing calendar failed')); } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/ShareItem.vue?vue&type=script&lang=js": /*!**************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/ShareItem.vue?vue&type=script&lang=js ***! \**************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_AccountMultiple_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-material-design-icons/AccountMultiple.vue */ "./node_modules/vue-material-design-icons/AccountMultiple.vue"); /* harmony import */ var _Icons_IconCircles_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Icons/IconCircles.vue */ "./src/components/Icons/IconCircles.vue"); /* harmony import */ var vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-material-design-icons/Delete.vue */ "./node_modules/vue-material-design-icons/Delete.vue"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var _utils_randomId_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../utils/randomId.js */ "./src/utils/randomId.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'ShareItem', components: { NcActions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActions, NcActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, NcAvatar: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAvatar, IconCircle: _Icons_IconCircles_vue__WEBPACK_IMPORTED_MODULE_2__["default"], AccountMultiple: vue_material_design_icons_AccountMultiple_vue__WEBPACK_IMPORTED_MODULE_1__["default"], Delete: vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_3__["default"] }, props: { calendar: { type: Object, required: true }, sharee: { type: Object, required: true } }, data() { return { id: (0,_utils_randomId_js__WEBPACK_IMPORTED_MODULE_5__.randomId)(), updatingSharee: false }; }, computed: { uid() { return this._uid; } }, methods: { /** * Unshares the calendar from the given sharee * * @return {Promise} */ async unshare() { this.updatingSharee = true; try { await this.$store.dispatch('unshareCalendar', { calendar: this.calendar, uri: this.sharee.uri }); this.updatingSharee = false; } catch (error) { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showInfo)(this.$t('calendar', 'An error occurred while unsharing the calendar.')); this.updatingSharee = false; } }, /** * Toggles the write-permission of the share * * @return {Promise} */ async updatePermission() { this.updatingSharee = true; try { await this.$store.dispatch('toggleCalendarShareWritable', { calendar: this.calendar, uri: this.sharee.uri }); this.updatingSharee = false; } catch (error) { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showInfo)(this.$t('calendar', 'An error occurred, unable to change the permission of the share.')); this.updatingSharee = false; } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/SharingSearch.vue?vue&type=script&lang=js": /*!******************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/SharingSearch.vue?vue&type=script&lang=js ***! \******************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _services_caldavService_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../services/caldavService.js */ "./src/services/caldavService.js"); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! debounce */ "./node_modules/debounce/index.js"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(debounce__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _utils_url_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../utils/url.js */ "./src/utils/url.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'SharingSearch', components: { NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcSelect }, props: { calendar: { type: Object, required: true } }, data() { return { isLoading: false, inputGiven: false, usersOrGroups: [] }; }, methods: { /** * Share calendar * * @param {object} data destructuring object * @param {string} data.user the userId * @param {string} data.displayName the displayName * @param {string} data.uri the sharing principalScheme uri * @param {boolean} data.isGroup is this a group ? * @param {boolean} data.isCircle is this a circle-group ? */ shareCalendar(_ref) { let { user, displayName, uri, isGroup, isCircle } = _ref; this.$store.dispatch('shareCalendar', { calendar: this.calendar, user, displayName, uri, isGroup, isCircle }); }, /** * Function to filter results in NcSelect * * @param {object} option * @param {string} label * @param {string} search */ filterResults(option, label, search) { return true; }, /** * Use the cdav client call to find matches to the query from the existing Users & Groups * * @param {string} query */ findSharee: debounce__WEBPACK_IMPORTED_MODULE_5___default()(async function (query) { const hiddenPrincipalSchemes = []; const hiddenUrls = []; this.calendar.shares.forEach(share => { hiddenPrincipalSchemes.push(share.uri); }); if (this.$store.getters.getCurrentUserPrincipal) { hiddenUrls.push(this.$store.getters.getCurrentUserPrincipal.url); } if (this.calendar.owner) { hiddenUrls.push(this.calendar.owner); } this.isLoading = true; this.usersOrGroups = []; if (query.length > 0) { const davPromise = this.findShareesFromDav(query, hiddenPrincipalSchemes, hiddenUrls); const ocsPromise = this.findShareesFromCircles(query, hiddenPrincipalSchemes, hiddenUrls); const [davResults, ocsResults] = await Promise.all([davPromise, ocsPromise]); this.usersOrGroups = [...davResults, ...ocsResults]; this.isLoading = false; this.inputGiven = true; } else { this.inputGiven = false; this.isLoading = false; } }, 500), /** * * @param {string} query The search query * @param {string[]} hiddenPrincipals A list of principals to exclude from search results * @param {string[]} hiddenUrls A list of urls to exclude from search results * @return {Promise} */ async findShareesFromDav(query, hiddenPrincipals, hiddenUrls) { let results; try { results = await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_1__.principalPropertySearchByDisplaynameOrEmail)(query); } catch (error) { return []; } return results.reduce((list, result) => { if (['ROOM', 'RESOURCE'].includes(result.calendarUserType)) { return list; } const isGroup = result.calendarUserType === 'GROUP'; // TODO: Why do we have to decode those two values? const user = (0,_utils_url_js__WEBPACK_IMPORTED_MODULE_4__.urldecode)(result[isGroup ? 'groupId' : 'userId']); const decodedPrincipalScheme = (0,_utils_url_js__WEBPACK_IMPORTED_MODULE_4__.urldecode)(result.principalScheme); if (hiddenPrincipals.includes(decodedPrincipalScheme)) { return list; } if (hiddenUrls.includes(result.url)) { return list; } // Don't show resources and rooms if (!['GROUP', 'INDIVIDUAL'].includes(result.calendarUserType)) { return list; } list.push({ user, displayName: result.displayname, uri: decodedPrincipalScheme, isGroup, isCircle: false, isNoUser: isGroup, search: query }); return list; }, []); }, /** * * @param {string} query The search query * @param {string[]} hiddenPrincipals A list of principals to exclude from search results * @param {string[]} hiddenUrls A list of urls to exclude from search results * @return {Promise} */ async findShareesFromCircles(query, hiddenPrincipals, hiddenUrls) { let results; try { results = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_2__["default"].get((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_3__.generateOcsUrl)('apps/files_sharing/api/v1/') + 'sharees', { params: { format: 'json', search: query, perPage: 200, itemType: 'principals' } }); } catch (error) { return []; } if (results.data.ocs.meta.status === 'failure') { return []; } let circles = []; if (Array.isArray(results.data.ocs.data.circles)) { circles = circles.concat(results.data.ocs.data.circles); } if (Array.isArray(results.data.ocs.data.exact.circles)) { circles = circles.concat(results.data.ocs.data.exact.circles); } if (circles.length === 0) { return []; } return circles.filter(circle => { return !hiddenPrincipals.includes('principal:principals/circles/' + circle.value.shareWith); }).map(circle => ({ user: circle.label, displayName: circle.label, icon: 'icon-circle', uri: 'principal:principals/circles/' + circle.value.shareWith, isGroup: false, isCircle: true, isNoUser: true, search: query })); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EmbedHeader/EmbedHeaderTodayButton.vue?vue&type=script&lang=js": /*!*********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EmbedHeader/EmbedHeaderTodayButton.vue?vue&type=script&lang=js ***! \*********************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'EmbedHeaderTodayButton', components: { NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcButton }, computed: { title() { return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"])().format('ll'); } }, methods: { today() { const name = this.$route.name; const params = Object.assign({}, this.$route.params, { firstDay: 'now' }); // Don't push new route when day didn't change if (this.$route.params.firstDay === 'now') { return; } this.$router.push({ name, params }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EmbedHeader/EmbedHeaderViewButtons.vue?vue&type=script&lang=js": /*!*********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EmbedHeader/EmbedHeaderViewButtons.vue?vue&type=script&lang=js ***! \*********************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'EmbedHeaderViewButtons', components: { NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton }, props: { isWidget: { type: Boolean, default: false } }, computed: { isAgendaDayViewSelected() { return this.selectedView === 'timeGridDay'; }, isAgendaWeekViewSelected() { return this.selectedView === 'timeGridWeek'; }, isMonthViewSelected() { return this.selectedView === 'dayGridMonth'; }, isYearViewSelected() { return this.selectedView === 'multiMonthYear'; }, isMonthListViewSelected() { return this.selectedView === 'listMonth'; }, selectedView() { if (this.isWidget) { return this.$store.getters.widgetView; } return this.$route.params.view; } }, methods: { view(viewName) { if (this.isWidget) { this.$store.commit('setWidgetView', { viewName }); } else { const name = this.$route.name; const params = Object.assign({}, this.$route.params, { view: viewName }); // Don't push new route when view didn't change if (this.$route.params.view === viewName) { return; } this.$router.push({ name, params }); } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EmbedTopNavigation.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EmbedTopNavigation.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var _AppNavigationHeader_AppNavigationHeaderDatePicker_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AppNavigationHeader/AppNavigationHeaderDatePicker.vue */ "./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderDatePicker.vue"); /* harmony import */ var _EmbedHeader_EmbedHeaderTodayButton_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./EmbedHeader/EmbedHeaderTodayButton.vue */ "./src/components/AppNavigation/EmbedHeader/EmbedHeaderTodayButton.vue"); /* harmony import */ var _EmbedHeader_EmbedHeaderViewButtons_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./EmbedHeader/EmbedHeaderViewButtons.vue */ "./src/components/AppNavigation/EmbedHeader/EmbedHeaderViewButtons.vue"); /* harmony import */ var vue_material_design_icons_CalendarBlank_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-material-design-icons/CalendarBlank.vue */ "./node_modules/vue-material-design-icons/CalendarBlank.vue"); /* harmony import */ var vue_material_design_icons_Download_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue-material-design-icons/Download.vue */ "./node_modules/vue-material-design-icons/Download.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'EmbedTopNavigation', components: { AppNavigationHeaderDatePicker: _AppNavigationHeader_AppNavigationHeaderDatePicker_vue__WEBPACK_IMPORTED_MODULE_3__["default"], AppNavigationHeaderTodayButton: _EmbedHeader_EmbedHeaderTodayButton_vue__WEBPACK_IMPORTED_MODULE_4__["default"], AppNavigationHeaderViewButtons: _EmbedHeader_EmbedHeaderViewButtons_vue__WEBPACK_IMPORTED_MODULE_5__["default"], Actions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActions, ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, ActionLink: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionLink, CalendarBlank: vue_material_design_icons_CalendarBlank_vue__WEBPACK_IMPORTED_MODULE_6__["default"], Download: vue_material_design_icons_Download_vue__WEBPACK_IMPORTED_MODULE_7__["default"] }, props: { isWidget: { type: Boolean, default: false }, canAccessPreviousEvent: { type: Boolean, default: true } }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_8__.mapGetters)({ subscriptions: 'sortedSubscriptions' }) }, methods: { async copySubscriptionLink(calendar) { const rootURL = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateRemoteUrl)('dav'); const url = new URL(calendar.url + '?export', rootURL); url.protocol = 'webcal:'; // copy link for calendar to clipboard try { await navigator.clipboard.writeText(url); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showSuccess)(this.$t('calendar', 'Calendar link copied to clipboard.')); } catch (error) { console.debug(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)(this.$t('calendar', 'Calendar link could not be copied to clipboard.')); } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings.vue?vue&type=script&lang=js": /*!*******************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings.vue?vue&type=script&lang=js ***! \*******************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _Shared_CalendarPicker_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Shared/CalendarPicker.vue */ "./src/components/Shared/CalendarPicker.vue"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var _Settings_SettingsImportSection_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Settings/SettingsImportSection.vue */ "./src/components/AppNavigation/Settings/SettingsImportSection.vue"); /* harmony import */ var _Settings_SettingsTimezoneSelect_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Settings/SettingsTimezoneSelect.vue */ "./src/components/AppNavigation/Settings/SettingsTimezoneSelect.vue"); /* harmony import */ var _Settings_SettingsAttachmentsFolder_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Settings/SettingsAttachmentsFolder.vue */ "./src/components/AppNavigation/Settings/SettingsAttachmentsFolder.vue"); /* harmony import */ var _services_caldavService_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../services/caldavService.js */ "./src/services/caldavService.js"); /* harmony import */ var _Settings_ShortcutOverview_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Settings/ShortcutOverview.vue */ "./src/components/AppNavigation/Settings/ShortcutOverview.vue"); /* harmony import */ var _models_consts_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../models/consts.js */ "./src/models/consts.js"); /* harmony import */ var _defaults_defaultAlarmProvider_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../defaults/defaultAlarmProvider.js */ "./src/defaults/defaultAlarmProvider.js"); /* harmony import */ var vue_material_design_icons_ClipboardArrowLeftOutline_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! vue-material-design-icons/ClipboardArrowLeftOutline.vue */ "./node_modules/vue-material-design-icons/ClipboardArrowLeftOutline.vue"); /* harmony import */ var vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! vue-material-design-icons/InformationVariant.vue */ "./node_modules/vue-material-design-icons/InformationVariant.vue"); /* harmony import */ var vue_material_design_icons_OpenInNew_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! vue-material-design-icons/OpenInNew.vue */ "./node_modules/vue-material-design-icons/OpenInNew.vue"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _utils_randomId_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../utils/randomId.js */ "./src/utils/randomId.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'Settings', components: { ShortcutOverview: _Settings_ShortcutOverview_vue__WEBPACK_IMPORTED_MODULE_9__["default"], ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, ActionCheckbox: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionCheckbox, ActionLink: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionLink, AppNavigationSettings: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAppNavigationSettings, NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcSelect, SettingsImportSection: _Settings_SettingsImportSection_vue__WEBPACK_IMPORTED_MODULE_5__["default"], SettingsTimezoneSelect: _Settings_SettingsTimezoneSelect_vue__WEBPACK_IMPORTED_MODULE_6__["default"], SettingsAttachmentsFolder: _Settings_SettingsAttachmentsFolder_vue__WEBPACK_IMPORTED_MODULE_7__["default"], ClipboardArrowLeftOutline: vue_material_design_icons_ClipboardArrowLeftOutline_vue__WEBPACK_IMPORTED_MODULE_12__["default"], InformationVariant: vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_13__["default"], OpenInNewIcon: vue_material_design_icons_OpenInNew_vue__WEBPACK_IMPORTED_MODULE_14__["default"], CalendarPicker: _Shared_CalendarPicker_vue__WEBPACK_IMPORTED_MODULE_1__["default"] }, props: { loadingCalendars: { type: Boolean, default: false } }, data() { return { savingBirthdayCalendar: false, savingEventLimit: false, savingTasks: false, savingPopover: false, savingSlotDuration: false, savingDefaultReminder: false, savingDefaultCalendarId: false, savingWeekend: false, savingWeekNumber: false, savingDefaultCalendar: false, displayKeyboardShortcuts: false, defaultCalendarPickerId: (0,_utils_randomId_js__WEBPACK_IMPORTED_MODULE_16__.randomId)() }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_17__.mapGetters)({ birthdayCalendar: 'hasBirthdayCalendar', currentUserPrincipal: 'getCurrentUserPrincipal' }), ...(0,vuex__WEBPACK_IMPORTED_MODULE_17__.mapState)({ eventLimit: state => state.settings.eventLimit, showPopover: state => !state.settings.skipPopover, showTasks: state => state.settings.showTasks, showWeekends: state => state.settings.showWeekends, showWeekNumbers: state => state.settings.showWeekNumbers, slotDuration: state => state.settings.slotDuration, defaultReminder: state => state.settings.defaultReminder, timezone: state => state.settings.timezone, locale: state => state.settings.momentLocale, attachmentsFolder: state => state.settings.attachmentsFolder }), isBirthdayCalendarDisabled() { return this.savingBirthdayCalendar || this.loadingCalendars; }, files() { return this.$store.state.importFiles.importFiles; }, showUploadButton() { return this.$store.state.importState.importState.stage === _models_consts_js__WEBPACK_IMPORTED_MODULE_10__.IMPORT_STAGE_DEFAULT; }, showImportModal() { return this.$store.state.importState.importState.stage === _models_consts_js__WEBPACK_IMPORTED_MODULE_10__.IMPORT_STAGE_PROCESSING; }, showProgressBar() { return this.$store.state.importState.importState.stage === _models_consts_js__WEBPACK_IMPORTED_MODULE_10__.IMPORT_STAGE_IMPORTING; }, settingsTitle() { return this.$t('calendar', 'Calendar settings'); }, slotDurationOptions() { return [{ label: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_3__["default"].duration(5 * 60 * 1000).locale(this.locale).humanize(), value: '00:05:00' }, { label: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_3__["default"].duration(10 * 60 * 1000).locale(this.locale).humanize(), value: '00:10:00' }, { label: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_3__["default"].duration(15 * 60 * 1000).locale(this.locale).humanize(), value: '00:15:00' }, { label: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_3__["default"].duration(20 * 60 * 1000).locale(this.locale).humanize(), value: '00:20:00' }, { label: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_3__["default"].duration(30 * 60 * 1000).locale(this.locale).humanize(), value: '00:30:00' }, { label: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_3__["default"].duration(60 * 60 * 1000).locale(this.locale).humanize(), value: '01:00:00' }]; }, selectedDurationOption() { return this.slotDurationOptions.find(o => o.value === this.slotDuration); }, defaultReminderOptions() { const defaultAlarms = (0,_defaults_defaultAlarmProvider_js__WEBPACK_IMPORTED_MODULE_11__.getDefaultAlarms)().map(seconds => { return { label: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_3__["default"].duration(Math.abs(seconds) * 1000).locale(this.locale).humanize(), value: seconds.toString() }; }); return [{ label: this.$t('calendar', 'No reminder'), value: 'none' }].concat(defaultAlarms); }, selectedDefaultReminderOption() { return this.defaultReminderOptions.find(o => o.value === this.defaultReminder); }, availabilitySettingsUrl() { return (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateUrl)('/settings/user/availability'); }, nextcloudVersion() { return parseInt(OC.config.version.split('.')[0]); }, defaultCalendarOptions() { return this.$store.state.calendars.calendars.filter(calendar => !calendar.readOnly && !calendar.isSharedWithMe && calendar.supportsEvents); }, /** * The default calendar for incoming inivitations * * @return {object|undefined} The default calendar or undefined if none is available */ defaultCalendar() { const defaultCalendarUrl = this.currentUserPrincipal.scheduleDefaultCalendarUrl; const calendar = this.defaultCalendarOptions.find(calendar => calendar.url === defaultCalendarUrl); // If the default calendar is not or no longer available, // pick the first calendar in the list of available calendars. if (!calendar) { return this.defaultCalendarOptions[0]; } return calendar; } }, methods: { async toggleBirthdayEnabled() { // change to loading status this.savingBirthdayCalendar = true; try { await this.$store.dispatch('toggleBirthdayCalendarEnabled'); this.savingBirthdayCalendar = false; } catch (error) { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showError)(this.$t('calendar', 'New setting was not saved successfully.')); this.savingBirthdayCalendar = false; } }, async toggleEventLimitEnabled() { // change to loading status this.savingEventLimit = true; try { await this.$store.dispatch('toggleEventLimitEnabled'); this.savingEventLimit = false; } catch (error) { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showError)(this.$t('calendar', 'New setting was not saved successfully.')); this.savingEventLimit = false; } }, async toggleTasksEnabled() { // change to loading status this.savingTasks = true; try { await this.$store.dispatch('toggleTasksEnabled'); this.savingTasks = false; } catch (error) { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showError)(this.$t('calendar', 'New setting was not saved successfully.')); this.savingTasks = false; } }, async togglePopoverEnabled() { // change to loading status this.savingPopover = true; try { await this.$store.dispatch('togglePopoverEnabled'); this.savingPopover = false; } catch (error) { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showError)(this.$t('calendar', 'New setting was not saved successfully.')); this.savingPopover = false; } }, async toggleWeekendsEnabled() { // change to loading status this.savingWeekend = true; try { await this.$store.dispatch('toggleWeekendsEnabled'); this.savingWeekend = false; } catch (error) { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showError)(this.$t('calendar', 'New setting was not saved successfully.')); this.savingWeekend = false; } }, /** * Toggles the setting for "Show week number" */ async toggleWeekNumberEnabled() { // change to loading status this.savingWeekNumber = true; try { await this.$store.dispatch('toggleWeekNumberEnabled'); this.savingWeekNumber = false; } catch (error) { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showError)(this.$t('calendar', 'New setting was not saved successfully.')); this.savingWeekNumber = false; } }, /** * Updates the setting for slot duration * * @param {object} option The new selected value */ async changeSlotDuration(option) { if (!option) { return; } // change to loading status this.savingSlotDuration = true; try { await this.$store.dispatch('setSlotDuration', { slotDuration: option.value }); this.savingSlotDuration = false; } catch (error) { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showError)(this.$t('calendar', 'New setting was not saved successfully.')); this.savingSlotDuration = false; } }, /** * Updates the setting for the default reminder * * @param {object} option The new selected value */ async changeDefaultReminder(option) { if (!option) { return; } // change to loading status this.savingDefaultReminder = true; try { await this.$store.dispatch('setDefaultReminder', { defaultReminder: option.value }); this.savingDefaultReminder = false; } catch (error) { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showError)(this.$t('calendar', 'New setting was not saved successfully.')); this.savingDefaultReminder = false; } }, /** * Changes the default calendar for incoming invitations * * @param {object} selectedCalendar The new selected default calendar */ async changeDefaultCalendar(selectedCalendar) { if (!selectedCalendar) { return; } this.savingDefaultCalendar = true; try { await this.$store.dispatch('changePrincipalScheduleDefaultCalendarUrl', { principal: this.currentUserPrincipal, scheduleDefaultCalendarUrl: selectedCalendar.url }); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_15__["default"].error('Error while changing default calendar', { error, calendarUrl: selectedCalendar.url, selectedCalendar }); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showError)(this.$t('calendar', 'Failed to save default calendar')); } finally { this.savingDefaultCalendar = false; } }, /** * Copies the primary CalDAV url to the user's clipboard. */ async copyPrimaryCalDAV() { try { await navigator.clipboard.writeText((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateRemoteUrl)('dav')); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showSuccess)(this.$t('calendar', 'CalDAV link copied to clipboard.')); } catch (error) { console.debug(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showError)(this.$t('calendar', 'CalDAV link could not be copied to clipboard.')); } }, /** * Copies the macOS / iOS specific CalDAV url to the user's clipboard. * This url is user-specific. */ async copyAppleCalDAV() { const rootURL = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateRemoteUrl)('dav'); const url = new URL((0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_8__.getCurrentUserPrincipal)().principalUrl, rootURL); try { await navigator.clipboard.writeText(url); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showSuccess)(this.$t('calendar', 'CalDAV link copied to clipboard.')); } catch (error) { console.debug(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_4__.showError)(this.$t('calendar', 'CalDAV link could not be copied to clipboard.')); } }, /** * Show the keyboard shortcuts overview */ showKeyboardShortcuts() { this.displayKeyboardShortcuts = true; }, /** * Hide the keyboard shortcuts overview */ hideKeyboardShortcuts() { this.displayKeyboardShortcuts = false; }, /** * Toggles the keyboard shortcuts overview */ toggleKeyboardShortcuts() { this.displayKeyboardShortcuts = !this.displayKeyboardShortcuts; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/ImportScreen.vue?vue&type=script&lang=js": /*!********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/ImportScreen.vue?vue&type=script&lang=js ***! \********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _ImportScreenRow_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ImportScreenRow.vue */ "./src/components/AppNavigation/Settings/ImportScreenRow.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'ImportScreen', components: { NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton, ImportScreenRow: _ImportScreenRow_vue__WEBPACK_IMPORTED_MODULE_1__["default"], Modal: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcModal }, props: { files: { type: Array, required: true } }, computed: { headerRowKey() { return this._uid + '-header-row'; } }, methods: { importCalendar() { this.$emit('import-calendar'); }, cancelImport() { this.$emit('cancel-import'); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/ImportScreenRow.vue?vue&type=script&lang=js": /*!***********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/ImportScreenRow.vue?vue&type=script&lang=js ***! \***********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _Shared_CalendarPicker_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Shared/CalendarPicker.vue */ "./src/components/Shared/CalendarPicker.vue"); /* harmony import */ var _utils_color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../utils/color.js */ "./src/utils/color.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'ImportScreenRow', components: { CalendarPicker: _Shared_CalendarPicker_vue__WEBPACK_IMPORTED_MODULE_0__["default"] }, props: { file: { type: Object, required: true } }, computed: { calendar() { let calendarId = this.$store.state.importFiles.importCalendarRelation[this.file.id]; if (!calendarId) { this.setDefaultCalendarId(); calendarId = this.$store.state.importFiles.importCalendarRelation[this.file.id]; } if (calendarId === 'new') { return { id: 'new', displayName: this.$t('calendar', 'New calendar'), isSharedWithMe: false, color: (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_1__.uidToHexColor)(this.$t('calendar', 'New calendar')), owner: this.$store.getters.getCurrentUserPrincipal.url }; } return this.$store.getters.getCalendarById(calendarId); }, calendars() { // TODO: remove once the false positive is fixed upstream // eslint-disable-next-line vue/no-side-effects-in-computed-properties const calendars = this.$store.getters.sortedCalendarFilteredByComponents(this.file.parser.containsVEvents(), this.file.parser.containsVJournals(), this.file.parser.containsVTodos()); calendars.push({ id: 'new', displayName: this.$t('calendar', 'New calendar'), isSharedWithMe: false, color: (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_1__.uidToHexColor)(this.$t('calendar', 'New calendar')), owner: this.$store.getters.getCurrentUserPrincipal.url }); return calendars; } }, methods: { selectCalendar(newCalendar) { this.$store.commit('setCalendarForFileId', { fileId: this.file.id, calendarId: newCalendar.id }); }, setDefaultCalendarId() { this.$store.commit('setCalendarForFileId', { fileId: this.file.id, calendarId: this.calendars[0].id }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/SettingsAttachmentsFolder.vue?vue&type=script&lang=js": /*!*********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/SettingsAttachmentsFolder.vue?vue&type=script&lang=js ***! \*********************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue_dist_Components_NcInputField_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcInputField.js */ "./node_modules/@nextcloud/vue/dist/Components/NcInputField.mjs"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! debounce */ "./node_modules/debounce/index.js"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(debounce__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* eslint-disable-next-line n/no-missing-import */ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'SettingsAttachmentsFolder', components: { NcInputField: _nextcloud_vue_dist_Components_NcInputField_js__WEBPACK_IMPORTED_MODULE_0__["default"] }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_2__.mapState)({ attachmentsFolder: state => state.settings.attachmentsFolder || '/' }) }, methods: { async selectCalendarFolder() { const picker = (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_1__.getFilePickerBuilder)(t('calendar', 'Select the default location for attachments')).setMultiSelect(false).setModal(true).setType(1).addMimeTypeFilter('httpd/unix-directory').allowDirectories().build(); const path = await picker.pick(); this.saveAttachmentsFolder(path); }, debounceSaveAttachmentsFolder: debounce__WEBPACK_IMPORTED_MODULE_3___default()(function () { this.saveAttachmentsFolder(...arguments); }, 300), saveAttachmentsFolder(path) { if (typeof path !== 'string' || path.trim() === '' || !path.startsWith('/')) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_1__.showError)(t('calendar', 'Invalid location selected')); return; } if (path.includes('//')) { path = path.replace(/\/\//gi, '/'); } this.$store.dispatch('setAttachmentsFolder', { attachmentsFolder: path }).then(() => { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_1__.showSuccess)(this.$t('calendar', 'Attachments folder successfully saved.')); }).catch(error => { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_1__.showError)(this.$t('calendar', 'Error on saving attachments folder.')); }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/SettingsImportSection.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/SettingsImportSection.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /* harmony import */ var _ImportScreen_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ImportScreen.vue */ "./src/components/AppNavigation/Settings/ImportScreen.vue"); /* harmony import */ var _services_readFileAsTextService_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../services/readFileAsTextService.js */ "./src/services/readFileAsTextService.js"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var _models_consts_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../models/consts.js */ "./src/models/consts.js"); /* harmony import */ var vue_material_design_icons_Upload_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-material-design-icons/Upload.vue */ "./node_modules/vue-material-design-icons/Upload.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'SettingsImportSection', components: { ImportScreen: _ImportScreen_vue__WEBPACK_IMPORTED_MODULE_1__["default"], Upload: vue_material_design_icons_Upload_vue__WEBPACK_IMPORTED_MODULE_5__["default"] }, props: { isDisabled: { type: Boolean, required: true } }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_6__.mapState)({ files: state => state.importFiles.importFiles, stage: state => state.importState.stage, total: state => state.importState.total, accepted: state => state.importState.accepted, denied: state => state.importState.denied }), /** * Total amount of processed calendar-objects, either accepted or failed * * @return {number} */ imported() { return this.accepted + this.denied; }, /** * Whether or not to display the upload button * * @return {boolean} */ allowUploadOfFiles() { return this.stage === _models_consts_js__WEBPACK_IMPORTED_MODULE_4__.IMPORT_STAGE_DEFAULT; }, /** * Whether or not to display the import modal * * @return {boolean} */ showImportModal() { return this.stage === _models_consts_js__WEBPACK_IMPORTED_MODULE_4__.IMPORT_STAGE_AWAITING_USER_SELECT; }, /** * Whether or not to display progress bar * * @return {boolean} */ showProgressBar() { return this.stage === _models_consts_js__WEBPACK_IMPORTED_MODULE_4__.IMPORT_STAGE_IMPORTING; }, /** * Unique identifier for the input field. * Needed for the label * * @return {string} */ inputUid() { return this._uid + '-import-input'; }, /** * Get a list of supported file-types for the file-picker * * This list comes straight from calendar-js. * So in case we add new supported file-types there, * we don't have to change anything here * * @return {string[]} */ supportedFileTypes() { return (0,_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.getParserManager)().getAllSupportedFileTypes(); }, /** * Whether or not the import button is disabled * * @return {boolean} */ disableImport() { return this.isDisabled || !this.allowUploadOfFiles; } }, methods: { /** * Process all files submitted from the user * * @param {Event} event The change-event of the input-field */ async processFiles(event) { this.$store.commit('changeStage', _models_consts_js__WEBPACK_IMPORTED_MODULE_4__.IMPORT_STAGE_PROCESSING); let addedFiles = false; for (const file of event.target.files) { const contents = await (0,_services_readFileAsTextService_js__WEBPACK_IMPORTED_MODULE_2__.readFileAsText)(file); const lastModified = file.lastModified; const name = file.name; const size = file.size; let type = file.type; // Developers are advised not to rely on the type as a sole validation scheme. // https://developer.mozilla.org/en-US/docs/Web/API/File/type if (!this.supportedFileTypes.includes(type)) { // Try to guess file type based on its extension. // If it's an xml file, our best guess is xCal: https://tools.ietf.org/html/rfc6321 // If it's a json file, our best guess is jCal: https://tools.ietf.org/html/rfc7265 // In every other case, our best guess is just plain old iCalendar: https://tools.ietf.org/html/rfc5545 if (name.endsWith('.xml')) { type = 'application/calendar+xml'; } else if (name.endsWith('.json')) { type = 'application/calendar+json'; } else if (name.endsWith('.csv')) { type = 'text/csv'; } else { type = 'text/calendar'; } } // Use custom-options for parser. // The last one in particular will prevent thousands // of invitation emails to be sent out on import const parser = (0,_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.getParserManager)().getParserForFileType(type, { extractGlobalProperties: true, includeTimezones: true, removeRSVPForAttendees: true }); try { parser.parse(contents); } catch (error) { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showError)(this.$t('calendar', '{filename} could not be parsed', { filename: name })); continue; } this.$store.commit('addFile', { contents, lastModified, name, size, type, parser }); addedFiles = true; } if (!addedFiles) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showError)(this.$t('calendar', 'No valid files found, aborting import')); this.$store.commit('removeAllFiles'); this.$store.commit('resetState'); return; } this.$store.commit('changeStage', _models_consts_js__WEBPACK_IMPORTED_MODULE_4__.IMPORT_STAGE_AWAITING_USER_SELECT); }, /** * Import all events into the calendars * This will show */ async importCalendar() { await this.$store.dispatch('importEventsIntoCalendar'); if (this.total === this.accepted) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showSuccess)(this.$n('calendar', 'Successfully imported %n event', 'Successfully imported %n events', this.total)); } else { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showWarning)(this.$t('calendar', 'Import partially failed. Imported {accepted} out of {total}.', { accepted: this.accepted, total: this.total })); } this.$store.commit('removeAllFiles'); this.$store.commit('resetState'); // Once we are done importing, reload the calendar view this.$store.commit('incrementModificationCount'); this.resetInput(); }, /** * Resets the import sate */ cancelImport() { this.$store.commit('removeAllFiles'); this.$store.commit('resetState'); this.resetInput(); }, /** * Manually reset the file-input, because when you try to upload * the exact same files again, it won't trigger the change event */ resetInput() { this.$refs.importInput.value = ''; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/SettingsTimezoneSelect.vue?vue&type=script&lang=js": /*!******************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/SettingsTimezoneSelect.vue?vue&type=script&lang=js ***! \******************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _services_timezoneDetectionService_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../services/timezoneDetectionService.js */ "./src/services/timezoneDetectionService.js"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'SettingsTimezoneSelect', components: { TimezonePicker: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcTimezonePicker }, props: { isDisabled: { type: Boolean, required: true } }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_3__.mapState)({ timezone: state => state.settings.timezone || 'automatic' }), /** * Offer "Automatic" as an additional timezone * * @return {object[]} */ additionalTimezones() { return [{ continent: this.$t('calendar', 'Automatic'), timezoneId: 'automatic', label: this.$t('calendar', 'Automatic ({detected})', { detected: (0,_services_timezoneDetectionService_js__WEBPACK_IMPORTED_MODULE_1__.detectTimezone)() }) }]; } }, methods: { /** * Updates the timezone set by the user * * @param {string} timezoneId New timezoneId to save */ setTimezoneValue(timezoneId) { this.$store.dispatch('setTimezone', { timezoneId }).catch(error => { console.error(error); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showInfo)(this.$t('calendar', 'New setting was not saved successfully.')); }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/ShortcutOverview.vue?vue&type=script&lang=js": /*!************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/ShortcutOverview.vue?vue&type=script&lang=js ***! \************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ components: { Modal: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcModal }, computed: { shortcuts() { return [{ categoryId: 'navigation', categoryLabel: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Navigation'), shortcuts: [{ keys: [['p'], ['k']], label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Previous period') }, { keys: [['n'], ['j']], label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Next period') }, { keys: [['t']], label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Today') }] }, { categoryId: 'views', categoryLabel: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Views'), shortcuts: [{ keys: [['1'], ['d']], label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Day view') }, { keys: [['2'], ['w']], label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Week view') }, { keys: [['3'], ['m']], label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Month view') }, { keys: [['4'], ['y']], label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Year view') }, { keys: [['5'], ['l']], label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'List view') }] }, { categoryId: 'actions', categoryLabel: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Actions'), shortcuts: [{ keys: [['c']], label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Create event') }, { keys: [['h']], label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Show shortcuts') }] }, { categoryId: 'editor', categoryLabel: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Editor'), shortcuts: [{ keys: [['Escape']], label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Close editor') }, { keys: [['Ctrl+Enter']], label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Save edited event') }, { keys: [['Ctrl+Delete']], label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Delete edited event') }, { keys: [['Ctrl+d']], label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Duplicate event') }] }]; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal.vue?vue&type=script&lang=js": /*!*******************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal.vue?vue&type=script&lang=js ***! \*******************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_calendar_availability_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/calendar-availability-vue */ "./node_modules/@nextcloud/calendar-availability-vue/dist/index.mjs"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _AppointmentConfigModal_TextInput_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AppointmentConfigModal/TextInput.vue */ "./src/components/AppointmentConfigModal/TextInput.vue"); /* harmony import */ var _AppointmentConfigModal_TextArea_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AppointmentConfigModal/TextArea.vue */ "./src/components/AppointmentConfigModal/TextArea.vue"); /* harmony import */ var _models_appointmentConfig_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../models/appointmentConfig.js */ "./src/models/appointmentConfig.js"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var pinia__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! pinia */ "./node_modules/pinia/dist/pinia.mjs"); /* harmony import */ var _Shared_CalendarPicker_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Shared/CalendarPicker.vue */ "./src/components/Shared/CalendarPicker.vue"); /* harmony import */ var _AppointmentConfigModal_DurationInput_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./AppointmentConfigModal/DurationInput.vue */ "./src/components/AppointmentConfigModal/DurationInput.vue"); /* harmony import */ var _AppointmentConfigModal_NumberInput_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./AppointmentConfigModal/NumberInput.vue */ "./src/components/AppointmentConfigModal/NumberInput.vue"); /* harmony import */ var _AppointmentConfigModal_DurationSelect_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./AppointmentConfigModal/DurationSelect.vue */ "./src/components/AppointmentConfigModal/DurationSelect.vue"); /* harmony import */ var _AppointmentConfigModal_CheckedDurationSelect_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./AppointmentConfigModal/CheckedDurationSelect.vue */ "./src/components/AppointmentConfigModal/CheckedDurationSelect.vue"); /* harmony import */ var _AppointmentConfigModal_VisibilitySelect_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./AppointmentConfigModal/VisibilitySelect.vue */ "./src/components/AppointmentConfigModal/VisibilitySelect.vue"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _AppointmentConfigModal_Confirmation_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./AppointmentConfigModal/Confirmation.vue */ "./src/components/AppointmentConfigModal/Confirmation.vue"); /* harmony import */ var _store_appointmentConfigs_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../store/appointmentConfigs.js */ "./src/store/appointmentConfigs.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'AppointmentConfigModal', components: { CalendarAvailability: _nextcloud_calendar_availability_vue__WEBPACK_IMPORTED_MODULE_0__.CalendarAvailability, CheckedDurationSelect: _AppointmentConfigModal_CheckedDurationSelect_vue__WEBPACK_IMPORTED_MODULE_9__["default"], CalendarPicker: _Shared_CalendarPicker_vue__WEBPACK_IMPORTED_MODULE_5__["default"], DurationInput: _AppointmentConfigModal_DurationInput_vue__WEBPACK_IMPORTED_MODULE_6__["default"], Modal: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcModal, NumberInput: _AppointmentConfigModal_NumberInput_vue__WEBPACK_IMPORTED_MODULE_7__["default"], TextInput: _AppointmentConfigModal_TextInput_vue__WEBPACK_IMPORTED_MODULE_2__["default"], TextArea: _AppointmentConfigModal_TextArea_vue__WEBPACK_IMPORTED_MODULE_3__["default"], DurationSelect: _AppointmentConfigModal_DurationSelect_vue__WEBPACK_IMPORTED_MODULE_8__["default"], VisibilitySelect: _AppointmentConfigModal_VisibilitySelect_vue__WEBPACK_IMPORTED_MODULE_10__["default"], Confirmation: _AppointmentConfigModal_Confirmation_vue__WEBPACK_IMPORTED_MODULE_12__["default"], NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcButton, NcCheckboxRadioSwitch: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcCheckboxRadioSwitch, NcNoteCard: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcNoteCard }, props: { config: { type: _models_appointmentConfig_js__WEBPACK_IMPORTED_MODULE_4__["default"], required: true }, isNew: { type: Boolean, required: true } }, data() { return { isLoading: false, editing: undefined, enablePreparationDuration: false, enableFollowupDuration: false, enableFutureLimit: false, rateLimitingReached: false, showConfirmation: false }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_14__.mapGetters)(['ownSortedCalendars', 'isTalkEnabled']), ...(0,pinia__WEBPACK_IMPORTED_MODULE_15__.mapStores)(_store_appointmentConfigs_js__WEBPACK_IMPORTED_MODULE_13__["default"]), formTitle() { if (this.isNew) { return this.$t('calendar', 'Create appointment'); } return this.$t('calendar', 'Edit appointment'); }, saveButtonText() { if (this.isNew) { return this.$t('calendar', 'Save'); } return this.$t('calendar', 'Update'); }, calendar() { if (!this.editing.targetCalendarUri) { return this.ownSortedCalendars[0]; } const uri = this.editing.targetCalendarUri; const calendar = this.ownSortedCalendars.find(cal => this.calendarUrlToUri(cal.url) === uri); return calendar || this.ownSortedCalendars[0]; }, selectableConflictCalendars() { // The target calendar is always a conflict calendar, remove it from additional conflict calendars return this.ownSortedCalendars.filter(calendar => calendar.url !== this.calendar.url); }, conflictCalendars() { var _this$editing$calenda; const freebusyUris = (_this$editing$calenda = this.editing.calendarFreeBusyUris) !== null && _this$editing$calenda !== void 0 ? _this$editing$calenda : []; return freebusyUris.map(uri => { return this.ownSortedCalendars.find(cal => this.calendarUrlToUri(cal.url) === uri); }); }, defaultConfig() { return _models_appointmentConfig_js__WEBPACK_IMPORTED_MODULE_4__["default"].createDefault(this.calendarUrlToUri(this.$store.getters.ownSortedCalendars[0].url), this.$store.getters.scheduleInbox, this.$store.getters.getResolvedTimezone); } }, watch: { config() { this.reset(); } }, created() { this.reset(); }, methods: { reset() { this.editing = this.config.clone(); this.enablePreparationDuration = !!this.editing.preparationDuration; this.enableFollowupDuration = !!this.editing.followupDuration; this.enableFutureLimit = !!this.editing.futureLimit; this.showConfirmation = false; // Disable Talk integration if Talk is no longer available if (!this.isTalkEnabled) { this.editing.createTalkRoom = false; } }, calendarUrlToUri(url) { // Trim trailing slash and split into URL parts const parts = url.replace(/\/$/, '').split('/'); // The last one is the URI return parts[parts.length - 1]; }, changeCalendar(calendar) { this.editing.targetCalendarUri = this.calendarUrlToUri(calendar.url); this.editing.calendarFreeBusyUris = this.editing.calendarFreeBusyUris.filter(uri => uri !== this.calendarUrlToUri(calendar.url)); }, addConflictCalender(calendar) { this.editing.calendarFreeBusyUris.push(this.calendarUrlToUri(calendar.url)); }, removeConflictCalendar(calendar) { this.editing.calendarFreeBusyUris = this.editing.calendarFreeBusyUris.filter(uri => uri !== this.calendarUrlToUri(calendar.url)); }, async save() { var _this$editing, _this$editing$targetC; this.isLoading = true; this.rateLimitingReached = false; if (!this.enablePreparationDuration) { this.editing.preparationDuration = this.defaultConfig.preparationDuration; } if (!this.enableFollowupDuration) { this.editing.followupDuration = this.defaultConfig.followupDuration; } if (!this.enableFutureLimit) { this.editing.futureLimit = null; } (_this$editing$targetC = (_this$editing = this.editing).targetCalendarUri) !== null && _this$editing$targetC !== void 0 ? _this$editing$targetC : _this$editing.targetCalendarUri = this.defaultConfig.targetCalendarUri; const config = this.editing; try { if (this.isNew) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_11__["default"].info('Creating new config', { config }); this.editing = await this.appointmentConfigStore.createConfig({ config }); } else { _utils_logger_js__WEBPACK_IMPORTED_MODULE_11__["default"].info('Saving config', { config }); this.editing = await this.appointmentConfigStore.updateConfig({ config }); } this.showConfirmation = true; } catch (error) { var _error$response; if ((error === null || error === void 0 || (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) === 429) { this.rateLimitingReached = true; } _utils_logger_js__WEBPACK_IMPORTED_MODULE_11__["default"].error('Failed to save config', { error, config, isNew: this.isNew }); } finally { this.isLoading = false; } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/CheckedDurationSelect.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/CheckedDurationSelect.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _DurationSelect_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./DurationSelect.vue */ "./src/components/AppointmentConfigModal/DurationSelect.vue"); /* harmony import */ var _utils_randomId_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/randomId.js */ "./src/utils/randomId.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'CheckedDurationSelect', components: { DurationSelect: _DurationSelect_vue__WEBPACK_IMPORTED_MODULE_0__["default"] }, props: { label: { type: String, required: true }, value: { type: Number, default: 0 }, defaultValue: { type: Number, default: 0 }, enabled: { type: Boolean, required: true }, min: { type: Number, default: 0 }, max: { type: [Number, null, undefined], default: 60 * 60 } }, data() { return { id: (0,_utils_randomId_js__WEBPACK_IMPORTED_MODULE_1__.randomId)() }; }, computed: { valueOrDefault() { var _this$value; return (_this$value = this.value) !== null && _this$value !== void 0 ? _this$value : this.defaultValue; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/Confirmation.vue?vue&type=script&lang=js": /*!********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/Confirmation.vue?vue&type=script&lang=js ***! \********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_Check_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-material-design-icons/Check.vue */ "./node_modules/vue-material-design-icons/Check.vue"); /* harmony import */ var _models_appointmentConfig_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../models/appointmentConfig.js */ "./src/models/appointmentConfig.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'Confirmation', components: { NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton, EmptyContent: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcEmptyContent, CheckIcon: vue_material_design_icons_Check_vue__WEBPACK_IMPORTED_MODULE_1__["default"] }, props: { config: { type: _models_appointmentConfig_js__WEBPACK_IMPORTED_MODULE_2__["default"], required: true }, isNew: { type: Boolean, required: true } }, computed: { title() { if (this.isNew) { return this.$t('calendar', 'Appointment was created successfully'); } return this.$t('calendar', 'Appointment was updated successfully'); }, showCopyLinkButton() { return navigator && navigator.clipboard; } }, methods: { copyLink() { navigator.clipboard.writeText(this.config.bookingUrl); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/DurationInput.vue?vue&type=script&lang=js": /*!*********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/DurationInput.vue?vue&type=script&lang=js ***! \*********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _utils_randomId_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/randomId.js */ "./src/utils/randomId.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'DurationInput', props: { label: { type: String, required: true }, value: { type: Number, default: 0 } }, data() { return { id: (0,_utils_randomId_js__WEBPACK_IMPORTED_MODULE_0__.randomId)(), internalValue: '' }; }, computed: { valueInMinutes() { // Convert value prop from seconds to minutes return Math.round(this.value / 60); }, valueWithUnit() { return this.$n('calendar', '{duration} minute', '{duration} minutes', this.valueInMinutes, { duration: this.valueInMinutes }); }, parsedInternalValue() { const matches = this.internalValue.match(/[0-9]+/); if (!matches) { return 0; } const minutes = parseInt(matches[0]); return isNaN(minutes) ? 0 : minutes; } }, watch: { value(newVal) { // Only apply new value if it really changed compared to the internal state if (this.parsedInternalValue * 60 !== newVal) { this.updateInternalValue(); } } }, mounted() { this.updateInternalValue(); }, methods: { change() { // Emit value in seconds this.$emit('update:value', this.parsedInternalValue * 60); }, focus() { // Remove minutes prefix upon focus this.internalValue = this.valueInMinutes.toString(); }, updateInternalValue() { this.internalValue = this.valueWithUnit; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/DurationSelect.vue?vue&type=script&lang=js": /*!**********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/DurationSelect.vue?vue&type=script&lang=js ***! \**********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _SelectWrapper_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SelectWrapper.vue */ "./src/components/AppointmentConfigModal/SelectWrapper.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'DurationSelect', components: { SelectWrapper: _SelectWrapper_vue__WEBPACK_IMPORTED_MODULE_0__["default"] }, props: { label: { type: String, default: '' }, value: { type: Number, default: 5 * 60 }, disabled: { type: Boolean, default: false }, allowZero: { type: Boolean, default: false }, min: { type: Number, default: 0 }, max: { type: [Number, null, undefined], default: 60 * 60 } }, computed: { options() { let options = []; if (this.allowZero) { options.push({ value: 0, label: this.t('calendar', '0 minutes') }); } options.push(...[ // Minutes ...[5, 10, 15, 30, 45].map(duration => { const label = this.n('calendar', '{duration} minute', '{duration} minutes', duration, { duration }); return { value: duration * 60, label }; }), // Hours ...[1, 2, 6].map(duration => { const label = this.n('calendar', '{duration} hour', '{duration} hours', duration, { duration }); return { value: duration * 60 * 60, label }; }), // Days ...[1, 2].map(duration => { const label = this.n('calendar', '{duration} day', '{duration} days', duration, { duration }); return { value: duration * 60 * 60 * 24, label }; }), // Weeks ...[1, 2, 4, 6].map(duration => { const label = this.n('calendar', '{duration} week', '{duration} weeks', duration, { duration }); return { value: duration * 60 * 60 * 24 * 7, label }; }), // Months ...[1, 2, 3, 6, 9].map(duration => { const label = this.n('calendar', '{duration} month', '{duration} months', duration, { duration }); return { value: duration * 60 * 60 * 24 * 30, label }; }), // Years ...[1].map(duration => { const label = this.n('calendar', '{duration} year', '{duration} years', duration, { duration }); return { value: duration * 60 * 60 * 24 * 365, label }; })]); if (this.min) { options = options.filter(option => { return option.value >= this.min || this.allowZero && option.value === 0; }); } if (this.max) { options = options.filter(option => option.value <= this.max); } return options; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/NoEmailAddressWarning.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/NoEmailAddressWarning.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_AlertCircle_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-material-design-icons/AlertCircle.vue */ "./node_modules/vue-material-design-icons/AlertCircle.vue"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'NoEmailAddressWarning', components: { AppNavigationItem: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAppNavigationItem, AlertCircleIcon: vue_material_design_icons_AlertCircle_vue__WEBPACK_IMPORTED_MODULE_1__["default"] }, computed: { title() { return this.t('calendar', 'To configure appointments, add your email address in personal settings.'); } }, methods: { openUserSettings() { const url = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateUrl)('settings/user'); window.open(url, '_blank').focus(); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/NumberInput.vue?vue&type=script&lang=js": /*!*******************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/NumberInput.vue?vue&type=script&lang=js ***! \*******************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _utils_randomId_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/randomId.js */ "./src/utils/randomId.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'NumberInput', props: { label: { type: String, required: true }, value: { type: Number, default: undefined }, allowEmpty: { type: Boolean, default: false } }, data() { return { id: (0,_utils_randomId_js__WEBPACK_IMPORTED_MODULE_0__.randomId)() }; }, computed: { realValue() { var _this$value; if (this.allowEmpty) { return this.value; } return (_this$value = this.value) !== null && _this$value !== void 0 ? _this$value : 0; } }, methods: { change(e) { this.$emit('update:value', parseInt(e.target.value)); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/SelectWrapper.vue?vue&type=script&lang=js": /*!*********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/SelectWrapper.vue?vue&type=script&lang=js ***! \*********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _utils_randomId_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/randomId.js */ "./src/utils/randomId.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'SelectWrapper', props: { label: { type: String, default: '' }, value: { type: [String, Number], required: true }, disabled: { type: Boolean, default: false }, options: { type: Array, required: true } }, data() { return { id: (0,_utils_randomId_js__WEBPACK_IMPORTED_MODULE_0__.randomId)() }; }, methods: { onSelect(e) { this.$emit('update:value', e.target.value); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/TextArea.vue?vue&type=script&lang=js": /*!****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/TextArea.vue?vue&type=script&lang=js ***! \****************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _utils_randomId_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/randomId.js */ "./src/utils/randomId.js"); /* harmony import */ var _directives_autosize_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../directives/autosize.js */ "./src/directives/autosize.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'TextArea', directives: { autosize: _directives_autosize_js__WEBPACK_IMPORTED_MODULE_1__["default"] }, props: { label: { type: String, required: true }, value: { type: String, default: '' } }, data() { return { id: (0,_utils_randomId_js__WEBPACK_IMPORTED_MODULE_0__.randomId)() }; } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/TextInput.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/TextInput.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _utils_randomId_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/randomId.js */ "./src/utils/randomId.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'TextInput', props: { label: { type: String, required: true }, value: { type: String, default: '' }, disabled: { type: Boolean, default: false } }, data() { return { id: (0,_utils_randomId_js__WEBPACK_IMPORTED_MODULE_0__.randomId)() }; }, methods: { change(e) { this.$emit('update:value', e.target.value); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/VisibilitySelect.vue?vue&type=script&lang=js": /*!************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/VisibilitySelect.vue?vue&type=script&lang=js ***! \************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _SelectWrapper_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SelectWrapper.vue */ "./src/components/AppointmentConfigModal/SelectWrapper.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'VisibilitySelect', components: { SelectWrapper: _SelectWrapper_vue__WEBPACK_IMPORTED_MODULE_0__["default"] }, props: { label: { type: String, default: '' }, value: { type: String, default: 'PUBLIC' }, disabled: { type: Boolean, default: false } }, data() { return { options: [{ value: 'PUBLIC', label: this.t('calendar', 'Public – shown on the profile page') }, { value: 'PRIVATE', label: this.t('calendar', 'Private – only accessible via secret link') }] }; } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/CalendarGrid.vue?vue&type=script&lang=js": /*!*********************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/CalendarGrid.vue?vue&type=script&lang=js ***! \*********************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _fullcalendar_vue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @fullcalendar/vue */ "./node_modules/@fullcalendar/vue/dist/index.js"); /* harmony import */ var _fullcalendar_daygrid__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @fullcalendar/daygrid */ "./node_modules/@fullcalendar/daygrid/index.js"); /* harmony import */ var _fullcalendar_interaction__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @fullcalendar/interaction */ "./node_modules/@fullcalendar/interaction/index.js"); /* harmony import */ var _fullcalendar_list__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @fullcalendar/list */ "./node_modules/@fullcalendar/list/index.js"); /* harmony import */ var _fullcalendar_timegrid__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @fullcalendar/timegrid */ "./node_modules/@fullcalendar/timegrid/index.js"); /* harmony import */ var _fullcalendar_multimonth__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @fullcalendar/multimonth */ "./node_modules/@fullcalendar/multimonth/index.js"); /* harmony import */ var _fullcalendar_eventSources_eventSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../fullcalendar/eventSources/eventSource.js */ "./src/fullcalendar/eventSources/eventSource.js"); /* harmony import */ var _fullcalendar_interaction_eventAllow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../fullcalendar/interaction/eventAllow.js */ "./src/fullcalendar/interaction/eventAllow.js"); /* harmony import */ var _fullcalendar_interaction_eventClick_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../fullcalendar/interaction/eventClick.js */ "./src/fullcalendar/interaction/eventClick.js"); /* harmony import */ var _fullcalendar_interaction_eventDrop_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../fullcalendar/interaction/eventDrop.js */ "./src/fullcalendar/interaction/eventDrop.js"); /* harmony import */ var _fullcalendar_interaction_eventResize_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../fullcalendar/interaction/eventResize.js */ "./src/fullcalendar/interaction/eventResize.js"); /* harmony import */ var _fullcalendar_interaction_navLinkDayClick_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../fullcalendar/interaction/navLinkDayClick.js */ "./src/fullcalendar/interaction/navLinkDayClick.js"); /* harmony import */ var _fullcalendar_interaction_navLinkWeekClick_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../fullcalendar/interaction/navLinkWeekClick.js */ "./src/fullcalendar/interaction/navLinkWeekClick.js"); /* harmony import */ var _fullcalendar_interaction_select_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../fullcalendar/interaction/select.js */ "./src/fullcalendar/interaction/select.js"); /* harmony import */ var _fullcalendar_localization_dateFormattingConfig_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../fullcalendar/localization/dateFormattingConfig.js */ "./src/fullcalendar/localization/dateFormattingConfig.js"); /* harmony import */ var _fullcalendar_localization_localeProvider_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../fullcalendar/localization/localeProvider.js */ "./src/fullcalendar/localization/localeProvider.js"); /* harmony import */ var _fullcalendar_localization_momentPlugin_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../fullcalendar/localization/momentPlugin.js */ "./src/fullcalendar/localization/momentPlugin.js"); /* harmony import */ var _fullcalendar_rendering_dayHeaderDidMount_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../fullcalendar/rendering/dayHeaderDidMount.js */ "./src/fullcalendar/rendering/dayHeaderDidMount.js"); /* harmony import */ var _fullcalendar_rendering_eventDidMount_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../fullcalendar/rendering/eventDidMount.js */ "./src/fullcalendar/rendering/eventDidMount.js"); /* harmony import */ var _fullcalendar_rendering_eventOrder_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../fullcalendar/rendering/eventOrder.js */ "./src/fullcalendar/rendering/eventOrder.js"); /* harmony import */ var _fullcalendar_rendering_noEventsDidMount_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../fullcalendar/rendering/noEventsDidMount.js */ "./src/fullcalendar/rendering/noEventsDidMount.js"); /* harmony import */ var _fullcalendar_timezones_vtimezoneNamedTimezoneImpl_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../fullcalendar/timezones/vtimezoneNamedTimezoneImpl.js */ "./src/fullcalendar/timezones/vtimezoneNamedTimezoneImpl.js"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! debounce */ "./node_modules/debounce/index.js"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(debounce__WEBPACK_IMPORTED_MODULE_24__); /* harmony import */ var _utils_date_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../utils/date.js */ "./src/utils/date.js"); // Import FullCalendar itself // Import event sources // Import interaction handlers // Import localization plugins // Import rendering handlers // Import timezone plugins // Import other dependencies /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'CalendarGrid', components: { FullCalendar: _fullcalendar_vue__WEBPACK_IMPORTED_MODULE_17__["default"] }, props: { isWidget: { type: Boolean, default: false }, /** * Whether or not the user is authenticated */ isAuthenticatedUser: { type: Boolean, required: true }, isAdmin: { type: Boolean, default: true } }, data() { return { updateTodayJob: null, updateTodayJobPreviousDate: null }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_18__.mapGetters)({ timezoneId: 'getResolvedTimezone' }), ...(0,vuex__WEBPACK_IMPORTED_MODULE_18__.mapState)({ locale: state => state.settings.momentLocale, eventLimit: state => state.settings.eventLimit, skipPopover: state => state.settings.skipPopover, showWeekends: state => state.settings.showWeekends, showWeekNumbers: state => state.settings.showWeekNumbers, slotDuration: state => state.settings.slotDuration, showTasks: state => state.settings.showTasks, timezone: state => state.settings.timezone, modificationCount: state => state.calendarObjects.modificationCount }), options() { var _this$$route$params$f, _this$$route, _this$$route$params$v, _this$$route2, _this = this; let defaultView = 'dayGridMonth'; if (this.isAdmin === false) { defaultView = 'timeGridWeek'; } return { // Initialization: initialDate: (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_16__.getYYYYMMDDFromFirstdayParam)((_this$$route$params$f = (_this$$route = this.$route) === null || _this$$route === void 0 || (_this$$route = _this$$route.params) === null || _this$$route === void 0 ? void 0 : _this$$route.firstDay) !== null && _this$$route$params$f !== void 0 ? _this$$route$params$f : 'now'), initialView: (_this$$route$params$v = (_this$$route2 = this.$route) === null || _this$$route2 === void 0 ? void 0 : _this$$route2.params.view) !== null && _this$$route$params$v !== void 0 ? _this$$route$params$v : defaultView, // Data eventSources: this.eventSources, // Plugins plugins: this.plugins, // Interaction editable: this.isEditable, selectable: this.isAuthenticatedUser, eventAllow: _fullcalendar_interaction_eventAllow_js__WEBPACK_IMPORTED_MODULE_1__["default"], eventClick: (0,_fullcalendar_interaction_eventClick_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this.$store, this.$router, this.$route, window, this.isWidget, this.$refs), eventDrop: this.isWidget ? false : function () { return (0,_fullcalendar_interaction_eventDrop_js__WEBPACK_IMPORTED_MODULE_3__["default"])(_this.$store, _this.$refs.fullCalendar.getApi())(...arguments); }, eventResize: this.isWidget ? false : (0,_fullcalendar_interaction_eventResize_js__WEBPACK_IMPORTED_MODULE_4__["default"])(this.$store), navLinkDayClick: this.isWidget ? false : (0,_fullcalendar_interaction_navLinkDayClick_js__WEBPACK_IMPORTED_MODULE_5__["default"])(this.$router, this.$route), navLinkWeekClick: this.isWidget ? false : (0,_fullcalendar_interaction_navLinkWeekClick_js__WEBPACK_IMPORTED_MODULE_6__["default"])(this.$router, this.$route), select: this.isWidget ? false : (0,_fullcalendar_interaction_select_js__WEBPACK_IMPORTED_MODULE_7__["default"])(this.$store, this.$router, this.$route, window), navLinks: true, // Localization ...(0,_fullcalendar_localization_dateFormattingConfig_js__WEBPACK_IMPORTED_MODULE_8__.getDateFormattingConfig)(), ...(0,_fullcalendar_localization_localeProvider_js__WEBPACK_IMPORTED_MODULE_9__.getFullCalendarLocale)(), // Rendering dayHeaderDidMount: _fullcalendar_rendering_dayHeaderDidMount_js__WEBPACK_IMPORTED_MODULE_11__["default"], eventDidMount: info => { this.addAbsenceTypeEventClass(info); }, noEventsDidMount: _fullcalendar_rendering_noEventsDidMount_js__WEBPACK_IMPORTED_MODULE_14__["default"], eventOrder: ['start', '-duration', 'allDay', _fullcalendar_rendering_eventOrder_js__WEBPACK_IMPORTED_MODULE_13__["default"]], forceEventDuration: false, headerToolbar: false, height: '100%', slotDuration: this.slotDuration, expandRows: true, weekNumbers: this.showWeekNumbers, weekends: this.showWeekends, dayMaxEventRows: this.eventLimit, selectMirror: true, lazyFetching: false, nowIndicator: true, progressiveEventRendering: true, unselectAuto: false, // Timezones: timeZone: this.timezoneId, // Disable jumping in week view and day view when clicking on any event using the simple editor scrollTimeReset: false }; }, eventSources() { return this.$store.getters.enabledCalendars.map((0,_fullcalendar_eventSources_eventSource_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this.$store)); }, widgetView() { return this.$store.getters.widgetView; }, widgetDate() { return this.$store.getters.widgetDate; }, /** * FullCalendar Plugins * * @return {(PluginDef)[]} */ plugins() { return [(0,_fullcalendar_localization_momentPlugin_js__WEBPACK_IMPORTED_MODULE_10__["default"])(this.$store), _fullcalendar_timezones_vtimezoneNamedTimezoneImpl_js__WEBPACK_IMPORTED_MODULE_15__["default"], _fullcalendar_daygrid__WEBPACK_IMPORTED_MODULE_19__["default"], _fullcalendar_interaction__WEBPACK_IMPORTED_MODULE_20__["default"], _fullcalendar_list__WEBPACK_IMPORTED_MODULE_21__["default"], _fullcalendar_timegrid__WEBPACK_IMPORTED_MODULE_22__["default"], _fullcalendar_multimonth__WEBPACK_IMPORTED_MODULE_23__["default"]]; }, isEditable() { var _this$$route3, _this$$route4; console.log("this.isAuthenticatedUser" + this.isAuthenticatedUser); // We do not allow drag and drop when the editor is open. return this.isAuthenticatedUser && ((_this$$route3 = this.$route) === null || _this$$route3 === void 0 ? void 0 : _this$$route3.name) !== 'EditPopoverView' && ((_this$$route4 = this.$route) === null || _this$$route4 === void 0 ? void 0 : _this$$route4.name) !== 'EditSidebarView'; } }, watch: { widgetView(newView) { const calendarApi = this.$refs.fullCalendar.getApi(); calendarApi.changeView(newView); }, widgetDate(newDate) { const calendarApi = this.$refs.fullCalendar.getApi(); calendarApi.gotoDate((0,_utils_date_js__WEBPACK_IMPORTED_MODULE_16__.getYYYYMMDDFromFirstdayParam)(newDate)); }, modificationCount: debounce__WEBPACK_IMPORTED_MODULE_24___default()(function () { const calendarApi = this.$refs.fullCalendar.getApi(); calendarApi.refetchEvents(); }, 50) }, /** * FullCalendar 5 is using calculated px values for the width * of its views. * Hence a simple `width: 100%` won't assure that the calendar-grid * is always using the full available width. * * Toggling the AppNavigation or AppSidebar will change the amount * of available space, but it will not be covered by the window * resize event, because the actual window size did not change. * * To make sure, that the calendar-grid is always using all space, * we have to register a resize-observer here, that will automatically * update the fullCalendar size, when the available space changes. */ mounted() { if (window.ResizeObserver) { const resizeObserver = new ResizeObserver(debounce__WEBPACK_IMPORTED_MODULE_24___default()(() => { this.$refs.fullCalendar.getApi().updateSize(); }, 100)); resizeObserver.observe(this.$refs.fullCalendar.$el); } }, async created() { this.updateTodayJob = setInterval(() => { const newDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_16__.getYYYYMMDDFromFirstdayParam)('now'); if (this.updateTodayJobPreviousDate === null) { this.updateTodayJobPreviousDate = newDate; return; } if (this.updateTodayJobPreviousDate !== newDate) { this.updateTodayJobPreviousDate = newDate; const calendarApi = this.$refs.fullCalendar.getApi(); calendarApi.render(); } }, 1000); /** * This view is not used as a router view, * hence we can't use beforeRouteUpdate directly. */ if (!this.isWidget) { this.$router.beforeEach((to, from, next) => { if (to.params.firstDay !== from.params.firstDay) { const calendarApi = this.$refs.fullCalendar.getApi(); calendarApi.gotoDate((0,_utils_date_js__WEBPACK_IMPORTED_MODULE_16__.getYYYYMMDDFromFirstdayParam)(to.params.firstDay)); } if (to.params.view !== from.params.view) { const calendarApi = this.$refs.fullCalendar.getApi(); calendarApi.changeView(to.params.view); this.saveNewView(to.params.view); } if ((from.name === 'NewPopoverView' || from.name === 'NewSidebarView') && to.name !== 'NewPopoverView' && to.name !== 'NewSidebarView') { const calendarApi = this.$refs.fullCalendar.getApi(); calendarApi.unselect(); } next(); }); // Trigger the select event programmatically on initial page load to show the new event // in the grid. Wait for the next tick because the ref isn't available right away. await this.$nextTick(); if (['NewPopoverView', 'NewSidebarView'].includes(this.$route.name)) { const start = new Date(parseInt(this.$route.params.dtstart) * 1000); const end = new Date(parseInt(this.$route.params.dtend) * 1000); if (!isNaN(start.getTime()) && !isNaN(end.getTime())) { const calendarApi = this.$refs.fullCalendar.getApi(); calendarApi.select({ start, end, allDay: this.$route.params.allDay === '1' }); } } } }, methods: { /** * When a user changes the view, remember it and * use it the next time they open the calendar app */ saveNewView: debounce__WEBPACK_IMPORTED_MODULE_24___default()(function (initialView) { if (this.isAuthenticatedUser) { this.$store.dispatch('setInitialView', { initialView }); } }, 5000), addAbsenceTypeEventClass(info) { if (info.event.extendedProps.absenceTypeIsLeave) { info.el.style.backgroundColor = info.event.backgroundColor; info.el.style.color = info.event.textColor; } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmList.vue?vue&type=script&lang=js": /*!*******************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmList.vue?vue&type=script&lang=js ***! \*******************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _AlarmListNew_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AlarmListNew.vue */ "./src/components/Editor/Alarm/AlarmListNew.vue"); /* harmony import */ var _AlarmListItem_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AlarmListItem.vue */ "./src/components/Editor/Alarm/AlarmListItem.vue"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'AlarmList', components: { AlarmListItem: _AlarmListItem_vue__WEBPACK_IMPORTED_MODULE_1__["default"], AlarmListNew: _AlarmListNew_vue__WEBPACK_IMPORTED_MODULE_0__["default"] }, props: { isReadOnly: { type: Boolean, required: true }, calendarObjectInstance: { type: Object, required: true } }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_2__.mapState)({ forceEventAlarmType: state => state.settings.forceEventAlarmType }), alarms() { return this.calendarObjectInstance.alarms; } }, methods: { /** * Adds another of the default alarms to the event * * @param {number} totalSeconds Amount of seconds for the alarm */ addAlarm(totalSeconds) { this.$store.commit('addAlarmToCalendarObjectInstance', { calendarObjectInstance: this.calendarObjectInstance, type: this.forceEventAlarmType || 'DISPLAY', totalSeconds }); }, /** * Removes an alarm from this event * * @param {object} alarm The alarm object */ removeAlarm(alarm) { this.$store.commit('removeAlarmFromCalendarObjectInstance', { calendarObjectInstance: this.calendarObjectInstance, alarm }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmListItem.vue?vue&type=script&lang=js": /*!***********************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmListItem.vue?vue&type=script&lang=js ***! \***********************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var vue_click_outside__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-click-outside */ "./node_modules/vue-click-outside/index.js"); /* harmony import */ var vue_click_outside__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue_click_outside__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _filters_alarmFormat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../filters/alarmFormat.js */ "./src/filters/alarmFormat.js"); /* harmony import */ var _AlarmTimeUnitSelect_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AlarmTimeUnitSelect.vue */ "./src/components/Editor/Alarm/AlarmTimeUnitSelect.vue"); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /* harmony import */ var _Shared_TimePicker_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../Shared/TimePicker.vue */ "./src/components/Shared/TimePicker.vue"); /* harmony import */ var _Shared_DatePicker_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../Shared/DatePicker.vue */ "./src/components/Shared/DatePicker.vue"); /* harmony import */ var vue_material_design_icons_Bell_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue-material-design-icons/Bell.vue */ "./node_modules/vue-material-design-icons/Bell.vue"); /* harmony import */ var vue_material_design_icons_Check_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! vue-material-design-icons/Check.vue */ "./node_modules/vue-material-design-icons/Check.vue"); /* harmony import */ var vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! vue-material-design-icons/Delete.vue */ "./node_modules/vue-material-design-icons/Delete.vue"); /* harmony import */ var vue_material_design_icons_Pencil_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! vue-material-design-icons/Pencil.vue */ "./node_modules/vue-material-design-icons/Pencil.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'AlarmListItem', components: { DatePicker: _Shared_DatePicker_vue__WEBPACK_IMPORTED_MODULE_6__["default"], TimePicker: _Shared_TimePicker_vue__WEBPACK_IMPORTED_MODULE_5__["default"], AlarmTimeUnitSelect: _AlarmTimeUnitSelect_vue__WEBPACK_IMPORTED_MODULE_3__["default"], Actions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActions, ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, ActionRadio: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionRadio, ActionSeparator: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionSeparator, Bell: vue_material_design_icons_Bell_vue__WEBPACK_IMPORTED_MODULE_7__["default"], Check: vue_material_design_icons_Check_vue__WEBPACK_IMPORTED_MODULE_8__["default"], Delete: vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_9__["default"], Pencil: vue_material_design_icons_Pencil_vue__WEBPACK_IMPORTED_MODULE_10__["default"] }, directives: { ClickOutside: (vue_click_outside__WEBPACK_IMPORTED_MODULE_1___default()) }, filters: { formatAlarm: _filters_alarmFormat_js__WEBPACK_IMPORTED_MODULE_2__["default"] }, props: { alarm: { type: Object, required: true }, calendarObjectInstance: { type: Object, required: true }, isReadOnly: { type: Boolean, required: true }, showIcon: { type: Boolean, required: true } }, data() { return { isEditing: false, showMenu: false }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_11__.mapState)({ locale: state => state.settings.momentLocale, forceEventAlarmType: state => state.settings.forceEventAlarmType }), canEdit() { // You can always edit an alarm if it's absolute if (!this.isRelative) { return true; } // We don't allow editing when the alarm is // related to the event's end if (!this.alarm.relativeIsRelatedToStart) { return false; } // We don't allow editing when this event is timed // and the trigger time is positive if (!this.isAllDay && this.alarm.relativeTrigger > 0) { return false; } // We don't allow editing when this event is all-day // and the trigger time is bigger than one day if (this.isAllDay && this.alarm.relativeTrigger > 86400) { return false; } return true; }, /** * Changing the alarm type is allowed if the alarm type does * not match the forceEventAlarmType (yet). * * If no alarm type is forced (forceEventAlarmType === false), * this will return true as well. */ canChangeAlarmType() { return this.alarm.type !== this.forceEventAlarmType; }, alarmTypeName() { return this._uid + '-radio-type-name'; }, alarmTriggerName() { return this._uid + '-radio-trigger-name'; }, isAlarmTypeDisplay() { return this.alarm.type === 'DISPLAY'; }, isAlarmTypeEmail() { return this.alarm.type === 'EMAIL'; }, isAlarmTypeAudio() { return this.alarm.type === 'AUDIO'; }, isAlarmTypeOther() { return !['AUDIO', 'DISPLAY', 'EMAIL'].includes(this.alarm.type); }, isRelativeAlarm() { return this.alarm.relativeTrigger !== null; }, isAbsoluteAlarm() { return !this.isRelativeAlarm; }, currentUserTimezone() { return this.$store.getters.getResolvedTimezone; }, isAllDay() { return this.calendarObjectInstance.isAllDay; }, isRecurring() { return this.calendarObjectInstance.recurrenceRule.frequency !== 'NONE'; }, relativeAllDayDate() { const date = new Date(); date.setHours(this.alarm.relativeHoursAllDay); date.setMinutes(this.alarm.relativeMinutesAllDay); return date; }, timeFormat() { return _nextcloud_moment__WEBPACK_IMPORTED_MODULE_4__["default"].localeData().longDateFormat('LT'); }, absoluteDateFormat() { return ['[', this.$t('calendar', 'on'), '] ', _nextcloud_moment__WEBPACK_IMPORTED_MODULE_4__["default"].localeData().longDateFormat('L'), ' [', this.$t('calendar', 'at'), '] ', _nextcloud_moment__WEBPACK_IMPORTED_MODULE_4__["default"].localeData().longDateFormat('LT')].join(''); } }, methods: { /** * This method enables the editing mode */ toggleEditAlarm() { this.isEditing = !this.isEditing; // Hide menu when starting to edit if (this.isEditing) { this.showMenu = false; } }, /** * This method closes the editing mode again */ closeAlarmEditor() { this.showMenu = false; }, /** * Changes the type of the reminder * * @param {string} type The new type of the notification */ changeType(type) { this.$store.commit('changeAlarmType', { calendarObjectInstance: this.calendarObjectInstance, alarm: this.alarm, type }); }, /** * Switches from absolute to relative alarm */ switchToRelativeAlarm() { if (this.isRelativeAlarm) { return; } this.$store.dispatch('changeAlarmFromAbsoluteToRelative', { calendarObjectInstance: this.calendarObjectInstance, alarm: this.alarm }); }, /** * Switches from relative to absolute alarm */ switchToAbsoluteAlarm() { if (this.isAbsoluteAlarm) { return; } this.$store.dispatch('changeAlarmFromRelativeToAbsolute', { calendarObjectInstance: this.calendarObjectInstance, alarm: this.alarm }); }, /** * This method emits the removeAlarm event */ removeAlarm() { this.$emit('remove-alarm', this.alarm); }, /** * changes the relative amount entered in timed mode * * @param {Event} event The Input-event triggered when modifying the input */ changeRelativeAmountTimed(event) { const minimumValue = parseInt(event.target.min, 10); const maximumValue = parseInt(event.target.max, 10); const selectedValue = parseInt(event.target.value, 10); if (selectedValue >= minimumValue && selectedValue <= maximumValue) { this.$store.dispatch('changeAlarmAmountTimed', { calendarObjectInstance: this.calendarObjectInstance, alarm: this.alarm, amount: selectedValue }); } }, /** * changes the relative unit entered in timed mode * * @param {string} unit The new unit */ changeRelativeUnitTimed(unit) { this.$store.dispatch('changeAlarmUnitTimed', { calendarObjectInstance: this.calendarObjectInstance, alarm: this.alarm, unit }); }, /** * changes the relative amount entered in all-day * * @param {Event} event The Input-event triggered when modifying the input */ changeRelativeAmountAllDay(event) { const minimumValue = parseInt(event.target.min, 10); const maximumValue = parseInt(event.target.max, 10); const selectedValue = parseInt(event.target.value, 10); if (selectedValue >= minimumValue && selectedValue <= maximumValue) { this.$store.dispatch('changeAlarmAmountAllDay', { calendarObjectInstance: this.calendarObjectInstance, alarm: this.alarm, amount: selectedValue }); } }, /** * changes the relative unit entered in all-day mode * * @param {string} unit The new unit */ changeRelativeUnitAllDay(unit) { this.$store.dispatch('changeAlarmUnitAllDay', { calendarObjectInstance: this.calendarObjectInstance, alarm: this.alarm, unit }); }, /** * Changes the time entered in all-day mode * * @param {Date} date The new date object containing hours and minutes */ changeRelativeHourMinuteAllDay(date) { const hours = date.getHours(); const minutes = date.getMinutes(); this.$store.dispatch('changeAlarmHoursMinutesAllDay', { calendarObjectInstance: this.calendarObjectInstance, alarm: this.alarm, hours, minutes }); }, /** * Changes the date of the absolute alarm * * @param {Date} date The new date of the alarm */ changeAbsoluteDate(date) { this.$store.commit('changeAlarmAbsoluteDate', { calendarObjectInstance: this.calendarObjectInstance, alarm: this.alarm, date }); }, /** * Changes the time zone of the absolute alarm * * @param {string} timezoneId The new time zone id of the alarm */ changeAbsoluteTimezoneId(timezoneId) { this.$store.commit('changeAlarmAbsoluteTimezoneId', { calendarObjectInstance: this.calendarObjectInstance, alarm: this.alarm, timezoneId }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmListNew.vue?vue&type=script&lang=js": /*!**********************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmListNew.vue?vue&type=script&lang=js ***! \**********************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _defaults_defaultAlarmProvider_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../defaults/defaultAlarmProvider.js */ "./src/defaults/defaultAlarmProvider.js"); /* harmony import */ var _utils_alarms_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../utils/alarms.js */ "./src/utils/alarms.js"); /* harmony import */ var _filters_alarmFormat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../filters/alarmFormat.js */ "./src/filters/alarmFormat.js"); /* harmony import */ var _Properties_PropertySelect_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Properties/PropertySelect.vue */ "./src/components/Editor/Properties/PropertySelect.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'AlarmListNew', components: { PropertySelect: _Properties_PropertySelect_vue__WEBPACK_IMPORTED_MODULE_3__["default"] }, props: { isAllDay: { type: Boolean, required: true }, showIcon: { type: Boolean, required: true } }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_4__.mapState)({ locale: state => state.settings.momentLocale }), currentUserTimezone() { return this.$store.getters.getResolvedTimezone; }, options() { return (0,_defaults_defaultAlarmProvider_js__WEBPACK_IMPORTED_MODULE_0__.getDefaultAlarms)(this.isAllDay).map(defaultAlarm => { const alarmObject = this.getAlarmObjectFromTriggerTime(defaultAlarm); return { value: defaultAlarm, label: (0,_filters_alarmFormat_js__WEBPACK_IMPORTED_MODULE_2__["default"])(alarmObject, this.isAllDay, this.currentUserTimezone, this.locale) }; }); }, propModel() { return { options: this.options, icon: 'Bell', placeholder: this.$t('calendar', '+ Add reminder'), readableName: this.$t('calendar', 'Add reminder') }; } }, methods: { /** * This emits the add alarm event * * @param {object} value The alarm value */ addReminderFromSelect(value) { this.$emit('add-alarm', value); }, /** * * @param {number} time Total amount of seconds for the trigger * @return {object} The alarm object */ getAlarmObjectFromTriggerTime(time) { const timedData = (0,_utils_alarms_js__WEBPACK_IMPORTED_MODULE_1__.getAmountAndUnitForTimedEvents)(time); const allDayData = (0,_utils_alarms_js__WEBPACK_IMPORTED_MODULE_1__.getAmountHoursMinutesAndUnitForAllDayEvents)(time); return { isRelative: true, absoluteDate: null, absoluteTimezoneId: null, relativeIsBefore: time < 0, relativeIsRelatedToStart: true, relativeUnitTimed: timedData.unit, relativeAmountTimed: timedData.amount, relativeUnitAllDay: allDayData.unit, relativeAmountAllDay: allDayData.amount, relativeHoursAllDay: allDayData.hours, relativeMinutesAllDay: allDayData.minutes, relativeTrigger: time }; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmTimeUnitSelect.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmTimeUnitSelect.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'AlarmTimeUnitSelect', components: { NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcSelect }, props: { unit: { type: String, required: true }, isAllDay: { type: Boolean, required: true }, count: { type: Number, required: true }, disabled: { type: Boolean, required: true } }, computed: { /** * This returns a list of options for the unit select. * We offer seconds only when we have to, not by default * * In All-day mode, we only offer days and weeks. * * @return {object[]} */ options() { const options = []; if (this.unit === 'seconds') { options.push({ label: this.$n('calendar', 'second', 'seconds', this.count), unit: 'seconds' }); } if (!this.isAllDay || ['minutes', 'hours'].indexOf(this.unit) !== -1) { options.push({ label: this.$n('calendar', 'minute', 'minutes', this.count), unit: 'minutes' }); options.push({ label: this.$n('calendar', 'hour', 'hours', this.count), unit: 'hours' }); } options.push({ label: this.$n('calendar', 'day', 'days', this.count), unit: 'days' }); options.push({ label: this.$n('calendar', 'week', 'weeks', this.count), unit: 'weeks' }); return options; }, /** * This is the selected option * * @return {object} */ selected() { return this.options.find(o => o.unit === this.unit); } }, methods: { /** * This triggers the change event when the user selected a new unit * * @param {object} value The selected option */ select(value) { if (!value) { return; } this.$emit('change', value.unit); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Attachments/AttachmentsList.vue?vue&type=script&lang=js": /*!*******************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Attachments/AttachmentsList.vue?vue&type=script&lang=js ***! \*******************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var vue_material_design_icons_Upload_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-material-design-icons/Upload.vue */ "./node_modules/vue-material-design-icons/Upload.vue"); /* harmony import */ var vue_material_design_icons_Close_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-material-design-icons/Close.vue */ "./node_modules/vue-material-design-icons/Close.vue"); /* harmony import */ var vue_material_design_icons_Folder_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-material-design-icons/Folder.vue */ "./node_modules/vue-material-design-icons/Folder.vue"); /* harmony import */ var vue_material_design_icons_Paperclip_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-material-design-icons/Paperclip.vue */ "./node_modules/vue-material-design-icons/Paperclip.vue"); /* harmony import */ var vue_material_design_icons_Plus_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-material-design-icons/Plus.vue */ "./node_modules/vue-material-design-icons/Plus.vue"); /* harmony import */ var vue_material_design_icons_Email_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue-material-design-icons/Email.vue */ "./node_modules/vue-material-design-icons/Email.vue"); /* harmony import */ var vue_material_design_icons_ArrowLeft_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! vue-material-design-icons/ArrowLeft.vue */ "./node_modules/vue-material-design-icons/ArrowLeft.vue"); /* harmony import */ var vue_material_design_icons_Reload_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! vue-material-design-icons/Reload.vue */ "./node_modules/vue-material-design-icons/Reload.vue"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _services_attachmentService_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../services/attachmentService.js */ "./src/services/attachmentService.js"); /* harmony import */ var webdav__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! webdav */ "./node_modules/webdav/dist/web/index.js"); /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js"); /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_15__); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'AttachmentsList', components: { NcListItem: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcListItem, NcActions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActions, NcActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, Upload: vue_material_design_icons_Upload_vue__WEBPACK_IMPORTED_MODULE_2__["default"], Close: vue_material_design_icons_Close_vue__WEBPACK_IMPORTED_MODULE_3__["default"], Folder: vue_material_design_icons_Folder_vue__WEBPACK_IMPORTED_MODULE_4__["default"], Paperclip: vue_material_design_icons_Paperclip_vue__WEBPACK_IMPORTED_MODULE_5__["default"], Plus: vue_material_design_icons_Plus_vue__WEBPACK_IMPORTED_MODULE_6__["default"], NcDialog: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcDialog, NcModal: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcModal, NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton, Email: vue_material_design_icons_Email_vue__WEBPACK_IMPORTED_MODULE_7__["default"], ArrowLeft: vue_material_design_icons_ArrowLeft_vue__WEBPACK_IMPORTED_MODULE_8__["default"], Reload: vue_material_design_icons_Reload_vue__WEBPACK_IMPORTED_MODULE_9__["default"], NcAvatar: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAvatar, NcLoadingIcon: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcLoadingIcon, NcCheckboxRadioSwitch: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcCheckboxRadioSwitch }, props: { calendarObjectInstance: { type: Object, required: true }, isReadOnly: { type: Boolean, default: true } }, data() { return { uploading: false, showOpenConfirmation: false, openConfirmationMessage: '', openConfirmationButtons: [], showModal: false, showAttachmentsSection: false, loadingDataEmailBox: false, mailBoxData: [], mailAttachmentData: [], selectedAttachements: [], loadingText: 'Chargement ...', selectedMail: null }; }, computed: { currentUser() { return this.$store.getters.getCurrentUserPrincipal; }, attachments() { return this.calendarObjectInstance.attachments; } }, methods: { addAttachmentWithProperty(calendarObjectInstance, sharedData) { this.$store.commit('addAttachmentWithProperty', { calendarObjectInstance, sharedData }); }, deleteAttachmentFromEvent(attachment) { this.$store.commit('deleteAttachment', { calendarObjectInstance: this.calendarObjectInstance, attachment }); if (this.selectedAttachements.length = 0) { const emailId = null; this.$store.commit('addEmailId', { calendarObjectInstance: this.calendarObjectInstance, emailId }); } }, async openFilesModal() { const picker = (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_11__.getFilePickerBuilder)(t('calendar', 'Choose a file to add as attachment')).setMultiSelect(false).allowDirectories(true).addButton({ label: t('calendar', 'Pick'), type: 'primary', callback: nodes => _utils_logger_js__WEBPACK_IMPORTED_MODULE_12__["default"].debug('Picked attachment', { nodes }) }).build(); try { const filename = await picker.pick(t('calendar', 'Choose a file to share as a link')); if (!this.isDuplicateAttachment(filename)) { var _davRes$multistatus; // TODO do not share Move this to PHP const data = await (0,_services_attachmentService_js__WEBPACK_IMPORTED_MODULE_13__.getFileInfo)(filename, this.currentUser.dav.userId); const davRes = await (0,webdav__WEBPACK_IMPORTED_MODULE_14__.parseXML)(data); const davRespObj = davRes === null || davRes === void 0 || (_davRes$multistatus = davRes.multistatus) === null || _davRes$multistatus === void 0 || (_davRes$multistatus = _davRes$multistatus.response[0]) === null || _davRes$multistatus === void 0 || (_davRes$multistatus = _davRes$multistatus.propstat) === null || _davRes$multistatus === void 0 ? void 0 : _davRes$multistatus.prop; davRespObj.fileName = filename; davRespObj.url = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_10__.generateUrl)("/f/".concat(davRespObj.fileid)); davRespObj.value = davRespObj.url; this.addAttachmentWithProperty(this.calendarObjectInstance, davRespObj); } } catch (error) {} }, isDuplicateAttachment(path) { return this.attachments.find(attachment => { if (attachment.fileName === path) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_11__.showError)(t('calendar', 'Attachment {name} already exist!', { name: this.getBaseName(path) })); return true; } return false; }); }, clickOnUploadButton() { this.$refs.localAttachments.click(); }, async onLocalAttachmentSelected(e) { try { const attachmentsFolder = await this.$store.dispatch('createAttachmentsFolder'); const attachments = await (0,_services_attachmentService_js__WEBPACK_IMPORTED_MODULE_13__.uploadLocalAttachment)(attachmentsFolder, Array.from(e.target.files), this.currentUser.dav, this.attachments); // TODO do not share file, move to PHP attachments.map(async attachment => { var _davRes$multistatus2; const data = await (0,_services_attachmentService_js__WEBPACK_IMPORTED_MODULE_13__.getFileInfo)("".concat(attachmentsFolder, "/").concat(attachment.path), this.currentUser.dav.userId); const davRes = await (0,webdav__WEBPACK_IMPORTED_MODULE_14__.parseXML)(data); const davRespObj = davRes === null || davRes === void 0 || (_davRes$multistatus2 = davRes.multistatus) === null || _davRes$multistatus2 === void 0 || (_davRes$multistatus2 = _davRes$multistatus2.response[0]) === null || _davRes$multistatus2 === void 0 || (_davRes$multistatus2 = _davRes$multistatus2.propstat) === null || _davRes$multistatus2 === void 0 ? void 0 : _davRes$multistatus2.prop; davRespObj.fileName = attachment.path; davRespObj.url = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_10__.generateUrl)("/f/".concat(davRespObj.fileid)); davRespObj.value = davRespObj.url; this.addAttachmentWithProperty(this.calendarObjectInstance, davRespObj); }); e.target.value = ''; } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_12__["default"].error('Could not upload attachment(s)', { error }); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_11__.showError)(t('calendar', 'Could not upload attachment(s)')); } }, getIcon(mime) { return OC.MimeType.getIconUrl(mime); }, getPreview(attachment) { if (attachment.xNcHasPreview) { return (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_10__.generateUrl)("/core/preview?fileId=".concat(attachment.xNcFileId, "&x=100&y=100&a=0")); } return attachment.formatType ? OC.MimeType.getIconUrl(attachment.formatType) : OC.MimeType.getIconUrl('folder'); }, getBaseName(name) { return name.split('/').pop(); }, openFile(rawUrl) { let url; try { url = new URL(rawUrl, (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_10__.getBaseUrl)()); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_12__["default"].error("Refusing to open invalid URL: ".concat(rawUrl), { error }); return; } const baseUrl = new URL((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_10__.getBaseUrl)()); if (url.href.startsWith(baseUrl.href)) { // URL belongs to this instance and is safe window.open(url.href, '_blank', 'noopener noreferrer'); return; } // Otherwise, show a confirmation dialog this.openConfirmationMessage = t('calendar', 'You are about to navigate to {host}. Are you sure to proceed? Link: {link}', { host: url.host, link: url.href }); this.openConfirmationButtons = [{ label: t('calendar', 'Cancel'), callback: () => { this.showOpenConfirmation = false; } }, { label: t('calendar', 'Proceed'), type: 'primary', callback: () => { window.open(url.href, '_blank', 'noopener noreferrer'); } }]; this.showOpenConfirmation = true; }, async syncEmailBox() { this.loadingText = 'Synchronisation encours ...'; this.loadingDataEmailBox = true; this.mailBoxData = []; await this.loadEmailsBox(true); this.loadingDataEmailBox = false; }, async openEmailBoxModal() { this.loadingText = 'Chargement des emails ...'; this.showModal = true; this.loadingDataEmailBox = true; await this.loadEmailsBox(); this.loadingDataEmailBox = false; }, async getAttachments(mail) { this.loadingText = 'Récupération des piecs jointes ...'; this.loadingDataEmailBox = true; this.showAttachmentsSection = true; this.selectedMail = mail; this.mailAttachmentData = []; await this.loadAttachments(mail); this.loadingDataEmailBox = false; }, async addEmailToVcalendar(mail) { var _mail$databaseId; const emailId = (_mail$databaseId = mail.databaseId) !== null && _mail$databaseId !== void 0 ? _mail$databaseId : null; this.$store.commit('addEmailId', { calendarObjectInstance: this.calendarObjectInstance, emailId }); }, selectAttachement(attachementId) { if (this.isInSelectedAttachment(attachementId)) { console.log("remove"); this.selectedAttachements = this.selectedAttachements.filter(id => id !== attachementId); } else { console.log("add"); this.selectedAttachements.push(attachementId); } }, isInSelectedAttachment(attachementId) { return this.selectedAttachements.find(id => id === attachementId); }, async pickEmailAttachement() { this.loadingText = 'Ajout de l\'attachement encours ...'; this.loadingDataEmailBox = true; //upload only attachmen if id is in selectedAttachements const selectedAttachements = this.selectedAttachements.map(id => this.mailAttachmentData.find(attachement => attachement.id === id)); await this.uploadAttachment(selectedAttachements); this.addEmailToVcalendar(this.selectedMail); this.closeMailBoxModal(); this.resetMailBoxModal(); }, async uploadAttachment() { let attachements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; await Promise.all(attachements.map(async attachement => { await this.uploadEmailAttachementTodavFile(attachement); })); }, resetMailBoxModal() { this.mailBoxData = []; this.mailAttachmentData = []; this.showModal = false; this.showAttachmentsSection = false; this.loadingDataEmailBox = false; this.loadingText = 'Chargement ...'; this.selectedAttachements = []; }, displayAttachmentsSection() { this.showAttachmentsSection = false; this.loadingDataEmailBox = false; }, closeMailBoxModal() { this.showModal = false; this.showAttachmentsSection = false; this.loadingDataEmailBox = false; this.loadingText = 'Chargement ...'; }, async loadEmailsBox() { let withSync = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; const ajaxUrl = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_10__.generateUrl)('/apps/calendar/load-email-box'); await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_1__["default"].get(ajaxUrl, { params: { withSync } }).then(response => { console.log(response.data.success); if (!response.data.success && response.data.message == "MAILBOX_NOT_FOUND") { this.closeMailBoxModal(); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_11__.showError)(t('calendar', 'Veuillez configurer le compte apps email pour pouvoir utiliser cette fonctionnalité.', { timeout: 7000 })); return; } this.mailBoxData = response.data; }).catch(error => { console.log(error); }); }, async loadAttachments(mail) { // if (!this.hasAttachements(mail)) { // this.mailAttachmentData = [] ; // this.loadingDataEmailBox = false // return; // } const ajaxUrl = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_10__.generateUrl)('/apps/calendar/load-email-attachement/' + mail.databaseId); await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_1__["default"].get(ajaxUrl).then(response => { this.mailAttachmentData = response.data.attachments; this.selectedMail["body"] = response.data.fullMessage.body; }).catch(error => { console.log(error); }); }, async uploadEmailAttachementTodavFile(attachement) { var _davRes$multistatus3; const attachmentsFolder = await this.$store.dispatch('createAttachmentsFolder'); const attachment = await (0,_services_attachmentService_js__WEBPACK_IMPORTED_MODULE_13__.uploadRemoteFile)(attachmentsFolder, attachement.downloadUrl, attachement.fileName, this.currentUser.dav); // TODO do not share file, move to PHP const data = await (0,_services_attachmentService_js__WEBPACK_IMPORTED_MODULE_13__.getFileInfo)("".concat(attachmentsFolder, "/").concat(attachment.path), this.currentUser.dav.userId); const davRes = await (0,webdav__WEBPACK_IMPORTED_MODULE_14__.parseXML)(data); const davRespObj = davRes === null || davRes === void 0 || (_davRes$multistatus3 = davRes.multistatus) === null || _davRes$multistatus3 === void 0 || (_davRes$multistatus3 = _davRes$multistatus3.response[0]) === null || _davRes$multistatus3 === void 0 || (_davRes$multistatus3 = _davRes$multistatus3.propstat) === null || _davRes$multistatus3 === void 0 ? void 0 : _davRes$multistatus3.prop; davRespObj.fileName = attachment.path; davRespObj.url = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_10__.generateUrl)("/f/".concat(davRespObj.fileid)); davRespObj.value = davRespObj.url; this.addAttachmentWithProperty(this.calendarObjectInstance, davRespObj); }, getLabelEmailBox() { let from = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; if (from.length) { var _from$0$label; return (_from$0$label = from[0].label) !== null && _from$0$label !== void 0 ? _from$0$label : from[0].email; } return ''; }, getSubstringText() { let text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20; if (text.length < length) { return text; } return text.substring(0, length) + '...'; }, hasAttachements(mail) { return mail.flags.hasAttachments; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/AvatarParticipationStatus.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/AvatarParticipationStatus.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_AccountMultiple_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-material-design-icons/AccountMultiple.vue */ "./node_modules/vue-material-design-icons/AccountMultiple.vue"); /* harmony import */ var vue_material_design_icons_CheckCircle_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-material-design-icons/CheckCircle.vue */ "./node_modules/vue-material-design-icons/CheckCircle.vue"); /* harmony import */ var vue_material_design_icons_HelpCircle_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-material-design-icons/HelpCircle.vue */ "./node_modules/vue-material-design-icons/HelpCircle.vue"); /* harmony import */ var vue_material_design_icons_CloseCircle_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-material-design-icons/CloseCircle.vue */ "./node_modules/vue-material-design-icons/CloseCircle.vue"); /* harmony import */ var vue_material_design_icons_ArrowRightDropCircle_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-material-design-icons/ArrowRightDropCircle.vue */ "./node_modules/vue-material-design-icons/ArrowRightDropCircle.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'AvatarParticipationStatus', components: { Avatar: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAvatar, AccountMultiple: vue_material_design_icons_AccountMultiple_vue__WEBPACK_IMPORTED_MODULE_1__["default"], IconCheck: vue_material_design_icons_CheckCircle_vue__WEBPACK_IMPORTED_MODULE_2__["default"], IconNoResponse: vue_material_design_icons_HelpCircle_vue__WEBPACK_IMPORTED_MODULE_3__["default"], IconClose: vue_material_design_icons_CloseCircle_vue__WEBPACK_IMPORTED_MODULE_4__["default"], IconDelegated: vue_material_design_icons_ArrowRightDropCircle_vue__WEBPACK_IMPORTED_MODULE_5__["default"] }, props: { avatarLink: { type: String, required: true }, participationStatus: { type: String, required: true }, commonName: { type: String, required: true }, isViewedByOrganizer: { type: Boolean, required: true }, isResource: { type: Boolean, required: true }, isGroup: { type: Boolean, required: false }, isSuggestion: { type: Boolean, default: false }, attendeeIsOrganizer: { type: Boolean, required: true }, organizerDisplayName: { type: String, required: true } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/CalendarPickerHeader.vue?vue&type=script&lang=js": /*!************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/CalendarPickerHeader.vue?vue&type=script&lang=js ***! \************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'CalendarPickerHeader', components: { NcActions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActions, NcActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton }, props: { value: { type: Object, required: true }, calendars: { type: Array, required: true }, isReadOnly: { type: Boolean, required: true } }, computed: { /** * @return {boolean} */ isDisabled() { return this.isReadOnly || this.calendars.length < 2; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/FreeBusy/FreeBusy.vue?vue&type=script&lang=js": /*!*********************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/FreeBusy/FreeBusy.vue?vue&type=script&lang=js ***! \*********************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _fullcalendar_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @fullcalendar/vue */ "./node_modules/@fullcalendar/vue/dist/index.js"); /* harmony import */ var _fullcalendar_resource_timeline__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @fullcalendar/resource-timeline */ "./node_modules/@fullcalendar/resource-timeline/index.js"); /* harmony import */ var _fullcalendar_interaction__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @fullcalendar/interaction */ "./node_modules/@fullcalendar/interaction/index.js"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _fullcalendar_eventSources_freeBusyBlockedForAllEventSource_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../fullcalendar/eventSources/freeBusyBlockedForAllEventSource.js */ "./src/fullcalendar/eventSources/freeBusyBlockedForAllEventSource.js"); /* harmony import */ var _fullcalendar_eventSources_freeBusyFakeBlockingEventSource_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../fullcalendar/eventSources/freeBusyFakeBlockingEventSource.js */ "./src/fullcalendar/eventSources/freeBusyFakeBlockingEventSource.js"); /* harmony import */ var _fullcalendar_eventSources_freeBusyResourceEventSource_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../fullcalendar/eventSources/freeBusyResourceEventSource.js */ "./src/fullcalendar/eventSources/freeBusyResourceEventSource.js"); /* harmony import */ var _fullcalendar_localization_dateFormattingConfig_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../fullcalendar/localization/dateFormattingConfig.js */ "./src/fullcalendar/localization/dateFormattingConfig.js"); /* harmony import */ var _fullcalendar_localization_localeProvider_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../fullcalendar/localization/localeProvider.js */ "./src/fullcalendar/localization/localeProvider.js"); /* harmony import */ var _fullcalendar_localization_momentPlugin_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../fullcalendar/localization/momentPlugin.js */ "./src/fullcalendar/localization/momentPlugin.js"); /* harmony import */ var _fullcalendar_timezones_vtimezoneNamedTimezoneImpl_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../fullcalendar/timezones/vtimezoneNamedTimezoneImpl.js */ "./src/fullcalendar/timezones/vtimezoneNamedTimezoneImpl.js"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var vue_material_design_icons_ChevronRight_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! vue-material-design-icons/ChevronRight.vue */ "./node_modules/vue-material-design-icons/ChevronRight.vue"); /* harmony import */ var vue_material_design_icons_ChevronLeft_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! vue-material-design-icons/ChevronLeft.vue */ "./node_modules/vue-material-design-icons/ChevronLeft.vue"); /* harmony import */ var vue_material_design_icons_Check_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! vue-material-design-icons/Check.vue */ "./node_modules/vue-material-design-icons/Check.vue"); /* harmony import */ var vue_material_design_icons_HelpCircle_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! vue-material-design-icons/HelpCircle.vue */ "./node_modules/vue-material-design-icons/HelpCircle.vue"); /* harmony import */ var _Invitees_InviteesListSearch_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../Invitees/InviteesListSearch.vue */ "./src/components/Editor/Invitees/InviteesListSearch.vue"); /* harmony import */ var _utils_freebusy_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../utils/freebusy.js */ "./src/utils/freebusy.js"); /* harmony import */ var _services_freeBusySlotService_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../services/freeBusySlotService.js */ "./src/services/freeBusySlotService.js"); /* harmony import */ var _filters_dateFormat_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../filters/dateFormat.js */ "./src/filters/dateFormat.js"); // Import FullCalendar itself // Import event sources // Import localization plugins // Import timezone plugins /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'FreeBusy', components: { NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcSelect, FullCalendar: _fullcalendar_vue__WEBPACK_IMPORTED_MODULE_16__["default"], InviteesListSearch: _Invitees_InviteesListSearch_vue__WEBPACK_IMPORTED_MODULE_12__["default"], NcDateTimePickerNative: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcDateTimePickerNative, NcDialog: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcDialog, NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton, NcPopover: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcPopover, NcUserBubble: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcUserBubble, ChevronRightIcon: vue_material_design_icons_ChevronRight_vue__WEBPACK_IMPORTED_MODULE_8__["default"], ChevronLeftIcon: vue_material_design_icons_ChevronLeft_vue__WEBPACK_IMPORTED_MODULE_9__["default"], CheckIcon: vue_material_design_icons_Check_vue__WEBPACK_IMPORTED_MODULE_10__["default"], HelpCircleIcon: vue_material_design_icons_HelpCircle_vue__WEBPACK_IMPORTED_MODULE_11__["default"] }, props: { /** * The organizer object. * See /src/models/attendee.js for details */ organizer: { type: Object, required: true }, /** * The attendee objects. * See /src/models/attendee.js for details */ attendees: { type: Array, required: true }, /** * The start-date to query free-busy information from */ startDate: { type: Date, required: true }, /** * The end-date to query free-busy information from */ endDate: { type: Date, required: true }, eventTitle: { type: String, required: false }, alreadyInvitedEmails: { type: Array, required: true }, calendarObjectInstance: { type: Object, required: true } }, data() { return { loadingIndicator: true, currentDate: this.startDate, currentStart: this.startDate, currentEnd: this.endDate, lang: (0,_fullcalendar_localization_localeProvider_js__WEBPACK_IMPORTED_MODULE_5__.getFullCalendarLocale)().locale, formattingOptions: { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }, freeSlots: [], selectedSlot: null }; }, mounted() { const calendar = this.$refs.freeBusyFullCalendar.getApi(); calendar.scrollToTime(this.scrollTime); this.findFreeSlots(); }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_17__.mapGetters)({ timezoneId: 'getResolvedTimezone' }), ...(0,vuex__WEBPACK_IMPORTED_MODULE_17__.mapState)({ showWeekends: state => state.settings.showWeekends, showWeekNumbers: state => state.settings.showWeekNumbers, timezone: state => state.settings.timezone }), placeholder() { return this.$t('calendar', 'Select automatic slot'); }, /** * FullCalendar Plugins * * @return {(PluginDef)[]} */ plugins() { return [_fullcalendar_resource_timeline__WEBPACK_IMPORTED_MODULE_18__["default"], (0,_fullcalendar_localization_momentPlugin_js__WEBPACK_IMPORTED_MODULE_6__["default"])(this.$store), _fullcalendar_timezones_vtimezoneNamedTimezoneImpl_js__WEBPACK_IMPORTED_MODULE_7__["default"], _fullcalendar_interaction__WEBPACK_IMPORTED_MODULE_19__["default"]]; }, formattedCurrentStart() { return this.currentDate.toLocaleDateString(this.lang, this.formattingOptions); }, formattedCurrentTime() { const options = { hour: '2-digit', minute: '2-digit', hour12: true }; const startTime = this.currentStart.toLocaleTimeString(this.lang, options); const endTime = this.currentEnd.toLocaleTimeString(this.lang, options); return "".concat(startTime, " - ").concat(endTime, " "); }, scrollTime() { const options = { hour: '2-digit', minute: '2-digit', seconds: '2-digit', hour12: false }; return this.currentDate.getHours() > 0 ? new Date(this.currentDate.getTime() - 60 * 60 * 1000).toLocaleTimeString(this.lang, options) : '10:00:00'; }, formattedTimeZone() { return this.timezoneId.replace('/', '-'); }, eventSources() { return [(0,_fullcalendar_eventSources_freeBusyResourceEventSource_js__WEBPACK_IMPORTED_MODULE_3__["default"])(this._uid, this.organizer.attendeeProperty, this.attendees.map(a => a.attendeeProperty)), (0,_fullcalendar_eventSources_freeBusyFakeBlockingEventSource_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this._uid, this.resources, this.currentStart, this.currentEnd), (0,_fullcalendar_eventSources_freeBusyBlockedForAllEventSource_js__WEBPACK_IMPORTED_MODULE_1__["default"])(this.organizer.attendeeProperty, this.attendees.map(a => a.attendeeProperty), this.resources)]; }, resources() { const resources = []; const roles = { CHAIR: this.$t('calendar', 'chairperson'), 'REQ-PARTICIPANT': this.$t('calendar', 'required participant'), 'NON-PARTICIPANT': this.$t('calendar', 'non-participant'), 'OPT-PARTICIPANT': this.$t('calendar', 'optional participant') }; for (const attendee of [this.organizer, ...this.attendees]) { let title = attendee.commonName || attendee.uri.slice(7); if (attendee === this.organizer) { title = this.$t('calendar', '{organizer} (organizer)', { organizer: title }); } else { title = this.$t('calendar', '{attendee} ({role})', { attendee: title, role: roles[attendee.role] }); } resources.push({ id: attendee.attendeeProperty.email, title }); } // Sort the resources by ID, just like fullcalendar does. This ensures that // the fake blocking event can know the first and last resource reliably // ref https://fullcalendar.io/docs/resourceOrder resources.sort((a, b) => (a.id > b.id) - (a.id < b.id)); return resources; }, /** * List of possible Free-Busy values. * This is used as legend. * * @return {({color: string, label: string})[]} */ colorCaption() { return [{ // TRANSLATORS: free as in available label: this.$t('calendar', 'Free'), color: (0,_utils_freebusy_js__WEBPACK_IMPORTED_MODULE_13__.getColorForFBType)('FREE') }, { label: this.$t('calendar', 'Busy (tentative)'), color: (0,_utils_freebusy_js__WEBPACK_IMPORTED_MODULE_13__.getColorForFBType)('BUSY-TENTATIVE') }, { label: this.$t('calendar', 'Busy'), color: (0,_utils_freebusy_js__WEBPACK_IMPORTED_MODULE_13__.getColorForFBType)('BUSY') }, { label: this.$t('calendar', 'Out of office'), color: (0,_utils_freebusy_js__WEBPACK_IMPORTED_MODULE_13__.getColorForFBType)('BUSY-UNAVAILABLE') }, { label: this.$t('calendar', 'Unknown'), color: (0,_utils_freebusy_js__WEBPACK_IMPORTED_MODULE_13__.getColorForFBType)('UNKNOWN') }]; }, /** * Configuration options for FullCalendar * Please see https://fullcalendar.io/docs#toc for details * * @return {object} */ options() { return { // Initialization: initialView: 'resourceTimelineDay', initialDate: this.currentStart, schedulerLicenseKey: 'GPL-My-Project-Is-Open-Source', // Data eventSources: this.eventSources, resources: this.resources, // Plugins plugins: this.plugins, // Interaction: editable: false, selectable: true, select: this.handleSelect, // Localization: ...(0,_fullcalendar_localization_dateFormattingConfig_js__WEBPACK_IMPORTED_MODULE_4__.getDateFormattingConfig)(), ...(0,_fullcalendar_localization_localeProvider_js__WEBPACK_IMPORTED_MODULE_5__.getFullCalendarLocale)(), // Rendering height: 'auto', loading: this.loading, headerToolbar: false, resourceAreaColumns: [{ field: 'title', headerContent: 'Attendees' }], // Timezones: timeZone: this.timezoneId, // Formatting of the title // will produce something like "Tuesday, September 18, 2018" // ref https://fullcalendar.io/docs/date-formatting titleFormat: { month: 'long', year: 'numeric', day: 'numeric', weekday: 'long' }, dateClick: this.findFreeSlots() }; } }, methods: { handleSelect(arg) { this.currentStart = arg.start; this.currentEnd = arg.end; }, save() { this.$emit('update-dates', { start: this.currentStart, end: this.currentEnd }); }, addAttendee(attendee) { this.$emit('add-attendee', attendee); this.findFreeSlots(); }, removeAttendee(attendee) { this.$emit('remove-attendee', attendee); this.findFreeSlots(); }, loading(isLoading) { this.loadingIndicator = isLoading; }, handleActions(action) { let date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; const calendar = this.$refs.freeBusyFullCalendar.getApi(); switch (action) { case 'today': calendar.today(); break; case 'left': calendar.prev(); break; case 'right': calendar.next(); break; case 'picker': calendar.gotoDate(date); break; } this.currentDate = calendar.getDate(); calendar.scrollToTime(this.scrollTime); this.findFreeSlots(); }, async findFreeSlots() { // Doesn't make sense for multiple days if (this.currentStart.getDate() !== this.currentEnd.getDate()) { return; } // Needed to update with full calendar widget changes const startSearch = new Date(this.currentStart); startSearch.setDate(this.currentDate.getDate()); startSearch.setMonth(this.currentDate.getMonth()); startSearch.setYear(this.currentDate.getFullYear()); const endSearch = new Date(this.currentEnd); endSearch.setDate(this.currentDate.getDate()); endSearch.setMonth(this.currentDate.getMonth()); endSearch.setYear(this.currentDate.getFullYear()); try { // for now search slots only in the first week days const endSearchDate = new Date(startSearch); endSearchDate.setDate(startSearch.getDate() + 7); const eventResults = await (0,_services_freeBusySlotService_js__WEBPACK_IMPORTED_MODULE_14__.getBusySlots)(this.organizer.attendeeProperty, this.attendees.map(a => a.attendeeProperty), startSearch, endSearchDate, this.timeZoneId); const freeSlots = (0,_services_freeBusySlotService_js__WEBPACK_IMPORTED_MODULE_14__.getFirstFreeSlot)(startSearch, endSearch, eventResults.events); freeSlots.forEach(slot => { slot.displayStart = (0,_filters_dateFormat_js__WEBPACK_IMPORTED_MODULE_15__["default"])(slot.start, false, (0,_fullcalendar_localization_localeProvider_js__WEBPACK_IMPORTED_MODULE_5__.getFullCalendarLocale)().locale); }); this.freeSlots = freeSlots; } catch (error) { // Handle error here console.error('Error occurred while finding free slots:', error); throw error; // Re-throwing the error to handle it in the caller } }, setSlotSuggestion(slot) { this.selectedSlot = slot; const calendar = this.$refs.freeBusyFullCalendar.getApi(); calendar.gotoDate(slot.start); calendar.scrollToTime(this.scrollTime); // have to make these "selected" version of the props seeing as they can't be modified directly, and they aren't updated reactively when vuex is this.currentStart = slot.start; this.currentEnd = slot.end; const clonedDate = new Date(slot.start); // so as not to modify slot.start this.currentDate = new Date(clonedDate.setHours(0, 0, 0, 0)); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/InvitationResponseButtons.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/InvitationResponseButtons.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_CalendarQuestion_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-material-design-icons/CalendarQuestion.vue */ "./node_modules/vue-material-design-icons/CalendarQuestion.vue"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/logger.js */ "./src/utils/logger.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'InvitationResponseButtons', components: { Actions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActions, ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton, CalendarQuestionIcon: vue_material_design_icons_CalendarQuestion_vue__WEBPACK_IMPORTED_MODULE_1__["default"] }, props: { attendee: { type: Object, required: true }, calendarId: { type: String, required: true }, narrow: { type: Boolean, default: false }, growHorizontally: { type: Boolean, default: false } }, data() { return { loading: false }; }, computed: { isAccepted() { return this.attendee.participationStatus === 'ACCEPTED'; }, isDeclined() { return this.attendee.participationStatus === 'DECLINED'; }, isTentative() { return this.attendee.participationStatus === 'TENTATIVE'; } }, methods: { async accept() { try { await this.setParticipationStatus('ACCEPTED'); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showSuccess)(this.t('calendar', 'The invitation has been accepted successfully.')); this.$emit('close'); } catch (e) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)(this.t('calendar', 'Failed to accept the invitation.')); } }, async decline() { try { await this.setParticipationStatus('DECLINED'); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showSuccess)(this.t('calendar', 'The invitation has been declined successfully.')); this.$emit('close'); } catch (e) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)(this.t('calendar', 'Failed to decline the invitation.')); } }, async tentative() { try { await this.setParticipationStatus('TENTATIVE'); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showSuccess)(this.t('calendar', 'Your participation has been marked as tentative.')); this.$emit('close'); } catch (e) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)(this.t('calendar', 'Failed to set the participation status to tentative.')); } }, /** * Set the participation status and save the event * * @param {string} participationStatus The new participation status * @return {Promise} */ async setParticipationStatus(participationStatus) { this.loading = true; try { this.$store.commit('changeAttendeesParticipationStatus', { attendee: this.attendee, participationStatus }); // TODO: What about recurring events? Add new buttons like "Accept this and all future"? // Currently, this will only accept a single occurrence. await this.$store.dispatch('saveCalendarObjectInstance', { thisAndAllFuture: false, calendarId: this.calendarId }); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_3__["default"].error('Failed to set participation status', { error, participationStatus }); throw error; } finally { this.loading = false; } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesList.vue?vue&type=script&lang=js": /*!*************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesList.vue?vue&type=script&lang=js ***! \*************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _InviteesListSearch_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./InviteesListSearch.vue */ "./src/components/Editor/Invitees/InviteesListSearch.vue"); /* harmony import */ var _InviteesListItem_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./InviteesListItem.vue */ "./src/components/Editor/Invitees/InviteesListItem.vue"); /* harmony import */ var _OrganizerListItem_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./OrganizerListItem.vue */ "./src/components/Editor/Invitees/OrganizerListItem.vue"); /* harmony import */ var _NoAttendeesView_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../NoAttendeesView.vue */ "./src/components/Editor/NoAttendeesView.vue"); /* harmony import */ var _OrganizerNoEmailError_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../OrganizerNoEmailError.vue */ "./src/components/Editor/OrganizerNoEmailError.vue"); /* harmony import */ var _services_talkService_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../services/talkService.js */ "./src/services/talkService.js"); /* harmony import */ var _FreeBusy_FreeBusy_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../FreeBusy/FreeBusy.vue */ "./src/components/Editor/FreeBusy/FreeBusy.vue"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var _utils_attendee_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../utils/attendee.js */ "./src/utils/attendee.js"); /* harmony import */ var vue_material_design_icons_AccountMultiple_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! vue-material-design-icons/AccountMultiple.vue */ "./node_modules/vue-material-design-icons/AccountMultiple.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'InviteesList', components: { NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton, FreeBusy: _FreeBusy_FreeBusy_vue__WEBPACK_IMPORTED_MODULE_7__["default"], OrganizerNoEmailError: _OrganizerNoEmailError_vue__WEBPACK_IMPORTED_MODULE_5__["default"], NoAttendeesView: _NoAttendeesView_vue__WEBPACK_IMPORTED_MODULE_4__["default"], InviteesListItem: _InviteesListItem_vue__WEBPACK_IMPORTED_MODULE_2__["default"], InviteesListSearch: _InviteesListSearch_vue__WEBPACK_IMPORTED_MODULE_1__["default"], OrganizerListItem: _OrganizerListItem_vue__WEBPACK_IMPORTED_MODULE_3__["default"], AccountMultipleIcon: vue_material_design_icons_AccountMultiple_vue__WEBPACK_IMPORTED_MODULE_10__["default"] }, props: { isReadOnly: { type: Boolean, required: true }, calendarObjectInstance: { type: Object, required: true }, isSharedWithMe: { type: Boolean, required: true }, showHeader: { type: Boolean, required: true }, hideIfEmpty: { type: Boolean, default: false }, hideButtons: { type: Boolean, default: false }, hideErrors: { type: Boolean, default: false }, limit: { type: Number, default: 0 } }, data() { return { creatingTalkRoom: false, showFreeBusyModel: false, recentAttendees: [] }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_11__.mapState)({ talkEnabled: state => state.settings.talkEnabled }), noInviteesMessage() { return this.$t('calendar', 'No attendees yet'); }, noOwnerMessage() { return this.$t('calendar', 'You do not own this calendar, so you cannot add attendees to this event'); }, invitees() { return this.calendarObjectInstance.attendees.filter(attendee => { return !['RESOURCE', 'ROOM'].includes(attendee.attendeeProperty.userType); }); }, groups() { return this.invitees.filter(attendee => { if (attendee.attendeeProperty.userType === 'GROUP') { attendee.members = this.invitees.filter(invitee => { return invitee.attendeeProperty.member && invitee.attendeeProperty.member.includes(attendee.uri) && attendee.attendeeProperty.userType === 'GROUP'; }); return attendee.members.length > 0; } return false; }); }, /** * All invitees except the organizer. * * @return {object[]} */ inviteesWithoutOrganizer() { if (!this.calendarObjectInstance.organizer) { return this.invitees; } return this.invitees.filter(attendee => { // Filter attendees which are part of an invited group if (this.groups.some(function (group) { return attendee.attendeeProperty.member && attendee.attendeeProperty.member.includes(group.uri) && attendee.attendeeProperty.userType === 'INDIVIDUAL'; })) { return false; } // Filter empty groups if (attendee.attendeeProperty.userType === 'GROUP') { return attendee.members.length > 0; } return attendee.uri !== this.calendarObjectInstance.organizer.uri; }); }, /** * All invitees except the organizer limited by the limit prop. * If the limit prop is 0 all invitees except the organizer are returned. * * @return {object[]} */ limitedInviteesWithoutOrganizer() { const filteredInvitees = this.inviteesWithoutOrganizer; if (this.limit) { const limit = this.hasOrganizer ? this.limit - 1 : this.limit; return filteredInvitees // Push newly added attendees to the top of the list .toSorted((a, b) => this.recentAttendees.indexOf(b.uri) - this.recentAttendees.indexOf(a.uri)).slice(0, limit); } return filteredInvitees; }, isOrganizer() { return this.calendarObjectInstance.organizer !== null && this.$store.getters.getCurrentUserPrincipal !== null && (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_9__.removeMailtoPrefix)(this.calendarObjectInstance.organizer.uri) === this.$store.getters.getCurrentUserPrincipal.emailAddress; }, hasOrganizer() { return this.calendarObjectInstance.organizer !== null; }, organizerDisplayName() { return (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_9__.organizerDisplayName)(this.calendarObjectInstance.organizer); }, isListEmpty() { return !this.calendarObjectInstance.organizer && this.invitees.length === 0; }, alreadyInvitedEmails() { const emails = this.invitees.map(attendee => (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_9__.removeMailtoPrefix)(attendee.uri)); const principal = this.$store.getters.getCurrentUserPrincipal; if (principal) { emails.push(principal.emailAddress); } return emails; }, hasUserEmailAddress() { const principal = this.$store.getters.getCurrentUserPrincipal; if (!principal) { return false; } return !!principal.emailAddress; }, isCreateTalkRoomButtonVisible() { return this.talkEnabled; }, isCreateTalkRoomButtonDisabled() { if (this.creatingTalkRoom) { return true; } if ((0,_services_talkService_js__WEBPACK_IMPORTED_MODULE_6__.doesContainTalkLink)(this.calendarObjectInstance.location)) { return true; } if ((0,_services_talkService_js__WEBPACK_IMPORTED_MODULE_6__.doesContainTalkLink)(this.calendarObjectInstance.description)) { return true; } return false; }, statusHeader() { if (!this.isReadOnly) { return ''; } return this.t('calendar', '{invitedCount} invited, {confirmedCount} confirmed', { invitedCount: this.inviteesWithoutOrganizer.length, confirmedCount: this.inviteesWithoutOrganizer.filter(attendee => attendee.participationStatus === 'ACCEPTED').length }); } }, methods: { addAttendee(_ref) { let { commonName, email, calendarUserType, language, timezoneId, member } = _ref; this.$store.commit('addAttendee', { calendarObjectInstance: this.calendarObjectInstance, commonName, uri: email, calendarUserType, participationStatus: 'NEEDS-ACTION', role: 'REQ-PARTICIPANT', rsvp: true, language, timezoneId, organizer: this.$store.getters.getCurrentUserPrincipal, member }); this.recentAttendees.push(email); }, removeAttendee(attendee) { // Remove attendee from participating group if (attendee.member) { this.groups.forEach(group => { if (attendee.member.includes(group.uri)) { group.members = group.members.filter(member => { if (!attendee.member.includes(group.uri)) { return true; } return false; }); } }); } this.$store.commit('removeAttendee', { calendarObjectInstance: this.calendarObjectInstance, attendee }); this.recentAttendees = this.recentAttendees.filter(a => a.uri !== attendee.email); }, openFreeBusy() { this.showFreeBusyModel = true; }, closeFreeBusy() { this.showFreeBusyModel = false; }, saveNewDate(dates) { this.$emit('update-dates', dates); this.showFreeBusyModel = false; }, async createTalkRoom() { const NEW_LINE = '\r\n'; try { var _this$calendarObjectI; this.creatingTalkRoom = true; const url = await (0,_services_talkService_js__WEBPACK_IMPORTED_MODULE_6__.createTalkRoom)(this.calendarObjectInstance.title, this.calendarObjectInstance.description); // Store in LOCATION property if it's missing/empty. Append to description otherwise. if (((_this$calendarObjectI = this.calendarObjectInstance.location) !== null && _this$calendarObjectI !== void 0 ? _this$calendarObjectI : '').trim() === '') { this.$store.commit('changeLocation', { calendarObjectInstance: this.calendarObjectInstance, location: url }); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_8__.showSuccess)(this.$t('calendar', 'Successfully appended link to talk room to location.')); } else { if (!this.calendarObjectInstance.description) { this.$store.commit('changeDescription', { calendarObjectInstance: this.calendarObjectInstance, description: url }); } else { this.$store.commit('changeDescription', { calendarObjectInstance: this.calendarObjectInstance, description: this.calendarObjectInstance.description + NEW_LINE + NEW_LINE + url + NEW_LINE }); } (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_8__.showSuccess)(this.$t('calendar', 'Successfully appended link to talk room to description.')); } } catch (error) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_8__.showError)(this.$t('calendar', 'Error creating Talk room')); } finally { this.creatingTalkRoom = false; } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesListItem.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesListItem.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _AvatarParticipationStatus_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../AvatarParticipationStatus.vue */ "./src/components/Editor/AvatarParticipationStatus.vue"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _utils_attendee_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/attendee.js */ "./src/utils/attendee.js"); /* harmony import */ var vue_material_design_icons_ChevronDown_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-material-design-icons/ChevronDown.vue */ "./node_modules/vue-material-design-icons/ChevronDown.vue"); /* harmony import */ var vue_material_design_icons_ChevronUp_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-material-design-icons/ChevronUp.vue */ "./node_modules/vue-material-design-icons/ChevronUp.vue"); /* harmony import */ var vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-material-design-icons/Delete.vue */ "./node_modules/vue-material-design-icons/Delete.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'InviteesListItem', components: { AvatarParticipationStatus: _AvatarParticipationStatus_vue__WEBPACK_IMPORTED_MODULE_0__["default"], ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcActionButton, ActionCheckbox: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcActionCheckbox, ActionRadio: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcActionRadio, Actions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcActions, Delete: vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_5__["default"], NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcButton, ChevronDown: vue_material_design_icons_ChevronDown_vue__WEBPACK_IMPORTED_MODULE_3__["default"], ChevronUp: vue_material_design_icons_ChevronUp_vue__WEBPACK_IMPORTED_MODULE_4__["default"] }, props: { attendee: { type: Object, required: true }, organizerDisplayName: { type: String, required: true }, isReadOnly: { type: Boolean, required: true }, members: { type: Array, default: () => [], required: false } }, data() { return { memberListExpaneded: false }; }, computed: { /** * @return {string} */ avatarLink() { // return this.$store.getters.getAvatarForContact(this.uri) || this.commonName return this.commonName; }, /** * @return {string} */ removeAttendeeText() { if (this.isGroup) { return this.$t('calendar', 'Remove group'); } else { return this.$t('calendar', 'Remove attendee'); } }, /** * Common name of the organizer or the uri without the 'mailto:' prefix. * * @return {string} */ commonName() { if (this.attendee.commonName) { return this.attendee.commonName; } if (this.attendee.uri) { return (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_2__.removeMailtoPrefix)(this.attendee.uri); } return ''; }, radioName() { return this._uid + '-role-radio-input-group'; }, isChair() { return this.attendee.role === 'CHAIR'; }, isRequiredParticipant() { return this.attendee.role === 'REQ-PARTICIPANT'; }, isOptionalParticipant() { return this.attendee.role === 'OPT-PARTICIPANT'; }, isNonParticipant() { return this.attendee.role === 'NON-PARTICIPANT'; }, isViewedByOrganizer() { // TODO: check if also viewed by organizer return !this.isReadOnly; }, isGroup() { return this.attendee.attendeeProperty.userType === 'GROUP'; } }, methods: { /** * Toggles the RSVP flag of the attendee */ toggleRSVP() { this.$store.commit('toggleAttendeeRSVP', { attendee: this.attendee }); }, /** * Updates the role of the attendee * * @param {string} role The new role of the attendee */ changeRole(role) { this.$store.commit('changeAttendeesRole', { attendee: this.attendee, role }); }, /** * Removes an attendee from the event * * @param {object} attendee Attendee object to remove */ removeAttendee(attendee) { this.$emit('remove-attendee', attendee); }, /** * Toggle member list if attendee is a group */ toggleMemberList() { this.memberListExpaneded = !this.memberListExpaneded; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesListSearch.vue?vue&type=script&lang=js": /*!*******************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesListSearch.vue?vue&type=script&lang=js ***! \*******************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _services_caldavService_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../services/caldavService.js */ "./src/services/caldavService.js"); /* harmony import */ var _services_isCirclesEnabled_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../services/isCirclesEnabled.js */ "./src/services/isCirclesEnabled.js"); /* harmony import */ var _services_circleService_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../services/circleService.js */ "./src/services/circleService.js"); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! debounce */ "./node_modules/debounce/index.js"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(debounce__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _utils_randomId_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../utils/randomId.js */ "./src/utils/randomId.js"); /* harmony import */ var vue_material_design_icons_GoogleCirclesCommunities_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue-material-design-icons/GoogleCirclesCommunities.vue */ "./node_modules/vue-material-design-icons/GoogleCirclesCommunities.vue"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'InviteesListSearch', components: { Avatar: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAvatar, NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcSelect, GoogleCirclesCommunitiesIcon: vue_material_design_icons_GoogleCirclesCommunities_vue__WEBPACK_IMPORTED_MODULE_7__["default"] }, props: { alreadyInvitedEmails: { type: Array, required: true }, organizer: { type: Object, required: false } }, data() { return { isLoading: false, inputGiven: false, matches: [], isCirclesEnabled: _services_isCirclesEnabled_js__WEBPACK_IMPORTED_MODULE_2__["default"] }; }, computed: { placeholder() { return this.$t('calendar', 'Search for emails, users, contacts or groups'); }, noResult() { return this.$t('calendar', 'No match found'); } }, methods: { findAttendees: debounce__WEBPACK_IMPORTED_MODULE_9___default()(async function (query) { this.isLoading = true; const matches = []; if (query.length > 0) { const promises = [this.findAttendeesFromContactsAPI(query), this.findAttendeesFromDAV(query)]; if (_services_isCirclesEnabled_js__WEBPACK_IMPORTED_MODULE_2__["default"]) { promises.push(this.findAttendeesFromCircles(query)); } const [contactsResults, davResults, circleResults] = await Promise.all(promises); matches.push(...contactsResults); matches.push(...davResults); if (_services_isCirclesEnabled_js__WEBPACK_IMPORTED_MODULE_2__["default"]) { matches.push(...circleResults); } // Source of the Regex: https://stackoverflow.com/a/46181 // eslint-disable-next-line const emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; if (emailRegex.test(query)) { const alreadyInList = matches.find(attendee => attendee.email.toLowerCase() === query.toLowerCase()); if (!alreadyInList) { matches.unshift({ calendarUserType: 'INDIVIDUAL', commonName: query, email: query, isUser: false, avatar: null, language: null, timezoneId: null, hasMultipleEMails: false, dropdownName: query }); } } // Generate a unique id for every result to make the avatar components reactive for (const match of matches) { match.uid = (0,_utils_randomId_js__WEBPACK_IMPORTED_MODULE_6__.randomId)(); } this.isLoading = false; this.inputGiven = true; } else { this.inputGiven = false; this.isLoading = false; } this.matches = matches; }, 500), addAttendee(selectedValue) { if (selectedValue.type === 'circle') { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_8__.showInfo)(this.$t('calendar', 'Note that members of circles get invited but are not synced yet.')); this.resolveCircleMembers(selectedValue.id, selectedValue.email); } this.$emit('add-attendee', selectedValue); }, async resolveCircleMembers(circleId, groupId) { let results; try { // Going to query custom backend to fetch Circle members since we're going to use // mail addresses of local circle members. The Circles API doesn't expose member // emails yet. Change approved by @miaulalala and @ChristophWurst. results = await (0,_services_circleService_js__WEBPACK_IMPORTED_MODULE_3__.circleGetMembers)(circleId); } catch (error) { console.debug(error); return []; } results.data.forEach(member => { if (!this.organizer || member.email !== this.organizer.uri) { this.$emit('add-attendee', member); } }); }, async findAttendeesFromContactsAPI(query) { let response; try { response = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_4__["default"].post((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_5__.linkTo)('calendar', 'index.php') + '/v1/autocompletion/attendee', { search: query }); } catch (error) { console.debug(error); return []; } const data = response.data; return data.reduce((arr, result) => { const hasMultipleEMails = result.emails.length > 1; result.emails.forEach(email => { let name; if (result.name && !hasMultipleEMails) { name = result.name; } else if (result.name && hasMultipleEMails) { name = "".concat(result.name, " (").concat(email, ")"); } else { name = email; } if (email && this.alreadyInvitedEmails.includes(email)) { return; } arr.push({ calendarUserType: 'INDIVIDUAL', commonName: result.name, email, isUser: false, avatar: result.photo, language: result.lang, timezoneId: result.tzid, hasMultipleEMails, dropdownName: name }); }); return arr; }, []); }, async findAttendeesFromDAV(query) { let results; try { results = await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_1__.principalPropertySearchByDisplaynameOrEmail)(query); } catch (error) { console.debug(error); return []; } return results.filter(principal => { if (!principal.email) { return false; } if (this.alreadyInvitedEmails.includes(principal.email)) { return false; } // We do not support GROUPS for now if (principal.calendarUserType === 'GROUP') { return false; } // Do not include resources and rooms if (['ROOM', 'RESOURCE'].includes(principal.calendarUserType)) { return false; } return true; }).map(principal => { return { commonName: principal.displayname, calendarUserType: principal.calendarUserType, email: principal.email, language: principal.language, isUser: principal.calendarUserType === 'INDIVIDUAL', avatar: decodeURIComponent(principal.userId), hasMultipleEMails: false, dropdownName: principal.displayname ? [principal.displayname, principal.email].join(' ') : principal.email }; }); }, async findAttendeesFromCircles(query) { let results; try { results = await (0,_services_circleService_js__WEBPACK_IMPORTED_MODULE_3__.circleSearchByName)(query); } catch (error) { console.debug(error); return []; } return results.filter(circle => { return true; }).map(circle => { return { commonName: circle.displayname, calendarUserType: 'GROUP', email: 'circle+' + circle.id + '@' + circle.instance, isUser: false, dropdownName: circle.displayname, type: 'circle', id: circle.id, subtitle: this.$n('calendar', '%n member', '%n members', circle.population) }; }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/OrganizerListItem.vue?vue&type=script&lang=js": /*!******************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/OrganizerListItem.vue?vue&type=script&lang=js ***! \******************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _AvatarParticipationStatus_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../AvatarParticipationStatus.vue */ "./src/components/Editor/AvatarParticipationStatus.vue"); /* harmony import */ var _utils_attendee_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../utils/attendee.js */ "./src/utils/attendee.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'OrganizerListItem', components: { AvatarParticipationStatus: _AvatarParticipationStatus_vue__WEBPACK_IMPORTED_MODULE_0__["default"] }, props: { organizer: { type: Object, required: true }, isReadOnly: { type: Boolean, required: true } }, computed: { /** * @return {string} */ avatarLink() { // return this.$store.getters.getAvatarForContact(this.uri) || this.commonName return this.commonName; }, /** * Common name of the attendee or the uri without the 'mailto:' prefix. * * @return {string} */ commonName() { if (this.organizer.commonName) { return this.organizer.commonName; } if (this.organizer.uri) { return (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_1__.removeMailtoPrefix)(this.organizer.uri); } return ''; }, isViewedByOrganizer() { return true; }, isResource() { // The organizer does not have a tooltip return false; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/NoAttendeesView.vue?vue&type=script&lang=js": /*!*******************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/NoAttendeesView.vue?vue&type=script&lang=js ***! \*******************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vue_material_design_icons_AccountMultiple_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-material-design-icons/AccountMultiple.vue */ "./node_modules/vue-material-design-icons/AccountMultiple.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'NoAttendeesView', components: { AccountMultiple: vue_material_design_icons_AccountMultiple_vue__WEBPACK_IMPORTED_MODULE_0__["default"] }, props: { message: { type: String, required: true } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/OrganizerNoEmailError.vue?vue&type=script&lang=js": /*!*************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/OrganizerNoEmailError.vue?vue&type=script&lang=js ***! \*************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'OrganizerNoEmailError', computed: { /** * This returns the caption of the warning message, including a link to the personal settings * * @return {string} */ htmlCaption() { return this.$t('calendar', 'To send out invitations and handle responses, [linkopen]add your email address in personal settings[linkclose].').replace('[linkopen]', "")).replace('[linkclose]', ''); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyColor.vue?vue&type=script&lang=js": /*!****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyColor.vue?vue&type=script&lang=js ***! \****************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../mixins/PropertyMixin.js */ "./src/mixins/PropertyMixin.js"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! debounce */ "./node_modules/debounce/index.js"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(debounce__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var vue_material_design_icons_Undo_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-material-design-icons/Undo.vue */ "./node_modules/vue-material-design-icons/Undo.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PropertyColor', components: { Actions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcActions, ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcActionButton, NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcButton, ColorPicker: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcColorPicker, Undo: vue_material_design_icons_Undo_vue__WEBPACK_IMPORTED_MODULE_2__["default"] }, mixins: [_mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__["default"]], props: { /** * The color of the calendar * this event is in */ calendarColor: { type: String, default: null } }, data() { return { isColorPickerOpen: false }; }, computed: { /** * The selected color is either custom or * defaults to the color of the calendar * * @return {string} */ selectedColor() { return this.value || this.calendarColor; }, /** * Whether or not to show the delete color button * * @return {boolean} */ showColorRevertButton() { if (this.isReadOnly) { return false; } return !!this.value; } }, methods: { /** * Changes / Sets the custom color of this event * * The problem we are facing here is that the * color-picker component uses normal hex colors, * but the RFC 7986 property COLOR requires * css-color-names. * * The color-space of css-color-names is smaller * than the one of hex colors. Hence the color- * picker (especially in the custom color-picker) * will jump after the color changed. To prevent * flickering, we only update the color after the * user stopped moving the color-picker and not * immediately. * * @param {string} newColor The new Color as HEX */ changeColor: debounce__WEBPACK_IMPORTED_MODULE_3___default()(function (newColor) { this.$emit('update:value', newColor); }, 500), /** * Removes the custom color from this event, * defaulting the color back to the calendar-color */ deleteColor() { this.$emit('update:value', null); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsPrivate.vue?vue&type=script&lang=js": /*!********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsPrivate.vue?vue&type=script&lang=js ***! \********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: "PropertyIsPrivate", components: { NcCheckboxRadioSwitch: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcCheckboxRadioSwitch }, props: { isPrivate: { type: Boolean, default: false }, isReadOnly: { type: Boolean, default: false } }, computed: { getIsPrivateLabel() { return this.isPrivate ? this.$t('calendar', 'Privé') : this.$t('calendar', 'Mettre en privé'); } }, methods: { toggleIsPrivate() { const newState = !this.isPrivate; this.$emit('toggle-is-private', newState); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyReturnToSiege.vue?vue&type=script&lang=js": /*!************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyReturnToSiege.vue?vue&type=script&lang=js ***! \************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: "PropertyReturnToSiege", components: { NcCheckboxRadioSwitch: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcCheckboxRadioSwitch }, props: { returnToSiege: { type: Boolean, default: false }, isReadOnly: { type: Boolean, default: false }, locationName: { type: String, default: '' } }, computed: { getReturnToSiegeLabel() { return this.returnToSiege ? this.$t('calendar', 'Retour vers H2F') : this.$t('calendar', 'Mettre en retour vers H2F'); } }, methods: { toggleReturnToSiege() { const newState = !this.returnToSiege; this.$emit('toggle-return-to-siege', newState); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelect.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelect.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../mixins/PropertyMixin.js */ "./src/mixins/PropertyMixin.js"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-material-design-icons/InformationVariant.vue */ "./node_modules/vue-material-design-icons/InformationVariant.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PropertySelect', components: { NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcSelect, InformationVariant: vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_2__["default"] }, mixins: [_mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__["default"]], computed: { display() { return true; }, options() { return this.propModel.options; }, selectedValue() { const value = this.value || this.propModel.defaultValue; return this.options.find(option => option.value === value); } }, methods: { changeValue(selectedOption) { if (!selectedOption) { return; } this.$emit('update:value', selectedOption.value); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAbsenceType.vue?vue&type=script&lang=js": /*!****************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAbsenceType.vue?vue&type=script&lang=js ***! \****************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../mixins/PropertyMixin.js */ "./src/mixins/PropertyMixin.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PropertySelectAbsenceType', components: { NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcSelect }, props: { isReadOnly: { type: Boolean, default: false // Par défaut, on permet la modification } }, data() { return { properties: [{ value: 'LEAVE', label: 'Congé' }, { value: 'REST', label: 'Repos' }, { value: 'DISEASE', label: 'Arrêt maladie' }] }; }, mixins: [_mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_1__["default"]], computed: { options() { return this.properties; }, selectedValue() { const value = this.value; return this.properties.find(option => option.value == value); } }, methods: { changeValue(selectedOption) { var _selectedOption$value; this.$emit('update:value', (_selectedOption$value = selectedOption.value) !== null && _selectedOption$value !== void 0 ? _selectedOption$value : null); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAjax.vue?vue&type=script&lang=js": /*!*********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAjax.vue?vue&type=script&lang=js ***! \*********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../mixins/PropertyMixin.js */ "./src/mixins/PropertyMixin.js"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-material-design-icons/InformationVariant.vue */ "./node_modules/vue-material-design-icons/InformationVariant.vue"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! html-entities */ "./node_modules/html-entities/lib/index.js"); /* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(html_entities__WEBPACK_IMPORTED_MODULE_5__); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PropertySelectAjax', components: { NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcSelect, InformationVariant: vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_2__["default"] }, props: { url: { type: String, required: false } }, data() { return { properties: [], // Data to populate the dropdown selectedProperty: null // Currently selected property }; }, mixins: [_mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__["default"]], computed: { display() { return true; }, options() { return this.properties; }, selectedValue() { const value = this.value || this.propModel.defaultValue; return this.properties.find(option => option.value === value); } }, mounted() { this.fetchProperties(); // Fetch data when the component is mounted }, methods: { fetchProperties() { const ajaxUrl = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_3__.generateUrl)(this.url); _nextcloud_axios__WEBPACK_IMPORTED_MODULE_4__["default"].get(ajaxUrl).then(response => { let results = JSON.parse(response.data); let values = []; results.forEach(result => { if (result.nom) { let v = (0,html_entities__WEBPACK_IMPORTED_MODULE_5__.decode)(result.nom); values.push({ value: v, label: v }); } else if (result.description) { let v = (0,html_entities__WEBPACK_IMPORTED_MODULE_5__.decode)(result.description); values.push({ value: v, label: v }); } else if (result.reference) { let v = (0,html_entities__WEBPACK_IMPORTED_MODULE_5__.decode)(result.reference); values.push({ value: v, label: v }); } }); this.properties = values; }).catch(error => { console.error('Error fetching properties:', error); }); }, changeValue(selectedOption) { if (!selectedOption) { return; } this.$emit('update:value', selectedOption.value); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAjaxMultiple.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAjaxMultiple.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../mixins/PropertyMixin.js */ "./src/mixins/PropertyMixin.js"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _PropertySelectMultipleColoredTag_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PropertySelectMultipleColoredTag.vue */ "./src/components/Editor/Properties/PropertySelectMultipleColoredTag.vue"); /* harmony import */ var _PropertySelectMultipleColoredOption_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./PropertySelectMultipleColoredOption.vue */ "./src/components/Editor/Properties/PropertySelectMultipleColoredOption.vue"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-material-design-icons/InformationVariant.vue */ "./node_modules/vue-material-design-icons/InformationVariant.vue"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! html-entities */ "./node_modules/html-entities/lib/index.js"); /* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(html_entities__WEBPACK_IMPORTED_MODULE_8__); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PropertySelectAjaxMultiple', components: { PropertySelectMultipleColoredOption: _PropertySelectMultipleColoredOption_vue__WEBPACK_IMPORTED_MODULE_3__["default"], PropertySelectMultipleColoredTag: _PropertySelectMultipleColoredTag_vue__WEBPACK_IMPORTED_MODULE_2__["default"], // eslint-disable-next-line vue/no-reserved-component-names NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcSelect, InformationVariant: vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_5__["default"] }, mixins: [_mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__["default"]], props: { url: { type: String, required: false }, coloredOptions: { type: Boolean, default: false }, closeOnSelect: { type: Boolean, default: false } }, data() { return { properties: [], selectionData: [] }; }, computed: { display() { return !(this.isReadOnly && this.selectionData.length === 0); }, options() { return this.properties; } }, mounted() { this.fetchProperties(); }, created() { if (this.value && typeof this.value === 'string') { let items = this.value.split(';'); for (const category of items) { var _this$options$find; // Create and select pseudo option if is not yet known const option = (_this$options$find = this.options.find(option => option.value === category)) !== null && _this$options$find !== void 0 ? _this$options$find : { label: category, value: category }; this.selectionData.push(option); } } else if (Symbol.iterator in Object(this.value)) { for (const category of this.value) { var _this$options$find2; // Create and select pseudo option if is not yet known const option = (_this$options$find2 = this.options.find(option => option.value === category)) !== null && _this$options$find2 !== void 0 ? _this$options$find2 : { label: category, value: category }; this.selectionData.push(option); } } }, methods: { fetchProperties() { const ajaxUrl = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_6__.generateUrl)(this.url); _nextcloud_axios__WEBPACK_IMPORTED_MODULE_7__["default"].get(ajaxUrl).then(response => { let results = JSON.parse(response.data); let values = []; results.forEach(result => { if (result.nom) { let v = (0,html_entities__WEBPACK_IMPORTED_MODULE_8__.decode)(result.nom); values.push({ value: v, label: v }); } else if (result.description) { let v = (0,html_entities__WEBPACK_IMPORTED_MODULE_8__.decode)(result.description); values.push({ value: v, label: v }); } else if (result.reference) { let v = (0,html_entities__WEBPACK_IMPORTED_MODULE_8__.decode)(result.reference); values.push({ value: v, label: v }); } }); this.properties = values; }).catch(error => { console.error('Error fetching properties:', error); }); }, unselectValue(value) { if (!value) { return; } this.$emit('remove-single-value', value.value); this.selectionData.splice(this.selectionData.findIndex(option => option.value === value.value), 1); // store removed custom options to keep it in the option list const options = this.propModel.options.slice(); if (!options.find(option => option.value === value.value)) { if (!this.customLabelBuffer) { this.customLabelBuffer = []; } this.customLabelBuffer.push(value); } }, tag(value) { if (!value) { return; } // budget deselectFromDropdown since the vue-select implementation doesn't work if (this.selectionData.find(option => option.value === value.value)) { this.selectionData.splice(this.selectionData.findIndex(option => option.value === value.value), 1); } this.selectionData.push(value); this.$emit('add-single-value', value.value); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectArticle.vue?vue&type=script&lang=js": /*!************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectArticle.vue?vue&type=script&lang=js ***! \************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../mixins/PropertyMixin.js */ "./src/mixins/PropertyMixin.js"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _PropertySelectMultipleColoredTag_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PropertySelectMultipleColoredTag.vue */ "./src/components/Editor/Properties/PropertySelectMultipleColoredTag.vue"); /* harmony import */ var _PropertySelectMultipleColoredOption_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./PropertySelectMultipleColoredOption.vue */ "./src/components/Editor/Properties/PropertySelectMultipleColoredOption.vue"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-material-design-icons/InformationVariant.vue */ "./node_modules/vue-material-design-icons/InformationVariant.vue"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! html-entities */ "./node_modules/html-entities/lib/index.js"); /* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(html_entities__WEBPACK_IMPORTED_MODULE_8__); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PropertySelectArticle', components: { PropertySelectMultipleColoredOption: _PropertySelectMultipleColoredOption_vue__WEBPACK_IMPORTED_MODULE_3__["default"], PropertySelectMultipleColoredTag: _PropertySelectMultipleColoredTag_vue__WEBPACK_IMPORTED_MODULE_2__["default"], // eslint-disable-next-line vue/no-reserved-component-names NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcSelect, InformationVariant: vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_5__["default"] }, mixins: [_mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__["default"]], props: { url: { type: String, required: false }, coloredOptions: { type: Boolean, default: false }, closeOnSelect: { type: Boolean, default: false } }, data() { return { properties: [], selectionData: [] }; }, computed: { display() { return !(this.isReadOnly && this.selectionData.length === 0); }, options() { return this.properties; } }, mounted() { this.fetchProperties(); }, created() { if (this.value && typeof this.value === 'string') { let items = this.value.split(';'); for (const category of items) { var _this$options$find; // Create and select pseudo option if is not yet known const option = (_this$options$find = this.options.find(option => option.value == category)) !== null && _this$options$find !== void 0 ? _this$options$find : { label: category, value: category }; this.selectionData.push(option); } } else if (Symbol.iterator in Object(this.value)) { for (const category of this.value) { var _this$options$find2; // Create and select pseudo option if is not yet known const option = (_this$options$find2 = this.options.find(option => option.value == category)) !== null && _this$options$find2 !== void 0 ? _this$options$find2 : { label: category, value: category }; this.selectionData.push(option); } } }, methods: { fetchProperties() { const ajaxUrl = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_6__.generateUrl)(this.url); _nextcloud_axios__WEBPACK_IMPORTED_MODULE_7__["default"].get(ajaxUrl).then(response => { let results = JSON.parse(response.data); let values = []; results.forEach(result => { let inputValue = (0,html_entities__WEBPACK_IMPORTED_MODULE_8__.decode)(result.reference); let inputLabel = (0,html_entities__WEBPACK_IMPORTED_MODULE_8__.decode)(result.reference); values.push({ value: inputValue.toString(), label: inputLabel }); }); this.properties = values; }).catch(error => { console.error('Error fetching properties:', error); }); }, unselectValue(value) { if (!value) { return; } this.$emit('remove-single-value', value.value); this.selectionData.splice(this.selectionData.findIndex(option => option.value == value.value), 1); // store removed custom options to keep it in the option list const options = this.propModel.options.slice(); if (!options.find(option => option.value == value.value)) { if (!this.customLabelBuffer) { this.customLabelBuffer = []; } this.customLabelBuffer.push(value); } }, tag(value) { if (!value) { return; } // budget deselectFromDropdown since the vue-select implementation doesn't work if (this.selectionData.find(option => option.value == value.value)) { this.selectionData.splice(this.selectionData.findIndex(option => option.value == value.value), 1); } this.selectionData.push(value); this.$emit('add-single-value', value.value); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectClient.vue?vue&type=script&lang=js": /*!***********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectClient.vue?vue&type=script&lang=js ***! \***********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../mixins/PropertyMixin.js */ "./src/mixins/PropertyMixin.js"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-material-design-icons/InformationVariant.vue */ "./node_modules/vue-material-design-icons/InformationVariant.vue"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! html-entities */ "./node_modules/html-entities/lib/index.js"); /* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(html_entities__WEBPACK_IMPORTED_MODULE_5__); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PropertySelectClient', components: { NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcSelect, InformationVariant: vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_2__["default"] }, props: { url: { type: String, required: false } }, data() { return { properties: [], // Data to populate the dropdown selectedProperty: null // Currently selected property }; }, mixins: [_mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__["default"]], computed: { display() { return true; }, options() { return this.properties; }, selectedValue() { const value = this.value || this.propModel.defaultValue; return this.properties.find(option => option.value.toString() === value); } }, mounted() { this.fetchProperties(); // Fetch data when the component is mounted }, methods: { fetchProperties() { const ajaxUrl = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_3__.generateUrl)(this.url); _nextcloud_axios__WEBPACK_IMPORTED_MODULE_4__["default"].get(ajaxUrl).then(response => { let results = JSON.parse(response.data); let values = []; results.forEach(result => { let inputValue = (0,html_entities__WEBPACK_IMPORTED_MODULE_5__.decode)(result.id); let inputLabel = (0,html_entities__WEBPACK_IMPORTED_MODULE_5__.decode)(result.nom); values.push({ value: inputValue.toString(), label: inputLabel }); }); this.properties = values; }).catch(error => { console.error('Error fetching properties:', error); }); }, changeValue(selectedOption) { if (!selectedOption) { return; } this.$emit('update:value', selectedOption.value); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectLieu.vue?vue&type=script&lang=js": /*!*********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectLieu.vue?vue&type=script&lang=js ***! \*********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../mixins/PropertyMixin.js */ "./src/mixins/PropertyMixin.js"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-material-design-icons/InformationVariant.vue */ "./node_modules/vue-material-design-icons/InformationVariant.vue"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! html-entities */ "./node_modules/html-entities/lib/index.js"); /* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(html_entities__WEBPACK_IMPORTED_MODULE_5__); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PropertySelectLieu', components: { NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcSelect, InformationVariant: vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_2__["default"] }, props: { url: { type: String, required: false } }, data() { return { properties: [], // Data to populate the dropdown selectedProperty: null // Currently selected property }; }, mixins: [_mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__["default"]], computed: { display() { return true; }, options() { return this.properties; }, selectedValue() { const value = this.value || this.propModel.defaultValue; return this.properties.find(option => option.value.toString() === value); } }, mounted() { this.fetchProperties(); // Fetch data when the component is mounted }, methods: { fetchProperties() { const ajaxUrl = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_3__.generateUrl)(this.url); _nextcloud_axios__WEBPACK_IMPORTED_MODULE_4__["default"].get(ajaxUrl).then(response => { let results = JSON.parse(response.data); let values = []; results.forEach(result => { let inputValue = (0,html_entities__WEBPACK_IMPORTED_MODULE_5__.decode)(result.id); let inputLabel = (0,html_entities__WEBPACK_IMPORTED_MODULE_5__.decode)(result.nom); values.push({ value: inputValue.toString(), label: inputLabel }); }); this.properties = values; }).catch(error => { console.error('Error fetching properties:', error); }); }, changeValue(selectedOption) { if (!selectedOption) { return; } this.$emit('update:value', selectedOption.value); this.$emit('lieu:selected', selectedOption.label); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectMultiple.vue?vue&type=script&lang=js": /*!*************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectMultiple.vue?vue&type=script&lang=js ***! \*************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../mixins/PropertyMixin.js */ "./src/mixins/PropertyMixin.js"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _PropertySelectMultipleColoredTag_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PropertySelectMultipleColoredTag.vue */ "./src/components/Editor/Properties/PropertySelectMultipleColoredTag.vue"); /* harmony import */ var _PropertySelectMultipleColoredOption_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./PropertySelectMultipleColoredOption.vue */ "./src/components/Editor/Properties/PropertySelectMultipleColoredOption.vue"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-material-design-icons/InformationVariant.vue */ "./node_modules/vue-material-design-icons/InformationVariant.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PropertySelectMultiple', components: { PropertySelectMultipleColoredOption: _PropertySelectMultipleColoredOption_vue__WEBPACK_IMPORTED_MODULE_3__["default"], PropertySelectMultipleColoredTag: _PropertySelectMultipleColoredTag_vue__WEBPACK_IMPORTED_MODULE_2__["default"], // eslint-disable-next-line vue/no-reserved-component-names NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcSelect, InformationVariant: vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_5__["default"] }, mixins: [_mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_0__["default"]], props: { coloredOptions: { type: Boolean, default: false }, closeOnSelect: { type: Boolean, default: false } }, data() { return { selectionData: [] }; }, computed: { display() { return !(this.isReadOnly && this.selectionData.length === 0); }, options() { const options = this.propModel.options.slice(); for (const category of (_this$selectionData = this.selectionData) !== null && _this$selectionData !== void 0 ? _this$selectionData : []) { var _this$selectionData; if (options.find(option => option.value === category.value)) { continue; } // Add pseudo options for unknown values options.push({ value: category.value, label: category.label }); } for (const category of this.value) { if (!options.find(option => option.value === category) && category !== undefined) { options.splice(options.findIndex(options => options.value === category), 1); } } if (this.customLabelBuffer) { for (const category of this.customLabelBuffer) { if (!options.find(option => option.value === category.value)) { options.push(category); } } } return options.sort((a, b) => { return a.label.localeCompare(b.label, (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_4__.getLocale)().replace('_', '-'), { sensitivity: 'base' }); }); } }, created() { for (const category of this.value) { var _this$options$find; // Create and select pseudo option if is not yet known const option = (_this$options$find = this.options.find(option => option.value === category)) !== null && _this$options$find !== void 0 ? _this$options$find : { label: category, value: category }; this.selectionData.push(option); } }, methods: { unselectValue(value) { if (!value) { return; } this.$emit('remove-single-value', value.value); this.selectionData.splice(this.selectionData.findIndex(option => option.value === value.value), 1); // store removed custom options to keep it in the option list const options = this.propModel.options.slice(); if (!options.find(option => option.value === value.value)) { if (!this.customLabelBuffer) { this.customLabelBuffer = []; } this.customLabelBuffer.push(value); } }, tag(value) { if (!value) { return; } // budget deselectFromDropdown since the vue-select implementation doesn't work if (this.selectionData.find(option => option.value === value.value)) { this.selectionData.splice(this.selectionData.findIndex(option => option.value === value.value), 1); } this.selectionData.push(value); this.$emit('add-single-value', value.value); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectMultipleColoredOption.vue?vue&type=script&lang=js": /*!**************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectMultipleColoredOption.vue?vue&type=script&lang=js ***! \**************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _utils_uidToColor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../utils/uidToColor.js */ "./src/utils/uidToColor.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../utils/logger.js */ "./src/utils/logger.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PropertySelectMultipleColoredOption', props: { option: { type: [String, Object], required: true }, closeable: { type: Boolean, default: false } }, emits: ['deselect'], computed: { label() { const option = this.option; _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].debug('Option render', { option }); if (typeof this.option === 'string') { return this.option; } return this.option.label; }, colorObject() { return (0,_utils_uidToColor_js__WEBPACK_IMPORTED_MODULE_0__.uidToColor)(this.label); }, color() { const color = this.colorObject; return "rgb(".concat(color.r, ",").concat(color.g, ",").concat(color.b, ")"); } }, methods: { deselect() { this.$emit('deselect', this.option); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectMultipleColoredTag.vue?vue&type=script&lang=js": /*!***********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectMultipleColoredTag.vue?vue&type=script&lang=js ***! \***********************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _utils_uidToColor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../utils/uidToColor.js */ "./src/utils/uidToColor.js"); /* harmony import */ var _utils_color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../utils/color.js */ "./src/utils/color.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PropertySelectMultipleColoredTag', props: { option: { type: [String, Object], required: true }, search: { type: String, default: undefined }, remove: { type: Function, default: () => {} } }, computed: { label() { if (typeof this.option === 'string') { return this.option; } return this.option.label; }, colorObject() { if (typeof this.option === 'string') { return (0,_utils_uidToColor_js__WEBPACK_IMPORTED_MODULE_0__.uidToColor)(this.option); } return (0,_utils_uidToColor_js__WEBPACK_IMPORTED_MODULE_0__.uidToColor)(this.option.label); }, borderColor() { const color = this.colorObject; return "rgb(".concat(color.r, ",").concat(color.g, ",").concat(color.b, ")"); }, color() { const color = this.colorObject; return "rgba(".concat(color.r, ",").concat(color.g, ",").concat(color.b, ",0.7)"); }, textColor() { const color = this.colorObject; return (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_1__.generateTextColorForRGB)({ red: color.r, green: color.g, blue: color.b }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyText.vue?vue&type=script&lang=js": /*!***************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyText.vue?vue&type=script&lang=js ***! \***************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _directives_autosize_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../directives/autosize.js */ "./src/directives/autosize.js"); /* harmony import */ var _mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../mixins/PropertyMixin.js */ "./src/mixins/PropertyMixin.js"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-material-design-icons/InformationVariant.vue */ "./node_modules/vue-material-design-icons/InformationVariant.vue"); /* harmony import */ var _mixins_PropertyLinksMixin_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../mixins/PropertyLinksMixin.js */ "./src/mixins/PropertyLinksMixin.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PropertyText', directives: { autosize: _directives_autosize_js__WEBPACK_IMPORTED_MODULE_0__["default"], Linkify: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_2__.Linkify, InformationVariant: vue_material_design_icons_InformationVariant_vue__WEBPACK_IMPORTED_MODULE_3__["default"] }, mixins: [_mixins_PropertyMixin_js__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_PropertyLinksMixin_js__WEBPACK_IMPORTED_MODULE_4__["default"]], computed: { display() { if (this.isReadOnly) { if (typeof this.value !== 'string') { return false; } if (this.value.trim() === '') { return false; } } return true; }, /** * Returns the default number of rows for a textarea. * This is used to give the description field an automatic size 2 rows * * @return {number} */ rows() { return this.propModel.defaultNumberOfRows || 1; } }, methods: { changeValue(event) { if (event.target.value.trim() === '') { this.$emit('update:value', null); } else { this.$emit('update:value', event.target.value); } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyTitle.vue?vue&type=script&lang=js": /*!****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyTitle.vue?vue&type=script&lang=js ***! \****************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _directives_focus_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../directives/focus.js */ "./src/directives/focus.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PropertyTitle', directives: { focus: _directives_focus_js__WEBPACK_IMPORTED_MODULE_0__["default"] }, props: { isReadOnly: { type: Boolean, required: true }, value: { type: String, default: '' } }, methods: { changeValue(event) { this.$emit('update:value', event.target.value); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyTitleTimePicker.vue?vue&type=script&lang=js": /*!**************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyTitleTimePicker.vue?vue&type=script&lang=js ***! \**************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /* harmony import */ var _Shared_DatePicker_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Shared/DatePicker.vue */ "./src/components/Shared/DatePicker.vue"); /* harmony import */ var vue_material_design_icons_Web_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-material-design-icons/Web.vue */ "./node_modules/vue-material-design-icons/Web.vue"); /* harmony import */ var vue_material_design_icons_Calendar_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-material-design-icons/Calendar.vue */ "./node_modules/vue-material-design-icons/Calendar.vue"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PropertyTitleTimePicker', components: { DatePicker: _Shared_DatePicker_vue__WEBPACK_IMPORTED_MODULE_1__["default"], IconTimezone: vue_material_design_icons_Web_vue__WEBPACK_IMPORTED_MODULE_2__["default"], CalendarIcon: vue_material_design_icons_Calendar_vue__WEBPACK_IMPORTED_MODULE_3__["default"], NcCheckboxRadioSwitch: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_4__.NcCheckboxRadioSwitch }, props: { /** * Whether or not the editor is viewed in read-only */ isReadOnly: { type: Boolean, required: true }, /** * Start date of the event */ startDate: { type: Date, required: true }, /** * Timezone of the start date */ startTimezone: { type: String, required: true }, /** * End date of the event */ endDate: { type: Date, required: true }, /** * Timezone of the end date */ endTimezone: { type: String, required: true }, /** * Whether or not the event is all-day */ isAllDay: { type: Boolean, required: true }, /** * Whether or not the user can toggle the all-day property * This is set to false, whenever this event is part of a recurrence-set */ canModifyAllDay: { type: Boolean, required: true }, /** * The current timezone of the user * This is used to highlight if the event is in a different timezone */ userTimezone: { type: String, required: true }, /** * Whether to append the datepickers to body or not. * Necessary in the AppSidebar, otherwise it will be cut off be the * AppSidebar edges. */ appendToBody: { type: Boolean, default: false } }, data() { return { showStartTimezone: false, showEndTimezone: false }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_5__.mapState)({ locale: state => state.settings.momentLocale }), /** * Tooltip for the All-day checkbox. * If the all-day checkbox is disabled, this tooltip gives an explanation to the user * why it is disabled * * @return {string|null} */ allDayTooltip() { if (this.canModifyAllDay) { return null; } if (this.isReadOnly) { return null; } return this.$t('calendar', 'Cannot modify all-day setting for events that are part of a recurrence-set.'); }, /** * * @return {string} */ formattedStart() { if (this.isAllDay) { return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"])(this.startDate).locale(this.locale).format('ll'); } return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"])(this.startDate).locale(this.locale).format('lll'); }, /** * * @return {string} */ formattedEnd() { if (this.isAllDay) { return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"])(this.endDate).locale(this.locale).format('ll'); } return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"])(this.endDate).locale(this.locale).format('lll'); }, /** * @return {boolean} */ highlightStartTimezone() { return this.startTimezone !== this.userTimezone; }, /** * @return {boolean} */ highlightEndTimezone() { return this.endTimezone !== this.userTimezone; }, /** * True if the event is an all day event, starts and ends on the same date * * @return {boolean} */ isAllDayOneDayEvent() { return this.isAllDay && this.startDate.getDate() === this.endDate.getDate() && this.startDate.getMonth() === this.endDate.getMonth() && this.startDate.getFullYear() === this.endDate.getFullYear(); } }, methods: { /** * Update the start date * * @param {Date} value The new start date */ changeStart(value) { this.$emit('update-start-date', value); }, /** * Updates the timezone of the start date * * @param {string} value The new start timezone */ changeStartTimezone(value) { // If the value didn't change, value is null if (!value) { return; } this.$emit('update-start-timezone', value); }, /** * Update the end date * * @param {Date} value The new end date */ changeEnd(value) { this.$emit('update-end-date', value); }, /** * Updates the timezone of the end date * * @param {string} value The new end timezone */ changeEndTimezone(value) { // If the value didn't change, value is null if (!value) { return; } this.$emit('update-end-timezone', value); }, /** * Toggles the all-day state of an event */ toggleAllDay() { if (!this.canModifyAllDay) { return; } this.$emit('toggle-all-day'); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/Repeat.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/Repeat.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _RepeatEndRepeat_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RepeatEndRepeat.vue */ "./src/components/Editor/Repeat/RepeatEndRepeat.vue"); /* harmony import */ var _RepeatFreqWeeklyOptions_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RepeatFreqWeeklyOptions.vue */ "./src/components/Editor/Repeat/RepeatFreqWeeklyOptions.vue"); /* harmony import */ var _RepeatFreqMonthlyOptions_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./RepeatFreqMonthlyOptions.vue */ "./src/components/Editor/Repeat/RepeatFreqMonthlyOptions.vue"); /* harmony import */ var _RepeatFreqYearlyOptions_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./RepeatFreqYearlyOptions.vue */ "./src/components/Editor/Repeat/RepeatFreqYearlyOptions.vue"); /* harmony import */ var _RepeatFreqInterval_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./RepeatFreqInterval.vue */ "./src/components/Editor/Repeat/RepeatFreqInterval.vue"); /* harmony import */ var _RepeatUnsupportedWarning_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./RepeatUnsupportedWarning.vue */ "./src/components/Editor/Repeat/RepeatUnsupportedWarning.vue"); /* harmony import */ var _RepeatExceptionWarning_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./RepeatExceptionWarning.vue */ "./src/components/Editor/Repeat/RepeatExceptionWarning.vue"); /* harmony import */ var _RepeatSummary_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./RepeatSummary.vue */ "./src/components/Editor/Repeat/RepeatSummary.vue"); /* harmony import */ var vue_material_design_icons_Repeat_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! vue-material-design-icons/Repeat.vue */ "./node_modules/vue-material-design-icons/Repeat.vue"); /* harmony import */ var vue_material_design_icons_Pencil_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! vue-material-design-icons/Pencil.vue */ "./node_modules/vue-material-design-icons/Pencil.vue"); /* harmony import */ var vue_material_design_icons_Check_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! vue-material-design-icons/Check.vue */ "./node_modules/vue-material-design-icons/Check.vue"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'Repeat', components: { RepeatSummary: _RepeatSummary_vue__WEBPACK_IMPORTED_MODULE_7__["default"], RepeatExceptionWarning: _RepeatExceptionWarning_vue__WEBPACK_IMPORTED_MODULE_6__["default"], RepeatFreqInterval: _RepeatFreqInterval_vue__WEBPACK_IMPORTED_MODULE_4__["default"], RepeatFreqYearlyOptions: _RepeatFreqYearlyOptions_vue__WEBPACK_IMPORTED_MODULE_3__["default"], RepeatFreqMonthlyOptions: _RepeatFreqMonthlyOptions_vue__WEBPACK_IMPORTED_MODULE_2__["default"], RepeatFreqWeeklyOptions: _RepeatFreqWeeklyOptions_vue__WEBPACK_IMPORTED_MODULE_1__["default"], RepeatEndRepeat: _RepeatEndRepeat_vue__WEBPACK_IMPORTED_MODULE_0__["default"], RepeatUnsupportedWarning: _RepeatUnsupportedWarning_vue__WEBPACK_IMPORTED_MODULE_5__["default"], RepeatIcon: vue_material_design_icons_Repeat_vue__WEBPACK_IMPORTED_MODULE_8__["default"], Pencil: vue_material_design_icons_Pencil_vue__WEBPACK_IMPORTED_MODULE_9__["default"], Check: vue_material_design_icons_Check_vue__WEBPACK_IMPORTED_MODULE_10__["default"], Actions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_11__.NcActions, ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_11__.NcActionButton }, props: { /** * The calendar-object instance */ calendarObjectInstance: { type: Object, required: true }, /** * The recurrence-rule to display */ recurrenceRule: { type: Object, required: true }, /** * Whether or not the event is read-only */ isReadOnly: { type: Boolean, required: true }, /** * Whether or not the user is editing the master-item * If so, we are enforcing "This and all future" and * don't allow to just save this occurrence */ isEditingMasterItem: { type: Boolean, required: true }, /** * Whether or not this instance of the event is a recurrence-exception. * If yes, you can't modify the recurrence-rule */ isRecurrenceException: { type: Boolean, required: true } }, data() { return { showOptions: false }; }, computed: { /** * Whether or not this event is recurring * * @return {boolean} */ isRepeating() { return this.recurrenceRule.frequency !== 'NONE'; }, /** * Whether or not this event is recurring weekly * * @return {boolean} */ isFreqWeekly() { return this.recurrenceRule.frequency === 'WEEKLY'; }, /** * Whether or not this event is recurring monthly * * @return {boolean} */ isFreqMonthly() { return this.recurrenceRule.frequency === 'MONTHLY'; }, /** * Whether or not this event is recurring yearly * * @return {boolean} */ isFreqYearly() { return this.recurrenceRule.frequency === 'YEARLY'; }, /** * The name of the icon for the toggle options button * * @return {string} */ toggleIcon() { if (this.showOptions) { return 'Check'; } return 'Pencil'; }, /** * The text of the toggle options button * * @return {string} */ toggleTitle() { if (this.showOptions) { return this.t('calendar', 'Save'); } return this.t('calendar', 'Edit'); } }, methods: { /** * Changes the interval of recurrence * * @param {number} interval Any positive integer */ changeInterval(interval) { this.$store.commit('changeRecurrenceInterval', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule, interval }); this.modified(); }, /** * Changes the frequency of recurrence * * @param {string} frequency Allowed values: NONE, DAILY, WEEKLY, MONTHLY, YEARLY */ changeFrequency(frequency) { this.$store.dispatch('changeRecurrenceFrequency', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule, frequency }); this.modified(); }, /** * Adds a day to the ByDay part of the recurrence-rule * * @param {string} byDay Day to add */ addByDay(byDay) { this.$store.commit('addByDayToRecurrenceRule', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule, byDay }); this.modified(); }, /** * Removes a day from the ByDay part of the recurrence-rule * * @param {string} byDay Day to remove */ removeByDay(byDay) { this.$store.commit('removeByDayFromRecurrenceRule', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule, byDay }); this.modified(); }, /** * Adds a month-day to the ByMonthDay part of the recurrence-rule * * @param {string} byMonthDay Month-day to add */ addByMonthDay(byMonthDay) { this.$store.commit('addByMonthDayToRecurrenceRule', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule, byMonthDay }); this.modified(); }, /** * Removes a month-day from the ByMonthDay part of the recurrence-rule * * @param {string} byMonthDay Month-day to remove */ removeByMonthDay(byMonthDay) { this.$store.commit('removeByMonthDayFromRecurrenceRule', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule, byMonthDay }); this.modified(); }, /** * Adds a month to the ByMonth part of the recurrence-rule * * @param {string} byMonth Month to add */ addByMonth(byMonth) { this.$store.commit('addByMonthToRecurrenceRule', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule, byMonth }); this.modified(); }, /** * Removes a month-day from the ByMonth part of the recurrence-rule * * @param {string} byMonth Month to remove */ removeByMonth(byMonth) { this.$store.commit('removeByMonthFromRecurrenceRule', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule, byMonth }); this.modified(); }, /** * Overrides the entire byDay-list of the recurrence-rule * * @param {string[]} byDay The new by-day-list to use */ setByDay(byDay) { this.$store.commit('changeRecurrenceByDay', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule, byDay }); this.modified(); }, /** * Overrides the set-position of the recurrence-rule * RFC5545 technically allows a list of set-position, * we only allow one value at most * * @param {number} bySetPosition The new By-set-position part to set */ setBySetPosition(bySetPosition) { this.$store.commit('changeRecurrenceBySetPosition', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule, bySetPosition }); this.modified(); }, /** * Changes the monthly recurrence-editor from the selection of monthdays * to the selection of a relative position within the month */ changeToBySetPositionMonthly() { this.$store.dispatch('changeMonthlyRecurrenceFromByDayToBySetPosition', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule }); this.modified(); }, /** * Changes the monthly recurrence-editor from the relative position within the month * to the selection of monthdays */ changeToByDayMonthly() { this.$store.dispatch('changeMonthlyRecurrenceFromBySetPositionToByDay', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule }); this.modified(); }, /** * Enables the setting of a relative position within the month in the yearly recurrence-editor */ enableBySetPositionYearly() { this.$store.dispatch('enableYearlyRecurrenceBySetPosition', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule }); this.modified(); }, /** * Disables the setting of a relative position within the month in the yearly recurrence-editor */ disableBySetPositionYearly() { this.$store.dispatch('disableYearlyRecurrenceBySetPosition', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule }); this.modified(); }, /** * Sets the recurrence-set to infinite recurrences */ setInfinite() { this.$store.dispatch('setRecurrenceToInfinite', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule }); this.modified(); }, /** * */ changeToUntil() { this.$store.dispatch('enableRecurrenceLimitByUntil', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule }); this.modified(); }, /** * Sets the recurrence-set to end on a specific date. * Unlike DTEND, which is the exclusive end, * UNTIL is defined as the inclusive end of the recurrence-set * * @param {Date} until Date to set as new end of recurrence-set */ setUntil(until) { this.$store.commit('changeRecurrenceUntil', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule, until }); this.modified(); }, /** * */ changeToCount() { this.$store.dispatch('enableRecurrenceLimitByCount', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule }); this.modified(); }, /** * Sets the recurrence-set to end on a specific date * * @param {number} count New number of recurrences to set */ setCount(count) { this.$store.commit('changeRecurrenceCount', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule, count }); this.modified(); }, /** * */ modified() { if (this.recurrenceRule.isUnsupported) { this.$store.commit('markRecurrenceRuleAsSupported', { calendarObjectInstance: this.calendarObjectInstance, recurrenceRule: this.recurrenceRule }); } if (!this.isEditingMasterItem) { this.$emit('force-this-and-all-future'); } }, /** * Toggle visibility of the options */ toggleOptions() { this.showOptions = !this.showOptions; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatEndRepeat.vue?vue&type=script&lang=js": /*!**************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatEndRepeat.vue?vue&type=script&lang=js ***! \**************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _Shared_DatePicker_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Shared/DatePicker.vue */ "./src/components/Shared/DatePicker.vue"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'RepeatEndRepeat', components: { DatePicker: _Shared_DatePicker_vue__WEBPACK_IMPORTED_MODULE_0__["default"], NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcSelect }, props: { /** * The calendar-object instance */ calendarObjectInstance: { type: Object, required: true }, count: { type: Number, default: null }, until: { type: Date, default: null } }, computed: { /** * The minimum date the user can select in the until date-picker * * @return {Date} */ minimumDate() { return this.calendarObjectInstance.startDate; }, /** * The maximum date the user can select in the until date-picker * * @return {Date} */ maximumDate() { return new Date(this.$store.state.davRestrictions.maximumDate); }, /** * Whether or not this event is recurring until a given date * * @return {boolean} */ isUntil() { return this.count === null && this.until !== null; }, /** * Whether or not this event is recurring after a given amount of occurrences * * @return {boolean} */ isCount() { return this.count !== null && this.until === null; }, /** * Label for time/times * * @return {string} */ occurrencesLabel() { return this.$n('calendar', 'time', 'times', this.count); }, /** * Options for recurrence-end * * @return {object[]} */ options() { return [{ label: this.$t('calendar', 'never'), value: 'never' }, { label: this.$t('calendar', 'on date'), value: 'until' }, { label: this.$t('calendar', 'after'), value: 'count' }]; }, /** * The selected option for the recurrence-end * * @return {object} */ selectedOption() { if (this.count !== null) { return this.options.find(option => option.value === 'count'); } else if (this.until !== null) { return this.options.find(option => option.value === 'until'); } else { return this.options.find(option => option.value === 'never'); } } }, methods: { /** * Changes the type of recurrence-end * Whether it ends never, on a given date or after an amount of occurrences * * @param {object} value The new type of recurrence-end to select */ changeEndType(value) { console.debug(value); if (!value) { return; } switch (value.value) { case 'until': this.$emit('change-to-until'); break; case 'count': this.$emit('change-to-count'); break; case 'never': default: this.$emit('set-infinite'); } }, /** * Changes the until-date of this recurrence-set * * @param {Date} date The new date to set as end */ changeUntil(date) { this.$emit('set-until', date); }, /** * Changes the number of occurrences in this recurrence-set * * @param {Event} event The input event */ changeCount(event) { const minimumValue = parseInt(event.target.min, 10); const maximumValue = parseInt(event.target.max, 10); const selectedValue = parseInt(event.target.value, 10); if (selectedValue >= minimumValue && selectedValue <= maximumValue) { this.$emit('set-count', selectedValue); } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatExceptionWarning.vue?vue&type=script&lang=js": /*!*********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatExceptionWarning.vue?vue&type=script&lang=js ***! \*********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'RepeatExceptionWarning' }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFirstLastSelect.vue?vue&type=script&lang=js": /*!********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFirstLastSelect.vue?vue&type=script&lang=js ***! \********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'RepeatFirstLastSelect', components: { NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcSelect }, props: { /** * */ bySetPosition: { type: Number, default: null }, /** * */ disabled: { type: Boolean, required: true } }, computed: { options() { return [{ label: this.$t('calendar', 'first'), value: 1 }, { label: this.$t('calendar', 'second'), value: 2 }, { label: this.$t('calendar', 'third'), value: 3 }, { label: this.$t('calendar', 'fourth'), value: 4 }, { label: this.$t('calendar', 'fifth'), value: 5 }, { label: this.$t('calendar', 'second to last'), value: -2 }, { label: this.$t('calendar', 'last'), value: -1 }]; }, selected() { return this.options.find(option => option.value === this.bySetPosition); } }, methods: { select(value) { if (!value) { return; } console.debug(value); this.$emit('change', value.value); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqInterval.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqInterval.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _RepeatFreqSelect_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RepeatFreqSelect.vue */ "./src/components/Editor/Repeat/RepeatFreqSelect.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'RepeatFreqInterval', components: { RepeatFreqSelect: _RepeatFreqSelect_vue__WEBPACK_IMPORTED_MODULE_0__["default"] }, props: { frequency: { type: String, required: true }, interval: { type: Number, required: true } }, computed: { repeatEveryLabel() { console.debug(this.frequency); if (this.frequency === 'NONE') { return this.$t('calendar', 'Repeat'); } return this.$t('calendar', 'Repeat every'); }, isIntervalDisabled() { return this.frequency === 'NONE'; } }, methods: { changeFrequency(value) { this.$emit('change-frequency', value); }, /** * * @param {Event} event The Input-event triggered when modifying the input */ changeInterval(event) { const minimumValue = parseInt(event.target.min, 10); const maximumValue = parseInt(event.target.max, 10); const selectedValue = parseInt(event.target.value, 10); if (selectedValue >= minimumValue && selectedValue <= maximumValue) { this.$emit('change-interval', selectedValue); } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqMonthlyOptions.vue?vue&type=script&lang=js": /*!***********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqMonthlyOptions.vue?vue&type=script&lang=js ***! \***********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _RepeatFirstLastSelect_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RepeatFirstLastSelect.vue */ "./src/components/Editor/Repeat/RepeatFirstLastSelect.vue"); /* harmony import */ var _RepeatOnTheSelect_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./RepeatOnTheSelect.vue */ "./src/components/Editor/Repeat/RepeatOnTheSelect.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'RepeatFreqMonthlyOptions', components: { NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton, RepeatOnTheSelect: _RepeatOnTheSelect_vue__WEBPACK_IMPORTED_MODULE_2__["default"], RepeatFirstLastSelect: _RepeatFirstLastSelect_vue__WEBPACK_IMPORTED_MODULE_1__["default"], ActionRadio: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionRadio }, props: { /** * */ byDay: { type: Array, required: true }, /** * */ byMonthDay: { type: Array, required: true }, /** * */ bySetPosition: { type: Number, default: null } }, computed: { /** * @return {object[]} */ byMonthDayOptions() { const options = []; for (let i = 1; i <= 31; i++) { options.push({ label: i, value: String(i), selected: this.byMonthDay.indexOf(String(i)) !== -1 }); } return options; }, /** * @return {boolean} */ byMonthDayEnabled() { return this.byMonthDay.length > 0; }, /** * @return {string} */ radioInputId() { return this._uid + '-radio-select'; } }, methods: { /** * * @param {string} byMonthDay The month-day to toggle */ toggleByMonthDay(byMonthDay) { if (this.byMonthDay.indexOf(byMonthDay) === -1) { this.$emit('add-by-month-day', byMonthDay); } else { if (this.byMonthDay.length > 1) { this.$emit('remove-by-month-day', byMonthDay); } } }, enableByMonthDay() { if (this.byMonthDayEnabled) { return; } this.$emit('change-to-by-day'); }, enableBySetPosition() { if (!this.byMonthDayEnabled) { return; } this.$emit('change-to-by-set-position'); }, changeByDay(value) { this.$emit('change-by-day', value); }, changeBySetPosition(value) { this.$emit('change-by-set-position', value); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqSelect.vue?vue&type=script&lang=js": /*!***************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqSelect.vue?vue&type=script&lang=js ***! \***************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'RepeatFreqSelect', components: { NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcSelect }, props: { freq: { type: String, required: true }, count: { type: Number, required: true } }, computed: { options() { return [{ label: this.$t('calendar', 'never'), freq: 'NONE' }, { label: this.$n('calendar', 'day', 'days', this.count), freq: 'DAILY' }, { label: this.$n('calendar', 'week', 'weeks', this.count), freq: 'WEEKLY' }, { label: this.$n('calendar', 'month', 'months', this.count), freq: 'MONTHLY' }, { label: this.$n('calendar', 'year', 'years', this.count), freq: 'YEARLY' }]; }, selected() { return this.options.find(o => o.freq === this.freq); } }, methods: { select(value) { if (!value) { return; } this.$emit('change', value.freq); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqWeeklyOptions.vue?vue&type=script&lang=js": /*!**********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqWeeklyOptions.vue?vue&type=script&lang=js ***! \**********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'RepeatFreqWeeklyOptions', components: { NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton }, props: { byDay: { type: Array, required: true } }, computed: { options() { const dayNamesMin = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__.getDayNamesMin)(); return [{ label: dayNamesMin[1], value: 'MO', selected: this.byDay.includes('MO') }, { label: dayNamesMin[2], value: 'TU', selected: this.byDay.includes('TU') }, { label: dayNamesMin[3], value: 'WE', selected: this.byDay.includes('WE') }, { label: dayNamesMin[4], value: 'TH', selected: this.byDay.includes('TH') }, { label: dayNamesMin[5], value: 'FR', selected: this.byDay.includes('FR') }, { label: dayNamesMin[6], value: 'SA', selected: this.byDay.includes('SA') }, { label: dayNamesMin[0], value: 'SU', selected: this.byDay.includes('SU') }]; } }, methods: { toggleByDay(day) { if (this.byDay.indexOf(day) === -1) { this.$emit('add-by-day', day); } else { if (this.byDay.length > 1) { this.$emit('remove-by-day', day); } } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqYearlyOptions.vue?vue&type=script&lang=js": /*!**********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqYearlyOptions.vue?vue&type=script&lang=js ***! \**********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _RepeatFirstLastSelect_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RepeatFirstLastSelect.vue */ "./src/components/Editor/Repeat/RepeatFirstLastSelect.vue"); /* harmony import */ var _RepeatOnTheSelect_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./RepeatOnTheSelect.vue */ "./src/components/Editor/Repeat/RepeatOnTheSelect.vue"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'RepeatFreqYearlyOptions', components: { ActionCheckbox: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionCheckbox, NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton, RepeatFirstLastSelect: _RepeatFirstLastSelect_vue__WEBPACK_IMPORTED_MODULE_1__["default"], RepeatOnTheSelect: _RepeatOnTheSelect_vue__WEBPACK_IMPORTED_MODULE_2__["default"] }, props: { /** * */ byDay: { type: Array, required: true }, /** * */ byMonth: { type: Array, required: true }, /** * */ bySetPosition: { type: Number, default: null } }, computed: { options() { const monthNamesShort = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__.getMonthNamesShort)(); console.debug(this.byMonth); return [{ label: monthNamesShort[0], value: 1, selected: this.byMonth.includes(1) }, { label: monthNamesShort[1], value: 2, selected: this.byMonth.includes(2) }, { label: monthNamesShort[2], value: 3, selected: this.byMonth.includes(3) }, { label: monthNamesShort[3], value: 4, selected: this.byMonth.includes(4) }, { label: monthNamesShort[4], value: 5, selected: this.byMonth.includes(5) }, { label: monthNamesShort[5], value: 6, selected: this.byMonth.includes(6) }, { label: monthNamesShort[6], value: 7, selected: this.byMonth.includes(7) }, { label: monthNamesShort[7], value: 8, selected: this.byMonth.includes(8) }, { label: monthNamesShort[8], value: 9, selected: this.byMonth.includes(9) }, { label: monthNamesShort[9], value: 10, selected: this.byMonth.includes(10) }, { label: monthNamesShort[10], value: 11, selected: this.byMonth.includes(11) }, { label: monthNamesShort[11], value: 12, selected: this.byMonth.includes(12) }]; }, /** * * * @return {boolean} */ isBySetPositionEnabled() { return this.bySetPosition !== null; } }, methods: { /** * * @param {string} byMonth The month to toggle */ toggleByMonth(byMonth) { if (this.byMonth.indexOf(byMonth) === -1) { this.$emit('add-by-month', byMonth); } else { if (this.byMonth.length > 1) { this.$emit('remove-by-month', byMonth); } } }, /** * Toggles the BySetPosition option for yearly */ toggleBySetPosition() { if (this.isBySetPositionEnabled) { this.$emit('disable-by-set-position'); } else { this.$emit('enable-by-set-position'); } }, changeByDay(value) { this.$emit('change-by-day', value); }, changeBySetPosition(value) { this.$emit('change-by-set-position', value); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatOnTheSelect.vue?vue&type=script&lang=js": /*!****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatOnTheSelect.vue?vue&type=script&lang=js ***! \****************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'RepeatOnTheSelect', components: { NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcSelect }, props: { /** * */ byDay: { type: Array, required: true }, disabled: { type: Boolean, required: true } }, computed: { options() { const dayNames = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__.getDayNames)(); return [{ label: dayNames[1], value: ['MO'] }, { label: dayNames[2], value: ['TU'] }, { label: dayNames[3], value: ['WE'] }, { label: dayNames[4], value: ['TH'] }, { label: dayNames[5], value: ['FR'] }, { label: dayNames[6], value: ['SA'] }, { label: dayNames[0], value: ['SU'] }, { label: this.$t('calendar', 'day'), value: ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'] }, { label: this.$t('calendar', 'weekday'), value: ['MO', 'TU', 'WE', 'TH', 'FR'] }, { label: this.$t('calendar', 'weekend day'), value: ['SU', 'SA'] }]; }, selected() { return this.options.find(option => option.value.slice().sort().join(',') === this.byDay.slice().sort().join(',')); } }, methods: { select(value) { if (!value) { return; } this.$emit('change', value.value); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatSummary.vue?vue&type=script&lang=js": /*!************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatSummary.vue?vue&type=script&lang=js ***! \************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _filters_recurrenceRuleFormat_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../filters/recurrenceRuleFormat.js */ "./src/filters/recurrenceRuleFormat.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'RepeatSummary', filters: { formatRecurrenceRule: _filters_recurrenceRuleFormat_js__WEBPACK_IMPORTED_MODULE_0__["default"] }, props: { /** * The recurrence-rule object as defined on the eventComponent */ recurrenceRule: { type: Object, required: true } }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_1__.mapState)({ locale: state => state.settings.momentLocale }), /** * Returns whether or not to display the summary. * We do not want to show it if it doesn't repeat * * @return {boolean} */ display() { return this.recurrenceRule.frequency !== 'NONE'; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatUnsupportedWarning.vue?vue&type=script&lang=js": /*!***********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatUnsupportedWarning.vue?vue&type=script&lang=js ***! \***********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'RepeatUnsupportedWarning' }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceList.vue?vue&type=script&lang=js": /*!**************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceList.vue?vue&type=script&lang=js ***! \**************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _services_caldavService_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../services/caldavService.js */ "./src/services/caldavService.js"); /* harmony import */ var _services_freeBusyService_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../services/freeBusyService.js */ "./src/services/freeBusyService.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _NoAttendeesView_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../NoAttendeesView.vue */ "./src/components/Editor/NoAttendeesView.vue"); /* harmony import */ var _ResourceListSearch_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ResourceListSearch.vue */ "./src/components/Editor/Resources/ResourceListSearch.vue"); /* harmony import */ var _ResourceListItem_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ResourceListItem.vue */ "./src/components/Editor/Resources/ResourceListItem.vue"); /* harmony import */ var _OrganizerNoEmailError_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../OrganizerNoEmailError.vue */ "./src/components/Editor/OrganizerNoEmailError.vue"); /* harmony import */ var _utils_attendee_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../utils/attendee.js */ "./src/utils/attendee.js"); /* harmony import */ var vue_material_design_icons_MapMarker_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! vue-material-design-icons/MapMarker.vue */ "./node_modules/vue-material-design-icons/MapMarker.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'ResourceList', components: { ResourceListItem: _ResourceListItem_vue__WEBPACK_IMPORTED_MODULE_5__["default"], NoAttendeesView: _NoAttendeesView_vue__WEBPACK_IMPORTED_MODULE_3__["default"], ResourceListSearch: _ResourceListSearch_vue__WEBPACK_IMPORTED_MODULE_4__["default"], OrganizerNoEmailError: _OrganizerNoEmailError_vue__WEBPACK_IMPORTED_MODULE_6__["default"], MapMarker: vue_material_design_icons_MapMarker_vue__WEBPACK_IMPORTED_MODULE_8__["default"] }, props: { isReadOnly: { type: Boolean, required: true }, calendarObjectInstance: { type: Object, required: true } }, data() { return { suggestedRooms: [] }; }, computed: { resources() { return this.calendarObjectInstance.attendees.filter(attendee => { return ['ROOM', 'RESOURCE'].includes(attendee.attendeeProperty.userType); }); }, attendees() { return this.calendarObjectInstance.attendees.filter(attendee => { return !['RESOURCE', 'ROOM'].includes(attendee.attendeeProperty.userType); }); }, noResourcesMessage() { return this.$t('calendar', 'No rooms or resources yet'); }, isListEmpty() { return this.resources.length === 0 && this.suggestedRooms.length === 0; }, alreadyInvitedEmails() { return this.resources.map(attendee => (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_7__.removeMailtoPrefix)(attendee.uri)); }, organizerDisplayName() { return (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_7__.organizerDisplayName)(this.calendarObjectInstance.organizer); }, hasUserEmailAddress() { var _this$$store$getters$; const emailAddress = (_this$$store$getters$ = this.$store.getters.getCurrentUserPrincipal) === null || _this$$store$getters$ === void 0 ? void 0 : _this$$store$getters$.emailAddress; return !!emailAddress; } }, watch: { resources() { this.loadRoomSuggestions(); } }, async mounted() { await this.loadRoomSuggestions(); }, methods: { addResource(_ref) { let { commonName, email, calendarUserType, language, timezoneId, roomAddress } = _ref; this.$store.commit('addAttendee', { calendarObjectInstance: this.calendarObjectInstance, commonName, uri: email, calendarUserType, participationStatus: 'NEEDS-ACTION', role: 'REQ-PARTICIPANT', rsvp: true, language, timezoneId, organizer: this.$store.getters.getCurrentUserPrincipal }); this.updateLocation(roomAddress); }, removeResource(resource) { this.$store.commit('removeAttendee', { calendarObjectInstance: this.calendarObjectInstance, attendee: resource }); }, async loadRoomSuggestions() { if (this.resources.length > 0) { this.suggestedRooms = []; return; } try { _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__["default"].info('fetching suggestions for ' + this.attendees.length + ' attendees'); const query = { capacity: this.attendees.length }; const results = (await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_0__.advancedPrincipalPropertySearch)(query)).map(principal => { var _principal$displaynam; return { commonName: principal.displayname, email: principal.email, calendarUserType: principal.calendarUserType, displayName: (_principal$displaynam = principal.displayname) !== null && _principal$displaynam !== void 0 ? _principal$displaynam : principal.email, isAvailable: true, roomAddress: principal.roomAddress, uri: principal.email, organizer: this.$store.getters.getCurrentUserPrincipal }; }); await (0,_services_freeBusyService_js__WEBPACK_IMPORTED_MODULE_1__.checkResourceAvailability)(results, this.$store.getters.getCurrentUserPrincipalEmail, this.calendarObjectInstance.eventComponent.startDate, this.calendarObjectInstance.eventComponent.endDate); _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__["default"].debug('availability of room suggestions fetched', { results }); // Take the first three available options this.suggestedRooms = results.filter(room => room.isAvailable).slice(0, 3); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__["default"].error('Could not find resources', { error }); this.suggestedRooms = []; } }, /** * Apply the location of the first resource to the event. * Has no effect if the location is already set or there are multiple resource. * * @param {string} location The location to apply */ updateLocation(location) { if (this.calendarObjectInstance.location || this.calendarObjectInstance.eventComponent.location) { return; } if (this.resources.length !== 1) { return; } this.$store.commit('changeLocation', { calendarObjectInstance: this.calendarObjectInstance, location }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceListItem.vue?vue&type=script&lang=js": /*!******************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceListItem.vue?vue&type=script&lang=js ***! \******************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _AvatarParticipationStatus_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../AvatarParticipationStatus.vue */ "./src/components/Editor/AvatarParticipationStatus.vue"); /* harmony import */ var _utils_attendee_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/attendee.js */ "./src/utils/attendee.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _services_caldavService_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../services/caldavService.js */ "./src/services/caldavService.js"); /* harmony import */ var _models_resourceProps_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../models/resourceProps.js */ "./src/models/resourceProps.js"); /* harmony import */ var vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-material-design-icons/Delete.vue */ "./node_modules/vue-material-design-icons/Delete.vue"); /* harmony import */ var vue_material_design_icons_Plus_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue-material-design-icons/Plus.vue */ "./node_modules/vue-material-design-icons/Plus.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'ResourceListItem', components: { AvatarParticipationStatus: _AvatarParticipationStatus_vue__WEBPACK_IMPORTED_MODULE_1__["default"], ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, ActionCaption: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionCaption, ActionSeparator: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionSeparator, Actions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActions, Delete: vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_6__["default"], Plus: vue_material_design_icons_Plus_vue__WEBPACK_IMPORTED_MODULE_7__["default"] }, props: { resource: { type: Object, required: true }, organizerDisplayName: { type: String, required: true }, isReadOnly: { type: Boolean, required: true }, isSuggestion: { type: Boolean, default: false } }, data() { return { principal: null }; }, computed: { commonName() { if (this.resource.commonName) { return this.resource.commonName; } if (this.resource.uri) { return (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_2__.removeMailtoPrefix)(this.resource.uri); } return this.resource.uri; }, isViewedByOrganizer() { // TODO: check if also viewed by organizer return !this.isReadOnly; }, isAccessible() { return this.hasFeature('WHEELCHAIR-ACCESSIBLE'); }, hasProjector() { return this.hasFeature('PROJECTOR'); }, hasWhiteboard() { return this.hasFeature('WHITEBOARD'); }, seatingCapacity() { var _this$principal; const seatingCapacity = (_this$principal = this.principal) === null || _this$principal === void 0 ? void 0 : _this$principal.roomSeatingCapacity; if (!seatingCapacity) { return null; } return this.$n('calendar', '{seatingCapacity} seat', '{seatingCapacity} seats', seatingCapacity, { seatingCapacity }); }, roomType() { var _this$principal2, _formatRoomType; const roomType = (_this$principal2 = this.principal) === null || _this$principal2 === void 0 ? void 0 : _this$principal2.roomType; return (_formatRoomType = (0,_models_resourceProps_js__WEBPACK_IMPORTED_MODULE_5__.formatRoomType)(roomType)) !== null && _formatRoomType !== void 0 ? _formatRoomType : roomType; }, participationStatus() { if (this.isSuggestion) { return ''; } return this.resource.participationStatus; } }, watch: { async resource() { await this.fetchPrincipal(); } }, async mounted() { await this.fetchPrincipal(); }, methods: { /** * Add this suggestions to the event */ addSuggestion() { this.$emit('add-suggestion', this.resource); }, /** * Removes a resource from the event */ removeResource() { this.$emit('remove-resource', this.resource); }, /** * Check if this resource has a feature * * @param {string} feature The name of the feature * @return {boolean} True if this resource has the given feature */ hasFeature(feature) { var _this$principal$roomF, _this$principal3; const features = (_this$principal$roomF = (_this$principal3 = this.principal) === null || _this$principal3 === void 0 || (_this$principal3 = _this$principal3.roomFeatures) === null || _this$principal3 === void 0 ? void 0 : _this$principal3.split(',')) !== null && _this$principal$roomF !== void 0 ? _this$principal$roomF : []; return !!features.find(featureToCheck => featureToCheck === feature); }, /** * Try to fetch the principal belonging to this resource */ async fetchPrincipal() { const uri = (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_2__.removeMailtoPrefix)(this.resource.uri); let principals = await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_4__.principalPropertySearchByDisplaynameOrEmail)(uri); principals = principals.filter(principal => (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_2__.removeMailtoPrefix)(principal.email) === uri); if (principals.length === 0) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_3__["default"].debug('No principal for resource found', { uri: this.resource.uri }); this.principal = null; return; } else if (principals.length > 1) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_3__["default"].debug('More than one principal for resource found', { uri: this.resource.uri, principals }); } this.principal = principals[0]; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceListSearch.vue?vue&type=script&lang=js": /*!********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceListSearch.vue?vue&type=script&lang=js ***! \********************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _services_freeBusyService_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../services/freeBusyService.js */ "./src/services/freeBusyService.js"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! debounce */ "./node_modules/debounce/index.js"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(debounce__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _services_caldavService_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../services/caldavService.js */ "./src/services/caldavService.js"); /* harmony import */ var _ResourceSeatingCapacity_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ResourceSeatingCapacity.vue */ "./src/components/Editor/Resources/ResourceSeatingCapacity.vue"); /* harmony import */ var _ResourceRoomType_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ResourceRoomType.vue */ "./src/components/Editor/Resources/ResourceRoomType.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'ResourceListSearch', components: { Avatar: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAvatar, NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcSelect, ResourceSeatingCapacity: _ResourceSeatingCapacity_vue__WEBPACK_IMPORTED_MODULE_4__["default"], Actions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActions, ActionCheckbox: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionCheckbox, ResourceRoomType: _ResourceRoomType_vue__WEBPACK_IMPORTED_MODULE_5__["default"] }, props: { alreadyInvitedEmails: { type: Array, required: true }, calendarObjectInstance: { type: Object, required: true } }, data() { return { isLoading: false, inputGiven: false, matches: [], capacity: NaN, roomType: '', isAvailable: true, isAccessible: false, hasProjector: false, hasWhiteboard: false }; }, computed: { placeholder() { return this.$t('calendar', 'Search for resources or rooms'); }, noResult() { return this.$t('calendar', 'No match found'); }, features() { const features = []; if (this.isAccessible) { features.push('WHEELCHAIR-ACCESSIBLE'); } if (this.hasProjector) { features.push('PROJECTOR'); } if (this.hasWhiteboard) { features.push('WHITEBOARD'); } return features; } }, methods: { findResources: debounce__WEBPACK_IMPORTED_MODULE_6___default()(async function (query) { this.isLoading = true; let matches = []; if (query.length > 0) { matches = await this.findResourcesFromDAV(query); this.isLoading = false; this.inputGiven = true; } else { this.inputGiven = false; this.isLoading = false; } this.matches = matches; }, 500), addResource(selectedValue) { this.$emit('add-resource', selectedValue); }, async findResourcesFromDAV(input) { let results; try { const query = { displayName: input }; query.capacity = this.capacity; query.features = this.features; query.roomType = this.roomType; results = await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_3__.advancedPrincipalPropertySearch)(query); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__["default"].debug('Could not find resources', { error }); return []; } // Build options let options = results.filter(principal => { if (!principal.email) { return false; } if (this.alreadyInvitedEmails.includes(principal.email)) { return false; } // Only include resources and rooms if (!['RESOURCE', 'ROOM'].includes(principal.calendarUserType)) { return false; } return true; }).map(principal => { var _principal$displaynam; const subLineData = []; if (principal.roomSeatingCapacity) { subLineData.push(this.$n('calendar', '{seatingCapacity} seat', '{seatingCapacity} seats', principal.roomSeatingCapacity, { seatingCapacity: principal.roomSeatingCapacity })); } if (principal.roomAddress) { subLineData.push(principal.roomAddress); } return { commonName: principal.displayname, email: principal.email, calendarUserType: principal.calendarUserType, displayName: (_principal$displaynam = principal.displayname) !== null && _principal$displaynam !== void 0 ? _principal$displaynam : principal.email, subLine: subLineData.join(' - '), isAvailable: true, roomAddress: principal.roomAddress }; }); // Check resource availability await (0,_services_freeBusyService_js__WEBPACK_IMPORTED_MODULE_1__.checkResourceAvailability)(options, this.$store.getters.getCurrentUserPrincipalEmail, this.calendarObjectInstance.eventComponent.startDate, this.calendarObjectInstance.eventComponent.endDate); // Filter by availability if (this.isAvailable) { options = options.filter(option => option.isAvailable); } return options; }, /** * Format availability of a search result * * @param {boolean} isAvailable The availability state * @return {string} Human readable and localized availability */ formatAvailability(isAvailable) { if (isAvailable) { // TRANSLATORS room or resource is available due to not being booked yet return this.$t('calendar', 'available'); } // TRANSLATORS room or resource is unavailable due to it being already booked return this.$t('calendar', 'unavailable'); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceRoomType.vue?vue&type=script&lang=js": /*!******************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceRoomType.vue?vue&type=script&lang=js ***! \******************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _models_resourceProps_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../models/resourceProps.js */ "./src/models/resourceProps.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'ResourceRoomType', components: { NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcSelect }, props: { value: { type: String, required: true } }, computed: { placeholder() { return this.$t('calendar', 'Room type'); }, options() { return [{ value: '', label: this.$t('calendar', 'Any') }, ...(0,_models_resourceProps_js__WEBPACK_IMPORTED_MODULE_1__.getAllRoomTypes)()]; } }, methods: { getOption(value) { // Selecting 'Any' will reset the input if (value === '') { return undefined; } return this.options.find(option => option.value === value); }, changeValue(option) { this.$emit('update:value', option.value); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceSeatingCapacity.vue?vue&type=script&lang=js": /*!*************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceSeatingCapacity.vue?vue&type=script&lang=js ***! \*************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'ResourceSeatingCapacity', props: { value: { type: Number, required: true } }, computed: { placeholder() { return this.$t('calendar', 'Minimum seating capacity'); } }, methods: { changeValue(event) { this.$emit('update:value', parseInt(event.target.value)); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/SaveButtons.vue?vue&type=script&lang=js": /*!***************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/SaveButtons.vue?vue&type=script&lang=js ***! \***************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_Check_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-material-design-icons/Check.vue */ "./node_modules/vue-material-design-icons/Check.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'SaveButtons', components: { NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton, CheckIcon: vue_material_design_icons_Check_vue__WEBPACK_IMPORTED_MODULE_1__["default"] }, props: { canCreateRecurrenceException: { type: Boolean, required: true }, isNew: { type: Boolean, required: true }, isReadOnly: { type: Boolean, required: true }, forceThisAndAllFuture: { type: Boolean, required: true }, showMoreButton: { type: Boolean, default: false }, moreButtonType: { type: String, default: undefined }, growHorizontally: { type: Boolean, default: true }, disabled: { type: Boolean, default: false } }, computed: { showSaveButton() { return !this.isReadOnly && this.isNew && !this.canCreateRecurrenceException; }, showUpdateButton() { return !this.isReadOnly && !this.isNew && !this.canCreateRecurrenceException; }, showUpdateOnlyThisButton() { return !this.isReadOnly && this.canCreateRecurrenceException && !this.forceThisAndAllFuture; }, showUpdateThisAndFutureButton() { return !this.isReadOnly && this.canCreateRecurrenceException; } }, methods: { saveThisOnly() { this.$emit('save-this-only'); }, saveThisAndAllFuture() { this.$emit('save-this-and-all-future'); }, showMore() { this.$emit('show-more'); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/EmptyCalendar.vue?vue&type=script&lang=js": /*!**********************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/EmptyCalendar.vue?vue&type=script&lang=js ***! \**********************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_CalendarBlank_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-material-design-icons/CalendarBlank.vue */ "./node_modules/vue-material-design-icons/CalendarBlank.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'EmptyCalendar', components: { EmptyContent: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcEmptyContent, CalendarBlank: vue_material_design_icons_CalendarBlank_vue__WEBPACK_IMPORTED_MODULE_1__["default"] } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Icons/IconCircles.vue?vue&type=script&lang=js": /*!**************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Icons/IconCircles.vue?vue&type=script&lang=js ***! \**************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'IconCircles', props: { title: { type: String, default: '' }, size: { type: Number, default: 20 }, fillColor: { type: String, default: 'currentColor' } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Popover/PopoverLoadingIndicator.vue?vue&type=script&lang=js": /*!****************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Popover/PopoverLoadingIndicator.vue?vue&type=script&lang=js ***! \****************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'PopoverLoadingIndicator' }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/CalendarPicker.vue?vue&type=script&lang=js": /*!******************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/CalendarPicker.vue?vue&type=script&lang=js ***! \******************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _CalendarPickerOption_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CalendarPickerOption.vue */ "./src/components/Shared/CalendarPickerOption.vue"); /* harmony import */ var _utils_randomId_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/randomId.js */ "./src/utils/randomId.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'CalendarPicker', components: { CalendarPickerOption: _CalendarPickerOption_vue__WEBPACK_IMPORTED_MODULE_1__["default"], NcSelect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcSelect }, props: { value: { type: [Object, Array], required: true }, calendars: { type: Array, required: true }, showCalendarOnSelect: { type: Boolean, default: false }, multiple: { type: Boolean, default: false }, disabled: { type: Boolean, default: false }, clearable: { type: Boolean, default: true }, inputId: { type: String, default: () => (0,_utils_randomId_js__WEBPACK_IMPORTED_MODULE_2__.randomId)() } }, computed: { isDisabled() { // for pickers where multiple can be selected (zero or more) we don't want to disable the picker // for calendars where only one calendar can be selected, disable if there are < 2 return this.disabled || (this.multiple ? this.calendars.length < 1 : this.calendars.length < 2); }, valueIds() { if (Array.isArray(this.value)) { return this.value.filter(v => v).map(_ref => { let { id } = _ref; return id; }); } return this.value.id; }, options() { return this.calendars.map(calendar => ({ id: calendar.id, displayName: calendar.displayName })); } }, methods: { /** * TODO: this should emit the calendar id instead * * @param {{id: string}|{id: string}[]} options All selected options (including the new one) */ change(options) { if (!options || options.length === 0) { return; } // The new option will always be the last element const newOption = Array.isArray(options) ? options[options.length - 1] : options; const newCalendar = this.getCalendarById(newOption.id); if (this.showCalendarOnSelect && !newCalendar.enabled) { this.$store.dispatch('toggleCalendarEnabled', { calendar: newCalendar }); } this.$emit('select-calendar', newCalendar); }, remove(option) { if (this.multiple) { this.$emit('remove-calendar', this.getCalendarById(option)); } }, /** * @param {string} id The calendar id * @return {object|undefined} The calendar object (if it exists) */ getCalendarById(id) { return this.calendars.find(cal => cal.id === id); }, /** * Decide whether the given option matches the given search term * * @param {object} option The calendar option * @param {string} label The label of the calendar option * @param {string} id The search term * @param search * @return {boolean} True if the search term matches */ selectFilterBy(option, label, search) { return option.displayName.toLowerCase().indexOf(search) !== -1; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/CalendarPickerOption.vue?vue&type=script&lang=js": /*!************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/CalendarPickerOption.vue?vue&type=script&lang=js ***! \************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'CalendarPickerOption', components: { Avatar: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAvatar }, props: { color: { type: String, required: true }, displayName: { type: String, required: true }, owner: { type: String, required: true }, isSharedWithMe: { type: Boolean, required: true } }, computed: { /** * Get the principal object of the calendar's owner * * @return {null | object} */ principal() { return this.$store.getters.getPrincipalByUrl(this.owner); }, /** * Gets the user-id of the calendar's owner * * @return {null | string} */ userId() { if (this.principal) { return this.principal.userId; } return null; }, /** * Gets the displayname of the calendar's owner * * @return {null | string} */ userDisplayName() { if (this.principal) { return this.principal.displayname; } return null; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/DatePicker.vue?vue&type=script&lang=js": /*!**************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/DatePicker.vue?vue&type=script&lang=js ***! \**************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_Web_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-material-design-icons/Web.vue */ "./node_modules/vue-material-design-icons/Web.vue"); /* harmony import */ var vue_material_design_icons_CalendarBlankOutline_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-material-design-icons/CalendarBlankOutline.vue */ "./node_modules/vue-material-design-icons/CalendarBlankOutline.vue"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var _utils_localization_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../utils/localization.js */ "./src/utils/localization.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'DatePicker', components: { NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton, DateTimePicker: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcDateTimePicker, Popover: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcPopover, TimezonePicker: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcTimezonePicker, IconTimezone: vue_material_design_icons_Web_vue__WEBPACK_IMPORTED_MODULE_1__["default"], IconNewCalendar: vue_material_design_icons_CalendarBlankOutline_vue__WEBPACK_IMPORTED_MODULE_2__["default"] }, props: { date: { type: Date, required: true }, timezoneId: { type: String, default: 'floating' }, prefix: { type: String, default: null }, isAllDay: { type: Boolean, required: true }, userTimezoneId: { type: String, default: null }, min: { type: Date, default: null }, max: { type: Date, default: null }, appendToBody: { type: Boolean, default: false }, type: { type: String, default: 'datetime' } }, data() { return { firstDay: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__.getFirstDay)() === 0 ? 7 : (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__.getFirstDay)(), showTimezonePopover: false, formatter: { stringify: this.stringify, parse: this.parse }, showTimePanel: true }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapState)({ locale: state => state.settings.momentLocale, showWeekNumbers: state => state.settings.showWeekNumbers }), /** * Returns the lang config for vue2-datepicker * * @return {object} */ lang() { return (0,_utils_localization_js__WEBPACK_IMPORTED_MODULE_6__.getLangConfigForVue2DatePicker)(this.locale); }, /** * Whether or not to highlight the timezone-icon. * The icon is highlighted when the selected timezone * does not equal the current user's timezone * * @return {boolean} */ highlightTimezone() { if (this.isAllDay) { return true; } return this.timezoneId !== this.userTimezoneId; }, /** * Type of the DatePicker. * Ether date if allDay or datetime * * @return {string} */ actualType() { if (this.type === 'datetime' && this.isAllDay) { return 'date'; } return this.type; }, /** * The earliest date a user is allowed to pick in the timezone * * @return {Date} */ minimumDate() { return this.min || new Date(this.$store.state.davRestrictions.minimumDate); }, /** * The latest date a user is allowed to pick in the timezone * * @return {Date} */ maximumDate() { return this.max || new Date(this.$store.state.davRestrictions.maximumDate); }, /** * Whether or not to offer am/pm in the timepicker * * @return {boolean} */ showAmPm() { const localeData = (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_4__["default"])().locale(this.locale).localeData(); const timeFormat = localeData.longDateFormat('LT').toLowerCase(); return timeFormat.indexOf('a') !== -1; } }, methods: { /** * Emits a change event for the Date * * @param {Date} date The new Date object */ change(date) { this.$emit('change', date); }, /** * Changes the view to time-picker, * when user picked a date and date-time-picker is not all-day * * @param {Date} date The selected Date object * @param {string} type The type of selected date (Date, Time, ...) */ pickDate(date, type) { if (!this.isAllDay && type === 'date') { this.showTimePanel = true; } }, /** * Emits a change event for the Timezone * * @param {string} timezoneId The new timezoneId */ changeTimezone(timezoneId) { this.$emit('change-timezone', timezoneId); }, /** * Toggles the visibility of the timezone popover */ toggleTimezonePopover() { if (this.isAllDay) { return; } this.showTimezonePopover = !this.showTimezonePopover; }, /** * Reset to time-panel on close of datepicker */ close() { this.showTimePanel = true; this.$emit('close'); }, /** * Toggles the time-picker */ toggleTimePanel() { this.showTimePanel = !this.showTimePanel; }, /** * Formats the date string * * @param {Date} date The date for format * @return {string} */ stringify(date) { const formattedDate = (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_4__["default"])(date).locale(this.locale).format('L'); const formattedTime = (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_4__["default"])(date).locale(this.locale).format('LT'); if (this.isAllDay) { switch (this.prefix) { case 'from': return this.$t('calendar', 'from {formattedDate}', { formattedDate }); case 'to': return this.$t('calendar', 'to {formattedDate}', { formattedDate }); case 'on': return this.$t('calendar', 'on {formattedDate}', { formattedDate }); default: return formattedDate; } } else { switch (this.prefix) { case 'from': return this.$t('calendar', 'from {formattedDate} at {formattedTime}', { formattedDate, formattedTime }); case 'to': return this.$t('calendar', 'to {formattedDate} at {formattedTime}', { formattedDate, formattedTime }); case 'on': return this.$t('calendar', 'on {formattedDate} at {formattedTime}', { formattedDate, formattedTime }); default: return this.$t('calendar', '{formattedDate} at {formattedTime}', { formattedDate, formattedTime }); } } }, /** * Parses the user input from the input field * * @param {string} value The user-input to be parsed * @return {Date} */ parse(value) { if (this.isAllDay) { let format; switch (this.prefix) { case 'from': format = this.$t('calendar', 'from {formattedDate}'); break; case 'to': format = this.$t('calendar', 'to {formattedDate}'); break; case 'on': format = this.$t('calendar', 'on {formattedDate}'); break; default: format = '{formattedDate}'; break; } const regexString = format.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&').replace(/(?:^|\\})([^{}]+)(?:$|\\{)/g, (fullMatch, groupMatch) => { return fullMatch.replace(groupMatch, '(?:' + groupMatch + ')?'); }).replace('\\{formattedDate\\}', '(.*)'); const regex = new RegExp(regexString); const matches = value.match(regex); if (!matches) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_5__.showError)(this.$t('calendar', 'Please enter a valid date')); // Just return the previous date return this.date; } return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_4__["default"])(matches[1], 'L', this.locale).toDate(); } else { let format; switch (this.prefix) { case 'from': format = this.$t('calendar', 'from {formattedDate} at {formattedTime}'); break; case 'to': format = this.$t('calendar', 'to {formattedDate} at {formattedTime}'); break; case 'on': format = this.$t('calendar', 'on {formattedDate} at {formattedTime}'); break; default: format = this.$t('calendar', '{formattedDate} at {formattedTime}'); break; } const escapedFormat = format.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&').replace(/(?:^|\\})([^{}]+)(?:$|\\{)/g, (fullMatch, groupMatch) => { return fullMatch.replace(groupMatch, '(?:' + groupMatch + ')?'); }); const dateRegexString = escapedFormat.replace('\\{formattedDate\\}', '(.*)').replace('\\{formattedTime\\}', '.*'); const dateRegex = new RegExp(dateRegexString); const timeRegexString = escapedFormat.replace('\\{formattedDate\\}', '.*').replace('\\{formattedTime\\}', '(.*)'); const timeRegex = new RegExp(timeRegexString); const dateMatches = value.match(dateRegex); const timeMatches = value.match(timeRegex); if (!dateMatches || !timeMatches) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_5__.showError)(this.$t('calendar', 'Please enter a valid date and time')); // Just return the previous date return this.date; } return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_4__["default"])(dateMatches[1] + ' ' + timeMatches[1], 'L LT', this.locale).toDate(); } }, /** * Whether or not the date is acceptable * * @param {Date} date The date to compare to * @return {boolean} */ disabledDate(date) { return date < this.minimumDate || date > this.maximumDate; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/TimePicker.vue?vue&type=script&lang=js": /*!**************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/TimePicker.vue?vue&type=script&lang=js ***! \**************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var _utils_localization_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/localization.js */ "./src/utils/localization.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'TimePicker', components: { DateTimePicker: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcDateTimePicker }, props: { date: { type: Date, required: true } }, data() { return { firstDay: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_2__.getFirstDay)() === 0 ? 7 : (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_2__.getFirstDay)(), format: { stringify: this.stringify, parse: this.parse } }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_4__.mapState)({ locale: state => state.settings.momentLocale }), /** * Returns the lang config for vue2-datepicker * * @return {object} */ lang() { return (0,_utils_localization_js__WEBPACK_IMPORTED_MODULE_3__.getLangConfigForVue2DatePicker)(this.locale); }, /** * Whether or not to offer am/pm in the timepicker * * @return {boolean} */ showAmPm() { const localeData = (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"])().locale(this.locale).localeData(); const timeFormat = localeData.longDateFormat('LT').toLowerCase(); return timeFormat.indexOf('a') !== -1; } }, methods: { /** * Emits a change event for the Date * * @param {Date} date The new Date object */ change(date) { this.$emit('change', date); }, /** * Formats the date string * * @param {Date} date The date for format * @return {string} */ stringify(date) { return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"])(date).locale(this.locale).format('LT'); }, /** * Parses the user input from the input field * * @param {string} value The user-input to be parsed * @return {Date} */ parse(value) { return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"])(value, 'LT', this.locale).toDate(); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Calendar.vue?vue&type=script&lang=js": /*!************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Calendar.vue?vue&type=script&lang=js ***! \************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _components_AppNavigation_AppNavigationHeader_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/AppNavigation/AppNavigationHeader.vue */ "./src/components/AppNavigation/AppNavigationHeader.vue"); /* harmony import */ var _components_AppNavigation_CalendarList_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/AppNavigation/CalendarList.vue */ "./src/components/AppNavigation/CalendarList.vue"); /* harmony import */ var _components_AppNavigation_Settings_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/AppNavigation/Settings.vue */ "./src/components/AppNavigation/Settings.vue"); /* harmony import */ var _components_AppNavigation_CalendarList_CalendarListNew_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/AppNavigation/CalendarList/CalendarListNew.vue */ "./src/components/AppNavigation/CalendarList/CalendarListNew.vue"); /* harmony import */ var _components_AppNavigation_EmbedTopNavigation_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/AppNavigation/EmbedTopNavigation.vue */ "./src/components/AppNavigation/EmbedTopNavigation.vue"); /* harmony import */ var _components_EmptyCalendar_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/EmptyCalendar.vue */ "./src/components/EmptyCalendar.vue"); /* harmony import */ var _components_CalendarGrid_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/CalendarGrid.vue */ "./src/components/CalendarGrid.vue"); /* harmony import */ var _components_AppNavigation_EditCalendarModal_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../components/AppNavigation/EditCalendarModal.vue */ "./src/components/AppNavigation/EditCalendarModal.vue"); /* harmony import */ var _EditSimple_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./EditSimple.vue */ "./src/views/EditSimple.vue"); /* harmony import */ var _services_caldavService_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../services/caldavService.js */ "./src/services/caldavService.js"); /* harmony import */ var _utils_color_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/color.js */ "./src/utils/color.js"); /* harmony import */ var _utils_date_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils/date.js */ "./src/utils/date.js"); /* harmony import */ var _services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../services/timezoneDataProviderService.js */ "./src/services/timezoneDataProviderService.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _utils_moment_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../utils/moment.js */ "./src/utils/moment.js"); /* harmony import */ var _nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @nextcloud/initial-state */ "./node_modules/@nextcloud/initial-state/dist/index.es.mjs"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var _nextcloud_dialogs_dist_index_css__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @nextcloud/dialogs/dist/index.css */ "./node_modules/@nextcloud/dialogs/dist/style.css"); /* harmony import */ var _components_AppNavigation_CalendarList_Trashbin_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../components/AppNavigation/CalendarList/Trashbin.vue */ "./src/components/AppNavigation/CalendarList/Trashbin.vue"); /* harmony import */ var _components_AppNavigation_AppointmentConfigList_vue__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../components/AppNavigation/AppointmentConfigList.vue */ "./src/components/AppNavigation/AppointmentConfigList.vue"); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); // Import vue components // Import CalDAV related methods // Import others /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'Calendar', components: { AppointmentConfigList: _components_AppNavigation_AppointmentConfigList_vue__WEBPACK_IMPORTED_MODULE_20__["default"], CalendarGrid: _components_CalendarGrid_vue__WEBPACK_IMPORTED_MODULE_7__["default"], EmptyCalendar: _components_EmptyCalendar_vue__WEBPACK_IMPORTED_MODULE_6__["default"], EmbedTopNavigation: _components_AppNavigation_EmbedTopNavigation_vue__WEBPACK_IMPORTED_MODULE_5__["default"], Settings: _components_AppNavigation_Settings_vue__WEBPACK_IMPORTED_MODULE_3__["default"], CalendarList: _components_AppNavigation_CalendarList_vue__WEBPACK_IMPORTED_MODULE_2__["default"], AppNavigationHeader: _components_AppNavigation_AppNavigationHeader_vue__WEBPACK_IMPORTED_MODULE_1__["default"], NcContent: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcContent, AppContent: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAppContent, AppNavigation: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAppNavigation, AppNavigationSpacer: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAppNavigationSpacer, CalendarListNew: _components_AppNavigation_CalendarList_CalendarListNew_vue__WEBPACK_IMPORTED_MODULE_4__["default"], Trashbin: _components_AppNavigation_CalendarList_Trashbin_vue__WEBPACK_IMPORTED_MODULE_19__["default"], EditCalendarModal: _components_AppNavigation_EditCalendarModal_vue__WEBPACK_IMPORTED_MODULE_8__["default"], EditSimple: _EditSimple_vue__WEBPACK_IMPORTED_MODULE_9__["default"] }, props: { isWidget: { type: Boolean, default: false }, referenceToken: { type: String, required: false } }, data() { return { loadingCalendars: true, timeFrameCacheExpiryJob: null, showEmptyCalendarScreen: false }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_23__.mapGetters)({ timezoneId: 'getResolvedTimezone', hasTrashBin: 'hasTrashBin', currentUserPrincipal: 'getCurrentUserPrincipal', canAccessPreviousEvent: 'userRole/canAccessPreviousEvent' }), ...(0,vuex__WEBPACK_IMPORTED_MODULE_23__.mapState)({ eventLimit: state => state.settings.eventLimit, skipPopover: state => state.settings.skipPopover, showWeekends: state => state.settings.showWeekends, showWeekNumbers: state => state.settings.showWeekNumbers, slotDuration: state => state.settings.slotDuration, defaultReminder: state => state.settings.defaultReminder, showTasks: state => state.settings.showTasks, timezone: state => state.settings.timezone, modificationCount: state => state.calendarObjects.modificationCount, disableAppointments: state => state.settings.disableAppointments, attachmentsFolder: state => state.settings.attachmentsFolder, roles: state => state.userRole.roles }), defaultDate() { var _this$$route$params$f, _this$$route; return (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_12__.getYYYYMMDDFromFirstdayParam)((_this$$route$params$f = (_this$$route = this.$route) === null || _this$$route === void 0 || (_this$$route = _this$$route.params) === null || _this$$route === void 0 ? void 0 : _this$$route.firstDay) !== null && _this$$route$params$f !== void 0 ? _this$$route$params$f : 'now'); }, isEditable() { var _this$$route2, _this$$route3; // We do not allow drag and drop when the editor is open. return !this.isPublicShare && !this.isEmbedded && !this.isWidget && ((_this$$route2 = this.$route) === null || _this$$route2 === void 0 ? void 0 : _this$$route2.name) !== 'EditPopoverView' && ((_this$$route3 = this.$route) === null || _this$$route3 === void 0 ? void 0 : _this$$route3.name) !== 'EditSidebarView'; }, isSelectable() { return !this.isPublicShare && !this.isEmbedded && !this.isWidget; }, isAuthenticatedUser() { return !this.isPublicShare && !this.isEmbedded && !this.isWidget; }, isPublicShare() { if (this.isWidget) { return false; } return this.$route.name.startsWith('Public'); }, isEmbedded() { if (this.isWidget) { return false; } return this.$route.name.startsWith('Embed'); }, showWidgetEventDetails() { return this.$store.getters.widgetEventDetailsOpen && this.$refs.calendarGridWidget.$el === this.$store.getters.widgetRef; }, showHeader() { return this.isPublicShare && this.isEmbedded && this.isWidget; }, classNames() { if (this.isEmbedded) { return 'app-calendar-public-embedded'; } if (this.isPublicShare) { return 'app-calendar-public'; } return null; } }, created() { this.timeFrameCacheExpiryJob = setInterval(() => { const timestamp = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_12__.getUnixTimestampFromDate)((0,_utils_date_js__WEBPACK_IMPORTED_MODULE_12__.dateFactory)()) - 60 * 10; const timeRanges = this.$store.getters.getAllTimeRangesOlderThan(timestamp); for (const timeRange of timeRanges) { this.$store.commit('removeTimeRange', { timeRangeId: timeRange.id }); this.$store.commit('deleteFetchedTimeRangeFromCalendar', { calendar: { id: timeRange.calendarId }, fetchedTimeRangeId: timeRange.id }); } }, 1000 * 60); }, async beforeMount() { var _this$$route4, _this$$route5; this.$store.commit('loadSettingsFromServer', { appVersion: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'app_version'), eventLimit: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'event_limit'), firstRun: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'first_run'), showWeekends: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'show_weekends'), showWeekNumbers: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'show_week_numbers'), skipPopover: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'skip_popover'), slotDuration: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'slot_duration'), defaultReminder: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'default_reminder'), talkEnabled: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'talk_enabled'), tasksEnabled: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'tasks_enabled'), timezone: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'timezone'), showTasks: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'show_tasks'), hideEventExport: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'hide_event_export'), forceEventAlarmType: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'force_event_alarm_type', false), disableAppointments: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'disable_appointments', false), canSubscribeLink: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'can_subscribe_link', false), attachmentsFolder: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'attachments_folder', false), showResources: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'show_resources', true), publicCalendars: (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_16__.loadState)('calendar', 'publicCalendars', []) }); this.$store.dispatch('initializeCalendarJsConfig'); if ((_this$$route4 = this.$route) !== null && _this$$route4 !== void 0 && _this$$route4.name.startsWith('Public') || (_this$$route5 = this.$route) !== null && _this$$route5 !== void 0 && _this$$route5.name.startsWith('Embed') || this.isWidget) { await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_10__.initializeClientForPublicView)(); const tokens = this.isWidget ? [this.referenceToken] : this.$route.params.tokens.split('-'); const calendars = await this.$store.dispatch('getPublicCalendars', { tokens }); this.loadingCalendars = false; if (calendars.length === 0) { this.showEmptyCalendarScreen = true; } } else { await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_10__.initializeClientForUserView)(); await this.$store.dispatch('fetchCurrentUserPrincipal'); const { calendars, trashBin } = await this.$store.dispatch('loadCollections'); _utils_logger_js__WEBPACK_IMPORTED_MODULE_14__["default"].debug('calendars and trash bin loaded', { calendars, trashBin }); const owners = []; calendars.forEach(calendar => { if (owners.indexOf(calendar.owner) === -1) { owners.push(calendar.owner); } }); owners.forEach(owner => { this.$store.dispatch('fetchPrincipalByUrl', { url: owner }); }); const writeableCalendarIndex = calendars.findIndex(calendar => { return !calendar.readOnly; }); // No writeable calendars? Create a new one! if (writeableCalendarIndex === -1) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_14__["default"].info('User has no writable calendar, a new personal calendar will be created'); this.loadingCalendars = true; await this.$store.dispatch('appendCalendar', { displayName: this.$t('calendar', 'Personal'), color: (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_11__.uidToHexColor)(this.$t('calendar', 'Personal')), order: 0 }); } this.loadingCalendars = false; await this.fetchUserTypesAndUpdateCalendars(calendars); } }, async mounted() { if (this.timezone === 'automatic' && this.timezoneId === 'UTC') { const { toastElement } = (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_17__.showWarning)(this.$t('calendar', 'The automatic time zone detection determined your time zone to be UTC.\nThis is most likely the result of security measures of your web browser.\nPlease set your time zone manually in the calendar settings.'), { timeout: 60000 }); toastElement.classList.add('toast-calendar-multiline'); } if ((0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_13__["default"])().getTimezoneForId(this.timezoneId) === null) { const { toastElement } = (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_17__.showWarning)(this.$t('calendar', 'Your configured time zone ({timezoneId}) was not found. Falling back to UTC.\nPlease change your time zone in the settings and report this issue.', { timezoneId: this.timezoneId }), { timeout: 60000 }); toastElement.classList.add('toast-calendar-multiline'); } await this.$store.dispatch("userRole/fetchUserRoles"); await this.loadMomentLocale(); }, methods: { /** * Loads the locale data for moment.js * * @return {Promise} */ async loadMomentLocale() { const locale = await (0,_utils_moment_js__WEBPACK_IMPORTED_MODULE_15__["default"])(); this.$store.commit('setMomentLocale', { locale }); }, async fetchUserTypesAndUpdateCalendars(calendars) { for (const calendar of calendars) { const calendarOwner = calendar.owner; const userPrincipalId = calendarOwner.split('/').filter(Boolean).pop(); const userType = await this.fetchUserTypeForCalendar(userPrincipalId); if (userType != "") { calendar.displayName = "".concat(calendar.displayName, " (").concat(userType, ")"); } } }, async fetchUserTypeForCalendar(userPrincipalId) { let url = '/apps/gestion/getUserTypeByUserUuid/' + userPrincipalId; const ajaxUrl = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_22__.generateUrl)(url); const response = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_21__["default"].get(ajaxUrl); let responseValue = JSON.parse(response.data); return responseValue.thanatoTypeLabel; } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/EditSidebar.vue?vue&type=script&lang=js": /*!***************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/EditSidebar.vue?vue&type=script&lang=js ***! \***************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _components_Editor_Alarm_AlarmList_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/Editor/Alarm/AlarmList.vue */ "./src/components/Editor/Alarm/AlarmList.vue"); /* harmony import */ var _components_Editor_Invitees_InviteesList_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/Editor/Invitees/InviteesList.vue */ "./src/components/Editor/Invitees/InviteesList.vue"); /* harmony import */ var _components_Editor_Properties_PropertySelect_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelect.vue */ "./src/components/Editor/Properties/PropertySelect.vue"); /* harmony import */ var _components_Editor_Properties_PropertyText_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/Editor/Properties/PropertyText.vue */ "./src/components/Editor/Properties/PropertyText.vue"); /* harmony import */ var _components_Editor_Properties_PropertyTitleTimePicker_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/Editor/Properties/PropertyTitleTimePicker.vue */ "./src/components/Editor/Properties/PropertyTitleTimePicker.vue"); /* harmony import */ var _components_Editor_Properties_PropertyTitle_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/Editor/Properties/PropertyTitle.vue */ "./src/components/Editor/Properties/PropertyTitle.vue"); /* harmony import */ var _components_Editor_Repeat_Repeat_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../components/Editor/Repeat/Repeat.vue */ "./src/components/Editor/Repeat/Repeat.vue"); /* harmony import */ var _mixins_EditorMixin_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../mixins/EditorMixin.js */ "./src/mixins/EditorMixin.js"); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /* harmony import */ var _components_Editor_SaveButtons_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../components/Editor/SaveButtons.vue */ "./src/components/Editor/SaveButtons.vue"); /* harmony import */ var _components_Editor_Properties_PropertySelectMultiple_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectMultiple.vue */ "./src/components/Editor/Properties/PropertySelectMultiple.vue"); /* harmony import */ var _components_Editor_Properties_PropertyColor_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../components/Editor/Properties/PropertyColor.vue */ "./src/components/Editor/Properties/PropertyColor.vue"); /* harmony import */ var _components_Editor_Resources_ResourceList_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../components/Editor/Resources/ResourceList.vue */ "./src/components/Editor/Resources/ResourceList.vue"); /* harmony import */ var _components_Editor_InvitationResponseButtons_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../components/Editor/InvitationResponseButtons.vue */ "./src/components/Editor/InvitationResponseButtons.vue"); /* harmony import */ var _components_Editor_Attachments_AttachmentsList_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../components/Editor/Attachments/AttachmentsList.vue */ "./src/components/Editor/Attachments/AttachmentsList.vue"); /* harmony import */ var _components_Editor_CalendarPickerHeader_vue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../components/Editor/CalendarPickerHeader.vue */ "./src/components/Editor/CalendarPickerHeader.vue"); /* harmony import */ var vue_material_design_icons_AccountMultiple_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! vue-material-design-icons/AccountMultiple.vue */ "./node_modules/vue-material-design-icons/AccountMultiple.vue"); /* harmony import */ var vue_material_design_icons_CalendarBlank_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! vue-material-design-icons/CalendarBlank.vue */ "./node_modules/vue-material-design-icons/CalendarBlank.vue"); /* harmony import */ var vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! vue-material-design-icons/Delete.vue */ "./node_modules/vue-material-design-icons/Delete.vue"); /* harmony import */ var vue_material_design_icons_Download_vue__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! vue-material-design-icons/Download.vue */ "./node_modules/vue-material-design-icons/Download.vue"); /* harmony import */ var vue_material_design_icons_ContentDuplicate_vue__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! vue-material-design-icons/ContentDuplicate.vue */ "./node_modules/vue-material-design-icons/ContentDuplicate.vue"); /* harmony import */ var vue_material_design_icons_InformationOutline_vue__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! vue-material-design-icons/InformationOutline.vue */ "./node_modules/vue-material-design-icons/InformationOutline.vue"); /* harmony import */ var vue_material_design_icons_MapMarker_vue__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! vue-material-design-icons/MapMarker.vue */ "./node_modules/vue-material-design-icons/MapMarker.vue"); /* harmony import */ var _services_attachmentService_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../services/attachmentService.js */ "./src/services/attachmentService.js"); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /* harmony import */ var _services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../services/timezoneDataProviderService.js */ "./src/services/timezoneDataProviderService.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _components_Editor_Properties_PropertySelectAjax_vue__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectAjax.vue */ "./src/components/Editor/Properties/PropertySelectAjax.vue"); /* harmony import */ var _components_Editor_Properties_PropertySelectAjaxMultiple_vue__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectAjaxMultiple.vue */ "./src/components/Editor/Properties/PropertySelectAjaxMultiple.vue"); /* harmony import */ var _components_Editor_Properties_PropertySelectLieu_vue__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectLieu.vue */ "./src/components/Editor/Properties/PropertySelectLieu.vue"); /* harmony import */ var _components_Editor_Properties_PropertySelectClient_vue__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectClient.vue */ "./src/components/Editor/Properties/PropertySelectClient.vue"); /* harmony import */ var _components_Editor_Properties_PropertySelectArticle_vue__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectArticle.vue */ "./src/components/Editor/Properties/PropertySelectArticle.vue"); /* harmony import */ var _components_Editor_Properties_PropertyIsPrivate_vue__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../components/Editor/Properties/PropertyIsPrivate.vue */ "./src/components/Editor/Properties/PropertyIsPrivate.vue"); /* harmony import */ var _components_Editor_Properties_PropertySelectAbsenceType_vue__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectAbsenceType.vue */ "./src/components/Editor/Properties/PropertySelectAbsenceType.vue"); /* harmony import */ var _components_Editor_Properties_PropertyReturnToSiege_vue__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../components/Editor/Properties/PropertyReturnToSiege.vue */ "./src/components/Editor/Properties/PropertyReturnToSiege.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'EditSidebar', components: { PropertySelectAjaxMultiple: _components_Editor_Properties_PropertySelectAjaxMultiple_vue__WEBPACK_IMPORTED_MODULE_30__["default"], PropertySelectAjax: _components_Editor_Properties_PropertySelectAjax_vue__WEBPACK_IMPORTED_MODULE_29__["default"], PropertySelectLieu: _components_Editor_Properties_PropertySelectLieu_vue__WEBPACK_IMPORTED_MODULE_31__["default"], PropertySelectClient: _components_Editor_Properties_PropertySelectClient_vue__WEBPACK_IMPORTED_MODULE_32__["default"], PropertySelectArticle: _components_Editor_Properties_PropertySelectArticle_vue__WEBPACK_IMPORTED_MODULE_33__["default"], PropertyIsPrivate: _components_Editor_Properties_PropertyIsPrivate_vue__WEBPACK_IMPORTED_MODULE_34__["default"], ResourceList: _components_Editor_Resources_ResourceList_vue__WEBPACK_IMPORTED_MODULE_14__["default"], PropertyColor: _components_Editor_Properties_PropertyColor_vue__WEBPACK_IMPORTED_MODULE_13__["default"], PropertySelectMultiple: _components_Editor_Properties_PropertySelectMultiple_vue__WEBPACK_IMPORTED_MODULE_12__["default"], SaveButtons: _components_Editor_SaveButtons_vue__WEBPACK_IMPORTED_MODULE_11__["default"], AlarmList: _components_Editor_Alarm_AlarmList_vue__WEBPACK_IMPORTED_MODULE_2__["default"], NcAppSidebar: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAppSidebar, NcAppSidebarTab: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcAppSidebarTab, NcActionLink: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionLink, NcActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, NcEmptyContent: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcEmptyContent, NcModal: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcModal, NcListItemIcon: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcListItemIcon, NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton, NcCheckboxRadioSwitch: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcCheckboxRadioSwitch, InviteesList: _components_Editor_Invitees_InviteesList_vue__WEBPACK_IMPORTED_MODULE_3__["default"], PropertySelect: _components_Editor_Properties_PropertySelect_vue__WEBPACK_IMPORTED_MODULE_4__["default"], PropertyText: _components_Editor_Properties_PropertyText_vue__WEBPACK_IMPORTED_MODULE_5__["default"], PropertyTitleTimePicker: _components_Editor_Properties_PropertyTitleTimePicker_vue__WEBPACK_IMPORTED_MODULE_6__["default"], Repeat: _components_Editor_Repeat_Repeat_vue__WEBPACK_IMPORTED_MODULE_8__["default"], AccountMultiple: vue_material_design_icons_AccountMultiple_vue__WEBPACK_IMPORTED_MODULE_18__["default"], CalendarBlank: vue_material_design_icons_CalendarBlank_vue__WEBPACK_IMPORTED_MODULE_19__["default"], Delete: vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_20__["default"], Download: vue_material_design_icons_Download_vue__WEBPACK_IMPORTED_MODULE_21__["default"], ContentDuplicate: vue_material_design_icons_ContentDuplicate_vue__WEBPACK_IMPORTED_MODULE_22__["default"], InformationOutline: vue_material_design_icons_InformationOutline_vue__WEBPACK_IMPORTED_MODULE_23__["default"], MapMarker: vue_material_design_icons_MapMarker_vue__WEBPACK_IMPORTED_MODULE_24__["default"], InvitationResponseButtons: _components_Editor_InvitationResponseButtons_vue__WEBPACK_IMPORTED_MODULE_15__["default"], AttachmentsList: _components_Editor_Attachments_AttachmentsList_vue__WEBPACK_IMPORTED_MODULE_16__["default"], CalendarPickerHeader: _components_Editor_CalendarPickerHeader_vue__WEBPACK_IMPORTED_MODULE_17__["default"], PropertyTitle: _components_Editor_Properties_PropertyTitle_vue__WEBPACK_IMPORTED_MODULE_7__["default"], PropertySelectAbsenceType: _components_Editor_Properties_PropertySelectAbsenceType_vue__WEBPACK_IMPORTED_MODULE_35__["default"], PropertyReturnToSiege: _components_Editor_Properties_PropertyReturnToSiege_vue__WEBPACK_IMPORTED_MODULE_36__["default"] }, mixins: [_mixins_EditorMixin_js__WEBPACK_IMPORTED_MODULE_9__["default"]], data() { return { thisAndAllFuture: false, doNotShare: false, showModal: false, showModalNewAttachments: [], showModalUsers: [], sharedProgress: 0, showPreloader: false }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_37__.mapState)({ locale: state => state.settings.momentLocale, hideEventExport: state => state.settings.hideEventExport, attachmentsFolder: state => state.settings.attachmentsFolder, showResources: state => state.settings.showResources }), accessClass() { var _this$calendarObjectI; return ((_this$calendarObjectI = this.calendarObjectInstance) === null || _this$calendarObjectI === void 0 ? void 0 : _this$calendarObjectI.accessClass) || null; }, categories() { var _this$calendarObjectI2; return ((_this$calendarObjectI2 = this.calendarObjectInstance) === null || _this$calendarObjectI2 === void 0 ? void 0 : _this$calendarObjectI2.categories) || null; }, status() { var _this$calendarObjectI3; return ((_this$calendarObjectI3 = this.calendarObjectInstance) === null || _this$calendarObjectI3 === void 0 ? void 0 : _this$calendarObjectI3.status) || null; }, timeTransparency() { var _this$calendarObjectI4; return ((_this$calendarObjectI4 = this.calendarObjectInstance) === null || _this$calendarObjectI4 === void 0 ? void 0 : _this$calendarObjectI4.timeTransparency) || null; }, subTitle() { if (!this.calendarObjectInstance) { return ''; } const userTimezone = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_27__["default"])().getTimezoneForId(this.currentUserTimezone); if (!userTimezone) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_28__["default"].warn("User timezone not found: ".concat(this.currentUserTimezone)); return ''; } const startDateInUserTz = this.calendarObjectInstance.eventComponent.startDate.getInTimezone(userTimezone).jsDate; return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_10__["default"])(startDateInUserTz).locale(this.locale).fromNow(); }, attachments() { var _this$calendarObjectI5; return ((_this$calendarObjectI5 = this.calendarObjectInstance) === null || _this$calendarObjectI5 === void 0 ? void 0 : _this$calendarObjectI5.attachments) || null; }, currentUser() { return this.$store.getters.getCurrentUserPrincipal || null; } }, mounted() { window.addEventListener('keydown', this.keyboardCloseEditor); window.addEventListener('keydown', this.keyboardSaveEvent); window.addEventListener('keydown', this.keyboardDeleteEvent); window.addEventListener('keydown', this.keyboardDuplicateEvent); }, beforeDestroy() { window.removeEventListener('keydown', this.keyboardCloseEditor); window.removeEventListener('keydown', this.keyboardSaveEvent); window.removeEventListener('keydown', this.keyboardDeleteEvent); window.removeEventListener('keydown', this.keyboardDuplicateEvent); }, methods: { /** * Update the start and end date of this event * * @param {object} dates The new start and end date */ updateDates(dates) { this.updateStartDate(dates.start); this.updateEndDate(dates.end); }, /** * Updates the access-class of this event * * @param {string} accessClass The new access class */ updateAccessClass(accessClass) { this.$store.commit('changeAccessClass', { calendarObjectInstance: this.calendarObjectInstance, accessClass }); }, /** * Updates the status of the event * * @param {string} status The new status */ updateStatus(status) { this.$store.commit('changeStatus', { calendarObjectInstance: this.calendarObjectInstance, status }); }, /** * Updates the time-transparency of the event * * @param {string} timeTransparency The new time-transparency */ updateTimeTransparency(timeTransparency) { this.$store.commit('changeTimeTransparency', { calendarObjectInstance: this.calendarObjectInstance, timeTransparency }); }, /** * Adds a category to the event * * @param {string} category Category to add */ addCategory(category) { this.$store.commit('addCategory', { calendarObjectInstance: this.calendarObjectInstance, category }); }, /** * Removes a category from the event * * @param {string} category Category to remove */ removeCategory(category) { this.$store.commit('removeCategory', { calendarObjectInstance: this.calendarObjectInstance, category }); }, /** * Updates the color of the event * * @param {string} customColor The new color */ updateColor(customColor) { this.$store.commit('changeCustomColor', { calendarObjectInstance: this.calendarObjectInstance, customColor }); }, /** * Checks is the calendar event has attendees, but organizer or not * * @return {boolean} */ checkIsPrivate() { return this.calendarObjectInstance.attendees.filter(attendee => { if (this.currentUser.emailAddress.toLowerCase() !== (attendee.uri.split('mailto:').length === 2 ? attendee.uri.split('mailto:')[1].toLowerCase() : attendee.uri.toLowerCase())) { return attendee; } return false; }).length === 0; }, getPreview(attachment) { if (attachment.xNcHasPreview) { return (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateUrl)("/core/preview?fileId=".concat(attachment.xNcFileId, "&x=100&y=100&a=0")); } return attachment.formatType ? OC.MimeType.getIconUrl(attachment.formatType) : OC.MimeType.getIconUrl('folder'); }, acceptAttachmentsModal() { if (!this.doNotShare) { const total = this.showModalNewAttachments.length; this.showPreloader = true; if (!this.checkIsPrivate()) { this.showModalNewAttachments.map(async (attachment, i) => { // console.log('Add share', attachment) this.sharedProgress = Math.ceil(100 * (i + 1) / total); // add share + change attachment try { var _data$share_type; const data = await (0,_services_attachmentService_js__WEBPACK_IMPORTED_MODULE_25__.shareFile)("".concat(this.attachmentsFolder).concat(attachment.fileName)); attachment.shareTypes = data === null || data === void 0 || (_data$share_type = data.share_type) === null || _data$share_type === void 0 ? void 0 : _data$share_type.toString(); if (typeof attachment.attachmentProperty.getParameter('X-NC-SHARED-TYPES') === 'undefined') { const xNcSharedTypes = new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_26__.Parameter('X-NC-SHARED-TYPES', attachment.shareTypes); attachment.attachmentProperty.setParameter(xNcSharedTypes); } attachment.attachmentProperty.uri = data === null || data === void 0 ? void 0 : data.url; attachment.uri = data === null || data === void 0 ? void 0 : data.url; // toastify success } catch (e) { // toastify err console.error(e); } return attachment; }); } else { // TODO it is not possible to delete shares, because share ID needed /* this.showModalNewAttachments.map((attachment, i) => { this.sharedProgress += Math.ceil(100 * (i + 1) / total) return attachment }) */ } } setTimeout(() => { this.showPreloader = false; this.sharedProgress = 0; this.showModal = false; this.showModalNewAttachments = []; this.showModalUsers = []; this.saveEvent(this.thisAndAllFuture); }, 500); // trigger save event after make each attachment access // 1) if !isPrivate get attachments NOT SHARED and SharedType is empry -> API ADD SHARE // 2) if isPrivate get attachments SHARED and SharedType is not empty -> API DELETE SHARE // 3) update calendarObject while pending access change // 4) after all access changes, save Event trigger // 5) done }, closeAttachmentsModal() { this.showModal = false; }, emailWithoutMailto(mailto) { return mailto.split('mailto:').length === 2 ? mailto.split('mailto:')[1].toLowerCase() : mailto.toLowerCase(); }, getBaseName(name) { return name.split('/').pop(); }, prepareAccessForAttachments() { let thisAndAllFuture = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; this.thisAndAllFuture = thisAndAllFuture; const newAttachments = this.calendarObjectInstance.attachments.filter(attachment => { // get only new attachments // TODO get NOT only new attachments =) Maybe we should filter all attachments without share-type, 'cause event can be private and AFTER save owner could add new participant return !this.checkIsPrivate() ? attachment.isNew && attachment.shareTypes === null : attachment.isNew && attachment.shareTypes !== null; }); // if there are new attachment and event not saved if (newAttachments.length > 0 && !this.checkIsPrivate()) { // and is event NOT private, // then add share to each attachment // only if attachment['share-types'] is null or empty this.showModal = true; this.showModalNewAttachments = newAttachments; this.showModalUsers = this.calendarObjectInstance.attendees.filter(attendee => { if (this.currentUser.emailAddress.toLowerCase() !== this.emailWithoutMailto(attendee.uri)) { return attendee; } return false; }); } else { this.saveEvent(thisAndAllFuture); } }, saveEvent() { let thisAndAllFuture = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; // if there is new attachments and !private, then make modal with users and files/ // maybe check shared access before add file this.saveAndLeave(thisAndAllFuture); this.calendarObjectInstance.attachments = this.calendarObjectInstance.attachments.map(attachment => { if (attachment.isNew) { delete attachment.isNew; } return attachment; }); }, addArticle(article) { if (this.description && this.description !== "") { this.updateDescription(this.description + ";" + article); } else { this.updateDescription(article); } }, removeArticle(article) { if (this.description && this.description !== "") { let values = []; let items = this.description.split(';'); items.forEach(item => { if (item !== article) { values.push(item); } }); this.updateDescription(values.join(";")); } else { this.updateDescription(null); } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/EditSimple.vue?vue&type=script&lang=js": /*!**************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/EditSimple.vue?vue&type=script&lang=js ***! \**************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var _mixins_EditorMixin_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../mixins/EditorMixin.js */ "./src/mixins/EditorMixin.js"); /* harmony import */ var _components_Editor_Properties_PropertyTitle_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/Editor/Properties/PropertyTitle.vue */ "./src/components/Editor/Properties/PropertyTitle.vue"); /* harmony import */ var _components_Editor_Properties_PropertyTitleTimePicker_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/Editor/Properties/PropertyTitleTimePicker.vue */ "./src/components/Editor/Properties/PropertyTitleTimePicker.vue"); /* harmony import */ var _components_Editor_Properties_PropertyText_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/Editor/Properties/PropertyText.vue */ "./src/components/Editor/Properties/PropertyText.vue"); /* harmony import */ var _components_Editor_SaveButtons_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/Editor/SaveButtons.vue */ "./src/components/Editor/SaveButtons.vue"); /* harmony import */ var _components_Popover_PopoverLoadingIndicator_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/Popover/PopoverLoadingIndicator.vue */ "./src/components/Popover/PopoverLoadingIndicator.vue"); /* harmony import */ var _utils_router_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/router.js */ "./src/utils/router.js"); /* harmony import */ var _components_Editor_InvitationResponseButtons_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../components/Editor/InvitationResponseButtons.vue */ "./src/components/Editor/InvitationResponseButtons.vue"); /* harmony import */ var _components_Editor_CalendarPickerHeader_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../components/Editor/CalendarPickerHeader.vue */ "./src/components/Editor/CalendarPickerHeader.vue"); /* harmony import */ var _components_Editor_Invitees_InviteesList_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../components/Editor/Invitees/InviteesList.vue */ "./src/components/Editor/Invitees/InviteesList.vue"); /* harmony import */ var vue_material_design_icons_CalendarBlank_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! vue-material-design-icons/CalendarBlank.vue */ "./node_modules/vue-material-design-icons/CalendarBlank.vue"); /* harmony import */ var vue_material_design_icons_Close_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! vue-material-design-icons/Close.vue */ "./node_modules/vue-material-design-icons/Close.vue"); /* harmony import */ var vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! vue-material-design-icons/Delete.vue */ "./node_modules/vue-material-design-icons/Delete.vue"); /* harmony import */ var vue_material_design_icons_Download_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! vue-material-design-icons/Download.vue */ "./node_modules/vue-material-design-icons/Download.vue"); /* harmony import */ var vue_material_design_icons_ContentDuplicate_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! vue-material-design-icons/ContentDuplicate.vue */ "./node_modules/vue-material-design-icons/ContentDuplicate.vue"); /* harmony import */ var vue_material_design_icons_Pencil_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! vue-material-design-icons/Pencil.vue */ "./node_modules/vue-material-design-icons/Pencil.vue"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _components_Editor_Properties_PropertySelect_vue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelect.vue */ "./src/components/Editor/Properties/PropertySelect.vue"); /* harmony import */ var _components_Editor_Properties_PropertySelectAjax_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectAjax.vue */ "./src/components/Editor/Properties/PropertySelectAjax.vue"); /* harmony import */ var _components_Editor_Properties_PropertySelectAjaxMultiple_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectAjaxMultiple.vue */ "./src/components/Editor/Properties/PropertySelectAjaxMultiple.vue"); /* harmony import */ var _components_Editor_Properties_PropertySelectLieu_vue__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectLieu.vue */ "./src/components/Editor/Properties/PropertySelectLieu.vue"); /* harmony import */ var _components_Editor_Properties_PropertySelectClient_vue__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectClient.vue */ "./src/components/Editor/Properties/PropertySelectClient.vue"); /* harmony import */ var _components_Editor_Properties_PropertySelectArticle_vue__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectArticle.vue */ "./src/components/Editor/Properties/PropertySelectArticle.vue"); /* harmony import */ var _components_Editor_Properties_PropertySelectAbsenceType_vue__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectAbsenceType.vue */ "./src/components/Editor/Properties/PropertySelectAbsenceType.vue"); /* harmony import */ var _components_Editor_Properties_PropertyIsPrivate_vue__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../components/Editor/Properties/PropertyIsPrivate.vue */ "./src/components/Editor/Properties/PropertyIsPrivate.vue"); /* harmony import */ var _components_Editor_Properties_PropertyReturnToSiege_vue__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../components/Editor/Properties/PropertyReturnToSiege.vue */ "./src/components/Editor/Properties/PropertyReturnToSiege.vue"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ name: 'EditSimple', components: { PropertySelectAjaxMultiple: _components_Editor_Properties_PropertySelectAjaxMultiple_vue__WEBPACK_IMPORTED_MODULE_19__["default"], PropertySelectAjax: _components_Editor_Properties_PropertySelectAjax_vue__WEBPACK_IMPORTED_MODULE_18__["default"], PropertySelectLieu: _components_Editor_Properties_PropertySelectLieu_vue__WEBPACK_IMPORTED_MODULE_20__["default"], PropertySelectClient: _components_Editor_Properties_PropertySelectClient_vue__WEBPACK_IMPORTED_MODULE_21__["default"], PropertySelectArticle: _components_Editor_Properties_PropertySelectArticle_vue__WEBPACK_IMPORTED_MODULE_22__["default"], PropertyIsPrivate: _components_Editor_Properties_PropertyIsPrivate_vue__WEBPACK_IMPORTED_MODULE_24__["default"], PropertySelect: _components_Editor_Properties_PropertySelect_vue__WEBPACK_IMPORTED_MODULE_17__["default"], PopoverLoadingIndicator: _components_Popover_PopoverLoadingIndicator_vue__WEBPACK_IMPORTED_MODULE_6__["default"], SaveButtons: _components_Editor_SaveButtons_vue__WEBPACK_IMPORTED_MODULE_5__["default"], PropertyText: _components_Editor_Properties_PropertyText_vue__WEBPACK_IMPORTED_MODULE_4__["default"], PropertyTitleTimePicker: _components_Editor_Properties_PropertyTitleTimePicker_vue__WEBPACK_IMPORTED_MODULE_3__["default"], PropertyTitle: _components_Editor_Properties_PropertyTitle_vue__WEBPACK_IMPORTED_MODULE_2__["default"], PropertySelectAbsenceType: _components_Editor_Properties_PropertySelectAbsenceType_vue__WEBPACK_IMPORTED_MODULE_23__["default"], Popover: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcPopover, Actions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActions, ActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionButton, ActionLink: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcActionLink, EmptyContent: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcEmptyContent, CalendarBlank: vue_material_design_icons_CalendarBlank_vue__WEBPACK_IMPORTED_MODULE_11__["default"], Close: vue_material_design_icons_Close_vue__WEBPACK_IMPORTED_MODULE_12__["default"], Download: vue_material_design_icons_Download_vue__WEBPACK_IMPORTED_MODULE_14__["default"], ContentDuplicate: vue_material_design_icons_ContentDuplicate_vue__WEBPACK_IMPORTED_MODULE_15__["default"], Delete: vue_material_design_icons_Delete_vue__WEBPACK_IMPORTED_MODULE_13__["default"], InvitationResponseButtons: _components_Editor_InvitationResponseButtons_vue__WEBPACK_IMPORTED_MODULE_8__["default"], CalendarPickerHeader: _components_Editor_CalendarPickerHeader_vue__WEBPACK_IMPORTED_MODULE_9__["default"], InviteesList: _components_Editor_Invitees_InviteesList_vue__WEBPACK_IMPORTED_MODULE_10__["default"], NcButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcButton, EditIcon: vue_material_design_icons_Pencil_vue__WEBPACK_IMPORTED_MODULE_16__["default"], PropertyReturnToSiege: _components_Editor_Properties_PropertyReturnToSiege_vue__WEBPACK_IMPORTED_MODULE_25__["default"] }, mixins: [_mixins_EditorMixin_js__WEBPACK_IMPORTED_MODULE_1__["default"]], data() { return { placement: 'auto', hasLocation: false, hasDescription: false, boundaryElement: null, isVisible: true, isViewing: true, locationNameSeleted: '' }; }, methods: { getlocationName(name) { this.locationNameSeleted = name; } }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_26__.mapState)({ hideEventExport: state => state.settings.hideEventExport, widgetEventDetailsOpen: state => state.calendars.widgetEventDetailsOpen, widgetEventDetails: state => state.calendars.widgetEventDetails, widgetRef: state => state.calendars.widgetRef }), showPopover() { return this.isVisible || this.widgetEventDetailsOpen; }, /** * Returns true if the current event is read only or the user is viewing the event * * @return {boolean} */ isReadOnlyOrViewing() { return this.isReadOnly || this.isViewing || this.isWidget; }, /** * Return the event's title or a placeholder if it is empty * * @return {string} */ titleOrPlaceholder() { if (this.title === '' && this.isReadOnlyOrViewing && !this.isLoading) { return t('calendar', 'Untitled event'); } return this.title; } }, watch: { $route(to, from) { this.repositionPopover(); // Hide popover when changing the view until the user selects a slot again this.isVisible = (to === null || to === void 0 ? void 0 : to.params.view) === (from === null || from === void 0 ? void 0 : from.params.view); }, calendarObjectInstance() { this.hasLocation = false; this.hasDescription = false; if (typeof this.calendarObjectInstance.location === 'string' && this.calendarObjectInstance.location.trim() !== '') { this.hasLocation = true; } if (typeof this.calendarObjectInstance.description === 'string' && this.calendarObjectInstance.description.trim() !== '') { this.hasDescription = true; } }, isNew: { immediate: true, handler(isNew) { // New events should be editable from the start this.isViewing = !isNew; } } }, async mounted() { if (this.isWidget) { const objectId = this.widgetEventDetails.object; const recurrenceId = this.widgetEventDetails.recurrenceId; await this.$store.dispatch('getCalendarObjectInstanceByObjectIdAndRecurrenceId', { objectId, recurrenceId }); this.calendarId = this.calendarObject.calendarId; this.isLoading = false; } this.boundaryElement = this.isWidget ? document.querySelector('.fc') : document.querySelector('#app-content-vue > .fc'); window.addEventListener('keydown', this.keyboardCloseEditor); window.addEventListener('keydown', this.keyboardSaveEvent); window.addEventListener('keydown', this.keyboardDeleteEvent); window.addEventListener('keydown', this.keyboardDuplicateEvent); this.$nextTick(() => { this.repositionPopover(); }); }, beforeDestroy() { window.removeEventListener('keydown', this.keyboardCloseEditor); window.removeEventListener('keydown', this.keyboardSaveEvent); window.removeEventListener('keydown', this.keyboardDeleteEvent); window.removeEventListener('keydown', this.keyboardDuplicateEvent); }, methods: { showMore() { // Do not save yet this.requiresActionOnRouteLeave = false; const params = Object.assign({}, this.$route.params); if (this.isNew) { this.$router.push({ name: 'NewSidebarView', params }); } else { this.$router.push({ name: (0,_utils_router_js__WEBPACK_IMPORTED_MODULE_7__.getPrefixedRoute)(this.$route.name, 'EditSidebarView'), params }); } }, getDomElementForPopover(isNew, route) { let matchingDomObject; if (this.isWidget) { const objectId = this.widgetEventDetails.object; const recurrenceId = this.widgetEventDetails.recurrenceId; matchingDomObject = this.widgetRef.querySelector(".fc-event[data-object-id=\"".concat(objectId, "\"][data-recurrence-id=\"").concat(recurrenceId, "\"]")); this.placement = 'auto'; } else if (isNew) { matchingDomObject = document.querySelector('.fc-highlight'); this.placement = 'auto'; if (!matchingDomObject) { matchingDomObject = document.querySelector('.fc-event[data-is-new="yes"]'); } } else { const objectId = route.params.object; const recurrenceId = route.params.recurrenceId; matchingDomObject = document.querySelector(".fc-event[data-object-id=\"".concat(objectId, "\"][data-recurrence-id=\"").concat(recurrenceId, "\"]")); this.placement = 'auto'; } if (!matchingDomObject) { matchingDomObject = document.querySelector('#app-navigation-vue'); this.placement = 'right'; } if (!matchingDomObject) { matchingDomObject = document.querySelector('body'); this.placement = 'auto'; } console.info('getDomElementForPopover', matchingDomObject, this.placement); return matchingDomObject; }, repositionPopover() { const isNew = this.isWidget ? false : this.$route.name === 'NewPopoverView'; this.$refs.popover.$children[0].$refs.reference = this.getDomElementForPopover(isNew, this.$route); this.$refs.popover.$children[0].$refs.popper.dispose(); this.$refs.popover.$children[0].$refs.popper.init(); }, /** * Save changes and leave when creating a new event or return to viewing mode when editing * an existing event. Stay in editing mode if an error occurrs. * * @param {boolean} thisAndAllFuture Modify this and all future events * @return {Promise} */ async saveAndView(thisAndAllFuture) { // Transitioning from new to edit routes is not implemented for now if (this.isNew) { await this.saveAndLeave(thisAndAllFuture); return; } this.isViewing = true; try { await this.save(thisAndAllFuture); this.requiresActionOnRouteLeave = false; } catch (error) { this.isViewing = false; } }, addArticle(article) { if (this.description && this.description !== "") { this.updateDescription(this.description + ";" + article); } else { this.updateDescription(article); } }, removeArticle(article) { if (this.description && this.description !== "") { let values = []; let items = this.description.split(';'); items.forEach(item => { if (item !== article) { values.push(item); } }); this.updateDescription(values.join(";")); } else { this.updateDescription(null); } } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/App.vue?vue&type=template&id=7ba5bd90": /*!************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/App.vue?vue&type=template&id=7ba5bd90 ***! \************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("router-view"); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader.vue?vue&type=template&id=66a813e8": /*!*****************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader.vue?vue&type=template&id=66a813e8 ***! \*****************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("header", { staticClass: "app-navigation-header" }, [_c("AppNavigationHeaderDatePicker", { attrs: { "can-access-previous-event": _vm.canAccessPreviousEvent } }), _vm._v(" "), _c("div", { staticClass: "new-event-today-view-section" }, [!_vm.isPublic ? _c("AppNavigationHeaderNewEvent") : _vm._e(), _vm._v(" "), _c("AppNavigationHeaderTodayButton"), _vm._v(" "), _c("AppNavigationHeaderViewMenu", { attrs: { "can-access-previous-event": _vm.canAccessPreviousEvent } })], 1)], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderDatePicker.vue?vue&type=template&id=e8250812": /*!***********************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderDatePicker.vue?vue&type=template&id=e8250812 ***! \***********************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "datepicker-button-section" }, [!_vm.isWidget && _vm.canAccessPreviousEvent ? _c("NcButton", { directives: [{ name: "shortkey", rawName: "v-shortkey", value: _vm.previousShortKeyConf, expression: "previousShortKeyConf" }], staticClass: "datepicker-button-section__previous button", attrs: { "aria-label": _vm.previousLabel, name: _vm.previousLabel }, on: { click: _vm.navigateToPreviousTimeRange, shortkey: _vm.navigateToPreviousTimeRange }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("ChevronLeftIcon", { attrs: { size: 22 } })]; }, proxy: true }], null, false, 3894911889) }) : _vm._e(), _vm._v(" "), !_vm.isWidget ? _c("NcButton", { staticClass: "datepicker-button-section__datepicker-label button datepicker-label", on: { click: function ($event) { $event.stopPropagation(); $event.preventDefault(); return _vm.toggleDatepicker.apply(null, arguments); }, mousedown: function ($event) { $event.stopPropagation(); $event.preventDefault(); return _vm.doNothing.apply(null, arguments); }, mouseup: function ($event) { $event.stopPropagation(); $event.preventDefault(); return _vm.doNothing.apply(null, arguments); } } }, [_vm._v("\n\t\t" + _vm._s(_vm._f("formatDateRange")(_vm.selectedDate, _vm.view, _vm.locale)) + "\n\t")]) : _vm._e(), _vm._v(" "), _c("DatePicker", { ref: "datepicker", class: _vm.isWidget ? "datepicker-widget" : "datepicker-button-section__datepicker", attrs: { "append-to-body": _vm.isWidget, date: _vm.selectedDate, "is-all-day": true, open: _vm.isDatepickerOpen, type: _vm.view === "multiMonthYear" ? "year" : "date", min: _vm.minimumDate }, on: { "update:open": function ($event) { _vm.isDatepickerOpen = $event; }, change: _vm.navigateToDate } }), _vm._v(" "), !_vm.isWidget ? _c("NcButton", { directives: [{ name: "shortkey", rawName: "v-shortkey", value: _vm.nextShortKeyConf, expression: "nextShortKeyConf" }], staticClass: "datepicker-button-section__next button", attrs: { "aria-label": _vm.nextLabel, name: _vm.nextLabel }, on: { click: _vm.navigateToNextTimeRange, shortkey: _vm.navigateToNextTimeRange }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("ChevronRightIcon", { attrs: { size: 22 } })]; }, proxy: true }], null, false, 849334666) }) : _vm._e()], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderNewEvent.vue?vue&type=template&id=673844b5&scoped=true": /*!*********************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderNewEvent.vue?vue&type=template&id=673844b5&scoped=true ***! \*********************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("NcButton", { directives: [{ name: "shortkey", rawName: "v-shortkey", value: ["c"], expression: "['c']" }], staticClass: "button new-event", attrs: { "aria-label": _vm.newEventButtonAriaLabel, type: "primary" }, on: { click: _vm.newEvent, shortkey: _vm.newEvent }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Plus", { attrs: { size: 20 } })]; }, proxy: true }]) }, [_vm._v("\n\t" + _vm._s(_vm.$t("calendar", "Event")) + "\n")]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderTodayButton.vue?vue&type=template&id=a0dcdc70": /*!************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderTodayButton.vue?vue&type=template&id=a0dcdc70 ***! \************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("NcButton", { directives: [{ name: "shortkey", rawName: "v-shortkey", value: ["t"], expression: "['t']" }], staticClass: "button today", on: { shortkey: _vm.today, click: _vm.today } }, [_vm._v("\n\t" + _vm._s(_vm.$t("calendar", "Today")) + "\n")]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderViewMenu.vue?vue&type=template&id=1d89dc7f": /*!*********************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderViewMenu.vue?vue&type=template&id=1d89dc7f ***! \*********************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("Actions", { directives: [{ name: "shortkey", rawName: "v-shortkey", value: _vm.shortKeyConf, expression: "shortKeyConf" }], attrs: { "menu-align": "right" }, nativeOn: { shortkey: function ($event) { return _vm.selectViewFromShortcut.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c(_vm.defaultIcon, { tag: "component", attrs: { size: 20, decorative: "" } })]; }, proxy: true }]) }, [_vm._v(" "), _vm._l(_vm.views, function (view) { return _c("ActionButton", { key: view.id, attrs: { icon: view.icon }, on: { click: function ($event) { return _vm.selectView(view.id); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c(view.icon, { tag: "component", attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, true) }, [_vm._v("\n\t\t" + _vm._s(view.label) + "\n\t")]); })], 2); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppointmentConfigList.vue?vue&type=template&id=67056036": /*!*******************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppointmentConfigList.vue?vue&type=template&id=67056036 ***! \*******************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _vm.hasAtLeastOneCalendar ? _c("div", { staticClass: "appointment-config-list" }, [_c("AppNavigationCaption", { staticClass: "appointment-config-list__caption", attrs: { name: _vm.t("calendar", "Appointments") }, scopedSlots: _vm._u([_vm.hasUserEmailAddress ? { key: "actions", fn: function () { return [_c("ActionButton", { attrs: { "close-after-click": true }, on: { click: function ($event) { _vm.showModalForNewConfig = true; } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("PlusIcon", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 3690201279) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Add new")) + "\n\t\t\t")])]; }, proxy: true } : null], null, true) }), _vm._v(" "), _vm.hasUserEmailAddress ? [_vm.sortedConfigs.length > 0 ? _vm._l(_vm.sortedConfigs, function (config) { return _c("AppointmentConfigListItem", { key: config.id, attrs: { config: config }, on: { delete: function ($event) { return _vm.deleteConfig(config); } } }); }) : _vm._e(), _vm._v(" "), _vm.showModalForNewConfig ? _c("AppointmentConfigModal", { attrs: { "is-new": true, config: _vm.defaultConfig }, on: { close: _vm.closeModal } }) : _vm._e()] : _c("NoEmailAddressWarning")], 2) : _vm._e(); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppointmentConfigList/AppointmentConfigListItem.vue?vue&type=template&id=a2632330": /*!*********************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppointmentConfigList/AppointmentConfigListItem.vue?vue&type=template&id=a2632330 ***! \*********************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", [_c("AppNavigationItem", { attrs: { name: _vm.config.name }, on: { click: function ($event) { $event.preventDefault(); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CalendarCheckIcon", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }, { key: "actions", fn: function () { return [_c("ActionLink", { attrs: { href: _vm.config.bookingUrl, target: "_blank" }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("OpenInNewIcon", { attrs: { size: 20 } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Preview")) + "\n\t\t\t")]), _vm._v(" "), _vm.hasClipboard ? _c("ActionButton", { attrs: { "close-after-click": true }, on: { click: _vm.copyLink }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("LinkVariantIcon", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 3760589108) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Copy link")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _c("ActionButton", { attrs: { "close-after-click": true }, on: { click: function ($event) { _vm.showModal = true; } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("PencilIcon", { attrs: { size: 20 } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Edit")) + "\n\t\t\t")]), _vm._v(" "), _c("ActionButton", { attrs: { "close-after-click": true }, on: { click: function ($event) { return _vm.$emit("delete", $event); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("DeleteIcon", { attrs: { size: 20 } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Delete")) + "\n\t\t\t")])]; }, proxy: true }]) }), _vm._v(" "), _vm.showModal ? _c("AppointmentConfigModal", { attrs: { "is-new": false, config: _vm.config }, on: { close: _vm.closeModal } }) : _vm._e()], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList.vue?vue&type=template&id=146b35f4": /*!**********************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList.vue?vue&type=template&id=146b35f4 ***! \**********************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("draggable", _vm._b({ attrs: { disabled: _vm.disableDragging, draggable: ".draggable-calendar-list-item" }, on: { update: _vm.update }, scopedSlots: _vm._u([{ key: "footer", fn: function () { return [_vm.loadingCalendars ? _c("CalendarListItemLoadingPlaceholder") : _vm._e()]; }, proxy: true }]), model: { value: _vm.calendars, callback: function ($$v) { _vm.calendars = $$v; }, expression: "calendars" } }, "draggable", { swapThreshold: 0.3, delay: 500, delayOnTouchOnly: true, touchStartThreshold: 3 }, false), [!_vm.isPublic ? _vm._l(_vm.calendars, function (calendar) { return _c("CalendarListItem", { key: calendar.id, staticClass: "draggable-calendar-list-item", attrs: { calendar: calendar } }); }) : _vm._l(_vm.calendars, function (calendar) { return _c("PublicCalendarListItem", { key: calendar.id, attrs: { calendar: calendar } }); })], 2); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/CalendarListItem.vue?vue&type=template&id=a7253930&scoped=true": /*!***************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/CalendarListItem.vue?vue&type=template&id=a7253930&scoped=true ***! \***************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("AppNavigationItem", { class: { deleted: _vm.isBeingDeleted, disabled: !_vm.calendar.enabled }, attrs: { loading: _vm.calendar.loading, "aria-description": _vm.descriptionAppNavigationItem, name: _vm.calendar.displayName || _vm.$t("calendar", "Untitled calendar") }, on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.toggleEnabled.apply(null, arguments); }, "update:menuOpen": function ($event) { _vm.actionsMenuOpen = $event; } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_vm.calendar.enabled ? _c("CheckboxBlankCircle", { attrs: { size: 20, "fill-color": _vm.calendar.color } }) : _c("CheckboxBlankCircleOutline", { attrs: { size: 20, "fill-color": _vm.calendar.color } })]; }, proxy: true }, { key: "counter", fn: function () { return [_vm.isSharedByMe ? _c("LinkVariant", { attrs: { size: 20 } }) : _vm.isSharedWithMe && _vm.loadedOwnerPrincipal && !_vm.actionsMenuOpen ? _c("NcAvatar", { attrs: { user: _vm.ownerUserId, "display-name": _vm.ownerDisplayname } }) : _vm.isSharedWithMe && !_vm.loadedOwnerPrincipal ? _c("div", { staticClass: "icon icon-loading" }) : _vm._e()]; }, proxy: true }, { key: "actions", fn: function () { return [!_vm.isBeingDeleted ? [_vm.isSharedWithMe ? [_c("NcActionCaption", { attrs: { name: _vm.$t("calendar", "Shared with you by") } }), _vm._v(" "), _c("NcActionText", { attrs: { name: _vm.ownerDisplayname }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("div", { staticClass: "actions-icon-avatar" }, [_c("NcAvatar", { attrs: { user: _vm.ownerUserId, "display-name": _vm.ownerDisplayname, size: 30 } })], 1)]; }, proxy: true }], null, false, 1602781365) }), _vm._v(" "), _c("NcActionSeparator")] : _vm._e(), _vm._v(" "), _c("ActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.showEditModal.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Pencil", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 2864695315) }, [_vm._v(" "), _vm.canBeShared ? [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Edit and share calendar")) + "\n\t\t\t\t")] : [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Edit calendar")) + "\n\t\t\t\t")]], 2)] : [_vm.calendar.isSharedWithMe ? _c("ActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.cancelDeleteCalendar.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Undo", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 4006107262) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$n("calendar", "Unsharing the calendar in {countdown} second", "Unsharing the calendar in {countdown} seconds", _vm.countdown, { countdown: _vm.countdown })) + "\n\t\t\t")]) : _c("ActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.cancelDeleteCalendar.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Undo", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$n("calendar", "Deleting the calendar in {countdown} second", "Deleting the calendar in {countdown} seconds", _vm.countdown, { countdown: _vm.countdown })) + "\n\t\t\t")])]]; }, proxy: true }]) }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/CalendarListItemLoadingPlaceholder.vue?vue&type=template&id=78bfc69f": /*!*********************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/CalendarListItemLoadingPlaceholder.vue?vue&type=template&id=78bfc69f ***! \*********************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _vm._m(0); }; var staticRenderFns = [function () { var _vm = this, _c = _vm._self._c; return _c("li", { staticClass: "app-navigation-loading-placeholder-entry" }, [_c("div", { staticClass: "icon icon-loading" })]); }]; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/CalendarListNew.vue?vue&type=template&id=5871395b": /*!**************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/CalendarListNew.vue?vue&type=template&id=5871395b ***! \**************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("AppNavigationItem", { staticClass: "app-navigation-entry-new-calendar", class: { "app-navigation-entry-new-calendar--open": _vm.isOpen }, attrs: { name: _vm.$t("calendar", "New calendar"), "menu-open": _vm.isOpen }, on: { "update:menuOpen": function ($event) { _vm.isOpen = $event; }, "update:menu-open": function ($event) { _vm.isOpen = $event; }, click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.toggleDialog.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Plus", { attrs: { size: 20 } })]; }, proxy: true }, { key: "actions", fn: function () { return [_vm.showCreateCalendarLabel ? _c("ActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.openCreateCalendarInput.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CalendarBlank", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 2920828918) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "New calendar")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCreateCalendarInput ? _c("ActionInput", { attrs: { "aria-label": _vm.$t("calendar", "Name for new calendar") }, on: { submit: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.createNewCalendar.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CalendarBlank", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 2920828918) }) : _vm._e(), _vm._v(" "), _vm.showCreateCalendarSaving ? _c("ActionText", { attrs: { icon: "icon-loading-small" } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Creating calendar …")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCreateCalendarTaskListLabel ? _c("ActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.openCreateCalendarTaskListInput.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CalendarCheck", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 238879706) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "New calendar with task list")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCreateCalendarTaskListInput ? _c("ActionInput", { attrs: { "aria-label": _vm.$t("calendar", "Name for new calendar") }, on: { submit: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.createNewCalendarTaskList.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CalendarCheck", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 238879706) }) : _vm._e(), _vm._v(" "), _vm.showCreateCalendarTaskListSaving ? _c("ActionText", { attrs: { icon: "icon-loading-small" } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Creating calendar …")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.canSubscribeLink ? _c("ActionSeparator") : _vm._e(), _vm._v(" "), _vm.showCreateSubscriptionLabel && _vm.canSubscribeLink ? _c("ActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.openCreateSubscriptionInput.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("LinkVariant", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1436011705) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "New subscription from link (read-only)")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCreateSubscriptionInput ? _c("ActionInput", { attrs: { "aria-label": _vm.$t("calendar", "Name for new calendar") }, on: { submit: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.createNewSubscription.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("LinkVariant", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1436011705) }) : _vm._e(), _vm._v(" "), _vm.showCreateSubscriptionSaving ? _c("ActionText", { attrs: { icon: "icon-loading-small" } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Creating subscription …")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.canSubscribeLink ? _c("ActionButton", { on: { click: function ($event) { _vm.showHolidaySubscriptionPicker = true; } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Web", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 4289778750) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("calendar", "Add public holiday calendar")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.hasPublicCalendars ? _c("ActionButton", { on: { click: function ($event) { _vm.showPublicCalendarSubscriptionPicker = true; } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Web", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 4289778750) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("calendar", "Add custom public calendar")) + "\n\t\t\t")]) : _vm._e()]; }, proxy: true }, { key: "extra", fn: function () { return [_vm.showHolidaySubscriptionPicker ? _c("PublicCalendarSubscriptionPicker", { attrs: { "show-holidays": true }, on: { close: function ($event) { _vm.showHolidaySubscriptionPicker = false; } } }) : _vm._e(), _vm._v(" "), _vm.showPublicCalendarSubscriptionPicker ? _c("PublicCalendarSubscriptionPicker", { on: { close: function ($event) { _vm.showPublicCalendarSubscriptionPicker = false; } } }) : _vm._e()]; }, proxy: true }]) }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/Moment.vue?vue&type=template&id=16f5900e": /*!*****************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/Moment.vue?vue&type=template&id=16f5900e ***! \*****************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("span", { staticClass: "live-relative-timestamp", attrs: { "data-timestamp": _vm.numericTimestamp * 1000, name: _vm.title } }, [_vm._v(_vm._s(_vm.formatted))]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/PublicCalendarListItem.vue?vue&type=template&id=97d1c29e": /*!*********************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/PublicCalendarListItem.vue?vue&type=template&id=97d1c29e ***! \*********************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("AppNavigationItem", { attrs: { loading: _vm.calendar.loading, name: _vm.calendar.displayName || _vm.$t("calendar", "Untitled calendar"), "menu-open": _vm.menuOpen }, on: { "update:menuOpen": function ($event) { _vm.menuOpen = $event; }, "update:menu-open": function ($event) { _vm.menuOpen = $event; }, click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.toggleEnabled.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_vm.calendar.enabled ? _c("AppNavigationIconBullet", { attrs: { color: _vm.calendar.color }, on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.toggleEnabled.apply(null, arguments); } } }) : _vm._e()]; }, proxy: true }, { key: "counter", fn: function () { return [_c("Avatar", { attrs: { user: _vm.owner, "is-guest": true, "disable-tooltip": true, "disable-menu": true } })]; }, proxy: true }, { key: "actions", fn: function () { return [_vm.showCopySubscriptionLinkLabel ? _c("ActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.copySubscriptionLink.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("LinkVariant", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1436011705) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Copy subscription link")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCopySubscriptionLinkSpinner ? _c("ActionText", { attrs: { icon: "icon-loading-small" } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Copying link …")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCopySubscriptionLinkSuccess ? _c("ActionText", { scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("LinkVariant", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1436011705) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Copied link")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCopySubscriptionLinkError ? _c("ActionText", { scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("LinkVariant", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1436011705) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Could not copy link")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _c("ActionLink", { attrs: { target: "_blank", href: _vm.downloadUrl }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Download", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Export")) + "\n\t\t")])]; }, proxy: true }]) }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/Trashbin.vue?vue&type=template&id=7cd8fdf0&scoped=true": /*!*******************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/Trashbin.vue?vue&type=template&id=7cd8fdf0&scoped=true ***! \*******************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("AppNavigationItem", { attrs: { name: _vm.t("calendar", "Trash bin"), pinned: true }, on: { click: function ($event) { $event.preventDefault(); return _vm.onShow.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Delete", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }, { key: "extra", fn: function () { return [_vm.showModal ? _c("Modal", { attrs: { size: "large" }, on: { close: function ($event) { _vm.showModal = false; } } }, [_c("div", { staticClass: "modal__content" }, [_c("h2", [_vm._v(_vm._s(_vm.t("calendar", "Trash bin")))]), _vm._v(" "), _vm.loading ? _c("EmptyContent", { staticClass: "modal__content__loading", attrs: { icon: "icon-loading", description: _vm.t("calendar", "Loading deleted items.") } }) : !_vm.items.length ? _c("EmptyContent", { staticClass: "modal__content__empty", attrs: { description: _vm.t("calendar", "You do not have any deleted items.") }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Delete", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1625950007) }) : [_c("table", [_c("tr", [_c("th", { staticClass: "name" }, [_vm._v("\n\t\t\t\t\t\t\t\t" + _vm._s(_vm.t("calendar", "Name")) + "\n\t\t\t\t\t\t\t")]), _vm._v(" "), _c("th", { staticClass: "deletedAt" }, [_vm._v("\n\t\t\t\t\t\t\t\t" + _vm._s(_vm.t("calendar", "Deleted")) + "\n\t\t\t\t\t\t\t")]), _vm._v(" "), _c("th", [_vm._v(" ")])]), _vm._v(" "), _vm._l(_vm.items, function (item) { return _c("tr", { key: item.url }, [_c("td", [_c("div", { staticClass: "item" }, [_c("div", [_c("div", { staticClass: "color-dot", style: { "background-color": item.color } })]), _vm._v(" "), _c("div", [_c("div", { staticClass: "item-name" }, [_vm._v("\n\t\t\t\t\t\t\t\t\t\t\t" + _vm._s(item.name) + "\n\t\t\t\t\t\t\t\t\t\t")]), _vm._v(" "), item.subline ? _c("div", { staticClass: "item-subline" }, [_vm._v("\n\t\t\t\t\t\t\t\t\t\t\t" + _vm._s(item.subline) + "\n\t\t\t\t\t\t\t\t\t\t")]) : _vm._e()])])]), _vm._v(" "), _c("td", { staticClass: "deletedAt" }, [_c("Moment", { staticClass: "timestamp", attrs: { timestamp: item.deletedAt } })], 1), _vm._v(" "), _c("td", [_c("div", { staticClass: "item-actions" }, [_c("NcButton", { attrs: { type: "secondary" }, on: { click: function ($event) { return _vm.restore(item); } } }, [_vm._v("\n\t\t\t\t\t\t\t\t\t\t" + _vm._s(_vm.t("calendar", "Restore")) + "\n\t\t\t\t\t\t\t\t\t")]), _vm._v(" "), _c("Actions", { attrs: { "force-menu": true } }, [_c("ActionButton", { on: { click: function ($event) { return _vm.onDeletePermanently(item); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Delete", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, true) }, [_vm._v("\n\t\t\t\t\t\t\t\t\t\t\t" + _vm._s(_vm.t("calendar", "Delete permanently")) + "\n\t\t\t\t\t\t\t\t\t\t")])], 1)], 1)])]); })], 2), _vm._v(" "), _c("div", { staticClass: "footer" }, [_vm.retentionDuration ? _c("p", [_vm._v("\n\t\t\t\t\t\t\t" + _vm._s(_vm.n("calendar", "Items in the trash bin are deleted after {numDays} day", "Items in the trash bin are deleted after {numDays} days", _vm.retentionDuration, { numDays: _vm.retentionDuration })) + "\n\t\t\t\t\t\t")]) : _vm._e(), _vm._v(" "), _c("NcButton", { attrs: { type: "error" }, on: { click: function ($event) { return _vm.onEmptyTrashBin(); } } }, [_vm._v("\n\t\t\t\t\t\t\t" + _vm._s(_vm.t("calendar", "Empty trash bin")) + "\n\t\t\t\t\t\t")])], 1)]], 2)]) : _vm._e()]; }, proxy: true }]) }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal.vue?vue&type=template&id=5a0e780b&scoped=true": /*!***************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal.vue?vue&type=template&id=5a0e780b&scoped=true ***! \***************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return !!_vm.editCalendarModal && _vm.calendar ? _c("NcModal", { attrs: { size: "normal" }, on: { close: _vm.closeModal } }, [_c("div", { staticClass: "edit-calendar-modal" }, [_c("h2", [_vm._v(_vm._s(_vm.$t("calendar", "Edit calendar")))]), _vm._v(" "), _c("div", { staticClass: "edit-calendar-modal__name-and-color" }, [_c("div", { staticClass: "edit-calendar-modal__name-and-color__color" }, [_c("NcColorPicker", { attrs: { "advanced-fields": true }, on: { "update:value": function ($event) { _vm.calendarColorChanged = true; } }, model: { value: _vm.calendarColor, callback: function ($$v) { _vm.calendarColor = $$v; }, expression: "calendarColor" } }, [_c("div", { staticClass: "edit-calendar-modal__name-and-color__color__dot", style: { "background-color": _vm.calendarColor } })])], 1), _vm._v(" "), _c("input", { directives: [{ name: "model", rawName: "v-model", value: _vm.calendarName, expression: "calendarName" }], staticClass: "edit-calendar-modal__name-and-color__name", attrs: { type: "text", placeholder: _vm.$t("calendar", "Calendar name …") }, domProps: { value: _vm.calendarName }, on: { input: [function ($event) { if ($event.target.composing) return; _vm.calendarName = $event.target.value; }, function ($event) { _vm.calendarNameChanged = true; }] } })]), _vm._v(" "), _vm.canBeShared ? [_c("h2", { staticClass: "edit-calendar-modal__sharing-header" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Share calendar")) + "\n\t\t\t")]), _vm._v(" "), _c("div", { staticClass: "edit-calendar-modal__sharing" }, [_c("SharingSearch", { attrs: { calendar: _vm.calendar } }), _vm._v(" "), _vm.canBePublished ? _c("PublishCalendar", { attrs: { calendar: _vm.calendar } }) : _vm._e(), _vm._v(" "), _c("InternalLink", { attrs: { calendar: _vm.calendar } }), _vm._v(" "), _vm._l(_vm.calendar.shares, function (sharee) { return _c("ShareItem", { key: sharee.uri, attrs: { sharee: sharee, calendar: _vm.calendar } }); })], 2)] : _vm._e(), _vm._v(" "), _c("div", { staticClass: "edit-calendar-modal__actions" }, [_vm.calendar.isSharedWithMe ? _c("NcButton", { attrs: { type: "tertiary" }, on: { click: _vm.deleteCalendar }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CloseIcon", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 2428343285) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Unshare from me")) + "\n\t\t\t")]) : _c("NcButton", { attrs: { type: "tertiary" }, on: { click: _vm.deleteCalendar }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("DeleteIcon", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 1311746650) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Delete")) + "\n\t\t\t")]), _vm._v(" "), _c("NcButton", { attrs: { type: "tertiary", href: _vm.downloadUrl }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("DownloadIcon", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 2598526839) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Export")) + "\n\t\t\t")]), _vm._v(" "), _c("NcButton", { attrs: { type: "secondary" }, on: { click: _vm.saveAndClose }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CheckIcon", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 2630571749) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Save")) + "\n\t\t\t")])], 1)], 2)]) : _vm._e(); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/InternalLink.vue?vue&type=template&id=1d0631aa&scoped=true": /*!****************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/InternalLink.vue?vue&type=template&id=1d0631aa&scoped=true ***! \****************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "internal-link" }, [_c("div", { staticClass: "internal-link__icon" }, [_c("OpenInNewIcon", { attrs: { size: 20 } })], 1), _vm._v(" "), _c("p", { staticClass: "internal-link__label" }, [_vm._v("\n\t\t" + _vm._s(_vm.t("calendar", "Internal link")) + "\n\t\t"), _c("span", { staticClass: "internal-link__label__hint" }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("calendar", "A private link that can be used with external clients")) + "\n\t\t")])]), _vm._v(" "), _c("NcActions", [_c("NcActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.copyLink.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("ClipboardArrowLeftOutline", { attrs: { size: 20 } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("calendar", "Copy internal link")) + "\n\t\t")])], 1)], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/PublishCalendar.vue?vue&type=template&id=58de5449&scoped=true": /*!*******************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/PublishCalendar.vue?vue&type=template&id=58de5449&scoped=true ***! \*******************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "publish-calendar" }, [_c("div", { staticClass: "publish-calendar__icon" }, [_c("LinkVariant", { attrs: { size: 20 } })], 1), _vm._v(" "), _c("p", { staticClass: "publish-calendar__label" }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "Share link")) + "\n\t")]), _vm._v(" "), _vm.isPublished ? [_c("NcActions", [_c("NcActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.copyPublicLink.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("ClipboardArrowLeftOutline", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 2910159552) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Copy public link")) + "\n\t\t\t")])], 1), _vm._v(" "), _c("NcActions", [_vm.showEMailLabel ? _c("NcActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.openEMailLinkInput.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Email", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 4241783042) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Send link to calendar via email")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.showEMailInput ? _c("NcActionInput", { on: { submit: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.sendLinkViaEMail.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Email", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 4241783042) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Enter one address")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.showEMailSending ? _c("NcActionText", { attrs: { icon: "icon-loading-small" } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Sending email …")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCopySubscriptionLinkLabel ? _c("NcActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.copySubscriptionLink.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CalendarBlank", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 2920828918) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Copy subscription link")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCopySubscriptionLinkSpinner ? _c("NcActionText", { attrs: { icon: "icon-loading-small" } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Copying link …")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCopySubscriptionLinkSuccess ? _c("NcActionText", { scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CalendarBlank", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 2920828918) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Copied link")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCopySubscriptionLinkError ? _c("NcActionText", { scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CalendarBlank", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 2920828918) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Could not copy link")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCopyEmbedCodeLinkLabel ? _c("NcActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.copyEmbedCode.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CodeBrackets", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 860035096) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Copy embedding code")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCopyEmbedCodeLinkSpinner ? _c("NcActionText", { attrs: { icon: "icon-loading-small" } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Copying code …")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCopyEmbedCodeLinkSuccess ? _c("NcActionText", { scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CodeBrackets", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 860035096) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Copied code")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.showCopyEmbedCodeLinkError ? _c("NcActionText", { scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CodeBrackets", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 860035096) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Could not copy code")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), !_vm.unpublishingCalendar ? _c("NcActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.unpublishCalendar.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Delete", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1625950007) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Delete share link")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.unpublishingCalendar ? _c("NcActionText", { attrs: { icon: "icon-loading-small" } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Deleting share link …")) + "\n\t\t\t")]) : _vm._e()], 1)] : _c("NcActions", [_c("NcActionButton", { attrs: { "aria-label": "$t('calendar', 'Share link')", disabled: _vm.publishingCalendar }, on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.publishCalendar.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("PlusIcon", { attrs: { size: 20 } })]; }, proxy: true }]) })], 1)], 2); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/ShareItem.vue?vue&type=template&id=5a34d6ee&scoped=true": /*!*************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/ShareItem.vue?vue&type=template&id=5a34d6ee&scoped=true ***! \*************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "share-item" }, [_vm.sharee.isGroup ? _c("AccountMultiple", { staticClass: "share-item__group-icon", attrs: { size: 20 } }) : _vm.sharee.isCircle ? _c("IconCircle") : _c("NcAvatar", { attrs: { user: _vm.sharee.userId, "display-name": _vm.sharee.displayName } }), _vm._v(" "), _c("p", { staticClass: "share-item__label" }, [_vm._v("\n\t\t" + _vm._s(_vm.sharee.displayName) + "\n\t")]), _vm._v(" "), _c("input", { staticClass: "checkbox", attrs: { id: "".concat(_vm.id, "-can-edit"), disabled: _vm.updatingSharee, type: "checkbox" }, domProps: { checked: _vm.sharee.writeable }, on: { change: _vm.updatePermission } }), _vm._v(" "), _c("label", { attrs: { for: "".concat(_vm.id, "-can-edit") } }, [_vm._v(_vm._s(_vm.$t("calendar", "can edit")))]), _vm._v(" "), _c("NcActions", [_c("NcActionButton", { attrs: { disabled: _vm.updatingSharee }, on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.unshare.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Delete", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Unshare with {displayName}", { displayName: _vm.sharee.displayName })) + "\n\t\t")])], 1)], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/SharingSearch.vue?vue&type=template&id=2c8ef200&scoped=true": /*!*****************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/SharingSearch.vue?vue&type=template&id=2c8ef200&scoped=true ***! \*****************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "sharing-search" }, [_c("NcSelect", { staticClass: "sharing-search__select", class: { showContent: _vm.inputGiven, "icon-loading": _vm.isLoading }, attrs: { options: _vm.usersOrGroups, searchable: true, "internal-search": false, "max-height": 600, placeholder: _vm.$t("calendar", "Share with users or groups"), "user-select": true, "filter-by": _vm.filterResults, clearable: false, "open-direction": "above", "track-by": "user", label: "displayName" }, on: { search: _vm.findSharee, "option:selected": _vm.shareCalendar }, scopedSlots: _vm._u([{ key: "no-options", fn: function () { return [_c("span", [_vm._v(_vm._s(_vm.$t("calendar", "No users or groups")))])]; }, proxy: true }]) })], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EmbedHeader/EmbedHeaderTodayButton.vue?vue&type=template&id=32325380": /*!********************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EmbedHeader/EmbedHeaderTodayButton.vue?vue&type=template&id=32325380 ***! \********************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "today-button-section" }, [_c("NcButton", { staticClass: "button", attrs: { "aria-label": _vm.title, name: _vm.title }, on: { click: function ($event) { return _vm.today(); } } }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "Today")) + "\n\t")])], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EmbedHeader/EmbedHeaderViewButtons.vue?vue&type=template&id=130155ee": /*!********************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EmbedHeader/EmbedHeaderViewButtons.vue?vue&type=template&id=130155ee ***! \********************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "view-button-section" }, [_c("NcButton", { staticClass: "button", attrs: { type: _vm.isAgendaDayViewSelected ? "primary" : "secondary" }, on: { click: function ($event) { return _vm.view("timeGridDay"); } } }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "Day")) + "\n\t")]), _vm._v(" "), _c("NcButton", { staticClass: "button", attrs: { type: _vm.isAgendaWeekViewSelected ? "primary" : "secondary" }, on: { click: function ($event) { return _vm.view("timeGridWeek"); } } }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "Week")) + "\n\t")]), _vm._v(" "), _c("NcButton", { staticClass: "button", attrs: { type: _vm.isMonthViewSelected ? "primary" : "secondary" }, on: { click: function ($event) { return _vm.view("dayGridMonth"); } } }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "Month")) + "\n\t")]), _vm._v(" "), _c("NcButton", { staticClass: "button", attrs: { type: _vm.isYearViewSelected ? "primary" : "secondary" }, on: { click: function ($event) { return _vm.view("multiMonthYear"); } } }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "Year")) + "\n\t")]), _vm._v(" "), _c("NcButton", { staticClass: "button", class: _vm.isMonthListViewSelected ? "primary" : "secondary", on: { click: function ($event) { return _vm.view("listMonth"); } } }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "List")) + "\n\t")])], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EmbedTopNavigation.vue?vue&type=template&id=1461310c": /*!****************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EmbedTopNavigation.vue?vue&type=template&id=1461310c ***! \****************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("header", { attrs: { id: _vm.isWidget ? "widget-header" : "embed-header", role: "banner" } }, [_c("div", { class: _vm.isWidget ? "widget-header__date-section" : "embed-header__date-section" }, [_c("AppNavigationHeaderDatePicker", { attrs: { "is-widget": _vm.isWidget, "can-access-previous-event": _vm.canAccessPreviousEvent } }), _vm._v(" "), !_vm.isWidget ? _c("AppNavigationHeaderTodayButton") : _vm._e()], 1), _vm._v(" "), _c("div", { class: _vm.isWidget ? "widget-header__views-section" : "embed-header__views-section" }, [_c("AppNavigationHeaderViewButtons", { attrs: { "is-widget": _vm.isWidget } })], 1), _vm._v(" "), !_vm.isWidget ? _c("div", { staticClass: "widget-header__share-section" }, [_c("Actions", { scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Download", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 489076122) }, [_vm._v(" "), _vm._l(_vm.subscriptions, function (calendar) { return _c("ActionLink", { key: calendar.id, attrs: { target: "_blank", href: calendar.url + "?export" }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Download", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, true) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Export {name}", { name: calendar.displayName || _vm.$t("calendar", "Untitled calendar") })) + "\n\t\t\t")]); })], 2), _vm._v(" "), _c("Actions", { scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CalendarBlank", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 2920828918) }, [_vm._v(" "), _vm._l(_vm.subscriptions, function (calendar) { return _c("ActionButton", { key: calendar.id, on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.copySubscriptionLink(calendar); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CalendarBlank", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, true) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Subscribe to {name}", { name: calendar.displayName || _vm.$t("calendar", "Untitled calendar") })) + "\n\t\t\t")]); })], 2)], 1) : _vm._e()]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings.vue?vue&type=template&id=fda924a6": /*!******************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings.vue?vue&type=template&id=fda924a6 ***! \******************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("AppNavigationSettings", { attrs: { "exclude-click-outside-selectors": [".vs__dropdown-menu", ".modal-wrapper"], name: _vm.settingsTitle } }, [_c("ul", { staticClass: "settings-fieldset-interior" }, [_c("SettingsImportSection", { attrs: { "is-disabled": _vm.loadingCalendars } }), _vm._v(" "), _c("ActionCheckbox", { staticClass: "settings-fieldset-interior-item", attrs: { checked: _vm.birthdayCalendar, disabled: _vm.isBirthdayCalendarDisabled }, on: { "update:checked": _vm.toggleBirthdayEnabled } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Enable birthday calendar")) + "\n\t\t")]), _vm._v(" "), _c("ActionCheckbox", { staticClass: "settings-fieldset-interior-item", attrs: { checked: _vm.showTasks, disabled: _vm.savingTasks }, on: { "update:checked": _vm.toggleTasksEnabled } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Show tasks in calendar")) + "\n\t\t")]), _vm._v(" "), _c("ActionCheckbox", { staticClass: "settings-fieldset-interior-item", attrs: { checked: _vm.showPopover, disabled: _vm.savingPopover }, on: { "update:checked": _vm.togglePopoverEnabled } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Enable simplified editor")) + "\n\t\t")]), _vm._v(" "), _c("ActionCheckbox", { staticClass: "settings-fieldset-interior-item", attrs: { checked: _vm.eventLimit, disabled: _vm.savingEventLimit }, on: { "update:checked": _vm.toggleEventLimitEnabled } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Limit the number of events displayed in the monthly view")) + "\n\t\t")]), _vm._v(" "), _c("ActionCheckbox", { staticClass: "settings-fieldset-interior-item", attrs: { checked: _vm.showWeekends, disabled: _vm.savingWeekend }, on: { "update:checked": _vm.toggleWeekendsEnabled } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Show weekends")) + "\n\t\t")]), _vm._v(" "), _c("ActionCheckbox", { staticClass: "settings-fieldset-interior-item", attrs: { checked: _vm.showWeekNumbers, disabled: _vm.savingWeekNumber }, on: { "update:checked": _vm.toggleWeekNumberEnabled } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Show week numbers")) + "\n\t\t")]), _vm._v(" "), _c("li", { staticClass: "settings-fieldset-interior-item settings-fieldset-interior-item--slotDuration" }, [_c("label", { attrs: { for: "slotDuration" } }, [_vm._v(_vm._s(_vm.$t("calendar", "Time increments")))]), _vm._v(" "), _c("NcSelect", { attrs: { id: _vm.slotDuration, options: _vm.slotDurationOptions, value: _vm.selectedDurationOption, disabled: _vm.savingSlotDuration, clearable: false, labelOutside: true, "input-id": "value", label: "label" }, on: { "option:selected": _vm.changeSlotDuration } })], 1), _vm._v(" "), _vm.currentUserPrincipal && _vm.defaultCalendarOptions.length > 1 && _vm.nextcloudVersion >= 29 ? _c("li", { staticClass: "settings-fieldset-interior-item settings-fieldset-interior-item--default-calendar" }, [_c("label", { attrs: { for: _vm.defaultCalendarPickerId } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Default calendar for invitations and new events")) + "\n\t\t\t")]), _vm._v(" "), _c("CalendarPicker", { attrs: { value: _vm.defaultCalendar, calendars: _vm.defaultCalendarOptions, disabled: _vm.savingDefaultCalendarId, "input-id": _vm.defaultCalendarPickerId, clearable: false }, on: { "select-calendar": _vm.changeDefaultCalendar } })], 1) : _vm._e(), _vm._v(" "), _c("li", { staticClass: "settings-fieldset-interior-item settings-fieldset-interior-item--defaultReminder" }, [_c("label", { attrs: { for: "defaultReminder" } }, [_vm._v(_vm._s(_vm.$t("calendar", "Default reminder")))]), _vm._v(" "), _c("NcSelect", { attrs: { id: _vm.defaultReminder, options: _vm.defaultReminderOptions, value: _vm.selectedDefaultReminderOption, disabled: _vm.savingDefaultReminder, clearable: false, labelOutside: true, "input-id": "value", label: "label" }, on: { "option:selected": _vm.changeDefaultReminder } })], 1), _vm._v(" "), _c("SettingsTimezoneSelect", { attrs: { "is-disabled": _vm.loadingCalendars } }), _vm._v(" "), _c("SettingsAttachmentsFolder"), _vm._v(" "), _c("ActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.copyPrimaryCalDAV.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("ClipboardArrowLeftOutline", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Copy primary CalDAV address")) + "\n\t\t")]), _vm._v(" "), _c("ActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.copyAppleCalDAV.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("ClipboardArrowLeftOutline", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Copy iOS/macOS CalDAV address")) + "\n\t\t")]), _vm._v(" "), _c("ActionLink", { attrs: { href: _vm.availabilitySettingsUrl, target: "_blank" }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("OpenInNewIcon", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Personal availability settings")) + "\n\t\t")]), _vm._v(" "), _c("ActionButton", { directives: [{ name: "shortkey", rawName: "v-shortkey.propagate", value: ["h"], expression: "['h']", modifiers: { propagate: true } }], on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.showKeyboardShortcuts.apply(null, arguments); } }, nativeOn: { shortkey: function ($event) { return _vm.toggleKeyboardShortcuts.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("InformationVariant", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Show keyboard shortcuts")) + "\n\t\t")]), _vm._v(" "), _vm.displayKeyboardShortcuts ? _c("ShortcutOverview", { on: { close: _vm.hideKeyboardShortcuts } }) : _vm._e()], 1)]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/ImportScreen.vue?vue&type=template&id=4b8dd7e3": /*!*******************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/ImportScreen.vue?vue&type=template&id=4b8dd7e3 ***! \*******************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("Modal", { staticClass: "import-modal", attrs: { size: "large" }, on: { close: _vm.cancelImport } }, [_c("h2", { staticClass: "import-modal__title" }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "Import calendars")) + "\n\t")]), _vm._v(" "), _c("h4", { staticClass: "import-modal__subtitle" }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "Please select a calendar to import into …")) + "\n\t")]), _vm._v(" "), _c("transition-group", { staticClass: "import-modal__file-list", attrs: { tag: "ul" } }, [_c("li", { key: _vm.headerRowKey, staticClass: "import-modal-file-item import-modal-file-item--header" }, [_c("div", { staticClass: "import-modal-file-item__filename" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Filename")) + "\n\t\t\t")]), _vm._v(" "), _c("div", { staticClass: "import-modal-file-item__calendar-select" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Calendar to import into")) + "\n\t\t\t")])]), _vm._v(" "), _vm._l(_vm.files, function (file, index) { return _c("ImportScreenRow", { key: "import-file-".concat(index), attrs: { file: file } }); })], 2), _vm._v(" "), _c("div", { staticClass: "import-modal__actions" }, [_c("NcButton", { on: { click: _vm.cancelImport } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Cancel")) + "\n\t\t")]), _vm._v(" "), _c("NcButton", { staticClass: "primary", on: { click: _vm.importCalendar } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$n("calendar", "Import calendar", "Import calendars", _vm.files.length)) + "\n\t\t")])], 1)], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/ImportScreenRow.vue?vue&type=template&id=982d4bb2": /*!**********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/ImportScreenRow.vue?vue&type=template&id=982d4bb2 ***! \**********************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("li", { staticClass: "import-modal-file-item" }, [_c("div", { staticClass: "import-modal-file-item__filename" }, [_vm._v("\n\t\t" + _vm._s(_vm.file.name) + "\n\t")]), _vm._v(" "), _c("CalendarPicker", { staticClass: "import-modal-file-item__calendar-select", attrs: { value: _vm.calendar, calendars: _vm.calendars }, on: { "select-calendar": _vm.selectCalendar } })], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/SettingsAttachmentsFolder.vue?vue&type=template&id=7994cf4e&scoped=true": /*!********************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/SettingsAttachmentsFolder.vue?vue&type=template&id=7994cf4e&scoped=true ***! \********************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("li", { staticClass: "settings-fieldset-interior-item settings-fieldset-interior-item--folder" }, [_c("label", { attrs: { for: "attachmentsFolder" } }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "Default attachments location")) + "\n\t")]), _vm._v(" "), _c("div", { staticClass: "form-group" }, [_c("NcInputField", { attrs: { type: "text" }, on: { input: function ($event) { return _vm.debounceSaveAttachmentsFolder(_vm.attachmentsFolder); }, change: function ($event) { return _vm.debounceSaveAttachmentsFolder(_vm.attachmentsFolder); }, click: _vm.selectCalendarFolder, keyboard: function ($event) { if (!$event.type.indexOf("key") && _vm._k($event.keyCode, "enter", 13, $event.key, "Enter")) return null; return _vm.selectCalendarFolder.apply(null, arguments); } }, model: { value: _vm.attachmentsFolder, callback: function ($$v) { _vm.attachmentsFolder = $$v; }, expression: "attachmentsFolder" } })], 1)]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/SettingsImportSection.vue?vue&type=template&id=7fdbc01b": /*!****************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/SettingsImportSection.vue?vue&type=template&id=7fdbc01b ***! \****************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _vm.showProgressBar ? _c("li", { staticClass: "settings-fieldset-interior-item" }, [_c("progress", { staticClass: "settings-fieldset-interior-item__progressbar", attrs: { max: _vm.total }, domProps: { value: _vm.imported } })]) : _c("li", { staticClass: "settings-fieldset-interior-item" }, [_c("label", { staticClass: "settings-fieldset-interior-item__import-button button icon", attrs: { for: _vm.inputUid } }, [_c("Upload", { attrs: { size: 20, decorative: "" } }), _vm._v("\n\t\t" + _vm._s(_vm.$n("calendar", "Import calendar", "Import calendars", 1)) + "\n\t")], 1), _vm._v(" "), _c("input", { ref: "importInput", staticClass: "hidden", attrs: { id: _vm.inputUid, type: "file", accept: _vm.supportedFileTypes, disabled: _vm.disableImport, multiple: "" }, on: { change: _vm.processFiles } }), _vm._v(" "), _vm.showImportModal ? _c("ImportScreen", { attrs: { files: _vm.files }, on: { "cancel-import": _vm.cancelImport, "import-calendar": _vm.importCalendar } }) : _vm._e()], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/SettingsTimezoneSelect.vue?vue&type=template&id=45e5266c": /*!*****************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/SettingsTimezoneSelect.vue?vue&type=template&id=45e5266c ***! \*****************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("li", { staticClass: "settings-fieldset-interior-item settings-fieldset-interior-item--timezone" }, [_c("TimezonePicker", { attrs: { "additional-timezones": _vm.additionalTimezones, value: _vm.timezone }, on: { input: _vm.setTimezoneValue } })], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/ShortcutOverview.vue?vue&type=template&id=0acfab51": /*!***********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/Settings/ShortcutOverview.vue?vue&type=template&id=0acfab51 ***! \***********************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("Modal", { staticClass: "shortcut-overview-modal", attrs: { size: "large", name: _vm.$t("calendar", "Shortcut overview") }, on: { close: function ($event) { return _vm.$emit("close"); } } }, _vm._l(_vm.shortcuts, function (category) { return _c("section", { key: category.categoryId, staticClass: "shortcut-section" }, [_c("h3", { staticClass: "shortcut-section__header" }, [_vm._v("\n\t\t\t" + _vm._s(category.categoryLabel) + "\n\t\t")]), _vm._v(" "), _vm._l(category.shortcuts, function (shortcut, index) { return _c("div", { key: "".concat(category.categoryId, "-").concat(index), staticClass: "shortcut-section-item" }, [_c("span", { staticClass: "shortcut-section-item__keys" }, [_vm._l(shortcut.keys, function (keyCombination, index2) { return [_vm._l(keyCombination, function (key, index3) { return [_c("kbd", { key: "".concat(category.categoryId, "-").concat(index, "-").concat(index2, "-").concat(index3) }, [_vm._v(_vm._s(key))]), _vm._v(" "), index3 !== keyCombination.length - 1 ? _c("span", { key: "".concat(category.categoryId, "-").concat(index, "-").concat(index2, "-").concat(index3), staticClass: "shortcut-section-item__spacer" }, [_vm._v("\n\t\t\t\t\t\t\t+\n\t\t\t\t\t\t")]) : _vm._e()]; }), _vm._v(" "), index2 !== shortcut.keys.length - 1 ? _c("span", { key: "".concat(category.categoryId, "-").concat(index, "-").concat(index2), staticClass: "shortcut-section-item__spacer" }, [_vm._v("\n\t\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "or")) + "\n\t\t\t\t\t")]) : _vm._e()]; })], 2), _vm._v(" "), _c("span", { staticClass: "shortcut-section-item__label" }, [_vm._v(_vm._s(shortcut.label))])]); })], 2); }), 0); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal.vue?vue&type=template&id=37b978c8&scoped=true": /*!******************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal.vue?vue&type=template&id=37b978c8&scoped=true ***! \******************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("Modal", { attrs: { size: "large" }, on: { close: function ($event) { return _vm.$emit("close"); } } }, [_vm.editing ? _c("div", { staticClass: "appointment-config-modal" }, [_vm.showConfirmation ? _c("Confirmation", { attrs: { "is-new": _vm.isNew, config: _vm.editing }, on: { close: function ($event) { return _vm.$emit("close"); } } }) : [_c("h2", [_vm._v(_vm._s(_vm.formTitle))]), _vm._v(" "), _c("div", { staticClass: "appointment-config-modal__form" }, [_c("fieldset", [_c("TextInput", { staticClass: "appointment-config-modal__form__row", attrs: { label: _vm.t("calendar", "Appointment name"), value: _vm.editing.name }, on: { "update:value": function ($event) { return _vm.$set(_vm.editing, "name", $event); } } }), _vm._v(" "), _c("TextInput", { staticClass: "appointment-config-modal__form__row", attrs: { label: _vm.t("calendar", "Location"), value: _vm.editing.location, disabled: _vm.isTalkEnabled && _vm.editing.createTalkRoom }, on: { "update:value": function ($event) { return _vm.$set(_vm.editing, "location", $event); } } }), _vm._v(" "), _vm.isTalkEnabled ? _c("div", { staticClass: "appointment-config-modal__form__row" }, [_c("NcCheckboxRadioSwitch", { attrs: { checked: _vm.editing.createTalkRoom }, on: { "update:checked": function ($event) { return _vm.$set(_vm.editing, "createTalkRoom", $event); } } }, [_vm._v("\n\t\t\t\t\t\t\t" + _vm._s(_vm.t("calendar", "Create a Talk room")) + "\n\t\t\t\t\t\t")]), _vm._v(" "), _c("span", { staticClass: "appointment-config-modal__talk-room-description" }, [_vm._v(_vm._s(_vm.t("calendar", "A unique link will be generated for every booked appointment and sent via the confirmation email")))])], 1) : _vm._e(), _vm._v(" "), _c("TextArea", { staticClass: "appointment-config-modal__form__row", attrs: { label: _vm.t("calendar", "Description"), value: _vm.editing.description }, on: { "update:value": function ($event) { return _vm.$set(_vm.editing, "description", $event); } } }), _vm._v(" "), _c("div", { staticClass: "appointment-config-modal__form__row appointment-config-modal__form__row--wrapped" }, [_c("div", { staticClass: "calendar-select" }, [_c("label", [_vm._v(_vm._s(_vm.t("calendar", "Calendar")))]), _vm._v(" "), _vm.calendar !== undefined ? _c("CalendarPicker", { attrs: { value: _vm.calendar, calendars: _vm.ownSortedCalendars, "show-calendar-on-select": false }, on: { "select-calendar": _vm.changeCalendar } }) : _vm._e()], 1), _vm._v(" "), _c("VisibilitySelect", { attrs: { label: _vm.t("calendar", "Visibility"), value: _vm.editing.visibility }, on: { "update:value": function ($event) { return _vm.$set(_vm.editing, "visibility", $event); } } })], 1), _vm._v(" "), _c("div", { staticClass: "appointment-config-modal__form__row appointment-config-modal__form__row--wrapped" }, [_c("DurationInput", { attrs: { label: _vm.t("calendar", "Duration"), value: _vm.editing.length }, on: { "update:value": function ($event) { return _vm.$set(_vm.editing, "length", $event); } } }), _vm._v(" "), _c("DurationSelect", { attrs: { label: _vm.t("calendar", "Increments"), value: _vm.editing.increment }, on: { "update:value": function ($event) { return _vm.$set(_vm.editing, "increment", $event); } } })], 1), _vm._v(" "), _c("div", { staticClass: "appointment-config-modal__form__row appointment-config-modal__form__row--local" }, [_c("label", [_vm._v(_vm._s(_vm.t("calendar", "Additional calendars to check for conflicts")))]), _vm._v(" "), _c("CalendarPicker", { attrs: { value: _vm.conflictCalendars, calendars: _vm.selectableConflictCalendars, multiple: true, "show-calendar-on-select": false }, on: { "select-calendar": _vm.addConflictCalender, "remove-calendar": _vm.removeConflictCalendar } })], 1)], 1), _vm._v(" "), _c("fieldset", [_c("header", [_vm._v(_vm._s(_vm.t("calendar", "Pick time ranges where appointments are allowed")))]), _vm._v(" "), _c("div", { staticClass: "appointment-config-modal__form__row appointment-config-modal__form__row--wrapped" }, [_c("CalendarAvailability", { attrs: { slots: _vm.editing.availability.slots, "l10n-to": _vm.t("calendar", "to"), "l10n-delete-slot": _vm.t("calendar", "Delete slot"), "l10n-empty-day": _vm.t("calendar", "No times set"), "l10n-add-slot": _vm.t("calendar", "Add"), "l10n-monday": _vm.t("calendar", "Monday"), "l10n-tuesday": _vm.t("calendar", "Tuesday"), "l10n-wednesday": _vm.t("calendar", "Wednesday"), "l10n-thursday": _vm.t("calendar", "Thursday"), "l10n-friday": _vm.t("calendar", "Friday"), "l10n-saturday": _vm.t("calendar", "Saturday"), "l10n-sunday": _vm.t("calendar", "Sunday"), "l10n-week-day-list-label": _vm.t("calendar", "Weekdays") }, on: { "update:slots": function ($event) { return _vm.$set(_vm.editing.availability, "slots", $event); } } })], 1)]), _vm._v(" "), _c("fieldset", [_c("header", [_vm._v(_vm._s(_vm.t("calendar", "Add time before and after the event")))]), _vm._v(" "), _c("div", { staticClass: "appointment-config-modal__form__row appointment-config-modal__form__row--wrapped" }, [_c("CheckedDurationSelect", { attrs: { label: _vm.t("calendar", "Before the event"), enabled: _vm.enablePreparationDuration, value: _vm.editing.preparationDuration }, on: { "update:enabled": function ($event) { _vm.enablePreparationDuration = $event; }, "update:value": function ($event) { return _vm.$set(_vm.editing, "preparationDuration", $event); } } }), _vm._v(" "), _c("CheckedDurationSelect", { attrs: { label: _vm.t("calendar", "After the event"), enabled: _vm.enableFollowupDuration, value: _vm.editing.followupDuration }, on: { "update:enabled": function ($event) { _vm.enableFollowupDuration = $event; }, "update:value": function ($event) { return _vm.$set(_vm.editing, "followupDuration", $event); } } })], 1)]), _vm._v(" "), _c("fieldset", [_c("header", [_vm._v(_vm._s(_vm.t("calendar", "Planning restrictions")))]), _vm._v(" "), _c("div", { staticClass: "appointment-config-modal__form__row appointment-config-modal__form__row--wrapped" }, [_c("DurationSelect", { attrs: { label: _vm.t("calendar", "Minimum time before next available slot"), value: _vm.editing.timeBeforeNextSlot, max: 7 * 24 * 60 * 60 }, on: { "update:value": function ($event) { return _vm.$set(_vm.editing, "timeBeforeNextSlot", $event); } } }), _vm._v(" "), _c("NumberInput", { attrs: { label: _vm.t("calendar", "Max slots per day"), value: _vm.editing.dailyMax, "allow-empty": true }, on: { "update:value": function ($event) { return _vm.$set(_vm.editing, "dailyMax", $event); } } })], 1), _vm._v(" "), _c("div", { staticClass: "appointment-config-modal__form__row appointment-config-modal__form__row--wrapped" }, [_c("CheckedDurationSelect", { attrs: { label: _vm.t("calendar", "Limit how far in the future appointments can be booked"), enabled: _vm.enableFutureLimit, value: _vm.editing.futureLimit, "default-value": _vm.defaultConfig.futureLimit, min: 7 * 24 * 60 * 60, max: null }, on: { "update:enabled": function ($event) { _vm.enableFutureLimit = $event; }, "update:value": function ($event) { return _vm.$set(_vm.editing, "futureLimit", $event); } } })], 1)])]), _vm._v(" "), _vm.rateLimitingReached ? _c("NcNoteCard", { attrs: { type: "warning" } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "It seems a rate limit has been reached. Please try again later.")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _c("NcButton", { staticClass: "appointment-config-modal__submit-button", attrs: { type: "primary", disabled: !_vm.editing.name || _vm.editing.length === 0 || _vm.isLoading }, on: { click: _vm.save } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.saveButtonText) + "\n\t\t\t")])]], 2) : _vm._e()]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/CheckedDurationSelect.vue?vue&type=template&id=107bb2e4&scoped=true": /*!****************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/CheckedDurationSelect.vue?vue&type=template&id=107bb2e4&scoped=true ***! \****************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "checked-duration-select" }, [_c("div", { staticClass: "checked-duration-select__checkbox-row" }, [_c("div", { staticClass: "checked-duration-select__checkbox-row__input-wrapper" }, [_c("input", { attrs: { id: _vm.id, type: "checkbox" }, domProps: { checked: _vm.enabled }, on: { input: function ($event) { return _vm.$emit("update:enabled", $event.target.checked); } } })]), _vm._v(" "), _c("label", { attrs: { for: _vm.id } }, [_vm._v(_vm._s(_vm.label))])]), _vm._v(" "), _c("DurationSelect", { staticClass: "checked-duration-select__duration", attrs: { "allow-zero": _vm.defaultValue === 0, disabled: !_vm.enabled, value: _vm.valueOrDefault, min: _vm.min, max: _vm.max }, on: { "update:value": function ($event) { return _vm.$emit("update:value", $event); } } })], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/Confirmation.vue?vue&type=template&id=490c5818": /*!*******************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/Confirmation.vue?vue&type=template&id=490c5818 ***! \*******************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "app-config-modal-confirmation" }, [_c("EmptyContent", { attrs: { name: _vm.title }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CheckIcon")]; }, proxy: true }]) }), _vm._v(" "), _c("div", { staticClass: "app-config-modal-confirmation__buttons" }, [_c("NcButton", { attrs: { href: _vm.config.bookingUrl, target: "_blank", rel: "noopener noreferrer" } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("calendar", "Preview")) + "\n\t\t")]), _vm._v(" "), _vm.showCopyLinkButton ? _c("NcButton", { on: { click: _vm.copyLink } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("calendar", "Copy link")) + "\n\t\t")]) : _vm._e()], 1)], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/DurationInput.vue?vue&type=template&id=610c2bc3&scoped=true": /*!********************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/DurationInput.vue?vue&type=template&id=610c2bc3&scoped=true ***! \********************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "duration-input" }, [_c("label", { attrs: { for: _vm.id } }, [_vm._v(_vm._s(_vm.label))]), _vm._v(" "), _c("div", { staticClass: "input" }, [_c("input", { directives: [{ name: "model", rawName: "v-model", value: _vm.internalValue, expression: "internalValue" }], attrs: { id: _vm.id, type: "text" }, domProps: { value: _vm.internalValue }, on: { input: [function ($event) { if ($event.target.composing) return; _vm.internalValue = $event.target.value; }, _vm.change], focus: _vm.focus, blur: _vm.updateInternalValue } })])]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/DurationSelect.vue?vue&type=template&id=0dbebf53": /*!*********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/DurationSelect.vue?vue&type=template&id=0dbebf53 ***! \*********************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("SelectWrapper", { attrs: { label: _vm.label, value: _vm.value, disabled: _vm.disabled, options: _vm.options }, on: { "update:value": function ($event) { _vm.$emit("update:value", parseInt($event)); } } }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/NoEmailAddressWarning.vue?vue&type=template&id=df46dc20&scoped=true": /*!****************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/NoEmailAddressWarning.vue?vue&type=template&id=df46dc20&scoped=true ***! \****************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("AppNavigationItem", { attrs: { name: _vm.title }, on: { click: _vm.openUserSettings }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("AlertCircleIcon", { attrs: { size: 20 } })]; }, proxy: true }]) }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/NumberInput.vue?vue&type=template&id=0b9f9aee&scoped=true": /*!******************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/NumberInput.vue?vue&type=template&id=0b9f9aee&scoped=true ***! \******************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "number-input" }, [_c("label", { attrs: { for: _vm.id } }, [_vm._v(_vm._s(_vm.label))]), _vm._v(" "), _c("input", { attrs: { id: _vm.id, type: "number", min: "0" }, domProps: { value: _vm.realValue }, on: { input: _vm.change } })]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/SelectWrapper.vue?vue&type=template&id=629bb0a4&scoped=true": /*!********************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/SelectWrapper.vue?vue&type=template&id=629bb0a4&scoped=true ***! \********************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", [_vm.label ? _c("label", { attrs: { for: _vm.id } }, [_vm._v(_vm._s(_vm.label))]) : _vm._e(), _vm._v(" "), _c("select", { attrs: { id: _vm.id, disabled: _vm.disabled }, on: { change: _vm.onSelect } }, _vm._l(_vm.options, function (option) { return _c("option", _vm._b({ key: option.value, domProps: { value: option.value } }, "option", { selected: option.value === _vm.value }, false), [_vm._v("\n\t\t\t" + _vm._s(option.label) + "\n\t\t")]); }), 0)]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/TextArea.vue?vue&type=template&id=97af0b86&scoped=true": /*!***************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/TextArea.vue?vue&type=template&id=97af0b86&scoped=true ***! \***************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "text-area" }, [_c("label", { attrs: { for: _vm.id } }, [_vm._v(_vm._s(_vm.label))]), _vm._v(" "), _c("textarea", { directives: [{ name: "autosize", rawName: "v-autosize", value: true, expression: "true" }], attrs: { id: _vm.id, rows: 2 }, domProps: { value: _vm.value }, on: { input: function ($event) { return _vm.$emit("update:value", $event.target.value); } } })]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/TextInput.vue?vue&type=template&id=3f44c2ca&scoped=true": /*!****************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/TextInput.vue?vue&type=template&id=3f44c2ca&scoped=true ***! \****************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "text-input" }, [_c("label", { attrs: { for: _vm.id } }, [_vm._v(_vm._s(_vm.label))]), _vm._v(" "), _c("input", { attrs: { id: _vm.id, type: "text", disabled: _vm.disabled }, domProps: { value: _vm.value }, on: { input: _vm.change } })]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/VisibilitySelect.vue?vue&type=template&id=0a217891": /*!***********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/VisibilitySelect.vue?vue&type=template&id=0a217891 ***! \***********************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("SelectWrapper", { attrs: { label: _vm.label, value: _vm.value, disabled: _vm.disabled, options: _vm.options }, on: { "update:value": function ($event) { return _vm.$emit("update:value", $event); } } }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/CalendarGrid.vue?vue&type=template&id=27464dd4&scoped=true": /*!********************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/CalendarGrid.vue?vue&type=template&id=27464dd4&scoped=true ***! \********************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("FullCalendar", { ref: "fullCalendar", class: _vm.isWidget ? "fullcalendar-widget" : "", attrs: { options: _vm.options } }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmList.vue?vue&type=template&id=3a26be1f": /*!******************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmList.vue?vue&type=template&id=3a26be1f ***! \******************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "property-alarm-list" }, [_vm._l(_vm.alarms, function (alarm, index) { return _c("AlarmListItem", { key: index, attrs: { alarm: alarm, "calendar-object-instance": _vm.calendarObjectInstance, "is-read-only": _vm.isReadOnly, "show-icon": index === 0 }, on: { "remove-alarm": _vm.removeAlarm } }); }), _vm._v(" "), !_vm.isReadOnly ? _c("AlarmListNew", { attrs: { "is-all-day": _vm.calendarObjectInstance.isAllDay, "show-icon": _vm.alarms.length === 0 }, on: { "add-alarm": _vm.addAlarm } }) : _vm._e()], 2); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmListItem.vue?vue&type=template&id=c30c7f5c": /*!**********************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmListItem.vue?vue&type=template&id=c30c7f5c ***! \**********************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { directives: [{ name: "click-outside", rawName: "v-click-outside", value: _vm.closeAlarmEditor, expression: "closeAlarmEditor" }], staticClass: "property-alarm-item" }, [_c("div", { staticClass: "property-alarm-item__icon", class: { "property-alarm-item__icon--hidden": !_vm.showIcon } }, [_c("Bell", { staticClass: "icon", attrs: { size: 20, name: _vm.t("calendar", "Reminder") } })], 1), _vm._v(" "), !_vm.isEditing ? _c("div", { staticClass: "property-alarm-item__label" }, [_vm._v("\n\t\t" + _vm._s(_vm._f("formatAlarm")(_vm.alarm, _vm.isAllDay, _vm.currentUserTimezone, _vm.locale)) + "\n\t")]) : _vm._e(), _vm._v(" "), _vm.isEditing && _vm.isRelativeAlarm && !_vm.isAllDay ? _c("div", { staticClass: "property-alarm-item__edit property-alarm-item__edit--timed" }, [_c("input", { attrs: { type: "number", min: "0", max: "3600" }, domProps: { value: _vm.alarm.relativeAmountTimed }, on: { input: _vm.changeRelativeAmountTimed } }), _vm._v(" "), _c("AlarmTimeUnitSelect", { attrs: { "is-all-day": _vm.isAllDay, count: _vm.alarm.relativeAmountTimed, unit: _vm.alarm.relativeUnitTimed, disabled: false }, on: { change: _vm.changeRelativeUnitTimed } })], 1) : _vm._e(), _vm._v(" "), _vm.isEditing && _vm.isRelativeAlarm && _vm.isAllDay ? _c("div", { staticClass: "property-alarm-item__edit property-alarm-item__edit--all-day" }, [_c("div", { staticClass: "property-alarm-item__edit--all-day__distance" }, [_c("input", { attrs: { type: "number", min: "0", max: "3600" }, domProps: { value: _vm.alarm.relativeAmountAllDay }, on: { input: _vm.changeRelativeAmountAllDay } }), _vm._v(" "), _c("AlarmTimeUnitSelect", { staticClass: "time-unit-select", attrs: { "is-all-day": _vm.isAllDay, count: _vm.alarm.relativeAmountAllDay, unit: _vm.alarm.relativeUnitAllDay, disabled: false }, on: { change: _vm.changeRelativeUnitAllDay } })], 1), _vm._v(" "), _c("div", { staticClass: "property-alarm-item__edit--all-day__time" }, [_c("span", { staticClass: "property-alarm-item__edit--all-day__time__before-at-label" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "before at")) + "\n\t\t\t")]), _vm._v(" "), _c("TimePicker", { attrs: { date: _vm.relativeAllDayDate }, on: { change: _vm.changeRelativeHourMinuteAllDay } })], 1)]) : _vm._e(), _vm._v(" "), _vm.isEditing && _vm.isAbsoluteAlarm ? _c("div", { staticClass: "property-alarm-item__edit property-alarm-item__edit--absolute" }, [_c("DatePicker", { attrs: { prefix: "on", date: _vm.alarm.absoluteDate, "timezone-id": _vm.alarm.absoluteTimezoneId, "is-all-day": false }, on: { change: _vm.changeAbsoluteDate, "change-timezone": _vm.changeAbsoluteTimezoneId } })], 1) : _vm._e(), _vm._v(" "), !_vm.isReadOnly ? _c("div", { staticClass: "property-alarm-item__options" }, [_c("Actions", { attrs: { open: _vm.showMenu }, on: { "update:open": open => _vm.showMenu = open } }, [_vm.canChangeAlarmType || !_vm.isAlarmTypeDisplay && _vm.forceEventAlarmType === "DISPLAY" ? _c("ActionRadio", { attrs: { name: _vm.alarmTypeName, checked: _vm.isAlarmTypeDisplay }, on: { change: function ($event) { return _vm.changeType("DISPLAY"); } } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Notification")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.canChangeAlarmType || !_vm.isAlarmTypeEmail && _vm.forceEventAlarmType === "EMAIL" ? _c("ActionRadio", { attrs: { name: _vm.alarmTypeName, checked: _vm.isAlarmTypeEmail }, on: { change: function ($event) { return _vm.changeType("EMAIL"); } } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Email")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.canChangeAlarmType && _vm.isAlarmTypeAudio ? _c("ActionRadio", { attrs: { name: _vm.alarmTypeName, checked: _vm.isAlarmTypeAudio }, on: { change: function ($event) { return _vm.changeType("AUDIO"); } } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Audio notification")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.canChangeAlarmType && _vm.isAlarmTypeOther ? _c("ActionRadio", { attrs: { name: _vm.alarmTypeName, checked: _vm.isAlarmTypeOther }, on: { change: function ($event) { return _vm.changeType(_vm.alarm.type); } } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Other notification")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.canChangeAlarmType && !_vm.isRecurring ? _c("ActionSeparator") : _vm._e(), _vm._v(" "), !_vm.isRecurring ? _c("ActionRadio", { attrs: { name: _vm.alarmTriggerName, checked: _vm.isRelativeAlarm }, on: { change: _vm.switchToRelativeAlarm } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Relative to event")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), !_vm.isRecurring ? _c("ActionRadio", { attrs: { name: _vm.alarmTriggerName, checked: _vm.isAbsoluteAlarm }, on: { change: _vm.switchToAbsoluteAlarm } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "On date")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _c("ActionSeparator"), _vm._v(" "), _vm.canEdit && !_vm.isEditing ? _c("ActionButton", { on: { click: function ($event) { $event.stopPropagation(); return _vm.toggleEditAlarm.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Pencil", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 2864695315) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Edit time")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.canEdit && _vm.isEditing ? _c("ActionButton", { on: { click: _vm.toggleEditAlarm }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Check", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 38899624) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Save time")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _c("ActionButton", { on: { click: _vm.removeAlarm }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Delete", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1625950007) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Remove reminder")) + "\n\t\t\t")])], 1)], 1) : _vm._e()]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmListNew.vue?vue&type=template&id=bb5ed19e": /*!*********************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmListNew.vue?vue&type=template&id=bb5ed19e ***! \*********************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("PropertySelect", { staticClass: "property-alarm-new", attrs: { "prop-model": _vm.propModel, "is-read-only": false, value: null, "show-icon": _vm.showIcon }, on: { "update:value": _vm.addReminderFromSelect } }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmTimeUnitSelect.vue?vue&type=template&id=041ca90e": /*!****************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Alarm/AlarmTimeUnitSelect.vue?vue&type=template&id=041ca90e ***! \****************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("NcSelect", { attrs: { "allow-empty": false, options: _vm.options, value: _vm.selected, disabled: _vm.disabled, clearable: false, "input-id": "unit", label: "label" }, on: { input: _vm.select } }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Attachments/AttachmentsList.vue?vue&type=template&id=5efccc46&scoped=true": /*!******************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Attachments/AttachmentsList.vue?vue&type=template&id=5efccc46&scoped=true ***! \******************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { attrs: { id: "attachments" } }, [_c("input", { ref: "localAttachments", staticClass: "attachments-input", attrs: { type: "file", multiple: "" }, on: { change: _vm.onLocalAttachmentSelected } }), _vm._v(" "), _c("div", { staticClass: "attachments-summary" }, [_c("div", { staticClass: "attachments-summary-inner" }, [_c("Paperclip", { attrs: { size: 20 } }), _vm._v(" "), _vm.attachments.length > 0 ? _c("div", { staticClass: "attachments-summary-inner-label" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.n("calendar", "{count} attachment", "{count} attachments", _vm.attachments.length, { count: _vm.attachments.length })) + "\n\t\t\t")]) : _c("div", { staticClass: "attachments-summary-inner-label" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "No attachments")) + "\n\t\t\t")])], 1), _vm._v(" "), !_vm.isReadOnly ? _c("NcActions", { scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Plus", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 32235154) }, [_vm._v(" "), _c("NcActionButton", { on: { click: function ($event) { return _vm.openFilesModal(); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Folder", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 4270628382) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Add from Files")) + "\n\t\t\t")]), _vm._v(" "), _c("NcActionButton", { on: { click: _vm.clickOnUploadButton }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Upload", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 1329850251) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Upload from device")) + "\n\t\t\t")]), _vm._v(" "), _c("NcActionButton", { on: { click: _vm.openEmailBoxModal }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Email", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 1680463460) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Depuis un email")) + "\n\t\t\t")])], 1) : _vm._e()], 1), _vm._v(" "), _vm.attachments.length > 0 ? _c("div", [_c("ul", { staticClass: "attachments-list" }, _vm._l(_vm.attachments, function (attachment) { return _c("NcListItem", { key: attachment.path, staticClass: "attachments-list-item", attrs: { "force-display-actions": true, name: _vm.getBaseName(attachment.fileName) }, on: { click: function ($event) { return _vm.openFile(attachment.uri); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("img", { staticClass: "attachment-icon", attrs: { src: _vm.getPreview(attachment) } })]; }, proxy: true }, { key: "actions", fn: function () { return [!_vm.isReadOnly ? _c("NcActionButton", { on: { click: function ($event) { return _vm.deleteAttachmentFromEvent(attachment); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Close", { attrs: { size: 20 } })]; }, proxy: true }], null, true) }, [_vm._v("\n\t\t\t\t\t\t" + _vm._s(_vm.t("calendar", "Delete file")) + "\n\t\t\t\t\t")]) : _vm._e()]; }, proxy: true }], null, true) }); }), 1)]) : _vm._e(), _vm._v(" "), _c("NcDialog", { attrs: { open: _vm.showOpenConfirmation, name: _vm.t("calendar", "Confirmation"), buttons: _vm.openConfirmationButtons }, on: { "update:open": function ($event) { _vm.showOpenConfirmation = $event; } } }, [_c("p", { staticClass: "external-link-message" }, [_vm._v("\n\t\t\t" + _vm._s(_vm.openConfirmationMessage) + "\n\t\t")])]), _vm._v(" "), _vm.showModal ? _c("NcModal", { attrs: { name: "", size: "large" }, on: { close: _vm.resetMailBoxModal } }, [!_vm.showAttachmentsSection && !_vm.showAttachmentsSection ? _c("div", { staticClass: "modal__content" }, [!_vm.loadingDataEmailBox ? _c("NcButton", { staticStyle: { "text-align": "center" }, on: { click: function ($event) { return _vm.syncEmailBox(); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Reload", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 163584889) }, [_vm._v("\n\t\t\t\tActualiser \n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm._l(_vm.mailBoxData, function (mail) { return _vm.mailBoxData.length > 0 ? [_c("ul", [_c("NcListItem", { attrs: { name: _vm.getLabelEmailBox(mail.from) + " : " + mail.subject, bold: false, counterType: "outlined" }, on: { click: function ($event) { return _vm.getAttachments(mail); } }, scopedSlots: _vm._u([{ key: "subname", fn: function () { return [_vm._v("\n\t\t\t\t\t\t\t\t" + _vm._s(_vm.getSubstringText(mail.previewText, 50)) + " \n\t\t\t\t\t\t")]; }, proxy: true }, _vm.hasAttachements(mail) ? { key: "icon", fn: function () { return [_c("Paperclip", { attrs: { size: 20 } })]; }, proxy: true } : null], null, true) })], 1)] : _vm._e(); })], 2) : _vm._e(), _vm._v(" "), _vm.showAttachmentsSection ? _c("div", { staticClass: "modal__content__attachments" }, [_c("ul", { staticClass: "attachments-list" }, [_c("NcActionButton", { on: { click: function ($event) { return _vm.displayAttachmentsSection(); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("ArrowLeft", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 1821202730) }, [_vm._v("\n\t\t\t\t\tRevenir dans la listes des emails\n\t\t\t\t")]), _vm._v(" "), _vm.selectedMail ? _c("div", [_c("div", { staticClass: "mailHeader" }, [_vm._v("\n\t\t\t\t\t\t\t" + _vm._s(_vm.getLabelEmailBox(_vm.selectedMail.from) + " : " + _vm.selectedMail.subject) + "\n\t\t\t\t\t\t")]), _vm._v(" "), _vm.selectedMail.body ? _c("div", { staticClass: "mailContent" }, [_c("div", { domProps: { innerHTML: _vm._s(_vm.selectedMail.body) } })]) : _c("div", { staticClass: "mailContent" }, [_c("div", { domProps: { innerHTML: _vm._s(_vm.selectedMail.previewText) } })])]) : _vm._e(), _vm._v(" "), _c("div", { staticClass: "mailHeader" }, [_vm._v("\n\t\t\t\t\t\tPièces jointes : \n\t\t\t\t\t")]), _vm._v(" "), _vm._l(_vm.mailAttachmentData, function (attachment) { return !_vm.loadingDataEmailBox && _vm.mailAttachmentData.length > 0 ? _c("div", { staticClass: "image-list-attachement" }, [attachment.isImage ? _c("div", { staticClass: "image-item-attachement", on: { click: function ($event) { return _vm.selectAttachement(attachment.id); } } }, [_c("img", { attrs: { src: attachment.downloadUrl, alt: attachment.fileName } }), _vm._v(" "), _c("label", [_vm._v(_vm._s(attachment.fileName) + " \t"), _vm.isInSelectedAttachment(attachment.id) ? _c("span", [_vm._v(" ✔")]) : _vm._e()])]) : !attachment.isImage && !attachment.isCalendarEvent ? _c("div", { staticClass: "image-item-attachement", on: { click: function ($event) { return _vm.selectAttachement(attachment.id); } } }, [_c("label", [_vm._v(_vm._s(attachment.fileName) + "\n\t\t\t\t\t\t\t\t"), _vm.isInSelectedAttachment(attachment.id) ? _c("span", [_vm._v(" ✔")]) : _vm._e()])]) : attachment.isCalendarEvent ? _c("div", { staticClass: "image-item-attachement" }, [_c("label", [_vm._v(_vm._s(attachment.fileName) + " ( Non allouée)")])]) : _vm._e()]) : _vm._e(); }), _vm._v(" "), !_vm.mailAttachmentData.length && !_vm.loadingDataEmailBox ? [_c("p", [_vm._v(" Pas d'attachements")])] : _vm._e()], 2)]) : _vm._e(), _vm._v(" "), _vm.selectedAttachements.length && !_vm.loadingDataEmailBox ? _c("div", { staticClass: "modal__content" }, [_c("NcButton", { staticStyle: { "text-align": "center" }, on: { click: function ($event) { return _vm.pickEmailAttachement(); } } }, [_vm._v("\n\t\t\t\t Ajouter (" + _vm._s(_vm.selectedAttachements.length) + ") \n\t\t\t")])], 1) : _vm._e(), _vm._v(" "), _vm.loadingDataEmailBox ? _c("div", { staticClass: "modal__content" }, [_c("div", [_c("NcLoadingIcon", { attrs: { size: 40, appearance: "light", name: _vm.loadingText } })], 1), _vm._v(" "), _c("p", { staticStyle: { "text-align": "center" } }, [_vm._v(" " + _vm._s(_vm.loadingText))])]) : _vm._e()]) : _vm._e()], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/AvatarParticipationStatus.vue?vue&type=template&id=7117b730&scoped=true": /*!****************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/AvatarParticipationStatus.vue?vue&type=template&id=7117b730&scoped=true ***! \****************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "avatar-participation-status" }, [_vm.isGroup ? _c("Avatar", { scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("AccountMultiple", { attrs: { size: 28 } })]; }, proxy: true }], null, false, 2883928401) }) : _c("Avatar", { attrs: { "disable-tooltip": true, user: _vm.commonName, "display-name": _vm.commonName, "is-no-user": true } }), _vm._v(" "), !_vm.isGroup ? [_vm.participationStatus === "ACCEPTED" && _vm.isViewedByOrganizer ? [_c("IconCheck", { staticClass: "avatar-participation-status__indicator", attrs: { "fill-color": "#32CD32", size: 20 } }), _vm._v(" "), _c("div", { staticClass: "avatar-participation-status__text" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Invitation accepted")) + "\n\t\t\t")])] : _vm.isResource && _vm.participationStatus === "ACCEPTED" ? [_c("IconCheck", { staticClass: "avatar-participation-status__indicator", attrs: { "fill-color": "#32CD32", size: 20 } }), _vm._v(" "), _c("div", { staticClass: "avatar-participation-status__text" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Available")) + "\n\t\t\t")])] : _vm.isSuggestion ? [_c("IconCheck", { staticClass: "avatar-participation-status__indicator", attrs: { "fill-color": "#32CD32", size: 20 } }), _vm._v(" "), _c("div", { staticClass: "avatar-participation-status__text" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Suggested")) + "\n\t\t\t")])] : _vm.participationStatus === "TENTATIVE" ? [_c("IconCheck", { staticClass: "avatar-participation-status__indicator", attrs: { "fill-color": "#32CD32", size: 20 } }), _vm._v(" "), _c("div", { staticClass: "avatar-participation-status__text" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Participation marked as tentative")) + "\n\t\t\t")])] : _vm.participationStatus === "ACCEPTED" && !_vm.isViewedByOrganizer ? [_c("IconCheck", { staticClass: "avatar-participation-status__indicator", attrs: { "fill-color": "#32CD32", size: 20 } }), _vm._v(" "), _c("div", { staticClass: "avatar-participation-status__text" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Accepted {organizerName}'s invitation", { organizerName: _vm.organizerDisplayName })) + "\n\t\t\t")])] : _vm.isResource && _vm.participationStatus === "DECLINED" ? [_c("IconClose", { staticClass: "avatar-participation-status__indicator", attrs: { size: 20 } }), _vm._v(" "), _c("div", { staticClass: "avatar-participation-status__text" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Not available")) + "\n\t\t\t")])] : _vm.participationStatus === "DECLINED" && _vm.isViewedByOrganizer ? [_c("IconClose", { staticClass: "avatar-participation-status__indicator", attrs: { size: 20 } }), _vm._v(" "), _c("div", { staticClass: "avatar-participation-status__text" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Invitation declined")) + "\n\t\t\t")])] : _vm.participationStatus === "DECLINED" && !_vm.isViewedByOrganizer ? [_c("IconClose", { staticClass: "avatar-participation-status__indicator", attrs: { size: 20 } }), _vm._v(" "), _c("div", { staticClass: "avatar-participation-status__text" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Declined {organizerName}'s invitation", { organizerName: _vm.organizerDisplayName })) + "\n\t\t\t")])] : _vm.participationStatus === "DELEGATED" ? [_c("IconDelegated", { staticClass: "avatar-participation-status__indicator", attrs: { size: 20 } }), _vm._v(" "), _c("div", { staticClass: "avatar-participation-status__text" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Invitation is delegated")) + "\n\t\t\t")])] : _vm.isResource ? [_c("IconNoResponse", { staticClass: "avatar-participation-status__indicator", attrs: { size: 20 } }), _vm._v(" "), _c("div", { staticClass: "avatar-participation-status__text" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Checking availability")) + "\n\t\t\t")])] : _vm.isViewedByOrganizer ? [_c("IconNoResponse", { staticClass: "avatar-participation-status__indicator", attrs: { size: 20 } }), _vm._v(" "), _c("div", { staticClass: "avatar-participation-status__text" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Awaiting response")) + "\n\t\t\t")])] : [_c("IconNoResponse", { staticClass: "avatar-participation-status__indicator", attrs: { size: 20 } }), _vm._v(" "), _c("div", { staticClass: "avatar-participation-status__text" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Has not responded to {organizerName}'s invitation yet", { organizerName: _vm.organizerDisplayName })) + "\n\t\t\t")])]] : _vm._e()], 2); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/CalendarPickerHeader.vue?vue&type=template&id=e5da09ca&scoped=true": /*!***********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/CalendarPickerHeader.vue?vue&type=template&id=e5da09ca&scoped=true ***! \***********************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "calendar-picker-header", class: { "calendar-picker-header--readonly": _vm.isReadOnly } }, [_c("NcActions", { staticClass: "calendar-picker-header__picker", attrs: { type: "tertiary", "menu-name": _vm.value.displayName, "force-name": true, disabled: _vm.isDisabled }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("div", { staticClass: "calendar-picker-header__icon" }, [_c("div", { staticClass: "calendar-picker-header__icon__dot", style: { "background-color": _vm.value.color } })])]; }, proxy: true }]) }, [_vm._v(" "), _vm._l(_vm.calendars, function (calendar) { return _c("NcActionButton", { key: calendar.id, attrs: { "close-after-click": true }, on: { click: function ($event) { return _vm.$emit("update:value", calendar); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("div", { staticClass: "calendar-picker-header__icon" }, [_c("div", { staticClass: "calendar-picker-header__icon__dot", style: { "background-color": calendar.color } })])]; }, proxy: true }], null, true) }, [_vm._v("\n\t\t\t\t" + _vm._s(calendar.displayName) + "\n\t\t\t")]); })], 2)], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/FreeBusy/FreeBusy.vue?vue&type=template&id=a60f3f46&scoped=true": /*!********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/FreeBusy/FreeBusy.vue?vue&type=template&id=a60f3f46&scoped=true ***! \********************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("NcDialog", { attrs: { size: "large", name: _vm.$t("calendar", "Availability of attendees, resources and rooms") }, on: { closing: function ($event) { return _vm.$emit("close"); } } }, [_c("div", { staticClass: "modal__content modal--scheduler" }, [_vm.loadingIndicator ? _c("div", { staticClass: "loading-indicator" }, [_c("div", { staticClass: "icon-loading" })]) : _vm._e(), _vm._v(" "), _c("div", { staticClass: "modal__content__header" }, [_c("h2", [_vm._v(_vm._s(_vm.$t("calendar", "Find a time")))]), _vm._v(" "), _c("h3", [_vm._v(_vm._s(_vm.eventTitle))]), _vm._v(" "), _c("div", { staticClass: "modal__content__header__attendees" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "with")) + "\n\t\t\t\t"), _c("NcUserBubble", { attrs: { size: "24", "display-name": _vm.organizer.commonName } }), _vm._v(" "), _vm._l(_vm.attendees, function (attendee) { return _c("NcUserBubble", { key: attendee.id, staticClass: "modal__content__header__attendees__user-bubble", attrs: { size: "24", "display-name": attendee.commonName }, scopedSlots: _vm._u([{ key: "name", fn: function () { return [_c("a", { staticClass: "icon-close", attrs: { href: "#", title: "Remove user" }, on: { click: function ($event) { return _vm.removeAttendee(attendee); } } })]; }, proxy: true }], null, true) }); })], 2)]), _vm._v(" "), _c("div", { staticClass: "modal__content__actions" }, [_c("InviteesListSearch", { staticClass: "modal__content__actions__select", attrs: { "already-invited-emails": _vm.alreadyInvitedEmails, organizer: _vm.organizer }, on: { "add-attendee": _vm.addAttendee } }), _vm._v(" "), _c("div", { staticClass: "modal__content__actions__date" }, [_c("NcButton", { attrs: { type: "secondary" }, on: { click: function ($event) { return _vm.handleActions("today"); } } }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Today")) + "\n\t\t\t\t")]), _vm._v(" "), _c("NcButton", { attrs: { type: "secondary" }, on: { click: function ($event) { return _vm.handleActions("left"); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("ChevronLeftIcon", { attrs: { size: 20 } })]; }, proxy: true }]) }), _vm._v(" "), _c("NcButton", { attrs: { type: "secondary" }, on: { click: function ($event) { return _vm.handleActions("right"); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("ChevronRightIcon", { attrs: { size: 20 } })]; }, proxy: true }]) }), _vm._v(" "), _c("NcDateTimePickerNative", { attrs: { "hide-label": true, value: _vm.currentDate }, on: { input: date => _vm.handleActions("picker", date) } }), _vm._v(" "), _c("NcPopover", { attrs: { "focus-trap": false }, scopedSlots: _vm._u([{ key: "trigger", fn: function () { return [_c("NcButton", { attrs: { type: "tertiary-no-background" }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("HelpCircleIcon", { attrs: { size: 20 } })]; }, proxy: true }]) })]; }, proxy: true }]) }, [_vm._v(" "), [_c("div", { staticClass: "freebusy-caption" }, [_c("div", { staticClass: "freebusy-caption__calendar-user-types" }), _vm._v(" "), _c("div", { staticClass: "freebusy-caption__colors" }, _vm._l(_vm.colorCaption, function (color) { return _c("div", { key: color.color, staticClass: "freebusy-caption-item" }, [_c("div", { staticClass: "freebusy-caption-item__color", style: { "background-color": color.color } }), _vm._v(" "), _c("div", { staticClass: "freebusy-caption-item__label" }, [_vm._v("\n\t\t\t\t\t\t\t\t\t\t" + _vm._s(color.label) + "\n\t\t\t\t\t\t\t\t\t")])]); }), 0)])]], 2)], 1)], 1), _vm._v(" "), _c("FullCalendar", { ref: "freeBusyFullCalendar", attrs: { options: _vm.options } }), _vm._v(" "), _c("div", { staticClass: "modal__content__footer" }, [_c("div", { staticClass: "modal__content__footer__title" }, [_vm.freeSlots ? _c("p", [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Available times:")) + "\n\t\t\t\t\t"), _c("NcSelect", { staticClass: "available-slots__multiselect", attrs: { options: _vm.freeSlots, placeholder: _vm.placeholder, clearable: false, "input-id": "slot", label: "displayStart", "label-outside": true, value: _vm.selectedSlot }, on: { "option:selected": _vm.setSlotSuggestion }, scopedSlots: _vm._u([{ key: "selected-option", fn: function (_ref) { let {} = _ref; return [_vm._v("\n\t\t\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Suggestion accepted")) + "\n\t\t\t\t\t\t")]; } }], null, false, 1565055063) })], 1) : _vm._e(), _vm._v(" "), _c("h3", [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.formattedCurrentStart) + "\n\t\t\t\t")]), _vm._v(" "), _c("p", [_vm._v(_vm._s(_vm.formattedCurrentTime)), _c("span", { staticClass: "modal__content__footer__title__timezone" }, [_vm._v(_vm._s(_vm.formattedTimeZone))])])]), _vm._v(" "), _c("NcButton", { attrs: { type: "primary" }, on: { click: _vm.save }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CheckIcon", { attrs: { size: 20 } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Done")) + "\n\t\t\t\t")])], 1)], 1)]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/InvitationResponseButtons.vue?vue&type=template&id=bc1cb2d6&scoped=true": /*!****************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/InvitationResponseButtons.vue?vue&type=template&id=bc1cb2d6&scoped=true ***! \****************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "invitation-response-buttons", class: { "invitation-response-buttons--grow": _vm.growHorizontally } }, [!_vm.isAccepted ? _c("NcButton", { staticClass: "invitation-response-buttons__button", attrs: { type: "primary", disabled: _vm.loading }, on: { click: _vm.accept } }, [_vm._v("\n\t\t" + _vm._s(_vm.t("calendar", "Accept")) + "\n\t")]) : _vm._e(), _vm._v(" "), !_vm.isDeclined ? _c("NcButton", { staticClass: "invitation-response-buttons__button", attrs: { type: "error", disabled: _vm.loading }, on: { click: _vm.decline } }, [_vm._v("\n\t\t" + _vm._s(_vm.t("calendar", "Decline")) + "\n\t")]) : _vm._e(), _vm._v(" "), !_vm.isTentative ? [!_vm.narrow ? _c("NcButton", { staticClass: "invitation-response-buttons__button", attrs: { disabled: _vm.loading }, on: { click: _vm.tentative } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("calendar", "Tentative")) + "\n\t\t")]) : _c("Actions", [_c("ActionButton", { attrs: { disabled: _vm.loading }, on: { click: _vm.tentative }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CalendarQuestionIcon", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 2832063871) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("calendar", "Tentative")) + "\n\t\t\t")])], 1)] : _vm._e()], 2); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesList.vue?vue&type=template&id=51e2fbdb&scoped=true": /*!************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesList.vue?vue&type=template&id=51e2fbdb&scoped=true ***! \************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return !_vm.hideIfEmpty || !_vm.isListEmpty ? _c("div", { staticClass: "invitees-list" }, [_vm.showHeader ? _c("div", { staticClass: "invitees-list__header" }, [_c("AccountMultipleIcon", { attrs: { size: 20 } }), _vm._v(" "), _c("b", [_vm._v(_vm._s(_vm.t("calendar", "Attendees")))]), _vm._v("\n\t\t" + _vm._s(_vm.statusHeader) + "\n\t")], 1) : _vm._e(), _vm._v(" "), !_vm.isReadOnly && !_vm.isSharedWithMe && _vm.hasUserEmailAddress ? _c("InviteesListSearch", { attrs: { "already-invited-emails": _vm.alreadyInvitedEmails, organizer: _vm.calendarObjectInstance.organizer }, on: { "add-attendee": _vm.addAttendee } }) : _vm._e(), _vm._v(" "), _vm.hasOrganizer ? _c("OrganizerListItem", { attrs: { "is-read-only": _vm.isReadOnly || _vm.isSharedWithMe, organizer: _vm.calendarObjectInstance.organizer } }) : _vm._e(), _vm._v(" "), _vm._l(_vm.limitedInviteesWithoutOrganizer, function (invitee) { return _c("InviteesListItem", { key: invitee.email, attrs: { attendee: invitee, "is-read-only": _vm.isReadOnly || _vm.isSharedWithMe, "organizer-display-name": _vm.organizerDisplayName, members: invitee.members }, on: { "remove-attendee": _vm.removeAttendee } }); }), _vm._v(" "), _vm.limit > 0 && _vm.inviteesWithoutOrganizer.length > _vm.limit ? _c("div", { staticClass: "invitees-list__more" }, [_vm._v("\n\t\t" + _vm._s(_vm.n("calendar", "%n more guest", "%n more guests", _vm.inviteesWithoutOrganizer.length - _vm.limit)) + "\n\t")]) : _vm._e(), _vm._v(" "), _vm.isReadOnly && _vm.isSharedWithMe && !_vm.hideErrors ? _c("NoAttendeesView", { attrs: { message: _vm.noOwnerMessage } }) : _vm.isReadOnly && _vm.isListEmpty && _vm.hasUserEmailAddress ? _c("NoAttendeesView", { attrs: { message: _vm.noInviteesMessage } }) : !_vm.isReadOnly && _vm.isListEmpty && !_vm.hasUserEmailAddress && !_vm.hideErrors ? _c("OrganizerNoEmailError") : _vm._e(), _vm._v(" "), !_vm.hideButtons ? _c("div", { staticClass: "invitees-list-button-group" }, [_vm.isCreateTalkRoomButtonVisible ? _c("NcButton", { staticClass: "invitees-list-button-group__button", attrs: { disabled: _vm.isCreateTalkRoomButtonDisabled }, on: { click: _vm.createTalkRoom } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Create Talk room for this event")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), !_vm.isReadOnly ? _c("NcButton", { staticClass: "invitees-list-button-group__button", attrs: { disabled: _vm.isListEmpty || !_vm.isOrganizer }, on: { click: _vm.openFreeBusy } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Find a time")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.showFreeBusyModel ? _c("FreeBusy", { attrs: { attendees: _vm.calendarObjectInstance.attendees, organizer: _vm.calendarObjectInstance.organizer, "start-date": _vm.calendarObjectInstance.startDate, "end-date": _vm.calendarObjectInstance.endDate, "event-title": _vm.calendarObjectInstance.title, "already-invited-emails": _vm.alreadyInvitedEmails, "calendar-object-instance": _vm.calendarObjectInstance }, on: { "remove-attendee": _vm.removeAttendee, "add-attendee": _vm.addAttendee, "update-dates": _vm.saveNewDate, close: _vm.closeFreeBusy } }) : _vm._e()], 1) : _vm._e()], 2) : _vm._e(); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesListItem.vue?vue&type=template&id=43ae7fe4&scoped=true": /*!****************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesListItem.vue?vue&type=template&id=43ae7fe4&scoped=true ***! \****************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "invitees-list-item" }, [_c("AvatarParticipationStatus", { attrs: { "attendee-is-organizer": false, "is-viewed-by-organizer": _vm.isViewedByOrganizer, "is-resource": false, "avatar-link": _vm.avatarLink, "participation-status": _vm.attendee.participationStatus, "organizer-display-name": _vm.organizerDisplayName, "common-name": _vm.commonName, "is-group": _vm.isGroup } }), _vm._v(" "), _c("div", { staticClass: "invitees-list-item__displayname", class: { "invitees-list-item__groupname": _vm.members.length } }, [_vm._v("\n\t\t" + _vm._s(_vm.commonName) + "\n\t\t"), _vm.members.length ? _c("span", { staticClass: "invitees-list-item__member-count" }, [_vm._v("\n\t\t\t(" + _vm._s(_vm.$n("calendar", "%n member", "%n members", _vm.members.length)) + ")\n\t\t")]) : _vm._e()]), _vm._v(" "), _c("div", { staticClass: "invitees-list-item__actions" }, [_vm.members.length ? _c("NcButton", { staticClass: "icon-collapse", class: { "icon-collapse--open": _vm.memberListExpaneded }, attrs: { type: "tertiary" }, on: { click: _vm.toggleMemberList }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_vm.memberListExpaneded ? _c("ChevronUp", { attrs: { size: 20 } }) : _c("ChevronDown", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 2349731421) }) : _vm._e(), _vm._v(" "), _vm.isViewedByOrganizer ? _c("Actions", [_c("ActionCheckbox", { attrs: { checked: _vm.attendee.rsvp }, on: { change: _vm.toggleRSVP } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Request reply")) + "\n\t\t\t")]), _vm._v(" "), _c("ActionRadio", { attrs: { name: _vm.radioName, checked: _vm.isChair }, on: { change: function ($event) { return _vm.changeRole("CHAIR"); } } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Chairperson")) + "\n\t\t\t")]), _vm._v(" "), _c("ActionRadio", { attrs: { name: _vm.radioName, checked: _vm.isRequiredParticipant }, on: { change: function ($event) { return _vm.changeRole("REQ-PARTICIPANT"); } } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Required participant")) + "\n\t\t\t")]), _vm._v(" "), _c("ActionRadio", { attrs: { name: _vm.radioName, checked: _vm.isOptionalParticipant }, on: { change: function ($event) { return _vm.changeRole("OPT-PARTICIPANT"); } } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Optional participant")) + "\n\t\t\t")]), _vm._v(" "), _c("ActionRadio", { attrs: { name: _vm.radioName, checked: _vm.isNonParticipant }, on: { change: function ($event) { return _vm.changeRole("NON-PARTICIPANT"); } } }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Non-participant")) + "\n\t\t\t")]), _vm._v(" "), _c("ActionButton", { on: { click: function ($event) { return _vm.removeAttendee(_vm.attendee); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Delete", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1625950007) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.removeAttendeeText) + "\n\t\t\t")])], 1) : _vm._e()], 1), _vm._v(" "), _vm.members.length ? _c("div", { staticClass: "member-list", class: { "member-list--open": _vm.memberListExpaneded } }, _vm._l(_vm.members, function (member) { return _c("InviteesListItem", { key: member.email, attrs: { attendee: member, "is-read-only": _vm.isReadOnly, "organizer-display-name": _vm.organizerDisplayName, members: member.members }, on: { "remove-attendee": function ($event) { return _vm.removeAttendee(member); } } }); }), 1) : _vm._e()], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesListSearch.vue?vue&type=template&id=d74a293a": /*!******************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesListSearch.vue?vue&type=template&id=d74a293a ***! \******************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("NcSelect", { staticClass: "invitees-search__multiselect", class: { showContent: _vm.inputGiven, "icon-loading": _vm.isLoading }, attrs: { options: _vm.matches, searchable: true, "max-height": 600, placeholder: _vm.placeholder, clearable: false, "label-outside": true, "input-id": "uid", label: "dropdownName" }, on: { search: _vm.findAttendees, "option:selected": _vm.addAttendee }, scopedSlots: _vm._u([{ key: "option", fn: function (option) { return [_c("div", { staticClass: "invitees-search-list-item" }, [option.isUser ? _c("Avatar", { key: option.uid, attrs: { user: option.avatar, "display-name": option.dropdownName } }) : option.type === "circle" ? _c("Avatar", { scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("GoogleCirclesCommunitiesIcon", { attrs: { size: 20 } })]; }, proxy: true }], null, true) }) : _vm._e(), _vm._v(" "), !option.isUser && option.type !== "circle" ? _c("Avatar", { key: option.uid, attrs: { url: option.avatar, "display-name": option.commonName } }) : _vm._e(), _vm._v(" "), _c("div", { staticClass: "invitees-search-list-item__label" }, [_c("div", [_vm._v("\n\t\t\t\t\t" + _vm._s(option.commonName) + "\n\t\t\t\t")]), _vm._v(" "), option.email !== option.commonName && option.type !== "circle" ? _c("div", [_vm._v("\n\t\t\t\t\t" + _vm._s(option.email) + "\n\t\t\t\t")]) : _vm._e(), _vm._v(" "), option.type === "circle" ? _c("div", [_vm._v("\n\t\t\t\t\t" + _vm._s(option.subtitle) + "\n\t\t\t\t")]) : _vm._e()])], 1)]; } }]) }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/OrganizerListItem.vue?vue&type=template&id=e4bd912c&scoped=true": /*!*****************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/OrganizerListItem.vue?vue&type=template&id=e4bd912c&scoped=true ***! \*****************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "invitees-list-item" }, [_c("AvatarParticipationStatus", { attrs: { "attendee-is-organizer": true, "avatar-link": _vm.avatarLink, "is-viewed-by-organizer": _vm.isViewedByOrganizer, "is-resource": _vm.isResource, "common-name": _vm.commonName, "organizer-display-name": _vm.commonName, "participation-status": "ACCEPTED" } }), _vm._v(" "), _c("div", { staticClass: "invitees-list-item__displayname" }, [_vm._v("\n\t\t" + _vm._s(_vm.commonName) + "\n\t")]), _vm._v(" "), _c("div", { staticClass: "invitees-list-item__organizer-hint" }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "(organizer)")) + "\n\t")])], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/NoAttendeesView.vue?vue&type=template&id=6598d62a": /*!******************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/NoAttendeesView.vue?vue&type=template&id=6598d62a ***! \******************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "editor-reminders-list-empty-message" }, [_c("div", { staticClass: "icon editor-reminders-list-empty-message__icon" }, [_vm._t("icon", function () { return [_c("AccountMultiple", { attrs: { size: 50, decorative: "" } })]; })], 2), _vm._v(" "), _c("div", { staticClass: "editor-reminders-list-empty-message__caption" }, [_vm._v("\n\t\t" + _vm._s(_vm.message) + "\n\t")])]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/OrganizerNoEmailError.vue?vue&type=template&id=af50adac": /*!************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/OrganizerNoEmailError.vue?vue&type=template&id=af50adac ***! \************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "editor-invitee-list-no-email-configured-message" }, [_c("div", { staticClass: "editor-invitee-list-no-email-configured-message__icon" }, [_vm._v("\n\t\t@\n\t")]), _vm._v(" "), _c("div", { staticClass: "editor-invitee-list-no-email-configured-message__caption", domProps: { innerHTML: _vm._s(_vm.htmlCaption) } })]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyColor.vue?vue&type=template&id=3f4f6514": /*!***************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyColor.vue?vue&type=template&id=3f4f6514 ***! \***************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "property-color", class: { "property-color--readonly": _vm.isReadOnly } }, [_c(_vm.icon, { tag: "component", staticClass: "property-color__icon", class: { "property-color__icon--hidden": !_vm.showIcon }, attrs: { size: 20, name: _vm.readableName, decorative: "" } }), _vm._v(" "), _vm.isReadOnly ? _c("div", { staticClass: "property-color__input property-color__input--readonly" }, [_c("div", { staticClass: "property-color__color-preview", style: { "background-color": _vm.selectedColor } })]) : _c("div", { staticClass: "property-color__input" }, [_c("ColorPicker", { attrs: { value: _vm.selectedColor, open: _vm.isColorPickerOpen, "advanced-fields": true }, on: { "update:open": function ($event) { _vm.isColorPickerOpen = $event; }, input: _vm.changeColor } }, [_c("NcButton", { staticClass: "property-color__color-preview", style: { "background-color": _vm.selectedColor } })], 1), _vm._v(" "), _vm.showColorRevertButton ? _c("Actions", [_c("ActionButton", { on: { click: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.deleteColor.apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Undo", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 4006107262) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Remove color")) + "\n\t\t\t")])], 1) : _vm._e()], 1)], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsPrivate.vue?vue&type=template&id=fb6819ac&scoped=true": /*!*******************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsPrivate.vue?vue&type=template&id=fb6819ac&scoped=true ***! \*******************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return !_vm.isReadOnly ? _c("div", { staticClass: "property-title-time-picker" }, [_c("div", { staticClass: "property-title-time-picker__all-day" }, [_c("NcCheckboxRadioSwitch", { attrs: { checked: _vm.isPrivate }, on: { "update:checked": _vm.toggleIsPrivate } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Privé")) + "\n\t\t")])], 1)]) : _c("div", [_vm._v("\n\t" + _vm._s(_vm.getIsPrivateLabel) + "\n")]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyReturnToSiege.vue?vue&type=template&id=48dd8213&scoped=true": /*!***********************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyReturnToSiege.vue?vue&type=template&id=48dd8213&scoped=true ***! \***********************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return !_vm.isReadOnly ? _c("div", { staticClass: "property-title-time-picker" }, [_c("div", { staticClass: "property-title-time-picker__all-day" }, [_c("NcCheckboxRadioSwitch", { attrs: { checked: _vm.returnToSiege, type: "switch" }, on: { "update:checked": _vm.toggleReturnToSiege } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.locationName ? " Retour vers H2F après " + _vm.locationName : "Retour vers H2F") + "\n\t\t")])], 1)]) : _c("div", [_vm._v("\n\t" + _vm._s(_vm.getReturnToSiegeLabel) + "\n")]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelect.vue?vue&type=template&id=04aa9fca&scoped=true": /*!****************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelect.vue?vue&type=template&id=04aa9fca&scoped=true ***! \****************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _vm.display ? _c("div", { staticClass: "property-select", class: { "property-select--readonly": _vm.isReadOnly } }, [_c(_vm.icon, { tag: "component", staticClass: "property-select__icon", class: { "property-select__icon--hidden": !_vm.showIcon }, attrs: { size: 20, name: _vm.readableName } }), _vm._v(" "), _c("div", { staticClass: "property-select__input", class: { "property-select__input--readonly": _vm.isReadOnly } }, [!_vm.isReadOnly ? _c("NcSelect", { attrs: { options: _vm.options, searchable: _vm.searchable, name: _vm.readableName, value: _vm.selectedValue, placeholder: _vm.placeholder, clearable: false, labelOutside: true, "input-id": "value", label: "label" }, on: { input: _vm.changeValue } }) : _c("div", [_vm._v(_vm._s(_vm.selectedValue.label))])], 1), _vm._v(" "), _vm.hasInfo ? _c("div", { directives: [{ name: "tooltip", rawName: "v-tooltip", value: _vm.info, expression: "info" }], staticClass: "property-select__info" }, [_c("InformationVariant", { attrs: { size: 20, decorative: "" } })], 1) : _vm._e()], 1) : _vm._e(); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAbsenceType.vue?vue&type=template&id=c8d0aea8&scoped=true": /*!***************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAbsenceType.vue?vue&type=template&id=c8d0aea8&scoped=true ***! \***************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "property-select" }, [_c("div", { staticClass: "property-select__input", class: { "property-select__input--readonly": _vm.isReadOnly } }, [!_vm.isReadOnly ? _c("NcSelect", { attrs: { options: _vm.options, searchable: true, multiple: false, taggable: false, name: _vm.readableName, value: _vm.selectedValue, placeholder: _vm.placeholder, clearable: true, labelOutside: true, "input-id": "value", label: "label" }, on: { input: _vm.changeValue } }) : _c("div", [_vm._v(_vm._s(_vm.selectedValue.label))])], 1)]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAjax.vue?vue&type=template&id=3787864a&scoped=true": /*!********************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAjax.vue?vue&type=template&id=3787864a&scoped=true ***! \********************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _vm.display ? _c("div", { staticClass: "property-select", class: { "property-select--readonly": _vm.isReadOnly } }, [_c(_vm.icon, { tag: "component", staticClass: "property-select__icon", class: { "property-select__icon--hidden": !_vm.showIcon }, attrs: { size: 20, name: _vm.readableName } }), _vm._v(" "), _c("div", { staticClass: "property-select__input", class: { "property-select__input--readonly": _vm.isReadOnly } }, [!_vm.isReadOnly ? _c("NcSelect", { attrs: { options: _vm.options, searchable: true, multiple: false, taggable: false, name: _vm.readableName, value: _vm.selectedValue, placeholder: _vm.placeholder, clearable: true, labelOutside: true, "input-id": "value", label: "label" }, on: { input: _vm.changeValue } }) : _c("div", [_vm._v(_vm._s(_vm.selectedValue.label))])], 1), _vm._v(" "), _vm.hasInfo ? _c("div", { directives: [{ name: "tooltip", rawName: "v-tooltip", value: _vm.info, expression: "info" }], staticClass: "property-select__info" }, [_c("InformationVariant", { attrs: { size: 20, decorative: "" } })], 1) : _vm._e()], 1) : _vm._e(); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAjaxMultiple.vue?vue&type=template&id=8c4487ea": /*!****************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAjaxMultiple.vue?vue&type=template&id=8c4487ea ***! \****************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _vm.display ? _c("div", { staticClass: "property-select-multiple" }, [_c(_vm.icon, { tag: "component", staticClass: "property-select-multiple__icon", class: { "property-select-multiple__icon--hidden": !_vm.showIcon }, attrs: { size: 20, name: _vm.readableName } }), _vm._v(" "), _c("div", { staticClass: "property-select-multiple__input", class: { "property-select-multiple__input--readonly": _vm.isReadOnly } }, [!_vm.isReadOnly ? _c("NcSelect", { attrs: { value: _vm.selectionData, options: _vm.options, searchable: true, placeholder: _vm.placeholder, name: _vm.readableName, multiple: true, taggable: true, labelOutside: true, "no-wrap": false, "deselect-from-dropdown": true, "create-option": label => ({ value: label, label }), "input-id": "label", label: "label" }, on: { "option:selecting": _vm.tag, "option:deselected": _vm.unselectValue }, scopedSlots: _vm._u([_vm.coloredOptions ? { key: "option", fn: function (scope) { return [_c("PropertySelectMultipleColoredOption", { attrs: { option: scope } })]; } } : null, _vm.coloredOptions ? { key: "selected-option-container", fn: function (scope) { return [_c("PropertySelectMultipleColoredOption", { attrs: { option: scope.option, closeable: true }, on: { deselect: _vm.unselectValue } })]; } } : null], null, true) }) : _c("div", { staticClass: "property-select-multiple-colored-tag-wrapper" }, _vm._l(this.selectionData, function (singleValue) { return _c("PropertySelectMultipleColoredTag", { key: singleValue.value, attrs: { option: singleValue } }); }), 1)], 1), _vm._v(" "), _vm.hasInfo ? _c("div", { directives: [{ name: "tooltip", rawName: "v-tooltip", value: _vm.info, expression: "info" }], staticClass: "property-select__info" }, [_c("InformationVariant", { attrs: { size: 20, decorative: "" } })], 1) : _vm._e()], 1) : _vm._e(); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectArticle.vue?vue&type=template&id=6cbd158b": /*!***********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectArticle.vue?vue&type=template&id=6cbd158b ***! \***********************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _vm.display ? _c("div", { staticClass: "property-select-multiple" }, [_c(_vm.icon, { tag: "component", staticClass: "property-select-multiple__icon", class: { "property-select-multiple__icon--hidden": !_vm.showIcon }, attrs: { size: 20, name: _vm.readableName } }), _vm._v(" "), _c("div", { staticClass: "property-select-multiple__input", class: { "property-select-multiple__input--readonly": _vm.isReadOnly } }, [!_vm.isReadOnly ? _c("NcSelect", { attrs: { value: _vm.selectionData, options: _vm.options, searchable: true, placeholder: _vm.placeholder, name: _vm.readableName, multiple: true, taggable: true, labelOutside: true, "no-wrap": false, "deselect-from-dropdown": true, "create-option": label => ({ value: label, label }), "input-id": "label", label: "label" }, on: { "option:selecting": _vm.tag, "option:deselected": _vm.unselectValue }, scopedSlots: _vm._u([_vm.coloredOptions ? { key: "option", fn: function (scope) { return [_c("PropertySelectMultipleColoredOption", { attrs: { option: scope } })]; } } : null, _vm.coloredOptions ? { key: "selected-option-container", fn: function (scope) { return [_c("PropertySelectMultipleColoredOption", { attrs: { option: scope.option, closeable: true }, on: { deselect: _vm.unselectValue } })]; } } : null], null, true) }) : _c("div", { staticClass: "property-select-multiple-colored-tag-wrapper" }, _vm._l(this.selectionData, function (singleValue) { return _c("PropertySelectMultipleColoredTag", { key: singleValue.value, attrs: { option: singleValue } }); }), 1)], 1), _vm._v(" "), _vm.hasInfo ? _c("div", { directives: [{ name: "tooltip", rawName: "v-tooltip", value: _vm.info, expression: "info" }], staticClass: "property-select__info" }, [_c("InformationVariant", { attrs: { size: 20, decorative: "" } })], 1) : _vm._e()], 1) : _vm._e(); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectClient.vue?vue&type=template&id=d3ad9774&scoped=true": /*!**********************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectClient.vue?vue&type=template&id=d3ad9774&scoped=true ***! \**********************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _vm.display ? _c("div", { staticClass: "property-select", class: { "property-select--readonly": _vm.isReadOnly } }, [_c(_vm.icon, { tag: "component", staticClass: "property-select__icon", class: { "property-select__icon--hidden": !_vm.showIcon }, attrs: { size: 20, name: _vm.readableName } }), _vm._v(" "), _c("div", { staticClass: "property-select__input", class: { "property-select__input--readonly": _vm.isReadOnly } }, [!_vm.isReadOnly ? _c("NcSelect", { attrs: { options: _vm.options, searchable: true, multiple: false, taggable: false, name: _vm.readableName, value: _vm.selectedValue, placeholder: _vm.placeholder, clearable: true, labelOutside: true, "input-id": "value", label: "label" }, on: { input: _vm.changeValue } }) : _c("div", [_vm._v(_vm._s(_vm.selectedValue.label))])], 1), _vm._v(" "), _vm.hasInfo ? _c("div", { directives: [{ name: "tooltip", rawName: "v-tooltip", value: _vm.info, expression: "info" }], staticClass: "property-select__info" }, [_c("InformationVariant", { attrs: { size: 20, decorative: "" } })], 1) : _vm._e()], 1) : _vm._e(); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectLieu.vue?vue&type=template&id=2cac0b28&scoped=true": /*!********************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectLieu.vue?vue&type=template&id=2cac0b28&scoped=true ***! \********************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _vm.display ? _c("div", { staticClass: "property-select", class: { "property-select--readonly": _vm.isReadOnly } }, [_c(_vm.icon, { tag: "component", staticClass: "property-select__icon", class: { "property-select__icon--hidden": !_vm.showIcon }, attrs: { size: 20, name: _vm.readableName } }), _vm._v(" "), _c("div", { staticClass: "property-select__input", class: { "property-select__input--readonly": _vm.isReadOnly } }, [!_vm.isReadOnly ? _c("NcSelect", { attrs: { options: _vm.options, searchable: true, multiple: false, taggable: false, name: _vm.readableName, value: _vm.selectedValue, placeholder: _vm.placeholder, clearable: true, labelOutside: true, "input-id": "value", label: "label" }, on: { input: _vm.changeValue } }) : _c("div", [_vm._v(_vm._s(_vm.selectedValue.label))])], 1), _vm._v(" "), _vm.hasInfo ? _c("div", { directives: [{ name: "tooltip", rawName: "v-tooltip", value: _vm.info, expression: "info" }], staticClass: "property-select__info" }, [_c("InformationVariant", { attrs: { size: 20, decorative: "" } })], 1) : _vm._e()], 1) : _vm._e(); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectMultiple.vue?vue&type=template&id=5444ef4b": /*!************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectMultiple.vue?vue&type=template&id=5444ef4b ***! \************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _vm.display ? _c("div", { staticClass: "property-select-multiple" }, [_c(_vm.icon, { tag: "component", staticClass: "property-select-multiple__icon", class: { "property-select-multiple__icon--hidden": !_vm.showIcon }, attrs: { size: 20, name: _vm.readableName } }), _vm._v(" "), _c("div", { staticClass: "property-select-multiple__input", class: { "property-select-multiple__input--readonly": _vm.isReadOnly } }, [!_vm.isReadOnly ? _c("NcSelect", { attrs: { value: _vm.selectionData, options: _vm.options, searchable: true, placeholder: _vm.placeholder, name: _vm.readableName, multiple: true, taggable: true, labelOutside: true, "no-wrap": false, "deselect-from-dropdown": true, "create-option": label => ({ value: label, label }), "input-id": "label", label: "label" }, on: { "option:selecting": _vm.tag, "option:deselected": _vm.unselectValue }, scopedSlots: _vm._u([_vm.coloredOptions ? { key: "option", fn: function (scope) { return [_c("PropertySelectMultipleColoredOption", { attrs: { option: scope } })]; } } : null, _vm.coloredOptions ? { key: "selected-option-container", fn: function (scope) { return [_c("PropertySelectMultipleColoredOption", { attrs: { option: scope.option, closeable: true }, on: { deselect: _vm.unselectValue } })]; } } : null], null, true) }) : _c("div", { staticClass: "property-select-multiple-colored-tag-wrapper" }, _vm._l(_vm.value, function (singleValue) { return _c("PropertySelectMultipleColoredTag", { key: singleValue.value, attrs: { option: singleValue } }); }), 1)], 1), _vm._v(" "), _vm.hasInfo ? _c("div", { directives: [{ name: "tooltip", rawName: "v-tooltip", value: _vm.info, expression: "info" }], staticClass: "property-select__info" }, [_c("InformationVariant", { attrs: { size: 20, decorative: "" } })], 1) : _vm._e()], 1) : _vm._e(); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectMultipleColoredOption.vue?vue&type=template&id=43bb977c": /*!*************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectMultipleColoredOption.vue?vue&type=template&id=43bb977c ***! \*************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("span", { staticClass: "property-select-multiple-colored-tag" }, [_c("div", { staticClass: "property-select-multiple-colored-tag__color-indicator", style: { "background-color": _vm.color } }), _vm._v(" "), _c("span", { staticClass: "property-select-multiple-colored-tag__label" }, [_vm._v(_vm._s(_vm.label))]), _vm._v(" "), _vm.closeable ? _c("div", { staticClass: "icon icon-close", on: { click: _vm.deselect } }) : _vm._e()]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectMultipleColoredTag.vue?vue&type=template&id=60f074a3": /*!**********************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectMultipleColoredTag.vue?vue&type=template&id=60f074a3 ***! \**********************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("span", { staticClass: "multiselect__tag", style: { "background-color": _vm.color, "border-color": _vm.borderColor, color: _vm.textColor } }, [_c("span", [_vm._v(_vm._s(_vm.label))])]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyText.vue?vue&type=template&id=6782358c": /*!**************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyText.vue?vue&type=template&id=6782358c ***! \**************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _vm.display ? _c("div", { staticClass: "property-text", class: { "property-text--readonly": _vm.isReadOnly } }, [_c(_vm.icon, { tag: "component", staticClass: "property-text__icon", class: { "property-text__icon--hidden": !_vm.showIcon }, attrs: { size: 20, name: _vm.readableName } }), _vm._v(" "), _c("div", { staticClass: "property-text__input", class: { "property-text__input--readonly": _vm.isReadOnly, "property-text__input--linkify": _vm.showLinksClickable } }, [!_vm.isReadOnly && !_vm.showLinksClickable ? _c("textarea", { directives: [{ name: "autosize", rawName: "v-autosize", value: true, expression: "true" }], attrs: { placeholder: _vm.placeholder, rows: _vm.rows, name: _vm.readableName }, domProps: { value: _vm.value }, on: { focus: function ($event) { return _vm.handleToggleTextareaFocus(true); }, blur: function ($event) { return _vm.handleToggleTextareaFocus(false); }, input: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.changeValue.apply(null, arguments); } } }) : _c("div", { directives: [{ name: "linkify", rawName: "v-linkify", value: { text: _vm.value, linkify: true }, expression: "{ text: value, linkify: true }" }], class: { "linkify-links": _vm.linkifyLinks && !_vm.isReadOnly }, style: { "min-height": _vm.linkifyMinHeight }, on: { click: _vm.handleShowTextarea } })]), _vm._v(" "), _vm.hasInfo ? _c("div", { directives: [{ name: "tooltip", rawName: "v-tooltip", value: _vm.info, expression: "info" }], staticClass: "property-select__info" }, [_c("InformationVariant", { attrs: { size: 20, decorative: "" } })], 1) : _vm._e()], 1) : _vm._e(); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyTitle.vue?vue&type=template&id=49efd589": /*!***************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyTitle.vue?vue&type=template&id=49efd589 ***! \***************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "property-title", class: { "property-title--readonly": _vm.isReadOnly } }, [_c("div", { staticClass: "property-title__input", class: { "property-title__input--readonly": _vm.isReadOnly } }, [!_vm.isReadOnly ? _c("input", { directives: [{ name: "focus", rawName: "v-focus" }], attrs: { type: "text", placeholder: _vm.t("calendar", "Nom et prénom du défunt") }, domProps: { value: _vm.value }, on: { input: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.changeValue.apply(null, arguments); } } }) : _c("div", [_vm._v(_vm._s(_vm.value))])])]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyTitleTimePicker.vue?vue&type=template&id=310f4ca4": /*!*************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyTitleTimePicker.vue?vue&type=template&id=310f4ca4 ***! \*************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "property-title-time-picker", class: { "property-title-time-picker--readonly": _vm.isReadOnly } }, [_vm.isReadOnly ? _c("CalendarIcon", { staticClass: "property-title-time-picker__icon", attrs: { size: 20 } }) : _vm._e(), _vm._v(" "), !_vm.isReadOnly ? _c("div", { staticClass: "property-title-time-picker__time-pickers" }, [_c("DatePicker", { attrs: { date: _vm.startDate, "timezone-id": _vm.startTimezone, prefix: "from", "is-all-day": _vm.isAllDay, "append-to-body": _vm.appendToBody, "user-timezone-id": _vm.userTimezone }, on: { change: _vm.changeStart, "change-timezone": _vm.changeStartTimezone } }), _vm._v(" "), _c("DatePicker", { attrs: { date: _vm.endDate, "timezone-id": _vm.endTimezone, prefix: "to", "is-all-day": _vm.isAllDay, "append-to-body": _vm.appendToBody, "user-timezone-id": _vm.userTimezone }, on: { change: _vm.changeEnd, "change-timezone": _vm.changeEndTimezone } })], 1) : _vm._e(), _vm._v(" "), _vm.isReadOnly ? _c("div", { staticClass: "property-title-time-picker__time-pickers property-title-time-picker__time-pickers--readonly" }, [_c("div", { staticClass: "property-title-time-picker-read-only-wrapper property-title-time-picker-read-only-wrapper--start-date" }, [_c("div", { staticClass: "property-title-time-picker-read-only-wrapper__label" }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.formattedStart) + "\n\t\t\t")]), _vm._v(" "), !_vm.isAllDay ? _c("IconTimezone", { class: { "highlighted-timezone-icon": _vm.highlightStartTimezone }, attrs: { name: _vm.endTimezone, size: 20 } }) : _vm._e()], 1), _vm._v(" "), !_vm.isAllDayOneDayEvent ? [_c("div", [_vm._v("-")]), _vm._v(" "), _c("div", { staticClass: "property-title-time-picker-read-only-wrapper property-title-time-picker-read-only-wrapper--end-date" }, [_c("div", { staticClass: "property-title-time-picker-read-only-wrapper__label" }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.formattedEnd) + "\n\t\t\t\t")]), _vm._v(" "), !_vm.isAllDay ? _c("IconTimezone", { class: { "highlighted-timezone-icon": _vm.highlightStartTimezone }, attrs: { title: _vm.endTimezone, size: 20 } }) : _vm._e()], 1)] : _vm._e()], 2) : _vm._e()], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/Repeat.vue?vue&type=template&id=5b60291d": /*!****************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/Repeat.vue?vue&type=template&id=5b60291d ***! \****************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "property-repeat", class: { "property-repeat--readonly": _vm.isReadOnly } }, [_c("div", { staticClass: "property-repeat__summary" }, [_c("RepeatIcon", { staticClass: "property-repeat__summary__icon", attrs: { name: _vm.$t("calendar", "Repeat"), size: 20 } }), _vm._v(" "), _c("RepeatSummary", { staticClass: "property-repeat__summary__content", attrs: { "recurrence-rule": _vm.recurrenceRule } }), _vm._v(" "), !_vm.isReadOnly ? _c("Actions", [_c("ActionButton", { on: { click: _vm.toggleOptions }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c(_vm.toggleIcon, { tag: "component", attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1434084892) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.toggleTitle) + "\n\t\t\t")])], 1) : _vm._e()], 1), _vm._v(" "), _vm.showOptions ? _c("div", { staticClass: "property-repeat__options" }, [!_vm.isRecurrenceException && !_vm.isReadOnly ? _c("RepeatFreqInterval", { attrs: { frequency: _vm.recurrenceRule.frequency, interval: _vm.recurrenceRule.interval }, on: { "change-interval": _vm.changeInterval, "change-frequency": _vm.changeFrequency } }) : _vm._e(), _vm._v(" "), _vm.isFreqWeekly && !_vm.isRecurrenceException && !_vm.isReadOnly ? _c("RepeatFreqWeeklyOptions", { attrs: { "by-day": _vm.recurrenceRule.byDay }, on: { "add-by-day": _vm.addByDay, "remove-by-day": _vm.removeByDay } }) : _vm._e(), _vm._v(" "), _vm.isFreqMonthly && !_vm.isRecurrenceException && !_vm.isReadOnly ? _c("RepeatFreqMonthlyOptions", { attrs: { "by-day": _vm.recurrenceRule.byDay, "by-month-day": _vm.recurrenceRule.byMonthDay, "by-set-position": _vm.recurrenceRule.bySetPosition }, on: { "add-by-month-day": _vm.addByMonthDay, "remove-by-month-day": _vm.removeByMonthDay, "change-by-day": _vm.setByDay, "change-by-set-position": _vm.setBySetPosition, "change-to-by-set-position": _vm.changeToBySetPositionMonthly, "change-to-by-day": _vm.changeToByDayMonthly } }) : _vm._e(), _vm._v(" "), _vm.isFreqYearly && !_vm.isRecurrenceException && !_vm.isReadOnly ? _c("RepeatFreqYearlyOptions", { attrs: { "by-day": _vm.recurrenceRule.byDay, "by-month": _vm.recurrenceRule.byMonth, "by-set-position": _vm.recurrenceRule.bySetPosition }, on: { "change-by-day": _vm.setByDay, "change-by-set-position": _vm.setBySetPosition, "add-by-month": _vm.addByMonth, "remove-by-month": _vm.removeByMonth, "enable-by-set-position": _vm.enableBySetPositionYearly, "disable-by-set-position": _vm.disableBySetPositionYearly } }) : _vm._e(), _vm._v(" "), _vm.isRepeating && !_vm.isRecurrenceException && !_vm.isReadOnly ? _c("RepeatEndRepeat", { attrs: { "calendar-object-instance": _vm.calendarObjectInstance, until: _vm.recurrenceRule.until, count: _vm.recurrenceRule.count }, on: { "set-infinite": _vm.setInfinite, "set-until": _vm.setUntil, "set-count": _vm.setCount, "change-to-count": _vm.changeToCount, "change-to-until": _vm.changeToUntil } }) : _vm._e(), _vm._v(" "), _vm.recurrenceRule.isUnsupported && !_vm.isRecurrenceException ? _c("RepeatUnsupportedWarning") : _vm._e(), _vm._v(" "), _vm.isRecurrenceException ? _c("RepeatExceptionWarning") : _vm._e()], 1) : _vm._e()]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatEndRepeat.vue?vue&type=template&id=f005ae2e": /*!*************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatEndRepeat.vue?vue&type=template&id=f005ae2e ***! \*************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "repeat-option-set repeat-option-set--end" }, [_c("span", { staticClass: "repeat-option-end__label" }, [_vm._v(_vm._s(_vm.$t("calendar", "End repeat")))]), _vm._v(" "), _c("NcSelect", { staticClass: "repeat-option-end__end-type-select", attrs: { options: _vm.options, searchable: false, name: _vm.$t("calendar", "Select to end repeat"), value: _vm.selectedOption, clearable: false, "input-id": "value", label: "label" }, on: { input: _vm.changeEndType } }), _vm._v(" "), _vm.isUntil ? _c("DatePicker", { staticClass: "repeat-option-end__until", attrs: { min: _vm.minimumDate, date: _vm.until, "is-all-day": true }, on: { change: _vm.changeUntil } }) : _vm._e(), _vm._v(" "), _vm.isCount ? _c("input", { staticClass: "repeat-option-end__count", attrs: { type: "number", min: "1", max: "3500" }, domProps: { value: _vm.count }, on: { input: _vm.changeCount } }) : _vm._e(), _vm._v(" "), _vm.isCount ? _c("span", { staticClass: "repeat-option-end__count" }, [_vm._v("\n\t\t" + _vm._s(_vm.occurrencesLabel) + "\n\t")]) : _vm._e()], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatExceptionWarning.vue?vue&type=template&id=d25fd5ec": /*!********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatExceptionWarning.vue?vue&type=template&id=d25fd5ec ***! \********************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "repeat-option-warning" }, [_c("strong", [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "This event is the recurrence-exception of a recurrence-set. You cannot add a recurrence-rule to it.")) + "\n\t")])]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFirstLastSelect.vue?vue&type=template&id=38a0b655": /*!*******************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFirstLastSelect.vue?vue&type=template&id=38a0b655 ***! \*******************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("NcSelect", { attrs: { "allow-empty": false, options: _vm.options, value: _vm.selected, disabled: _vm.disabled, placeholder: _vm.$t("calendar", "first"), clearable: false, "input-id": "value", label: "label" }, on: { input: _vm.select } }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqInterval.vue?vue&type=template&id=721d82cc": /*!****************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqInterval.vue?vue&type=template&id=721d82cc ***! \****************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "repeat-option-set repeat-option-set--interval-freq" }, [_c("span", { staticClass: "repeat-option-set__label" }, [_vm._v("\n\t\t" + _vm._s(_vm.repeatEveryLabel) + "\n\t")]), _vm._v(" "), !_vm.isIntervalDisabled ? _c("input", { staticClass: "intervalInput", attrs: { type: "number", min: "1", max: "366" }, domProps: { value: _vm.interval }, on: { input: _vm.changeInterval } }) : _vm._e(), _vm._v(" "), _c("RepeatFreqSelect", { attrs: { freq: _vm.frequency, count: _vm.interval }, on: { change: _vm.changeFrequency } })], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqMonthlyOptions.vue?vue&type=template&id=7e59c7e6": /*!**********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqMonthlyOptions.vue?vue&type=template&id=7e59c7e6 ***! \**********************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "repeat-option-set repeat-option-set--monthly" }, [_c("div", { staticClass: "repeat-option-set-section" }, [_c("ActionRadio", { staticClass: "repeat-option-set-section__title", attrs: { name: _vm.radioInputId, checked: _vm.byMonthDayEnabled }, on: { change: _vm.enableByMonthDay } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "By day of the month")) + "\n\t\t")]), _vm._v(" "), _c("div", { staticClass: "repeat-option-set-section__grid" }, _vm._l(_vm.byMonthDayOptions, function (option) { return _c("NcButton", { key: option.value, staticClass: "repeat-option-set-section-grid-item", attrs: { type: option.selected ? "primary" : "secondary", disabled: !_vm.byMonthDayEnabled }, on: { click: function ($event) { return _vm.toggleByMonthDay(option.value); } } }, [_vm._v("\n\t\t\t\t" + _vm._s(option.label) + "\n\t\t\t")]); }), 1)], 1), _vm._v(" "), _c("div", { staticClass: "repeat-option-set-section repeat-option-set-section--on-the-select" }, [_c("ActionRadio", { staticClass: "repeat-option-set-section__title", attrs: { name: _vm.radioInputId, checked: !_vm.byMonthDayEnabled }, on: { change: _vm.enableBySetPosition } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "On the")) + "\n\t\t")]), _vm._v(" "), _c("RepeatFirstLastSelect", { attrs: { "by-set-position": _vm.bySetPosition, disabled: _vm.byMonthDayEnabled }, on: { change: _vm.changeBySetPosition } }), _vm._v(" "), _c("RepeatOnTheSelect", { attrs: { "by-day": _vm.byDay, disabled: _vm.byMonthDayEnabled }, on: { change: _vm.changeByDay } })], 1)]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqSelect.vue?vue&type=template&id=2852e691": /*!**************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqSelect.vue?vue&type=template&id=2852e691 ***! \**************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("NcSelect", { attrs: { "allow-empty": false, options: _vm.options, value: _vm.selected, clearable: false, "input-id": "freq", label: "label" }, on: { input: _vm.select } }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqWeeklyOptions.vue?vue&type=template&id=332d3358": /*!*********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqWeeklyOptions.vue?vue&type=template&id=332d3358 ***! \*********************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "repeat-option-set repeat-option-set--weekly" }, [_c("span", { staticClass: "repeat-option-set-section__title" }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "on")) + "\n\t")]), _vm._v(" "), _c("div", { staticClass: "repeat-option-set-section__grid" }, _vm._l(_vm.options, function (option) { return _c("NcButton", { key: option.value, staticClass: "repeat-option-set-section-grid-item", attrs: { type: option.selected ? "primary" : "secondary" }, on: { click: function ($event) { return _vm.toggleByDay(option.value); } } }, [_vm._v("\n\t\t\t" + _vm._s(option.label) + "\n\t\t")]); }), 1)]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqYearlyOptions.vue?vue&type=template&id=cbb86ca2": /*!*********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatFreqYearlyOptions.vue?vue&type=template&id=cbb86ca2 ***! \*********************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "repeat-option-set repeat-option-set--yearly" }, [_c("div", { staticClass: "repeat-option-set-section" }, [_c("div", { staticClass: "repeat-option-set-section__grid" }, _vm._l(_vm.options, function (option) { return _c("NcButton", { key: option.value, staticClass: "repeat-option-set-section-grid-item", class: option.selected ? "primary" : "secondary", on: { click: function ($event) { return _vm.toggleByMonth(option.value); } } }, [_vm._v("\n\t\t\t\t" + _vm._s(option.label) + "\n\t\t\t")]); }), 1)]), _vm._v(" "), _c("div", { staticClass: "repeat-option-set-section repeat-option-set-section--on-the-select" }, [_c("ActionCheckbox", { staticClass: "repeat-option-set-section__title", attrs: { checked: _vm.isBySetPositionEnabled }, on: { change: _vm.toggleBySetPosition } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "On the")) + "\n\t\t")]), _vm._v(" "), _c("RepeatFirstLastSelect", { attrs: { "by-set-position": _vm.bySetPosition, disabled: !_vm.isBySetPositionEnabled }, on: { change: _vm.changeBySetPosition } }), _vm._v(" "), _c("RepeatOnTheSelect", { attrs: { "by-day": _vm.byDay, disabled: !_vm.isBySetPositionEnabled }, on: { change: _vm.changeByDay } })], 1)]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatOnTheSelect.vue?vue&type=template&id=67e244fe": /*!***************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatOnTheSelect.vue?vue&type=template&id=67e244fe ***! \***************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("NcSelect", { attrs: { "allow-empty": false, options: _vm.options, value: _vm.selected, disabled: _vm.disabled, placeholder: _vm.$t("calendar", "Monday"), clearable: false, "input-id": "value", label: "label" }, on: { input: _vm.select } }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatSummary.vue?vue&type=template&id=20fe4e0e": /*!***********************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatSummary.vue?vue&type=template&id=20fe4e0e ***! \***********************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _vm.display ? _c("span", [_vm._v("\n\t" + _vm._s(_vm._f("formatRecurrenceRule")(_vm.recurrenceRule, _vm.locale)) + "\n")]) : _c("span", [_vm._v("\n\t" + _vm._s(_vm.$t("calendar", "Does not repeat")) + "\n")]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatUnsupportedWarning.vue?vue&type=template&id=56abbbb8": /*!**********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Repeat/RepeatUnsupportedWarning.vue?vue&type=template&id=56abbbb8 ***! \**********************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "repeat-option-warning" }, [_c("strong", [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "The recurrence definition of this event is not fully supported by Nextcloud. If you edit the recurrence-options, certain recurrences may be lost.")) + "\n\t")])]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceList.vue?vue&type=template&id=33af6898": /*!*************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceList.vue?vue&type=template&id=33af6898 ***! \*************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", [!_vm.isReadOnly && _vm.hasUserEmailAddress ? _c("ResourceListSearch", { attrs: { "already-invited-emails": _vm.alreadyInvitedEmails, "calendar-object-instance": _vm.calendarObjectInstance }, on: { "add-resource": _vm.addResource } }) : _vm._e(), _vm._v(" "), _vm._l(_vm.resources, function (resource) { return _c("ResourceListItem", { key: resource.email, attrs: { resource: resource, "is-read-only": _vm.isReadOnly, "organizer-display-name": _vm.organizerDisplayName }, on: { "remove-resource": _vm.removeResource } }); }), _vm._v(" "), _vm.isListEmpty && _vm.hasUserEmailAddress ? _c("NoAttendeesView", { attrs: { message: _vm.noResourcesMessage }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("MapMarker", { attrs: { size: 50, decorative: "" } })]; }, proxy: true }], null, false, 774433815) }) : _vm._e(), _vm._v(" "), !_vm.isReadOnly && _vm.isListEmpty && !_vm.hasUserEmailAddress ? _c("OrganizerNoEmailError") : _vm._e(), _vm._v(" "), _vm.suggestedRooms.length ? _c("h3", [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "Suggestions")) + "\n\t")]) : _vm._e(), _vm._v(" "), _vm._l(_vm.suggestedRooms, function (room) { return _c("ResourceListItem", { key: room.email + "-suggested", attrs: { resource: room, "is-read-only": false, "organizer-display-name": _vm.organizerDisplayName, "is-suggestion": true }, on: { "add-suggestion": _vm.addResource } }); })], 2); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceListItem.vue?vue&type=template&id=1372f36a&scoped=true": /*!*****************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceListItem.vue?vue&type=template&id=1372f36a&scoped=true ***! \*****************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "resource-list-item" }, [_c("AvatarParticipationStatus", { attrs: { "attendee-is-organizer": false, "is-viewed-by-organizer": _vm.isViewedByOrganizer, "is-resource": true, "is-suggestion": _vm.isSuggestion, "avatar-link": _vm.commonName, "participation-status": _vm.participationStatus, "organizer-display-name": _vm.organizerDisplayName, "common-name": _vm.commonName } }), _vm._v(" "), _c("div", { staticClass: "resource-list-item__displayname" }, [_vm._v("\n\t\t" + _vm._s(_vm.commonName) + "\n\t")]), _vm._v(" "), _c("div", { staticClass: "resource-list-item__actions" }, [_vm.isViewedByOrganizer && _vm.isSuggestion ? _c("Actions", [_c("ActionButton", { on: { click: _vm.addSuggestion }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Plus", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 4194568628) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Add resource")) + "\n\t\t\t")])], 1) : _vm.isViewedByOrganizer ? _c("Actions", [_vm.seatingCapacity ? _c("ActionCaption", { attrs: { name: _vm.seatingCapacity } }) : _vm._e(), _vm._v(" "), _vm.roomType ? _c("ActionCaption", { attrs: { name: _vm.roomType } }) : _vm._e(), _vm._v(" "), _vm.hasProjector ? _c("ActionCaption", { attrs: { name: _vm.$t("calendar", "Has a projector") } }) : _vm._e(), _vm._v(" "), _vm.hasWhiteboard ? _c("ActionCaption", { attrs: { name: _vm.$t("calendar", "Has a whiteboard") } }) : _vm._e(), _vm._v(" "), _vm.isAccessible ? _c("ActionCaption", { attrs: { name: _vm.$t("calendar", "Wheelchair accessible") } }) : _vm._e(), _vm._v(" "), _vm.seatingCapacity || _vm.roomType || _vm.hasProjector || _vm.hasWhiteboard || _vm.isAccessible ? _c("ActionSeparator") : _vm._e(), _vm._v(" "), _c("ActionButton", { on: { click: _vm.removeResource }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Delete", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("calendar", "Remove resource")) + "\n\t\t\t")])], 1) : _vm._e()], 1)], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceListSearch.vue?vue&type=template&id=1c201660&scoped=true": /*!*******************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceListSearch.vue?vue&type=template&id=1c201660&scoped=true ***! \*******************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "resource-search" }, [_c("NcSelect", { staticClass: "resource-search__multiselect", class: { showContent: _vm.inputGiven, "icon-loading": _vm.isLoading }, attrs: { options: _vm.matches, searchable: true, "max-height": 600, placeholder: _vm.placeholder, "input-id": "email", label: "displayName", clearable: false }, on: { search: _vm.findResources, input: _vm.addResource }, scopedSlots: _vm._u([{ key: "option", fn: function (option) { return [_c("div", { staticClass: "resource-search-list-item" }, [_c("Avatar", { attrs: { "disable-tooltip": true, "display-name": option.displayName } }), _vm._v(" "), _c("div", { staticClass: "resource-search-list-item__label resource-search-list-item__label--single-email" }, [_c("div", [_vm._v("\n\t\t\t\t\t\t" + _vm._s(option.displayName) + "\n\t\t\t\t\t\t"), !_vm.isAvailable ? _c("span", { staticClass: "resource-search-list-item__label__availability" }, [_vm._v("\n\t\t\t\t\t\t\t(" + _vm._s(_vm.formatAvailability(option.isAvailable)) + ")\n\t\t\t\t\t\t")]) : _vm._e()]), _vm._v(" "), _c("div", { attrs: { name: option.subLine } }, [_vm._v("\n\t\t\t\t\t\t" + _vm._s(option.subLine) + "\n\t\t\t\t\t")])])], 1)]; } }]) }), _vm._v(" "), [_c("div", { staticClass: "resource-search__capacity" }, [_c("ResourceSeatingCapacity", { attrs: { value: _vm.capacity }, on: { "update:value": function ($event) { _vm.capacity = $event; } } }), _vm._v(" "), _c("Actions", { staticClass: "resource-search__capacity__actions" }, [_c("ActionCheckbox", { attrs: { checked: _vm.isAvailable }, on: { "update:checked": function ($event) { _vm.isAvailable = $event; } } }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Available")) + "\n\t\t\t\t")]), _vm._v(" "), _c("ActionCheckbox", { attrs: { checked: _vm.hasProjector }, on: { "update:checked": function ($event) { _vm.hasProjector = $event; } } }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Projector")) + "\n\t\t\t\t")]), _vm._v(" "), _c("ActionCheckbox", { attrs: { checked: _vm.hasWhiteboard }, on: { "update:checked": function ($event) { _vm.hasWhiteboard = $event; } } }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Whiteboard")) + "\n\t\t\t\t")]), _vm._v(" "), _c("ActionCheckbox", { attrs: { checked: _vm.isAccessible }, on: { "update:checked": function ($event) { _vm.isAccessible = $event; } } }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Wheelchair accessible")) + "\n\t\t\t\t")])], 1)], 1), _vm._v(" "), _c("ResourceRoomType", { attrs: { value: _vm.roomType }, on: { "update:value": function ($event) { _vm.roomType = $event; } } })]], 2); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceRoomType.vue?vue&type=template&id=5448722f&scoped=true": /*!*****************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceRoomType.vue?vue&type=template&id=5448722f&scoped=true ***! \*****************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "resource-room-type" }, [_c("div", { staticClass: "resource-room-type__input" }, [_c("NcSelect", { attrs: { value: _vm.getOption(_vm.value), options: _vm.options, placeholder: _vm.placeholder, clearable: false, "input-id": "value", label: "label" }, on: { "option:selected": _vm.changeValue }, scopedSlots: _vm._u([{ key: "option", fn: function (option) { return [_c("div", [_vm._v(_vm._s(option.label !== null ? option.label : ""))])]; } }]) })], 1)]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceSeatingCapacity.vue?vue&type=template&id=50d6150d": /*!************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceSeatingCapacity.vue?vue&type=template&id=50d6150d ***! \************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "resource-capacity" }, [_c("div", { staticClass: "resource-capacity__input" }, [_c("input", { attrs: { type: "number", min: "0", placeholder: _vm.placeholder }, domProps: { value: _vm.value }, on: { input: function ($event) { $event.preventDefault(); $event.stopPropagation(); return _vm.changeValue.apply(null, arguments); } } })])]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/SaveButtons.vue?vue&type=template&id=8f0b8a9c&scoped=true": /*!**************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/SaveButtons.vue?vue&type=template&id=8f0b8a9c&scoped=true ***! \**************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "save-buttons", class: { "save-buttons--grow": _vm.growHorizontally } }, [_vm.showMoreButton ? _c("NcButton", { attrs: { type: _vm.moreButtonType, disabled: _vm.disabled }, on: { click: _vm.showMore } }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "More details")) + "\n\t")]) : _vm._e(), _vm._v(" "), _vm.showSaveButton ? _c("NcButton", { attrs: { type: "primary", disabled: _vm.disabled }, on: { click: _vm.saveThisOnly }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CheckIcon", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 2630571749) }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "Save")) + "\n\t")]) : _vm._e(), _vm._v(" "), _vm.showUpdateButton ? _c("NcButton", { attrs: { type: "primary", disabled: _vm.disabled }, on: { click: _vm.saveThisOnly }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CheckIcon", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 2630571749) }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "Update")) + "\n\t")]) : _vm._e(), _vm._v(" "), _vm.showUpdateThisAndFutureButton ? _c("NcButton", { attrs: { type: _vm.forceThisAndAllFuture ? "primary" : "secondary", disabled: _vm.disabled }, on: { click: _vm.saveThisAndAllFuture } }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "Update this and all future")) + "\n\t")]) : _vm._e(), _vm._v(" "), _vm.showUpdateOnlyThisButton ? _c("NcButton", { attrs: { type: "primary", disabled: _vm.disabled }, on: { click: _vm.saveThisOnly } }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("calendar", "Update this occurrence")) + "\n\t")]) : _vm._e(), _vm._v(" "), _vm._t("default")], 2); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/EmptyCalendar.vue?vue&type=template&id=50c703aa": /*!*********************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/EmptyCalendar.vue?vue&type=template&id=50c703aa ***! \*********************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("EmptyContent", { attrs: { name: _vm.$t("calendar", "Public calendar does not exist"), description: _vm.$t("calendar", "Maybe the share was deleted or has expired?") }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CalendarBlank", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }]) }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Icons/IconCircles.vue?vue&type=template&id=e0346656&functional=true": /*!*****************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Icons/IconCircles.vue?vue&type=template&id=e0346656&functional=true ***! \*****************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render(_c, _vm) { return _c("span", _vm._g(_vm._b({ staticClass: "material-design-icon icon-circle", class: [_vm.data.class, _vm.data.staticClass], attrs: { "aria-hidden": !_vm.props.title, "aria-label": _vm.props.title, role: "img" } }, "span", _vm.data.attrs, false), _vm.listeners), [_c("svg", { staticClass: "material-design-icon__svg", attrs: { fill: _vm.props.fillColor, width: _vm.props.size, height: _vm.props.size, viewBox: "0 0 21.33 21.33" } }, [_c("path", { attrs: { d: "M0 0h24v24H0V0z", fill: "none" } }), _vm._v(" "), _c("path", { attrs: { d: "M10.67 1.33a9.34 9.34 0 100 18.68 9.34 9.34 0 000-18.68zM6.93 15.8a2.33 2.33 0 110-4.67 2.33 2.33 0 010 4.67zm1.4-8.87a2.33 2.33 0 114.67 0 2.33 2.33 0 01-4.67 0zm6.07 8.87a2.33 2.33 0 110-4.67 2.33 2.33 0 010 4.67z" } })])]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Popover/PopoverLoadingIndicator.vue?vue&type=template&id=9bd90324": /*!***************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Popover/PopoverLoadingIndicator.vue?vue&type=template&id=9bd90324 ***! \***************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _vm._m(0); }; var staticRenderFns = [function () { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "popover-loading-indicator" }, [_c("div", { staticClass: "icon icon-loading popover-loading-indicator__icon" })]); }]; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/CalendarPicker.vue?vue&type=template&id=271fa576&scoped=true": /*!*****************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/CalendarPicker.vue?vue&type=template&id=271fa576&scoped=true ***! \*****************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("NcSelect", { attrs: { label: "id", "input-id": _vm.inputId, disabled: _vm.isDisabled, options: _vm.options, value: _vm.valueIds, multiple: _vm.multiple, clearable: _vm.clearable, "filter-by": _vm.selectFilterBy }, on: { "option:selected": _vm.change, "option:deselected": _vm.remove }, scopedSlots: _vm._u([{ key: "option", fn: function (_ref) { let { id } = _ref; return [_c("CalendarPickerOption", { attrs: { color: _vm.getCalendarById(id).color, "display-name": _vm.getCalendarById(id).displayName, "is-shared-with-me": _vm.getCalendarById(id).isSharedWithMe, owner: _vm.getCalendarById(id).owner } })]; } }, { key: "selected-option", fn: function (_ref2) { let { id } = _ref2; return [_c("CalendarPickerOption", { attrs: { color: _vm.getCalendarById(id).color, "display-name": _vm.getCalendarById(id).displayName, "is-shared-with-me": _vm.getCalendarById(id).isSharedWithMe, owner: _vm.getCalendarById(id).owner } })]; } }]) }); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/CalendarPickerOption.vue?vue&type=template&id=0d52a90b": /*!***********************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/CalendarPickerOption.vue?vue&type=template&id=0d52a90b ***! \***********************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("div", { staticClass: "calendar-picker-option" }, [_c("div", { staticClass: "calendar-picker-option__color-indicator", style: { backgroundColor: _vm.color } }), _vm._v(" "), _c("span", { staticClass: "calendar-picker-option__label" }, [_vm._v("\n\t\t" + _vm._s(_vm.displayName) + "\n\t")]), _vm._v(" "), _vm.isSharedWithMe ? _c("Avatar", { staticClass: "calendar-picker-option__avatar", attrs: { "disable-menu": true, "disable-tooltip": true, user: _vm.userId, "display-name": _vm.userDisplayName, size: 18 } }) : _vm._e()], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/DatePicker.vue?vue&type=template&id=4ccb5234&scoped=true": /*!*************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/DatePicker.vue?vue&type=template&id=4ccb5234&scoped=true ***! \*************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("DateTimePicker", _vm._g(_vm._b({ attrs: { lang: _vm.lang, "first-day-of-week": _vm.firstDay, format: "YYYY-MM-DD HH:mm", formatter: _vm.formatter, value: _vm.date, type: _vm.actualType, ":clearable": false, "minute-step": 5, "disabled-date": _vm.disabledDate, "show-second": false, "show-time-panel": _vm.showTimePanel, "show-week-number": _vm.showWeekNumbers, use12h: _vm.showAmPm, "append-to-body": _vm.appendToBody, confirm: "" }, on: { close: _vm.close, change: _vm.change, pick: _vm.pickDate }, scopedSlots: _vm._u([{ key: "icon-calendar", fn: function () { return [_c("NcButton", { attrs: { type: "tertiary-no-background" }, on: { click: function ($event) { $event.stopPropagation(); $event.preventDefault(); return _vm.toggleTimezonePopover.apply(null, arguments); }, mousedown: function ($event) { $event.stopPropagation(); $event.preventDefault(); return (() => {}).apply(null, arguments); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_vm.isAllDay ? _c("IconNewCalendar", { attrs: { size: 20 } }) : _c("IconTimezone", { class: { "highlighted-timezone-icon": _vm.highlightTimezone }, attrs: { size: 20 } })]; }, proxy: true }]) }), _vm._v(" "), _c("Popover", { attrs: { shown: _vm.showTimezonePopover, "open-class": "timezone-popover-wrapper" }, on: { "update:shown": function ($event) { _vm.showTimezonePopover = $event; } } }, [[_c("div", { staticClass: "timezone-popover-wrapper__title" }, [_c("strong", [_vm._v("\n\t\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Please select a time zone:")) + "\n\t\t\t\t\t")])]), _vm._v(" "), _c("TimezonePicker", { staticClass: "timezone-popover-wrapper__timezone-select", attrs: { value: _vm.timezoneId }, on: { input: _vm.changeTimezone } })]], 2)]; }, proxy: true }, !_vm.isAllDay ? { key: "footer", fn: function () { return [!_vm.showTimePanel ? _c("NcButton", { staticClass: "mx-btn mx-btn-text", on: { click: _vm.toggleTimePanel } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Pick a time")) + "\n\t\t")]) : _c("NcButton", { staticClass: "mx-btn mx-btn-text", on: { click: _vm.toggleTimePanel } }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Pick a date")) + "\n\t\t")])]; }, proxy: true } : null], null, true) }, "DateTimePicker", _vm.$attrs, false), _vm.$listeners)); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/TimePicker.vue?vue&type=template&id=35b39f45": /*!*************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/TimePicker.vue?vue&type=template&id=35b39f45 ***! \*************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("DateTimePicker", _vm._g(_vm._b({ attrs: { ":clearable": false, "first-day-of-week": _vm.firstDay, format: _vm.format, lang: _vm.lang, "minute-step": 5, "show-second": false, type: "time", use12h: _vm.showAmPm, value: _vm.date }, on: { change: _vm.change } }, "DateTimePicker", _vm.$attrs, false), _vm.$listeners)); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Calendar.vue?vue&type=template&id=1eedbe78": /*!***********************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Calendar.vue?vue&type=template&id=1eedbe78 ***! \***********************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _vm.isWidget ? _c("div", { staticClass: "calendar-Widget calendar-Widget-Custom" }, [!_vm.showEmptyCalendarScreen ? _c("EmbedTopNavigation", { attrs: { "is-widget": true, "can-access-previous-event": _vm.canAccessPreviousEvent } }) : _vm._e(), _vm._v(" "), !_vm.showEmptyCalendarScreen ? _c("CalendarGrid", { ref: "calendarGridWidget", attrs: { "is-widget": _vm.isWidget, "can-access-previous-event": _vm.canAccessPreviousEvent, "is-authenticated-user": _vm.isAuthenticatedUser } }) : _c("EmptyCalendar"), _vm._v(" "), _vm.showWidgetEventDetails ? _c("EditSimple", { attrs: { "is-widget": true, locations: _vm.locations } }) : _vm._e(), _vm._v(" "), _vm.showWidgetEventDetails ? _c("EditSimple", { attrs: { "is-widget": true, clients: _vm.clients } }) : _vm._e(), _vm._v(" "), _vm.showWidgetEventDetails ? _c("EditSimple", { attrs: { "is-widget": true, embalmers: _vm.embalmers } }) : _vm._e()], 1) : _c("NcContent", { class: _vm.classNames, attrs: { "app-name": "calendar calendar-custom" } }, [!_vm.isWidget && !_vm.isEmbedded && !_vm.showEmptyCalendarScreen ? _c("AppNavigation", { scopedSlots: _vm._u([{ key: "list", fn: function () { return [_c("AppNavigationSpacer"), _vm._v(" "), _c("CalendarList", { attrs: { "is-public": !_vm.isAuthenticatedUser, "loading-calendars": _vm.loadingCalendars } }), _vm._v(" "), !_vm.loadingCalendars && _vm.isAuthenticatedUser ? _c("CalendarListNew", { attrs: { disabled: _vm.loadingCalendars } }) : _vm._e(), _vm._v(" "), _c("EditCalendarModal"), _vm._v(" "), !_vm.disableAppointments && _vm.isAuthenticatedUser ? [_c("AppNavigationSpacer"), _vm._v(" "), _c("AppointmentConfigList")] : _vm._e(), _vm._v(" "), _vm.hasTrashBin ? _c("Trashbin") : _vm._e()]; }, proxy: true }, { key: "footer", fn: function () { return [_vm.isAuthenticatedUser ? _c("Settings", { attrs: { "loading-calendars": _vm.loadingCalendars } }) : _vm._e()]; }, proxy: true }], null, false, 2841196060) }, [_c("AppNavigationHeader", { attrs: { "is-public": !_vm.isAuthenticatedUser, "can-access-previous-event": _vm.canAccessPreviousEvent } })], 1) : _vm._e(), _vm._v(" "), _vm.isEmbedded ? _c("EmbedTopNavigation", { attrs: { "is-admin": false } }) : _vm._e(), _vm._v(" "), _c("AppContent", [!_vm.showEmptyCalendarScreen ? _c("CalendarGrid", { attrs: { "can-access-previous-event": _vm.canAccessPreviousEvent, "is-authenticated-user": _vm.isAuthenticatedUser } }) : _c("EmptyCalendar")], 1), _vm._v(" "), _c("router-view")], 1); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/EditSidebar.vue?vue&type=template&id=581304a8&scoped=true": /*!**************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/EditSidebar.vue?vue&type=template&id=581304a8&scoped=true ***! \**************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("NcAppSidebar", { attrs: { empty: _vm.isLoading || _vm.isError, "force-menu": true, name: "Edit sidebar" }, on: { close: _vm.cancel }, scopedSlots: _vm._u([!_vm.isLoading && !_vm.isError && !_vm.isNew ? { key: "secondary-actions", fn: function () { return [!_vm.hideEventExport && _vm.hasDownloadURL ? _c("NcActionLink", { attrs: { href: _vm.downloadURL }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Download", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 489076122) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Export")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), !_vm.canCreateRecurrenceException && !_vm.isReadOnly ? _c("NcActionButton", { on: { click: function ($event) { return _vm.duplicateEvent(); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("ContentDuplicate", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 386775024) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Duplicate")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.canDelete && !_vm.canCreateRecurrenceException ? _c("NcActionButton", { on: { click: function ($event) { return _vm.deleteAndLeave(false); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Delete", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1625950007) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Delete")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.canDelete && _vm.canCreateRecurrenceException ? _c("NcActionButton", { on: { click: function ($event) { return _vm.deleteAndLeave(false); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Delete", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1625950007) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Delete this occurrence")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.canDelete && _vm.canCreateRecurrenceException ? _c("NcActionButton", { on: { click: function ($event) { return _vm.deleteAndLeave(true); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Delete", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1625950007) }, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Delete this and all future")) + "\n\t\t")]) : _vm._e()]; }, proxy: true } : null, !_vm.isLoading && !_vm.isError ? { key: "description", fn: function () { return [_c("CalendarPickerHeader", { attrs: { value: _vm.selectedCalendar, calendars: _vm.calendars, "is-read-only": _vm.isReadOnly || !_vm.canModifyCalendar }, on: { "update:value": _vm.changeCalendar } }), _vm._v(" "), _c("PropertyTitle", { attrs: { value: _vm.title, "is-read-only": _vm.isReadOnly }, on: { "update:value": _vm.updateTitle } }), _vm._v(" "), _c("PropertyTitleTimePicker", { attrs: { "start-date": _vm.startDate, "start-timezone": _vm.startTimezone, "end-date": _vm.endDate, "end-timezone": _vm.endTimezone, "is-all-day": _vm.isAllDay, "is-read-only": _vm.isReadOnly, "can-modify-all-day": _vm.canModifyAllDay, "user-timezone": _vm.currentUserTimezone, "append-to-body": true }, on: { "update-start-date": _vm.updateStartDate, "update-start-timezone": _vm.updateStartTimezone, "update-end-date": _vm.updateEndDate, "update-end-timezone": _vm.updateEndTimezone, "toggle-all-day": _vm.toggleAllDay } }), _vm._v(" "), _c("div", { staticStyle: { "margin-top": "13px", display: "flex", "margin-left": "8px" } }, [_c("div", { staticStyle: { width: "70%" } }, [_c("PropertySelectAbsenceType", { attrs: { value: _vm.absenceType, "is-read-only": _vm.isReadOnly, "prop-model": _vm.rfcProps.absenceType, noWrap: true }, on: { "update:value": _vm.updateAbsenceType } })], 1), _vm._v(" "), _c("div", { staticStyle: { width: "30%", "margin-top": "-11px" } }, [_c("PropertyIsPrivate", { attrs: { "is-read-only": _vm.isReadOnly, "is-private": _vm.isPrivate }, on: { "toggle-is-private": _vm.toggleIsPrivate } })], 1)]), _vm._v(" "), _c("PropertySelectClient", { staticClass: "property-location", attrs: { url: "/apps/gestion/ajaxGetClientsName", "is-read-only": _vm.isReadOnly, "prop-model": _vm.rfcProps.clients, value: _vm.client, "linkify-links": true }, on: { "update:value": _vm.updateClient } }), _vm._v(" "), _c("PropertySelectLieu", { staticClass: "property-location", attrs: { url: "/apps/gestion/ajaxGetLieux", "is-read-only": _vm.isReadOnly, "prop-model": _vm.rfcProps.locations, value: _vm.location, "linkify-links": true }, on: { "update:value": _vm.updateLocation } }), _vm._v(" "), _c("div", { staticStyle: { display: "flex", "margin-right": "42%", "margin-bottom": "10px" } }, [_c("PropertyReturnToSiege", { attrs: { "is-read-only": _vm.isReadOnly, "return-to-siege": _vm.returnToSiege, "location-name": _vm.locationNameSeleted }, on: { "toggle-return-to-siege": _vm.toggleReturnToSiege } })], 1), _vm._v(" "), _c("PropertySelectArticle", { staticClass: "property-description", attrs: { url: "/apps/gestion/ajaxGetProduits", "is-read-only": _vm.isReadOnly, "prop-model": _vm.rfcProps.articles, value: _vm.description, "linkify-links": true }, on: { "add-single-value": _vm.addArticle, "remove-single-value": _vm.removeArticle } }), _vm._v(" "), _c("PropertyText", { attrs: { "is-read-only": _vm.isReadOnly, "prop-model": _vm.rfcProps.comment, value: _vm.comment, "linkify-links": false }, on: { "update:value": _vm.updateComment } }), _vm._v(" "), _vm.isViewedByAttendee ? _c("InvitationResponseButtons", { attrs: { attendee: _vm.userAsAttendee, "calendar-id": _vm.calendarId, narrow: true, "grow-horizontally": true }, on: { close: _vm.closeEditorAndSkipAction } }) : _vm._e()]; }, proxy: true } : null], null, true) }, [_vm.isLoading ? [_c("div", { staticClass: "app-sidebar__loading-indicator" }, [_c("div", { staticClass: "icon icon-loading app-sidebar-tab-loading-indicator__icon" })])] : _vm.isError ? [_c("NcEmptyContent", { attrs: { name: _vm.$t("calendar", "Event does not exist"), description: _vm.error }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CalendarBlank", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }]) })] : _vm._e(), _vm._v(" "), _vm._v(" "), _vm._v(" "), !_vm.isLoading && !_vm.isError ? _c("NcAppSidebarTab", { staticClass: "app-sidebar-tab", attrs: { id: "app-sidebar-tab-details", name: _vm.$t("calendar", "Details"), order: 0 }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("InformationOutline", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 2983628322) }, [_vm._v(" "), _c("div", { staticClass: "app-sidebar-tab__content" }, [_c("PropertySelect", { attrs: { "is-read-only": _vm.isReadOnly, "prop-model": _vm.rfcProps.status, value: _vm.status }, on: { "update:value": _vm.updateStatus } }), _vm._v(" "), _c("PropertySelect", { attrs: { "is-read-only": _vm.isReadOnly, "prop-model": _vm.rfcProps.accessClass, value: _vm.accessClass }, on: { "update:value": _vm.updateAccessClass } }), _vm._v(" "), _c("PropertySelect", { attrs: { "is-read-only": _vm.isReadOnly, "prop-model": _vm.rfcProps.timeTransparency, value: _vm.timeTransparency }, on: { "update:value": _vm.updateTimeTransparency } }), _vm._v(" "), _c("PropertySelectMultiple", { attrs: { "colored-options": true, "is-read-only": _vm.isReadOnly, "prop-model": _vm.rfcProps.categories, value: _vm.categories }, on: { "add-single-value": _vm.addCategory, "remove-single-value": _vm.removeCategory } }), _vm._v(" "), _c("PropertyColor", { attrs: { "calendar-color": _vm.selectedCalendarColor, "is-read-only": _vm.isReadOnly, "prop-model": _vm.rfcProps.color, value: _vm.color }, on: { "update:value": _vm.updateColor } }), _vm._v(" "), _c("AlarmList", { attrs: { "calendar-object-instance": _vm.calendarObjectInstance, "is-read-only": _vm.isReadOnly } }), _vm._v(" "), _c("Repeat", { attrs: { "calendar-object-instance": _vm.calendarObjectInstance, "recurrence-rule": _vm.calendarObjectInstance.recurrenceRule, "is-read-only": _vm.isReadOnly, "is-editing-master-item": _vm.isEditingMasterItem, "is-recurrence-exception": _vm.isRecurrenceException }, on: { "force-this-and-all-future": _vm.forceModifyingFuture } }), _vm._v(" "), !_vm.isLoading ? _c("AttachmentsList", { attrs: { "calendar-object-instance": _vm.calendarObjectInstance, "is-read-only": _vm.isReadOnly } }) : _vm._e(), _vm._v(" "), _vm.showModal && !_vm.checkIsPrivate() ? _c("NcModal", { attrs: { name: _vm.t("calendar", "Managing shared access") }, on: { close: _vm.closeAttachmentsModal } }, [_c("div", { staticClass: "modal-content" }, [_vm.showPreloader ? _c("div", { staticClass: "modal-content-preloader" }, [_c("div", { style: "width:".concat(_vm.sharedProgress, "%") })]) : _vm._e(), _vm._v(" "), _c("div", { staticClass: "modal-h" }, [_vm._v("\n\t\t\t\t\t\t" + _vm._s(_vm.n("calendar", "User requires access to your file", "Users require access to your file", _vm.showModalUsers.length)) + "\n\t\t\t\t\t")]), _vm._v(" "), _c("div", { staticClass: "users" }, _vm._l(_vm.showModalUsers, function (attendee) { return _c("NcListItemIcon", { key: attendee.uri, staticClass: "user-list-item", attrs: { name: attendee.commonName, subtitle: _vm.emailWithoutMailto(attendee.uri), "is-no-user": true } }); }), 1), _vm._v(" "), _c("div", { staticClass: "modal-subtitle" }, [_vm._v("\n\t\t\t\t\t\t" + _vm._s(_vm.n("calendar", "Attachment requires shared access", "Attachments requiring shared access", _vm.showModalNewAttachments.length)) + "\n\t\t\t\t\t")]), _vm._v(" "), _c("div", { staticClass: "attachments" }, _vm._l(_vm.showModalNewAttachments, function (attachment) { return _c("NcListItemIcon", { key: attachment.xNcFileId, staticClass: "attachment-list-item", attrs: { name: _vm.getBaseName(attachment.fileName), url: _vm.getPreview(attachment), "force-display-actions": false } }); }), 1), _vm._v(" "), _c("div", { staticClass: "modal-footer" }, [_c("div", { staticClass: "modal-footer-checkbox" }, [!_vm.checkIsPrivate() ? _c("NcCheckboxRadioSwitch", { attrs: { checked: _vm.doNotShare }, on: { "update:checked": function ($event) { _vm.doNotShare = $event; } } }, [_vm._v("\n\t\t\t\t\t\t\t\t" + _vm._s(_vm.t("calendar", "Deny access")) + "\n\t\t\t\t\t\t\t")]) : _vm._e()], 1), _vm._v(" "), _c("div", { staticClass: "modal-footer-buttons" }, [_c("NcButton", { on: { click: _vm.closeAttachmentsModal } }, [_vm._v("\n\t\t\t\t\t\t\t\t" + _vm._s(_vm.t("calendar", "Cancel")) + "\n\t\t\t\t\t\t\t")]), _vm._v(" "), _c("NcButton", { attrs: { type: "primary", disabled: _vm.showPreloader }, on: { click: function ($event) { return _vm.acceptAttachmentsModal(_vm.thisAndAllFuture); } } }, [_vm._v("\n\t\t\t\t\t\t\t\t" + _vm._s(_vm.t("calendar", "Invite")) + "\n\t\t\t\t\t\t\t")])], 1)])])]) : _vm._e()], 1), _vm._v(" "), _vm.showSaveButtons ? _c("SaveButtons", { staticClass: "app-sidebar-tab__buttons", attrs: { "can-create-recurrence-exception": _vm.canCreateRecurrenceException, "is-new": _vm.isNew, isReadOnly: false, "force-this-and-all-future": _vm.forceThisAndAllFuture }, on: { "save-this-only": function ($event) { return _vm.prepareAccessForAttachments(false); }, "save-this-and-all-future": function ($event) { return _vm.prepareAccessForAttachments(true); } } }) : _vm._e()], 1) : _vm._e(), _vm._v(" "), !_vm.isLoading && !_vm.isError ? _c("NcAppSidebarTab", { staticClass: "app-sidebar-tab", attrs: { id: "app-sidebar-tab-attendees", name: _vm.$t("calendar", "Attendees"), order: 1 }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("AccountMultiple", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 3695810495) }, [_vm._v(" "), _c("div", { staticClass: "app-sidebar-tab__content" }, [!_vm.isLoading ? _c("InviteesList", { attrs: { "calendar-object-instance": _vm.calendarObjectInstance, "is-read-only": _vm.isReadOnly, "is-shared-with-me": _vm.isSharedWithMe, "show-header": false }, on: { "update-dates": _vm.updateDates } }) : _vm._e()], 1), _vm._v(" "), _vm.showSaveButtons ? _c("SaveButtons", { staticClass: "app-sidebar-tab__buttons", attrs: { "can-create-recurrence-exception": _vm.canCreateRecurrenceException, "is-new": _vm.isNew, isReadOnly: false, "force-this-and-all-future": _vm.forceThisAndAllFuture }, on: { "save-this-only": function ($event) { return _vm.prepareAccessForAttachments(false); }, "save-this-and-all-future": function ($event) { return _vm.prepareAccessForAttachments(true); } } }) : _vm._e()], 1) : _vm._e(), _vm._v(" "), !_vm.isLoading && !_vm.isError && _vm.showResources ? _c("NcAppSidebarTab", { staticClass: "app-sidebar-tab", attrs: { id: "app-sidebar-tab-resources", name: _vm.$t("calendar", "Resources"), order: 3 }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("MapMarker", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 546545488) }, [_vm._v(" "), _c("div", { staticClass: "app-sidebar-tab__content" }, [!_vm.isLoading ? _c("ResourceList", { attrs: { "calendar-object-instance": _vm.calendarObjectInstance, "is-read-only": _vm.isReadOnly } }) : _vm._e()], 1), _vm._v(" "), _vm.showSaveButtons ? _c("SaveButtons", { staticClass: "app-sidebar-tab__buttons", attrs: { "can-create-recurrence-exception": _vm.canCreateRecurrenceException, "is-new": _vm.isNew, isReadOnly: false, "force-this-and-all-future": _vm.forceThisAndAllFuture }, on: { "save-this-only": function ($event) { return _vm.prepareAccessForAttachments(false); }, "save-this-and-all-future": function ($event) { return _vm.prepareAccessForAttachments(true); } } }) : _vm._e()], 1) : _vm._e()], 2); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/EditSimple.vue?vue&type=template&id=4b240016": /*!*************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/EditSimple.vue?vue&type=template&id=4b240016 ***! \*************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ render: () => (/* binding */ render), /* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns) /* harmony export */ }); var render = function render() { var _vm = this, _c = _vm._self._c; return _c("Popover", { ref: "popover", attrs: { shown: _vm.showPopover, "auto-hide": false, placement: _vm.placement, boundary: _vm.boundaryElement, "popover-base-class": "event-popover", triggers: [] } }, [_c("div", { staticClass: "event-popover__inner" }, [_vm.isLoading && !_vm.isSaving ? [_c("PopoverLoadingIndicator")] : _vm.isError ? [_c("div", { staticClass: "event-popover__top-right-actions" }, [_c("Actions", [_c("ActionButton", { on: { click: _vm.cancel }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Close", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Close")) + "\n\t\t\t\t\t")])], 1)], 1), _vm._v(" "), _c("EmptyContent", { attrs: { name: _vm.$t("calendar", "Event does not exist"), description: _vm.error }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("CalendarBlank", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }]) })] : [_c("div", { staticClass: "event-popover__top-right-actions" }, [!_vm.isLoading && !_vm.isError && !_vm.isNew ? _c("Actions", { attrs: { "force-menu": true } }, [!_vm.hideEventExport && _vm.hasDownloadURL ? _c("ActionLink", { attrs: { href: _vm.downloadURL }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Download", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 489076122) }, [_vm._v("\n\t\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Export")) + "\n\t\t\t\t\t")]) : _vm._e(), _vm._v(" "), !_vm.canCreateRecurrenceException && !_vm.isReadOnly ? _c("ActionButton", { on: { click: function ($event) { return _vm.duplicateEvent(); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("ContentDuplicate", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 386775024) }, [_vm._v("\n\t\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Duplicate")) + "\n\t\t\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.canDelete && !_vm.canCreateRecurrenceException ? _c("ActionButton", { on: { click: function ($event) { return _vm.deleteAndLeave(false); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Delete", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1625950007) }, [_vm._v("\n\t\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Delete")) + "\n\t\t\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.canDelete && _vm.canCreateRecurrenceException ? _c("ActionButton", { on: { click: function ($event) { return _vm.deleteAndLeave(false); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Delete", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1625950007) }, [_vm._v("\n\t\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Delete this occurrence")) + "\n\t\t\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.canDelete && _vm.canCreateRecurrenceException ? _c("ActionButton", { on: { click: function ($event) { return _vm.deleteAndLeave(true); } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Delete", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }], null, false, 1625950007) }, [_vm._v("\n\t\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Delete this and all future")) + "\n\t\t\t\t\t")]) : _vm._e()], 1) : _vm._e(), _vm._v(" "), _c("Actions", [_c("ActionButton", { on: { click: _vm.cancel }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("Close", { attrs: { size: 20, decorative: "" } })]; }, proxy: true }]) }, [_vm._v("\n\t\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Close")) + "\n\t\t\t\t\t")])], 1)], 1), _vm._v(" "), _c("CalendarPickerHeader", { attrs: { value: _vm.selectedCalendar, calendars: _vm.calendars, "is-read-only": _vm.isReadOnlyOrViewing || !_vm.canModifyCalendar }, on: { "update:value": _vm.changeCalendar } }), _vm._v(" "), _c("PropertyTitle", { attrs: { value: _vm.titleOrPlaceholder, "is-read-only": _vm.isReadOnlyOrViewing }, on: { "update:value": _vm.updateTitle } }), _vm._v(" "), _c("PropertyTitleTimePicker", { attrs: { "start-date": _vm.startDate, "start-timezone": _vm.startTimezone, "end-date": _vm.endDate, "end-timezone": _vm.endTimezone, "is-all-day": _vm.isAllDay, "is-read-only": _vm.isReadOnlyOrViewing, "can-modify-all-day": _vm.canModifyAllDay, "user-timezone": _vm.currentUserTimezone }, on: { "update-start-date": _vm.updateStartDate, "update-start-timezone": _vm.updateStartTimezone, "update-end-date": _vm.updateEndDate, "update-end-timezone": _vm.updateEndTimezone, "toggle-all-day": _vm.toggleAllDay } }), _vm._v(" "), _c("div", { staticStyle: { display: "flex", "margin-left": "7%" } }, [_c("div", { staticStyle: { width: "70%" } }, [_c("PropertySelectAbsenceType", { attrs: { value: _vm.absenceType, "is-read-only": _vm.isReadOnly, "prop-model": _vm.rfcProps.absenceType, noWrap: true }, on: { "update:value": _vm.updateAbsenceType } })], 1), _vm._v(" "), _c("div", { staticStyle: { width: "30%", "margin-top": "-11px" } }, [_c("PropertyIsPrivate", { attrs: { "is-read-only": _vm.isReadOnly, "is-private": _vm.isPrivate }, on: { "toggle-is-private": _vm.toggleIsPrivate } })], 1)]), _vm._v(" "), _c("PropertySelectClient", { staticClass: "property-location", attrs: { url: "/apps/gestion/ajaxGetClientsName", "is-read-only": _vm.isReadOnly, "prop-model": _vm.rfcProps.clients, value: _vm.client, "linkify-links": true }, on: { "update:value": _vm.updateClient } }), _vm._v(" "), _c("PropertySelectLieu", { staticClass: "property-location", attrs: { url: "/apps/gestion/ajaxGetLieux", "is-read-only": _vm.isReadOnly, "prop-model": _vm.rfcProps.locations, value: _vm.location, "linkify-links": true }, on: { "update:value": _vm.updateLocation, "lieu:selected": _vm.getlocationName } }), _vm._v(" "), _c("div", { staticStyle: { display: "flex", "margin-left": "7%" } }, [_c("PropertyReturnToSiege", { attrs: { "is-read-only": _vm.isReadOnly, "return-to-siege": _vm.returnToSiege, "location-name": _vm.locationNameSeleted }, on: { "toggle-return-to-siege": _vm.toggleReturnToSiege } })], 1), _vm._v(" "), _c("PropertySelectArticle", { attrs: { "is-read-only": _vm.isReadOnlyOrViewing, url: "/apps/gestion/ajaxGetProduits", "prop-model": _vm.rfcProps.articles, value: _vm.description, "linkify-links": true }, on: { "add-single-value": _vm.addArticle, "remove-single-value": _vm.removeArticle } }), _vm._v(" "), _c("PropertyText", { attrs: { "is-read-only": _vm.isReadOnly, "prop-model": _vm.rfcProps.comment, value: _vm.comment, "linkify-links": false }, on: { "update:value": _vm.updateComment } }), _vm._v(" "), _c("InviteesList", { staticClass: "event-popover__invitees", attrs: { "hide-if-empty": true, "hide-buttons": true, "hide-errors": true, "show-header": true, "is-read-only": _vm.isReadOnlyOrViewing, "is-shared-with-me": _vm.isSharedWithMe, "calendar-object-instance": _vm.calendarObjectInstance, limit: 3 } }), _vm._v(" "), _vm.isViewedByAttendee && _vm.isViewing ? _c("InvitationResponseButtons", { staticClass: "event-popover__response-buttons", attrs: { attendee: _vm.userAsAttendee, "calendar-id": _vm.calendarId }, on: { close: _vm.closeEditorAndSkipAction } }) : _vm._e(), _vm._v(" "), !_vm.isWidget ? _c("SaveButtons", { staticClass: "event-popover__buttons", attrs: { "can-create-recurrence-exception": _vm.canCreateRecurrenceException, "is-new": _vm.isNew, "is-read-only": _vm.isReadOnlyOrViewing, "force-this-and-all-future": _vm.forceThisAndAllFuture, "show-more-button": true, "more-button-type": _vm.isViewing ? "tertiary" : undefined, "grow-horizontally": !_vm.isViewing && _vm.canCreateRecurrenceException, disabled: _vm.isSaving }, on: { "save-this-only": function ($event) { return _vm.saveAndView(false); }, "save-this-and-all-future": function ($event) { return _vm.saveAndView(true); }, "show-more": _vm.showMore } }, [!_vm.isReadOnly && _vm.isViewing ? _c("NcButton", { attrs: { type: _vm.isViewedByAttendee ? "tertiary" : undefined }, on: { click: function ($event) { _vm.isViewing = false; } }, scopedSlots: _vm._u([{ key: "icon", fn: function () { return [_c("EditIcon", { attrs: { size: 20 } })]; }, proxy: true }], null, false, 2089572735) }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.$t("calendar", "Edit")) + "\n\t\t\t\t")]) : _vm._e()], 1) : _vm._e()]], 2)]); }; var staticRenderFns = []; render._withStripped = true; /***/ }), /***/ "./src/defaults/defaultAlarmProvider.js": /*!**********************************************!*\ !*** ./src/defaults/defaultAlarmProvider.js ***! \**********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ getDefaultAlarms: () => (/* binding */ getDefaultAlarms) /* harmony export */ }); /** * Calendar App * * @copyright 2019 Georg Ehrke * * @author Georg Ehrke * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . * */ /** * @param {boolean} allDay is all day? */ function getDefaultAlarms() { let allDay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (allDay) { return [9 * 60 * 60, // On the day of the event at 9am -15 * 60 * 60, // 1 day before at 9am -39 * 60 * 60, // 2 days before at 9am -159 * 60 * 60 // 1 week before at 9am ]; } else { return [0, // At the time of the event -5 * 60, // 5 minutes before -10 * 60, // 10 minutes before -15 * 60, // 15 minutes before -30 * 60, // 30 minutes before -1 * 60 * 60, // 1 hour before -2 * 60 * 60, // 2 hour before -1 * 24 * 60 * 60, // 1 day before -2 * 24 * 60 * 60 // 2 days before ]; } } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getDefaultAlarms); /***/ }), /***/ "./src/defaults/defaultCategories.js": /*!*******************************************!*\ !*** ./src/defaults/defaultCategories.js ***! \*******************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ getDefaultCategories: () => (/* binding */ getDefaultCategories) /* harmony export */ }); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /** * Calendar App * * @copyright 2019 Georg Ehrke * * @author Georg Ehrke * * @author Richard Steinmetz * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . * */ /** * */ function getDefaultCategories() { // This list was taken from https://tools.ietf.org/html/rfc5545#section-5 const values = [(0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Anniversary'), (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Appointment'), (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Business'), (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Education'), (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Holiday'), (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Meeting'), (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Miscellaneous'), (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Non-working hours'), (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Not in office'), (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Personal'), (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Phone call'), (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Sick day'), (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Special occasion'), (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Travel'), (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Vacation')]; return values.map(value => ({ value, label: value })); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getDefaultCategories); /***/ }), /***/ "./src/directives/autosize.js": /*!************************************!*\ !*** ./src/directives/autosize.js ***! \************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var autosize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! autosize */ "./node_modules/autosize/dist/autosize.esm.js"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! debounce */ "./node_modules/debounce/index.js"); /* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(debounce__WEBPACK_IMPORTED_MODULE_1__); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ let resizeObserver; if (window.ResizeObserver) { resizeObserver = new ResizeObserver(debounce__WEBPACK_IMPORTED_MODULE_1___default()(entries => { for (const entry of entries) { autosize__WEBPACK_IMPORTED_MODULE_0__["default"].update(entry.target); } }), 20); } /** * Adds autosize to textarea on bind * * @param {Element} el The DOM element * @param {object} binding The binding's object * @param {VNode} vnode Virtual node */ const bind = (el, binding, vnode) => { // Check that the binding is true if (binding.value !== true) { return; } // Verify this is actually a textarea if (el.tagName !== 'TEXTAREA') { return; } vnode.context.$nextTick(() => { (0,autosize__WEBPACK_IMPORTED_MODULE_0__["default"])(el); }); if (resizeObserver) { resizeObserver.observe(el); } }; /** * Updates the size of the textarea when updated * * @param {Element} el The DOM element * @param {object} binding The binding's object * @param {VNode} vnode Virtual node */ const update = (el, binding, vnode) => { if (binding.value === true && binding.oldValue === false) { bind(el, binding, vnode); } if (binding.value === false && binding.oldValue === true) { unbind(el); } if (binding.value === true && binding.oldValue === true) { autosize__WEBPACK_IMPORTED_MODULE_0__["default"].update(el); } }; /** * Removes autosize when textarea is removed * * @param {Element} el The DOM element */ const unbind = el => { autosize__WEBPACK_IMPORTED_MODULE_0__["default"].destroy(el); if (resizeObserver) { resizeObserver.unobserve(el); } }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ bind, update, unbind }); /***/ }), /***/ "./src/directives/focus.js": /*!*********************************!*\ !*** ./src/directives/focus.js ***! \*********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ inserted(el) { setTimeout(() => { el.focus(); }, 500); } }); /***/ }), /***/ "./src/filters/alarmFormat.js": /*!************************************!*\ !*** ./src/filters/alarmFormat.js ***! \************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Formats an alarm * * @param {object} alarm The alarm object to format * @param {boolean} isAllDay Whether or not the event is all-day * @param {string} currentUserTimezone The current timezone of the user * @param {string} locale The locale to format it in * @return {string} */ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((alarm, isAllDay, currentUserTimezone, locale) => { if (alarm.relativeTrigger !== null) { // relative trigger if (isAllDay && alarm.relativeIsRelatedToStart && alarm.relativeTrigger < 86400) { if (alarm.relativeTrigger === 0) { return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Midnight on the day the event starts'); } const date = new Date(); date.setHours(alarm.relativeHoursAllDay); date.setMinutes(alarm.relativeMinutesAllDay); date.setSeconds(0); date.setMilliseconds(0); const formattedHourMinute = (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"])(date).locale(locale).format('LT'); if (alarm.relativeTrigger < 0) { if (alarm.relativeUnitAllDay === 'days') { return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translatePlural)('calendar', '%n day before the event at {formattedHourMinute}', '%n days before the event at {formattedHourMinute}', alarm.relativeAmountAllDay, { formattedHourMinute }); } else { return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translatePlural)('calendar', '%n week before the event at {formattedHourMinute}', '%n weeks before the event at {formattedHourMinute}', alarm.relativeAmountAllDay, { formattedHourMinute }); } } return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'on the day of the event at {formattedHourMinute}', { formattedHourMinute }); } else { // Alarms at the event's start or end if (alarm.relativeTrigger === 0) { if (alarm.relativeIsRelatedToStart) { return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'at the event\'s start'); } else { return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'at the event\'s end'); } } const time = _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"].duration(Math.abs(alarm.relativeTrigger), 'seconds').locale(locale).humanize(); if (alarm.relativeTrigger < 0) { if (alarm.relativeIsRelatedToStart) { return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', '{time} before the event starts', { time }); } else { return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', '{time} before the event ends', { time }); } } if (alarm.relativeIsRelatedToStart) { return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', '{time} after the event starts', { time }); } else { return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', '{time} after the event ends', { time }); } } } else { // absolute trigger if (currentUserTimezone === alarm.absoluteTimezoneId) { return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'on {time}', { time: (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"])(alarm.absoluteDate).locale(locale).format('LLLL') }); } else { return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'on {time} ({timezoneId})', { time: (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"])(alarm.absoluteDate).locale(locale).format('LLLL'), timezoneId: alarm.absoluteTimezoneId }); } } }); /***/ }), /***/ "./src/filters/dateFormat.js": /*!***********************************!*\ !*** ./src/filters/dateFormat.js ***! \***********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Formats a date object * * @param {Date} value The date object to format * @param {boolean} isAllDay Whether or not to display only the date part * @param {string} locale The locale to format it in * @return {string} */ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((value, isAllDay, locale) => { if (isAllDay) { return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"])(value).locale(locale).format('ll'); } else { return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"])(value).locale(locale).format('lll'); } }); /***/ }), /***/ "./src/filters/dateRangeFormat.js": /*!****************************************!*\ !*** ./src/filters/dateRangeFormat.js ***! \****************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Formats a date-range depending on the user's current view * * @param {string | Date} value The date to format * @param {string} view The current view of the user * @param {string} locale Which locale to format it in * @return {string} */ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((value, view, locale) => { switch (view) { case 'timeGridDay': return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"])(value).locale(locale).format('ll'); case 'timeGridWeek': return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__.translate)('calendar', 'Week {number} of {year}', { number: (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"])(value).locale(locale).week(), year: (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"])(value).locale(locale).weekYear() }); case 'multiMonthYear': return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"])(value).locale(locale).format('YYYY'); case 'dayGridMonth': case 'listMonth': default: return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"])(value).locale(locale).format('MMMM YYYY'); } }); /***/ }), /***/ "./src/filters/recurrenceRuleFormat.js": /*!*********************************************!*\ !*** ./src/filters/recurrenceRuleFormat.js ***! \*********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Formats a recurrence-rule * * @param {object} recurrenceRule The recurrence-rule to format * @param {string} locale The locale to format it into * @return {string} */ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((recurrenceRule, locale) => { if (recurrenceRule.frequency === 'NONE') { return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Does not repeat'); } let freqPart = ''; if (recurrenceRule.interval === 1) { switch (recurrenceRule.frequency) { case 'DAILY': freqPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Daily'); break; case 'WEEKLY': freqPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Weekly'); break; case 'MONTHLY': freqPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Monthly'); break; case 'YEARLY': freqPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Yearly'); break; } } else { switch (recurrenceRule.frequency) { case 'DAILY': freqPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translatePlural)('calendar', 'Every %n day', 'Every %n days', recurrenceRule.interval); break; case 'WEEKLY': freqPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translatePlural)('calendar', 'Every %n week', 'Every %n weeks', recurrenceRule.interval); break; case 'MONTHLY': freqPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translatePlural)('calendar', 'Every %n month', 'Every %n months', recurrenceRule.interval); break; case 'YEARLY': freqPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translatePlural)('calendar', 'Every %n year', 'Every %n years', recurrenceRule.interval); break; } } let limitPart = ''; if (recurrenceRule.frequency === 'WEEKLY' && recurrenceRule.byDay.length !== 0) { const formattedDays = getTranslatedByDaySet(recurrenceRule.byDay); limitPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translatePlural)('calendar', 'on {weekday}', 'on {weekdays}', recurrenceRule.byDay.length, { weekday: formattedDays, weekdays: formattedDays }); } else if (recurrenceRule.frequency === 'MONTHLY') { if (recurrenceRule.byMonthDay.length !== 0) { const dayOfMonthList = recurrenceRule.byMonthDay.join(', '); limitPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translatePlural)('calendar', 'on day {dayOfMonthList}', 'on days {dayOfMonthList}', recurrenceRule.byMonthDay.length, { dayOfMonthList }); } else { const ordinalNumber = getTranslatedOrdinalNumber(recurrenceRule.bySetPosition); const byDaySet = getTranslatedByDaySet(recurrenceRule.byDay); limitPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'on the {ordinalNumber} {byDaySet}', { ordinalNumber, byDaySet }); } } else if (recurrenceRule.frequency === 'YEARLY') { const monthNames = getTranslatedMonths(recurrenceRule.byMonth); if (recurrenceRule.byDay.length === 0) { limitPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'in {monthNames}', { monthNames }); } else { const ordinalNumber = getTranslatedOrdinalNumber(recurrenceRule.bySetPosition); const byDaySet = getTranslatedByDaySet(recurrenceRule.byDay); limitPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'in {monthNames} on the {ordinalNumber} {byDaySet}', { monthNames, ordinalNumber, byDaySet }); } } let endPart = ''; if (recurrenceRule.until !== null) { const untilDate = (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"])(recurrenceRule.until).locale(locale).format('L'); endPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'until {untilDate}', { untilDate }); } else if (recurrenceRule.count !== null) { endPart = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translatePlural)('calendar', '%n time', '%n times', recurrenceRule.count); } return [freqPart, limitPart, endPart].join(' ').replace(/\s{2,}/g, ' ').trim(); }); /** * Gets the byDay list as formatted list of translated weekdays * * @param {string[]} byDayList The by-day-list to get formatted * @return {string} */ function getTranslatedByDaySet(byDayList) { const byDayNames = []; const allByDayNames = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.getDayNames)(); // TODO: This should be sorted by first day of week // TODO: This should summarise: // - SA, SU to weekend // - MO, TU, WE, TH, FR to weekday // - MO, TU, WE, TH, FR, SA, SU to day if (byDayList.includes('MO')) { byDayNames.push(allByDayNames[1]); } if (byDayList.includes('TU')) { byDayNames.push(allByDayNames[2]); } if (byDayList.includes('WE')) { byDayNames.push(allByDayNames[3]); } if (byDayList.includes('TH')) { byDayNames.push(allByDayNames[4]); } if (byDayList.includes('FR')) { byDayNames.push(allByDayNames[5]); } if (byDayList.includes('SA')) { byDayNames.push(allByDayNames[6]); } if (byDayList.includes('SU')) { byDayNames.push(allByDayNames[0]); } return byDayNames.join(', '); } /** * Gets the byMonth list as formatted list of translated month-names * * * @param {string[]} byMonthList The by-month list to get formatted * @return {string} */ function getTranslatedMonths(byMonthList) { const sortedByMonth = byMonthList.slice().map(n => parseInt(n, 10)); sortedByMonth.sort((a, b) => a - b); const monthNames = []; const allMonthNames = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.getMonthNames)(); for (const month of sortedByMonth) { monthNames.push(allMonthNames[month - 1]); } return monthNames.join(', '); } /** * Gets the translated ordinal number for by-set-position * * @param {number} bySetPositionNum The by-set-position number to get the translation of * @return {string} */ function getTranslatedOrdinalNumber(bySetPositionNum) { switch (bySetPositionNum) { case 1: return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'first'); case 2: return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'second'); case 3: return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'third'); case 4: return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'fourth'); case 5: return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'fifth'); case -2: return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'second to last'); case -1: return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'last'); default: return ''; } } /***/ }), /***/ "./src/fullcalendar/duration.js": /*!**************************************!*\ !*** ./src/fullcalendar/duration.js ***! \**************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getDurationValueFromFullCalendarDuration: () => (/* binding */ getDurationValueFromFullCalendarDuration), /* harmony export */ getFullCalendarDurationFromDurationValue: () => (/* binding */ getFullCalendarDurationFromDurationValue) /* harmony export */ }); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Gets a calendar-js DurationValue from a FullCalendar Duration object * * @param {object | string | number} fcDuration Duration object provided by FullCalendar * @return {DurationValue|null} */ function getDurationValueFromFullCalendarDuration(fcDuration) { switch (typeof fcDuration) { case 'object': return getDurationValueFromFullCalendarDurationEncodedAsObject(fcDuration); case 'string': return getDurationValueFromFullCalendarDurationEncodedAsString(fcDuration); case 'number': return getDurationValueFromFullCalendarDurationEncodedAsNumber(fcDuration); default: return null; } } /** * Gets a FullCalendar Duration object from a calendar-js DurationValue object * * @param {DurationValue} durationValue calendar-js object * @return {{seconds: {Number}}} */ function getFullCalendarDurationFromDurationValue(durationValue) { return { seconds: durationValue.totalSeconds }; } /** * Gets a calendar-js DurationValue from a FullCalendar Duration object * * @param {object} fcDuration The FullCalendar duration encoded as String * @return {DurationValue} */ function getDurationValueFromFullCalendarDurationEncodedAsObject(fcDuration) { if (fcDuration.year || fcDuration.years || fcDuration.month || fcDuration.months) { return null; } const durations = []; if (fcDuration.days) { durations.push(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DurationValue.fromData({ days: fcDuration.days })); } if (fcDuration.day) { durations.push(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DurationValue.fromData({ days: fcDuration.day })); } if (fcDuration.minutes) { durations.push(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DurationValue.fromData({ minutes: fcDuration.minutes })); } if (fcDuration.minute) { durations.push(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DurationValue.fromData({ minutes: fcDuration.minute })); } if (fcDuration.seconds) { durations.push(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DurationValue.fromData({ seconds: fcDuration.seconds })); } if (fcDuration.second) { durations.push(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DurationValue.fromData({ seconds: fcDuration.second })); } if (fcDuration.milliseconds) { durations.push(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DurationValue.fromData({ seconds: Math.floor(fcDuration.milliseconds / 1000) })); } if (fcDuration.millisecond) { durations.push(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DurationValue.fromData({ seconds: Math.floor(fcDuration.millisecond / 1000) })); } if (fcDuration.ms) { durations.push(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DurationValue.fromData({ seconds: Math.floor(fcDuration.ms / 1000) })); } const duration = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DurationValue.fromSeconds(0); for (const d of durations) { duration.addDuration(d); } return duration; } /** * Gets a calendar-js DurationValue from a FullCalendar Duration string * * @param {string} fcDuration The FullCalendar duration encoded as String * @return {DurationValue} */ function getDurationValueFromFullCalendarDurationEncodedAsString(fcDuration) { const match1 = fcDuration.match(/(\d{2}):(\d{2}):(\d{2})\.(\d{3})/); if (match1) { const [, hours, minutes, seconds] = match1; return _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DurationValue.fromData({ hours: parseInt(hours, 10), minutes: parseInt(minutes, 10), seconds: parseInt(seconds, 10) }); } const match2 = fcDuration.match(/(\d{2}):(\d{2}):(\d{2})/); if (match2) { const [, hours, minutes, seconds] = match2; return _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DurationValue.fromData({ hours: parseInt(hours, 10), minutes: parseInt(minutes, 10), seconds: parseInt(seconds, 10) }); } const match3 = fcDuration.match(/(\d{2}):(\d{2})/); if (match3) { const [, hours, minutes] = match3; return _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DurationValue.fromData({ hours: parseInt(hours, 10), minutes: parseInt(minutes, 10) }); } return null; } /** * Gets a calendar-js DurationValue from a FullCalendar Duration number * * @param {number} fcDuration The FullCalendar duration encoded as Number * @return {DurationValue} */ function getDurationValueFromFullCalendarDurationEncodedAsNumber(fcDuration) { return _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DurationValue.fromSeconds(Math.floor(fcDuration / 1000)); } /***/ }), /***/ "./src/fullcalendar/eventSources/eventSource.js": /*!******************************************************!*\ !*** ./src/fullcalendar/eventSources/eventSource.js ***! \******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _utils_color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/color.js */ "./src/utils/color.js"); /* harmony import */ var _services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../services/timezoneDataProviderService.js */ "./src/services/timezoneDataProviderService.js"); /* harmony import */ var _utils_date_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/date.js */ "./src/utils/date.js"); /* harmony import */ var _eventSourceFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eventSourceFunction.js */ "./src/fullcalendar/eventSources/eventSourceFunction.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/logger.js */ "./src/utils/logger.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Returns a function to generate a FullCalendar event-source based on the Vuex calendar model * * @param {object} store The Vuex store * @return {function(*=): {backgroundColor: *, borderColor: *, className: *, id: *, textColor: *, events: events}} */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(store) { return function (calendar) { const source = { id: calendar.id, // coloring backgroundColor: calendar.color, borderColor: calendar.color, textColor: (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_0__.generateTextColorForHex)(calendar.color), // html foo events: async (_ref, successCallback, failureCallback) => { let { start, end, timeZone } = _ref; let timezoneObject = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_1__["default"])().getTimezoneForId(timeZone); if (!timezoneObject) { timezoneObject = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_1__["default"])().getTimezoneForId('UTC'); _utils_logger_js__WEBPACK_IMPORTED_MODULE_4__["default"].error("EventSource: Timezone ".concat(timeZone, " not found, falling back to UTC.")); } // This code assumes that once a time range has been fetched it won't be changed // outside of the vuex store. Triggering a refetch will just update all known // calendar objects inside this time range. New events that were added to a cached // time range externally will not be fetched and have to be added manually. const timeRange = store.getters.getTimeRangeForCalendarCoveringRange(calendar.id, (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_2__.getUnixTimestampFromDate)(start), (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_2__.getUnixTimestampFromDate)(end)); if (!timeRange) { let timeRangeId; try { timeRangeId = await store.dispatch('getEventsFromCalendarInTimeRange', { calendar, from: start, to: end }); } catch (error) { failureCallback(error); return; } const calendarObjects = store.getters.getCalendarObjectsByTimeRangeId(timeRangeId); successCallback((0,_eventSourceFunction_js__WEBPACK_IMPORTED_MODULE_3__.eventSourceFunction)(calendarObjects, calendar, start, end, timezoneObject)); } else { const calendarObjects = store.getters.getCalendarObjectsByTimeRangeId(timeRange.id); successCallback((0,_eventSourceFunction_js__WEBPACK_IMPORTED_MODULE_3__.eventSourceFunction)(calendarObjects, calendar, start, end, timezoneObject)); } } }; if (calendar.readOnly) { source.editable = false; } return source; }; } /***/ }), /***/ "./src/fullcalendar/eventSources/eventSourceFunction.js": /*!**************************************************************!*\ !*** ./src/fullcalendar/eventSources/eventSourceFunction.js ***! \**************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ eventSourceFunction: () => (/* binding */ eventSourceFunction) /* harmony export */ }); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var _utils_color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/color.js */ "./src/utils/color.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _utils_calendarObject_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/calendarObject.js */ "./src/utils/calendarObject.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * convert an array of calendar-objects to events * * @param {CalendarObject[]} calendarObjects Array of calendar-objects to turn into fc events * @param {object} calendar The calendar object * @param {Date} start Start of time-range * @param {Date} end End of time-range * @param {Timezone} timezone Desired time-zone * @return {object}[] */ function eventSourceFunction(calendarObjects, calendar, start, end, timezone) { const fcEvents = []; const authUser = OC.currentUser; for (const calendarObject of calendarObjects) { let allObjectsInTimeRange; try { allObjectsInTimeRange = (0,_utils_calendarObject_js__WEBPACK_IMPORTED_MODULE_3__.getAllObjectsInTimeRange)(calendarObject, start, end); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__["default"].error(error.message); continue; } for (const object of allObjectsInTimeRange) { const classNames = []; if (object.status === 'CANCELLED') { classNames.push('fc-event-nc-cancelled'); } else if (object.status === 'TENTATIVE') { classNames.push('fc-event-nc-tentative'); } if (object.hasComponent('VALARM')) { classNames.push('fc-event-nc-alarms'); } // For now, we only display if (object.name === 'VTODO' && object.endDate === null) { continue; } let jsStart, jsEnd; if (object.name === 'VEVENT') { jsStart = object.startDate.getInTimezone(timezone).jsDate; jsEnd = object.endDate.getInTimezone(timezone).jsDate; } else if (object.name === 'VTODO') { // For tasks, we only want to display when it is due, // not for how long it has been in progress already jsStart = object.endDate.getInTimezone(timezone).jsDate; jsEnd = object.endDate.getInTimezone(timezone).jsDate; } else { // We do not want to display anything that's neither // an event nor a task continue; } // Technically, an event's end is not allowed to be equal to it's start, // because the event's end is exclusive. Most calendar applications // (including all big ones) allow creating such events anyway (we do too). // If the event's start is equal to it's end, fullcalendar is giving // the event a default length of one hour. We are preventing that by // adding one second to the end in that case. if (jsStart.getTime() === jsEnd.getTime()) { jsEnd.setSeconds(jsEnd.getSeconds() + 1); } if (object.name === 'VTODO') { classNames.push('fc-event-nc-task'); if (object.percent === 100 || object.status === 'COMPLETED') { classNames.push('fc-event-nc-task-completed'); } } let title; if (object.name === 'VEVENT') { if (object.title) { title = object.title.replace(/\n/g, ' '); } else { title = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Untitled event'); } } else { if (object.title) { title = object.title.replace(/\n/g, ' '); } else { title = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Untitled task'); } if (object.percent !== null) { title += " (".concat(object.percent, "%)"); } } let isPrivateEvent = false; let objectProperties = object._properties.get('ISPRIVATE'); if (objectProperties && objectProperties.length > 0) { isPrivateEvent = objectProperties[0]._value == "1" ? true : false; } //Get owen object's user let owenUrl = calendarObject.dav._parent.owner; let owenUser = owenUrl.replace('/remote.php/dav/principals/users/', '').split('/')[0]; if (!owenUser) { //Get from url shared calendar owenUrl = calendarObject.dav._parent.url; owenUser = owenUrl.replace('/remote.php/dav/calendars/' + authUser + '/personal_shared_by_', '').split('/')[0]; } const isOwenOfEvent = owenUser == authUser; if (isPrivateEvent && !isOwenOfEvent) { title = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', "Absent (".concat(owenUser, ")")); } let absenceTypeIsLeave = false; let absenceTypeProperties = object._properties.get('ABSENCETYPE'); if (absenceTypeProperties && absenceTypeProperties.length > 0) { const absenceTypeValue = absenceTypeProperties[0]._value; if (absenceTypeValue == 'LEAVE') { absenceTypeIsLeave = true; } } const fcEvent = { id: [calendarObject.id, object.id].join('###'), title, allDay: object.isAllDay(), start: jsStart, end: jsEnd, // start: formatLocal(jsStart, object.isAllDay()), // end: formatLocal(jsEnd, object.isAllDay()), classNames, extendedProps: { objectId: calendarObject.id, recurrenceId: object.getReferenceRecurrenceId() ? object.getReferenceRecurrenceId().unixTime : null, canModifyAllDay: object.canModifyAllDay(), calendarOrder: calendar.order, calendarName: calendar.displayName, calendarId: calendar.id, darkText: (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_1__.isLight)((0,_utils_color_js__WEBPACK_IMPORTED_MODULE_1__.hexToRGB)(calendar.color)), objectType: object.name, percent: object.percent || null, davUrl: calendarObject.dav.url, location: object.location, description: object.description, isPrivate: isPrivateEvent, calendarObjectOwen: owenUser, calendarObjectIsOwen: isOwenOfEvent, absenceTypeIsLeave: absenceTypeIsLeave } }; if (absenceTypeIsLeave) { fcEvent.backgroundColor = calendar.color; fcEvent.borderColor = calendar.color; fcEvent.textColor = (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_1__.generateTextColorForHex)(calendar.color); } if (object.color) { const customColor = (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_1__.getHexForColorName)(object.color); if (customColor) { fcEvent.backgroundColor = customColor; fcEvent.borderColor = customColor; fcEvent.textColor = (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_1__.generateTextColorForHex)(customColor); } } fcEvents.push(fcEvent); } } return fcEvents; } /***/ }), /***/ "./src/fullcalendar/eventSources/freeBusyBlockedForAllEventSource.js": /*!***************************************************************************!*\ !*** ./src/fullcalendar/eventSources/freeBusyBlockedForAllEventSource.js ***! \***************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../services/timezoneDataProviderService.js */ "./src/services/timezoneDataProviderService.js"); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _utils_freebusy_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/freebusy.js */ "./src/utils/freebusy.js"); /** * @copyright 2021 Christoph Wurst * * @author 2021 Christoph Wurst * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Returns an event source for free-busy * * @param {AttendeeProperty} organizer The organizer of the event * @param {AttendeeProperty[]} attendees Array of the event's attendees * @param {string[]} resources List of resources * @return {{startEditable: boolean, resourceEditable: boolean, editable: boolean, id: string, durationEditable: boolean, events: events}} */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(organizer, attendees, resources) { const resourceIds = resources.map(resource => resource.id); return { id: 'free-busy-free-for-all', editable: false, startEditable: false, durationEditable: false, resourceEditable: false, events: async (_ref, successCallback, failureCallback) => { let { start, end, timeZone } = _ref; console.debug('freeBusyBlockedForAllEventSource', start, end, timeZone); let timezoneObject = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__["default"])().getTimezoneForId(timeZone); if (!timezoneObject) { timezoneObject = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__["default"])().getTimezoneForId('UTC'); _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__["default"].error("FreeBusyEventSource: Timezone ".concat(timeZone, " not found, falling back to UTC.")); } const startDateTime = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_1__.DateTimeValue.fromJSDate(start, true); const endDateTime = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_1__.DateTimeValue.fromJSDate(end, true); const organizerAsAttendee = new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_1__.AttendeeProperty('ATTENDEE', organizer.email); const freeBusyIterator = await (0,_utils_freebusy_js__WEBPACK_IMPORTED_MODULE_3__.doFreeBusyRequest)(startDateTime, endDateTime, organizer, [organizerAsAttendee, ...attendees]); const slots = []; for await (const [, freeBusyProperty] of freeBusyIterator) { slots.push({ start: freeBusyProperty.getFirstValue().start.getInTimezone(timezoneObject).jsDate, end: freeBusyProperty.getFirstValue().end.getInTimezone(timezoneObject).jsDate }); } // Now that we have all the busy slots we try to combine them to iron // out any overlaps between them. // The algorithm below will sort the slots by their start time ane then // iteratively collapse anything that starts and stops within the same // time. The complexity of this algorithms is n^2, but assuming the // number of attendees of an event is relatively low, this should be // fine to calculate. slots.sort((a, b) => a.start - b.start); const slotsWithoutOverlap = []; if (slots.length) { let currentSlotStart = slots[0].start; slots.forEach(slot => { var _findNextCombinedSlot; const combined = (_findNextCombinedSlot = findNextCombinedSlot(slots, currentSlotStart)) !== null && _findNextCombinedSlot !== void 0 ? _findNextCombinedSlot : slot; if (combined.start < currentSlotStart) { // This slot has already been combined with a former slot return; } slotsWithoutOverlap.push(combined); currentSlotStart = combined.end; }); } console.debug('deduplicated slots', slots, slotsWithoutOverlap); const events = slotsWithoutOverlap.map(slot => { return { groupId: 'free-busy-blocked-for-all', start: slot.start.toISOString(), end: slot.end.toISOString(), resourceIds, display: 'background', allDay: false, backgroundColor: 'var(--color-text-maxcontrast)', borderColor: 'var(--color-text-maxcontrast)' }; }); console.debug('freeBusyBlockedForAllEventSource', slots, events); successCallback(events); } }; } /** * @param {object} slots the slots * @param {Date} start the start */ function findNextCombinedSlot(slots, start) { const slot = slots.filter(slot => slot.start >= start).reduce((combined, slot) => { if (slot.start < combined.start) { // This slot starts too early return combined; } if (slot.end <= combined.end) { // This slots starts and ends within the combined one return combined; } if (slot.start > combined.end) { // This slots starts after the the combined one return combined; } // The slot is extended return { start: combined.start, end: slot.end }; }, { start, end: start }); if (slot.start === slot.end) { // Empty -> no slot return undefined; } return slot; } /***/ }), /***/ "./src/fullcalendar/eventSources/freeBusyFakeBlockingEventSource.js": /*!**************************************************************************!*\ !*** ./src/fullcalendar/eventSources/freeBusyFakeBlockingEventSource.js ***! \**************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Returns an event source for free-busy * * @param {string} id Identification for this source * @param {string[]} resources List of resources * @param {Date} eventStart Start of the event being edited / created * @param {Date} eventEnd End of the event being edited / created * @return {{startEditable: boolean, resourceEditable: boolean, editable: boolean, id: string, durationEditable: boolean, events: events}} */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(id, resources, eventStart, eventEnd) { const resourceIds = resources.map(resource => resource.id); return { id: 'free-busy-fake-blocking-event-source-' + id, editable: false, startEditable: false, durationEditable: false, resourceEditable: false, events: async (_ref, successCallback, failureCallback) => { let { start, end, timeZone } = _ref; if (resources.length === 1) { successCallback([{ id: Math.random().toString(36).substring(7), start: eventStart.toISOString(), end: eventEnd.toISOString(), allDay: false, display: 'background', classNames: ['blocking-event-free-busy', 'blocking-event-free-busy--first-row', 'blocking-event-free-busy--last-row'], resourceId: resourceIds[0] }]); } else if (resources.length === 2) { successCallback([{ id: Math.random().toString(36).substring(7), start: eventStart.toISOString(), end: eventEnd.toISOString(), allDay: false, display: 'background', classNames: ['blocking-event-free-busy', 'blocking-event-free-busy--first-row'], resourceId: resourceIds[0] }, { id: Math.random().toString(36).substring(7), start: eventStart.toISOString(), end: eventEnd.toISOString(), allDay: false, display: 'background', classNames: ['blocking-event-free-busy', 'blocking-event-free-busy--last-row'], resourceId: resourceIds[1] }]); } else { successCallback([{ id: Math.random().toString(36).substring(7), start: eventStart.toISOString(), end: eventEnd.toISOString(), allDay: false, display: 'background', classNames: ['blocking-event-free-busy', 'blocking-event-free-busy--first-row'], resourceIds: resourceIds.slice(0, 1) }, { id: Math.random().toString(36).substring(7), start: eventStart.toISOString(), end: eventEnd.toISOString(), allDay: false, display: 'background', classNames: ['blocking-event-free-busy'], resourceIds: resourceIds.slice(1, -1) }, { id: Math.random().toString(36).substring(7), start: eventStart.toISOString(), end: eventEnd.toISOString(), allDay: false, display: 'background', classNames: ['blocking-event-free-busy', 'blocking-event-free-busy--last-row'], resourceIds: resourceIds.slice(-1) }]); } } }; } /***/ }), /***/ "./src/fullcalendar/eventSources/freeBusyResourceEventSource.js": /*!**********************************************************************!*\ !*** ./src/fullcalendar/eventSources/freeBusyResourceEventSource.js ***! \**********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /* harmony import */ var _services_freeBusySlotService_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../services/freeBusySlotService.js */ "./src/services/freeBusySlotService.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * @author 2024 Grigory Vodyanov * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Returns an event source for free-busy * * @param {string} id Identification for this source * @param {AttendeeProperty} organizer The organizer of the event * @param {AttendeeProperty[]} attendees Array of the event's attendees * @return {{startEditable: boolean, resourceEditable: boolean, editable: boolean, id: string, durationEditable: boolean, events: events}} */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(id, organizer, attendees) { return { id: 'free-busy-event-source-' + id, editable: false, startEditable: false, durationEditable: false, resourceEditable: false, events: async (_ref, successCallback, failureCallback) => { let { start, end, timeZone } = _ref; const result = await (0,_services_freeBusySlotService_js__WEBPACK_IMPORTED_MODULE_1__.getBusySlots)(organizer, attendees, start, end, timeZone); if (result.error) { failureCallback(result.error); } else { successCallback(result.events); } } }; } /***/ }), /***/ "./src/fullcalendar/eventSources/freeBusyResourceEventSourceFunction.js": /*!******************************************************************************!*\ !*** ./src/fullcalendar/eventSources/freeBusyResourceEventSourceFunction.js ***! \******************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _utils_freebusy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/freebusy.js */ "./src/utils/freebusy.js"); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Converts the response * * @param {string} uri URI of the resource * @param {string} calendarData Calendar-data containing free-busy data * @param {boolean} success Whether or not the free-busy request was successful * @param {DateTimeValue} start The start of the fetched time-range * @param {DateTimeValue} end The end of the fetched time-range * @param {Timezone} timezone Timezone of user viewing data * @return {object[]} */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(uri, calendarData, success, start, end, timezone) { if (!success) { return [{ id: Math.random().toString(36).substring(7), start: start.getInTimezone(timezone).jsDate.toISOString(), end: end.getInTimezone(timezone).jsDate.toISOString(), resourceId: uri, display: 'background', allDay: false, backgroundColor: (0,_utils_freebusy_js__WEBPACK_IMPORTED_MODULE_0__.getColorForFBType)('UNKNOWN'), borderColor: (0,_utils_freebusy_js__WEBPACK_IMPORTED_MODULE_0__.getColorForFBType)('UNKNOWN') }]; } const parserManager = (0,_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_1__.getParserManager)(); const parser = parserManager.getParserForFileType('text/calendar'); parser.parse(calendarData); // TODO: fix me upstream, parser only exports VEVENT, VJOURNAL and VTODO at the moment const calendarComponent = parser._calendarComponent; const freeBusyComponent = calendarComponent.getFirstComponent('VFREEBUSY'); if (!freeBusyComponent) { return []; } const events = []; for (const freeBusyProperty of freeBusyComponent.getPropertyIterator('FREEBUSY')) { /** @member {FreeBusyProperty} freeBusyProperty */ events.push({ id: Math.random().toString(36).substring(7), start: freeBusyProperty.getFirstValue().start.getInTimezone(timezone).jsDate.toISOString(), end: freeBusyProperty.getFirstValue().end.getInTimezone(timezone).jsDate.toISOString(), resourceId: uri, display: 'background', classNames: ['free-busy-block', 'free-busy-' + freeBusyProperty.type.toLowerCase()], backgroundColor: (0,_utils_freebusy_js__WEBPACK_IMPORTED_MODULE_0__.getColorForFBType)(freeBusyProperty.type) }); } return events; } /***/ }), /***/ "./src/fullcalendar/interaction/eventAllow.js": /*!****************************************************!*\ !*** ./src/fullcalendar/interaction/eventAllow.js ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Figure out whether or not an event can be dropped at a certain place * * This mostly enforces the policy that all events of a recurrence-set * must be of the same date-type * * @param {object} dropInfo Info about location where event will be dropped * @param {EventApi} draggedEvent The fullcalendar event object * @return {boolean} */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(dropInfo, draggedEvent) { if (draggedEvent.extendedProps.canModifyAllDay) { return true; } return dropInfo.allDay === draggedEvent.allDay; } /***/ }), /***/ "./src/fullcalendar/interaction/eventClick.js": /*!****************************************************!*\ !*** ./src/fullcalendar/interaction/eventClick.js ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _utils_router_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/router.js */ "./src/utils/router.js"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var _nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/event-bus */ "./node_modules/@nextcloud/event-bus/dist/index.mjs"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Returns a function for click action on event. This will open the editor. * Either the popover or the sidebar, based on the user's preference. * * @param {object} store The Vuex store * @param {object} router The Vue router * @param {object} route The current Vue route * @param {Window} window The window object * @param {boolean} isWidget Whether the calendar is embedded in a widget * @param {object} ref The ref object of CalendarGrid component * @return {Function} */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(store, router, route, window) { let isWidget = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; let ref = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : undefined; return function (_ref) { let { event } = _ref; if (isWidget) { store.commit('setWidgetRef', { widgetRef: ref.fullCalendar.$el }); } switch (event.extendedProps.objectType) { case 'VEVENT': handleEventClick(event, store, router, route, window, isWidget); break; case 'VTODO': handleToDoClick(event, store, route, window, isWidget); break; } }; } /** * Handle eventClick for VEVENT * * @param {EventDef} event FullCalendar event * @param {object} store The Vuex store * @param {object} router The Vue router * @param {object} route The current Vue route * @param {Window} window The window object * @param {boolean} isWidget Whether the calendar is embedded in a widget */ function handleEventClick(event, store, router, route, window) { let isWidget = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false; if (event.extendedProps.isPrivate && !event.extendedProps.calendarObjectIsOwen) { return; } if (isWidget) { store.commit('setSelectedEvent', { object: event.extendedProps.objectId, recurrenceId: event.extendedProps.recurrenceId }); return; } let desiredRoute = store.state.settings.skipPopover ? 'EditSidebarView' : 'EditPopoverView'; // Don't show the popover if the window size is too small (less then its max width of 450 px + a bit) // The mobile breakpoint of the reworked modals is 1024 px / 2 so simply use that. if (window.innerWidth <= 1024 / 2 && desiredRoute === 'EditPopoverView') { desiredRoute = 'EditSidebarView'; } const name = (0,_utils_router_js__WEBPACK_IMPORTED_MODULE_0__.getPrefixedRoute)(route.name, desiredRoute); const params = Object.assign({}, route.params, { object: event.extendedProps.objectId, recurrenceId: String(event.extendedProps.recurrenceId) }); // Don't push new route when day didn't change if (((0,_utils_router_js__WEBPACK_IMPORTED_MODULE_0__.getPrefixedRoute)(route.name, 'EditPopoverView') === route.name || (0,_utils_router_js__WEBPACK_IMPORTED_MODULE_0__.getPrefixedRoute)(route.name, 'EditSidebarView') === route.name) && params.object === route.params.object && params.recurrenceId === route.params.recurrenceId) { return; } router.push({ name, params }); } /** * Handle eventClick for VTODO * * @param {EventDef} event FullCalendar event * @param {object} store The Vuex store * @param {object} route The current Vue route * @param {Window} window The window object * @param isWidget */ function handleToDoClick(event, store, route, window) { let isWidget = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; if (isWidget || (0,_utils_router_js__WEBPACK_IMPORTED_MODULE_0__.isPublicOrEmbeddedRoute)(route.name)) { return; } const davUrlParts = event.extendedProps.davUrl.split('/'); const taskId = davUrlParts.pop(); const calendarId = davUrlParts.pop(); (0,_nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_4__.emit)('calendar:handle-todo-click', { calendarId, taskId }); if (!store.state.settings.tasksEnabled) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_3__.showInfo)((0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_2__.translate)('calendar', 'Please ask your administrator to enable the Tasks App.')); return; } const url = "apps/tasks/#/calendars/".concat(calendarId, "/tasks/").concat(taskId); window.location = window.location.protocol + '//' + window.location.host + (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateUrl)(url); } /***/ }), /***/ "./src/fullcalendar/interaction/eventDrop.js": /*!***************************************************!*\ !*** ./src/fullcalendar/interaction/eventDrop.js ***! \***************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../duration.js */ "./src/fullcalendar/duration.js"); /* harmony import */ var _services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../services/timezoneDataProviderService.js */ "./src/services/timezoneDataProviderService.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _utils_calendarObject_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/calendarObject.js */ "./src/utils/calendarObject.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Returns a function to drop an event at a different position * * @param {object} store The Vuex store * @param {object} fcAPI The fullcalendar api * @return {Function} */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(store, fcAPI) { return async function (_ref) { let { event, delta, revert } = _ref; const deltaDuration = (0,_duration_js__WEBPACK_IMPORTED_MODULE_0__.getDurationValueFromFullCalendarDuration)(delta); const defaultAllDayDuration = (0,_duration_js__WEBPACK_IMPORTED_MODULE_0__.getDurationValueFromFullCalendarDuration)(fcAPI.getOption('defaultAllDayEventDuration')); const defaultTimedDuration = (0,_duration_js__WEBPACK_IMPORTED_MODULE_0__.getDurationValueFromFullCalendarDuration)(fcAPI.getOption('defaultTimedEventDuration')); const timezoneId = fcAPI.getOption('timeZone'); let timezone = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_1__["default"])().getTimezoneForId(timezoneId); if (!timezone) { timezone = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_1__["default"])().getTimezoneForId('UTC'); _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__["default"].error("EventDrop: Timezone ".concat(timezoneId, " not found, falling back to UTC.")); } if (!deltaDuration || !defaultAllDayDuration || !defaultTimedDuration) { revert(); return; } const objectId = event.extendedProps.objectId; const recurrenceId = event.extendedProps.recurrenceId; const recurrenceIdDate = new Date(recurrenceId * 1000); let calendarObject; try { calendarObject = await store.dispatch('getEventByObjectId', { objectId }); } catch (error) { console.debug(error); revert(); return; } const eventComponent = (0,_utils_calendarObject_js__WEBPACK_IMPORTED_MODULE_3__.getObjectAtRecurrenceId)(calendarObject, recurrenceIdDate); if (!eventComponent) { console.debug('Recurrence-id not found'); revert(); return; } // Reset attendees participation state to NEEDS-ACTION, since eventDrop // is always a signification change // Partly a workaround for Sabre-DAV not respecting RFC 6638 3.2.8, see // https://github.com/sabre-io/dav/issues/1282 if (eventComponent.organizer && eventComponent.hasProperty('ATTENDEE')) { const organizer = eventComponent.getFirstProperty('ORGANIZER'); for (const attendee of eventComponent.getAttendeeIterator()) { if (organizer.value !== attendee.value) { attendee.participationStatus = 'NEEDS-ACTION'; } } } try { // shiftByDuration may throw exceptions in certain cases eventComponent.shiftByDuration(deltaDuration, event.allDay, timezone, defaultAllDayDuration, defaultTimedDuration); } catch (error) { store.commit('resetCalendarObjectToDav', { calendarObject }); console.debug(error); revert(); return; } if (eventComponent.canCreateRecurrenceExceptions()) { eventComponent.createRecurrenceException(); } try { await store.dispatch('updateCalendarObject', { calendarObject }); } catch (error) { store.commit('resetCalendarObjectToDav', { calendarObject }); console.debug(error); revert(); } }; } /***/ }), /***/ "./src/fullcalendar/interaction/eventResize.js": /*!*****************************************************!*\ !*** ./src/fullcalendar/interaction/eventResize.js ***! \*****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../duration.js */ "./src/fullcalendar/duration.js"); /* harmony import */ var _utils_calendarObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/calendarObject.js */ "./src/utils/calendarObject.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Returns a function to resize an event * * @param {object} store The Vuex Store * @return {Function} */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(store) { return async function (_ref) { let { event, startDelta, endDelta, revert } = _ref; const startDeltaDuration = (0,_duration_js__WEBPACK_IMPORTED_MODULE_0__.getDurationValueFromFullCalendarDuration)(startDelta); const endDeltaDuration = (0,_duration_js__WEBPACK_IMPORTED_MODULE_0__.getDurationValueFromFullCalendarDuration)(endDelta); if (!startDeltaDuration && !endDeltaDuration) { revert(); return; } const objectId = event.extendedProps.objectId; const recurrenceId = event.extendedProps.recurrenceId; const recurrenceIdDate = new Date(recurrenceId * 1000); let calendarObject; try { calendarObject = await store.dispatch('getEventByObjectId', { objectId }); } catch (error) { console.debug(error); revert(); return; } const eventComponent = (0,_utils_calendarObject_js__WEBPACK_IMPORTED_MODULE_1__.getObjectAtRecurrenceId)(calendarObject, recurrenceIdDate); if (!eventComponent) { console.debug('Recurrence-id not found'); revert(); return; } if (startDeltaDuration) { eventComponent.addDurationToStart(startDeltaDuration); } if (endDeltaDuration) { eventComponent.addDurationToEnd(endDeltaDuration); } if (eventComponent.canCreateRecurrenceExceptions()) { eventComponent.createRecurrenceException(); } try { await store.dispatch('updateCalendarObject', { calendarObject }); } catch (error) { store.commit('resetCalendarObjectToDav', { calendarObject }); console.debug(error); revert(); } }; } /***/ }), /***/ "./src/fullcalendar/interaction/navLinkDayClick.js": /*!*********************************************************!*\ !*** ./src/fullcalendar/interaction/navLinkDayClick.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _utils_date_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/date.js */ "./src/utils/date.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Handles a click on a day-number in the calendar-grid * * @param {object} router The Vue router * @param {object} route The current Vue route * @return {function(Date): void} */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(router, route) { return function (date) { const name = route.name; const params = Object.assign({}, route.params, { firstDay: (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_0__.getYYYYMMDDFromDate)(date), view: 'timeGridDay' }); // Don't push new route when day and view didn't change if (route.params.firstDay === params.firstDay && route.params.view === params.view) { return; } router.push({ name, params }); }; } /***/ }), /***/ "./src/fullcalendar/interaction/navLinkWeekClick.js": /*!**********************************************************!*\ !*** ./src/fullcalendar/interaction/navLinkWeekClick.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _utils_date_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/date.js */ "./src/utils/date.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Handles a click on a week-number in the calendar-grid * * @param {object} router The Vue router * @param {object} route The current Vue route * @return {function(Date): void} */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(router, route) { return function (date) { const name = route.name; const params = Object.assign({}, route.params, { firstDay: (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_0__.getYYYYMMDDFromDate)(date), view: 'timeGridWeek' }); // Don't push new route when day and view didn't change if (route.params.firstDay === params.firstDay && route.params.view === params.view) { return; } router.push({ name, params }); }; } /***/ }), /***/ "./src/fullcalendar/interaction/select.js": /*!************************************************!*\ !*** ./src/fullcalendar/interaction/select.js ***! \************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Provides a function to select a time-range in the calendar-grid. * This will open the new event editor. Based on the user's preference, * either the popover or the sidebar. * * @param {object} store The Vuex store * @param {object} router The Vue router * @param {object} route The Vue route * @param {Window} window The window object * @return {Function} */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(store, router, route, window) { return function (_ref) { let { start, end, allDay } = _ref; let name = store.state.settings.skipPopover ? 'NewSidebarView' : 'NewPopoverView'; // Don't show the popover if the window size is too small (less then its max width of 450 px + a bit) // The mobile breakpoint of the reworked modals is 1024 px / 2 so simply use that. if (window.innerWidth <= 1024 / 2 && name === 'NewPopoverView') { name = 'NewSidebarView'; } // If we are already in a new event view, don't change it if (['NewSidebarView', 'NewPopoverView'].includes(route.name)) { name = route.name; } const params = Object.assign({}, route.params, { allDay: allDay ? '1' : '0', dtstart: String(Math.floor(start.getTime() / 1000)), dtend: String(Math.floor(end.getTime() / 1000)) }); // Don't push new route when day didn't change if (name === route.name && params.allDay === route.params.allDay && params.dtstart === route.params.dtstart && params.dtend === route.params.dtend) { return; } router.push({ name, params }); }; } /***/ }), /***/ "./src/fullcalendar/localization/dateFormattingConfig.js": /*!***************************************************************!*\ !*** ./src/fullcalendar/localization/dateFormattingConfig.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getDateFormattingConfig: () => (/* binding */ getDateFormattingConfig) /* harmony export */ }); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Returns the date-formatting config for FullCalendar * * @return {object} */ const getDateFormattingConfig = () => { const defaultConfig = { dayHeaderFormat: 'ddd l', titleFormat: 'll', slotLabelFormat: 'LT' }; return { // Date formatting: eventTimeFormat: 'LT', views: { dayGridMonth: { ...defaultConfig, dayHeaderFormat: 'ddd' }, multiMonthYear: { ...defaultConfig, dayHeaderFormat: 'ddd', multiMonthMaxColumns: 4 }, timeGridDay: defaultConfig, timeGridWeek: defaultConfig, listMonth: { // Changes for the List View listDayFormat: 'LL, dddd', listDaySideFormat: false } } }; }; /***/ }), /***/ "./src/fullcalendar/localization/localeProvider.js": /*!*********************************************************!*\ !*** ./src/fullcalendar/localization/localeProvider.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getFullCalendarLocale: () => (/* binding */ getFullCalendarLocale) /* harmony export */ }); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Returns localization settings for the FullCalender package. * * @see https://fullcalendar.io/docs * @return {object} */ const getFullCalendarLocale = () => { return { firstDay: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.getFirstDay)(), locale: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.getLanguage)(), // TRANSLATORS W is an abbreviation for Week weekText: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'W'), allDayText: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'All day'), moreLinkText: n => (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', '%n more', {}, n), noEventsText: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'No events to display') }; }; /***/ }), /***/ "./src/fullcalendar/localization/momentPlugin.js": /*!*******************************************************!*\ !*** ./src/fullcalendar/localization/momentPlugin.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ momentPluginFactory) /* harmony export */ }); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /* harmony import */ var _fullcalendar_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @fullcalendar/core */ "./node_modules/@fullcalendar/core/index.js"); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Creates a new moment object using the locale from the given Vuex store * * @param {object} $store The Vuex store * @param {object[]} data FullCalendar object containing the date etc. * @param {number[]} data.array Input data to initialize moment * @return {moment} */ const momentFactory = ($store, _ref) => { let { array } = _ref; return (0,_nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"])(array).locale($store.state.settings.momentLocale); }; /** * Construct a cmdFormatter that can be used to construct a FullCalendar plugin * * @param $store * @return {function(string, string):string} cmdFormatter function */ const cmdFormatterFactory = $store => (cmdStr, arg) => { // With our specific DateFormattingConfig, // cmdStr will always be a moment parsable string // like LT, etc. // // No need to manually parse it. // // This is not the case, if you use the standard FC // formatting config. // If arg.end is defined, this is a time-range if (arg.end) { const start = momentFactory($store, arg.start).format(cmdStr); const end = momentFactory($store, arg.end).format(cmdStr); if (start === end) { return start; } return start + arg.defaultSeparator + end; } return momentFactory($store, arg.start).format(cmdStr); }; /** * Construct a moment plugin for FullCalendar using the locale from the given Vuex store * * @param {object} $store The Vuex store * @return {object} The FullCalendar plugin */ function momentPluginFactory($store) { return (0,_fullcalendar_core__WEBPACK_IMPORTED_MODULE_1__.createPlugin)({ name: '@nextcloud/moment-plugin', cmdFormatter: cmdFormatterFactory($store) }); } /***/ }), /***/ "./src/fullcalendar/rendering/dayHeaderDidMount.js": /*!*********************************************************!*\ !*** ./src/fullcalendar/rendering/dayHeaderDidMount.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Adjusts the colSpan attribute of day-headers in the list view * * @param {object} data The destructuring object * @param {Node} data.el The HTML element */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(_ref) { let { el } = _ref; if (el.classList.contains('fc-list-day')) { el.firstChild.colSpan = 5; } } /***/ }), /***/ "./src/fullcalendar/rendering/eventDidMount.js": /*!*****************************************************!*\ !*** ./src/fullcalendar/rendering/eventDidMount.js ***! \*****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Adds data to the html element representing the event in the fullcalendar grid. * This is used to later on position the popover * * @param {object} data The destructuring object * @param {EventApi} data.event The fullcalendar event object * @param {Node} data.el The HTML element */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(_ref) { let { event, el } = _ref; if (el.classList.contains('fc-event-nc-alarms')) { const notificationIcon = document.createElement('span'); notificationIcon.classList.add('icon-event-reminder'); if (event.extendedProps.darkText) { notificationIcon.classList.add('icon-event-reminder--dark'); } else { notificationIcon.classList.add('icon-event-reminder--light'); } el.firstChild.appendChild(notificationIcon); } if (el.classList.contains('fc-event-nc-task')) { if (el.classList.contains('fc-list-event')) { // List view const dotElement = el.querySelector('.fc-list-event-dot'); dotElement.classList.remove('fc-list-event-dot'); dotElement.classList.add('fc-list-event-checkbox'); dotElement.style.color = dotElement.style.borderColor; if (event.extendedProps.percent === 100) { dotElement.classList.add('calendar-grid-checkbox-checked'); } else { dotElement.classList.add('calendar-grid-checkbox'); } } else if (el.classList.contains('fc-daygrid-dot-event')) { // Dot event in day grid view const dotElement = el.querySelector('.fc-daygrid-event-dot'); dotElement.classList.remove('fc-daygrid-event-dot'); dotElement.classList.add('fc-daygrid-event-checkbox'); dotElement.style.color = dotElement.style.borderColor; if (event.extendedProps.percent === 100) { dotElement.classList.add('calendar-grid-checkbox-checked'); } else { dotElement.classList.add('calendar-grid-checkbox'); } } else { // AgendaView and all-day grid view const titleContainer = el.querySelector('.fc-event-title-container'); const checkboxElement = document.createElement('div'); checkboxElement.classList.add('fc-event-title-checkbox'); if (event.extendedProps.percent === 100) { checkboxElement.classList.add('calendar-grid-checkbox-checked'); } else { checkboxElement.classList.add('calendar-grid-checkbox'); } titleContainer.prepend(checkboxElement); } } if (event.source === null) { el.dataset.isNew = 'yes'; } else { el.dataset.objectId = event.extendedProps.objectId; el.dataset.recurrenceId = event.extendedProps.recurrenceId; } if (el.classList.contains('fc-list-event')) { const locationContainer = document.createElement('td'); locationContainer.classList.add('fc-list-event-location'); const descriptionContainer = document.createElement('td'); descriptionContainer.classList.add('fc-list-event-description'); el.appendChild(locationContainer); el.appendChild(descriptionContainer); if (event.extendedProps.location) { const location = document.createElement('span'); location.appendChild(document.createTextNode(event.extendedProps.location)); locationContainer.appendChild(location); } if (event.extendedProps.description) { const description = document.createElement('span'); description.appendChild(document.createTextNode(event.extendedProps.description)); descriptionContainer.appendChild(description); } } } /***/ }), /***/ "./src/fullcalendar/rendering/eventOrder.js": /*!**************************************************!*\ !*** ./src/fullcalendar/rendering/eventOrder.js ***! \**************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * This sorts events when they occur at the same time, have the same duration * and the same all-day property * * @param {EventApi} firstEvent The first full-calendar event * @param {EventApi} secondEvent The second full-calendar event * @return {number} */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(firstEvent, secondEvent) { if (firstEvent.extendedProps.calendarOrder !== secondEvent.extendedProps.calendarOrder) { return firstEvent.extendedProps.calendarOrder - secondEvent.extendedProps.calendarOrder < 0 ? -1 : 1; } if (firstEvent.extendedProps.calendarName !== secondEvent.extendedProps.calendarName) { return firstEvent.extendedProps.calendarName < secondEvent.extendedProps.calendarName ? -1 : 1; } if (firstEvent.extendedProps.calendarId !== secondEvent.extendedProps.calendarId) { return firstEvent.extendedProps.calendarId < secondEvent.extendedProps.calendarId ? -1 : 1; } if (firstEvent.title !== secondEvent.title) { return firstEvent.title < secondEvent.title ? -1 : 1; } return 0; } /***/ }), /***/ "./src/fullcalendar/rendering/noEventsDidMount.js": /*!********************************************************!*\ !*** ./src/fullcalendar/rendering/noEventsDidMount.js ***! \********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); /* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs"); /* harmony import */ var vue_material_design_icons_CalendarBlank_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-material-design-icons/CalendarBlank.vue */ "./node_modules/vue-material-design-icons/CalendarBlank.vue"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Adds our standardized emptyContent component if list view is empty * * @param {object} data The destructuring object * @param {Node} data.el The HTML element */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(_ref) { let { el } = _ref; const EmptyContentClass = vue__WEBPACK_IMPORTED_MODULE_3__["default"].extend(_nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcEmptyContent); const instance = new EmptyContentClass({ propsData: { title: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_2__.translate)('calendar', 'No events'), description: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_2__.translate)('calendar', 'Create a new event or change the visible time-range') } }); instance.$slots.icon = [instance.$createElement(vue_material_design_icons_CalendarBlank_vue__WEBPACK_IMPORTED_MODULE_1__["default"])]; instance.$mount(); el.appendChild(instance.$el); } /***/ }), /***/ "./src/fullcalendar/timezones/vtimezoneNamedTimezoneImpl.js": /*!******************************************************************!*\ !*** ./src/fullcalendar/timezones/vtimezoneNamedTimezoneImpl.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _fullcalendar_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @fullcalendar/core */ "./node_modules/@fullcalendar/core/index.js"); /* harmony import */ var _fullcalendar_core_internal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @fullcalendar/core/internal */ "./node_modules/@fullcalendar/core/internal-common.js"); /* harmony import */ var _services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../services/timezoneDataProviderService.js */ "./src/services/timezoneDataProviderService.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/logger.js */ "./src/utils/logger.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Our own FullCalendar Timezone implementation based on the VTimezones we ship */ class VTimezoneNamedTimezone extends _fullcalendar_core_internal__WEBPACK_IMPORTED_MODULE_2__.by { /** * gets UTC offset for given date of this timezone * * @param {number[]} date an array that mirrors the parameters from new Date() * @return {number} offset in minutes */ offsetForArray(_ref) { let [year, month, day, hour, minute, second] = _ref; let timezone = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__["default"])().getTimezoneForId(this.timeZoneName); if (!timezone) { timezone = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__["default"])().getTimezoneForId('UTC'); _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].error("VTimezoneNamedTimezoneImpl: Timezone ".concat(this.timeZoneName, " not found, falling back to UTC.")); } // calendar-js works with natural month numbers, // not the javascript 0-based ones month += 1; return timezone.offsetForArray(year, month, day, hour, minute, second) / 60; } /** * returns parameters for Date object in this timezone based on given timestamp * * @param {number} ms Timestamp in milliseconds * @return {number[]} */ timestampToArray(ms) { let timezone = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__["default"])().getTimezoneForId(this.timeZoneName); if (!timezone) { timezone = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__["default"])().getTimezoneForId('UTC'); _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].error("VTimezoneNamedTimezoneImpl: Timezone ".concat(this.timeZoneName, " not found, falling back to UTC.")); } const timestampArray = timezone.timestampToArray(ms); // calendar-js works with natural month numbers, // not the javascript 0-based ones timestampArray[1]--; return timestampArray; } } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_fullcalendar_core__WEBPACK_IMPORTED_MODULE_3__.createPlugin)({ name: '@nextcloud/v-timezone-named-timezone-plugin', namedTimeZonedImpl: VTimezoneNamedTimezone })); /***/ }), /***/ "./src/mixins/EditorMixin.js": /*!***********************************!*\ !*** ./src/mixins/EditorMixin.js ***! \***********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _models_rfcProps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../models/rfcProps.js */ "./src/models/rfcProps.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _utils_router_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/router.js */ "./src/utils/router.js"); /* harmony import */ var _utils_date_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/date.js */ "./src/utils/date.js"); /* harmony import */ var _utils_color_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/color.js */ "./src/utils/color.js"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var _utils_attendee_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/attendee.js */ "./src/utils/attendee.js"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * This is a mixin for the editor. It contains common Vue stuff, that is * required both in the popover as well as the sidebar. * * See inline for more documentation */ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ props: { // Whether or not the calendar is embedded in a widget isWidget: { type: Boolean, default: false } }, data() { return { // Indicator whether or not the event is currently loading, saving or being deleted isLoading: true, // Indicator whether or not the event is currently saving isSaving: false, // Indicator whether or not loading the event failed isError: false, // Error message in case there was an error error: null, // The calendar-id of the selected calendar calendarId: null, // Whether or not an action is required on leave requiresActionOnRouteLeave: true, // Whether or not the this and all future option will be forced // This is the case when editing the recurrence-rule of an existing recurring event forceThisAndAllFuture: false, // Whether or not the master item is being edited isEditingMasterItem: false, // Whether or not it is a recurrence-exception isRecurrenceException: false }; }, computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_8__.mapGetters)({ currentUserTimezone: 'getResolvedTimezone' }), ...(0,vuex__WEBPACK_IMPORTED_MODULE_8__.mapState)({ initialCalendarsLoaded: state => state.calendars.initialCalendarsLoaded, calendarObject: state => state.calendarObjectInstance.calendarObject, calendarObjectInstance: state => state.calendarObjectInstance.calendarObjectInstance }), eventComponent() { var _this$calendarObjectI; return (_this$calendarObjectI = this.calendarObjectInstance) === null || _this$calendarObjectI === void 0 ? void 0 : _this$calendarObjectI.eventComponent; }, /** * Returns the events title or an empty string if the event is still loading * * @return {string} */ title() { var _this$calendarObjectI2, _this$calendarObjectI3; return (_this$calendarObjectI2 = (_this$calendarObjectI3 = this.calendarObjectInstance) === null || _this$calendarObjectI3 === void 0 ? void 0 : _this$calendarObjectI3.title) !== null && _this$calendarObjectI2 !== void 0 ? _this$calendarObjectI2 : ''; }, /** * Returns the location or null if the event is still loading * * @return {string|null} */ location() { var _this$calendarObjectI4, _this$calendarObjectI5; return (_this$calendarObjectI4 = (_this$calendarObjectI5 = this.calendarObjectInstance) === null || _this$calendarObjectI5 === void 0 ? void 0 : _this$calendarObjectI5.location) !== null && _this$calendarObjectI4 !== void 0 ? _this$calendarObjectI4 : null; }, /** * Returns the client or null if the event is still loading * * @return {string|null} */ client() { var _this$calendarObjectI6, _this$calendarObjectI7; return (_this$calendarObjectI6 = (_this$calendarObjectI7 = this.calendarObjectInstance) === null || _this$calendarObjectI7 === void 0 ? void 0 : _this$calendarObjectI7.client) !== null && _this$calendarObjectI6 !== void 0 ? _this$calendarObjectI6 : null; }, /** * Returns the embalmer(Thanato) or null if the event is still loading * * @return {string|null} */ embalmer() { var _this$calendarObjectI8, _this$calendarObjectI9; return (_this$calendarObjectI8 = (_this$calendarObjectI9 = this.calendarObjectInstance) === null || _this$calendarObjectI9 === void 0 ? void 0 : _this$calendarObjectI9.embalmer) !== null && _this$calendarObjectI8 !== void 0 ? _this$calendarObjectI8 : null; }, /** * Returns the comment or null if the event is still loading * * @return {string|null} */ comment() { var _this$calendarObjectI10, _this$calendarObjectI11; return (_this$calendarObjectI10 = (_this$calendarObjectI11 = this.calendarObjectInstance) === null || _this$calendarObjectI11 === void 0 ? void 0 : _this$calendarObjectI11.comment) !== null && _this$calendarObjectI10 !== void 0 ? _this$calendarObjectI10 : null; }, /** * Returns the isPrivate property * * @return {boolean} */ isPrivate() { var _this$calendarObjectI12, _this$calendarObjectI13; return (_this$calendarObjectI12 = (_this$calendarObjectI13 = this.calendarObjectInstance) === null || _this$calendarObjectI13 === void 0 ? void 0 : _this$calendarObjectI13.isPrivate) !== null && _this$calendarObjectI12 !== void 0 ? _this$calendarObjectI12 : false; }, /** * Returns the returnToSiege property * * @return {boolean} */ returnToSiege() { var _this$calendarObjectI14, _this$calendarObjectI15; return (_this$calendarObjectI14 = (_this$calendarObjectI15 = this.calendarObjectInstance) === null || _this$calendarObjectI15 === void 0 ? void 0 : _this$calendarObjectI15.returnToSiege) !== null && _this$calendarObjectI14 !== void 0 ? _this$calendarObjectI14 : false; }, /** * Returns the emailId property * * @return {string|null} */ emailId() { var _this$calendarObjectI16, _this$calendarObjectI17; return (_this$calendarObjectI16 = (_this$calendarObjectI17 = this.calendarObjectInstance) === null || _this$calendarObjectI17 === void 0 ? void 0 : _this$calendarObjectI17.emailId) !== null && _this$calendarObjectI16 !== void 0 ? _this$calendarObjectI16 : null; }, /** * Returns the description or null if the event is still loading * * @return {string|null} */ description() { var _this$calendarObjectI18, _this$calendarObjectI19; return (_this$calendarObjectI18 = (_this$calendarObjectI19 = this.calendarObjectInstance) === null || _this$calendarObjectI19 === void 0 ? void 0 : _this$calendarObjectI19.description) !== null && _this$calendarObjectI18 !== void 0 ? _this$calendarObjectI18 : null; }, /** * Returns the start-date (without timezone) or null if the event is still loading * * @return {Date|null} */ startDate() { var _this$calendarObjectI20, _this$calendarObjectI21; return (_this$calendarObjectI20 = (_this$calendarObjectI21 = this.calendarObjectInstance) === null || _this$calendarObjectI21 === void 0 ? void 0 : _this$calendarObjectI21.startDate) !== null && _this$calendarObjectI20 !== void 0 ? _this$calendarObjectI20 : null; }, /** * Returns the timezone of the event's start-date or null if the event is still loading * * @return {string|null} */ startTimezone() { var _this$calendarObjectI22, _this$calendarObjectI23; return (_this$calendarObjectI22 = (_this$calendarObjectI23 = this.calendarObjectInstance) === null || _this$calendarObjectI23 === void 0 ? void 0 : _this$calendarObjectI23.startTimezoneId) !== null && _this$calendarObjectI22 !== void 0 ? _this$calendarObjectI22 : null; }, /** * Returns the end-date (without timezone) or null if the event is still loading * * @return {Date|null} */ endDate() { var _this$calendarObjectI24, _this$calendarObjectI25; return (_this$calendarObjectI24 = (_this$calendarObjectI25 = this.calendarObjectInstance) === null || _this$calendarObjectI25 === void 0 ? void 0 : _this$calendarObjectI25.endDate) !== null && _this$calendarObjectI24 !== void 0 ? _this$calendarObjectI24 : null; }, /** * Returns the timezone of the event's end-date or null if the event is still loading * * @return {string|null} */ endTimezone() { var _this$calendarObjectI26, _this$calendarObjectI27; return (_this$calendarObjectI26 = (_this$calendarObjectI27 = this.calendarObjectInstance) === null || _this$calendarObjectI27 === void 0 ? void 0 : _this$calendarObjectI27.endTimezoneId) !== null && _this$calendarObjectI26 !== void 0 ? _this$calendarObjectI26 : null; }, /** * Returns whether or not the event is all-day or null if the event is still loading * * @return {boolean} */ isAllDay() { var _this$calendarObjectI28, _this$calendarObjectI29; return (_this$calendarObjectI28 = (_this$calendarObjectI29 = this.calendarObjectInstance) === null || _this$calendarObjectI29 === void 0 ? void 0 : _this$calendarObjectI29.isAllDay) !== null && _this$calendarObjectI28 !== void 0 ? _this$calendarObjectI28 : false; }, /** * Returns whether or not the user is allowed to modify the all-day setting * * @return {boolean} */ canModifyAllDay() { var _this$calendarObjectI30, _this$calendarObjectI31; return (_this$calendarObjectI30 = (_this$calendarObjectI31 = this.calendarObjectInstance) === null || _this$calendarObjectI31 === void 0 ? void 0 : _this$calendarObjectI31.canModifyAllDay) !== null && _this$calendarObjectI30 !== void 0 ? _this$calendarObjectI30 : false; }, /** * Returns the color the illustration should be colored in * * @return {string} */ illustrationColor() { return this.color || this.selectedCalendarColor; }, /** * Returns the color of the calendar selected by the user * This is used to color illustration * * @return {string|*} */ selectedCalendarColor() { if (!this.selectedCalendar) { const calendars = this.$store.getters.sortedCalendars; if (calendars.length > 0) { return calendars[0].color; } return (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_4__.uidToHexColor)(''); } return this.selectedCalendar.color; }, /** * Returns the custom color of this event * * @return {null | string} */ color() { var _this$calendarObjectI32, _this$calendarObjectI33; return (_this$calendarObjectI32 = (_this$calendarObjectI33 = this.calendarObjectInstance) === null || _this$calendarObjectI33 === void 0 ? void 0 : _this$calendarObjectI33.customColor) !== null && _this$calendarObjectI32 !== void 0 ? _this$calendarObjectI32 : null; }, /** * Returns whether or not to display save buttons * * @return {boolean} */ showSaveButtons() { return this.isReadOnly === false; }, /** * Returns whether or not to allow editing the event * * @return {boolean} */ isReadOnly() { if (!this.calendarObject) { return true; } const calendar = this.$store.getters.getCalendarById(this.calendarObject.calendarId); if (!calendar) { return true; } return calendar.readOnly; }, isSharedWithMe() { if (!this.calendarObject) { return true; } const calendar = this.$store.getters.getCalendarById(this.calendarObject.calendarId); if (!calendar) { return true; } return calendar.isSharedWithMe; }, /** * Returns whether the user is an attendee of the event * * @return {boolean} */ isViewedByAttendee() { return this.userAsAttendee !== null; }, /** * Returns the attendee property corresponding to the current user * * @return {?object} */ userAsAttendee() { if (this.isReadOnly || !this.$store.getters.getCurrentUserPrincipalEmail || !this.calendarObjectInstance.organizer) { return null; } const principal = (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_6__.removeMailtoPrefix)(this.$store.getters.getCurrentUserPrincipalEmail); for (const attendee of this.calendarObjectInstance.attendees) { if ((0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_6__.removeMailtoPrefix)(attendee.uri) === principal) { return attendee; } } return null; }, /** * Returns all calendars selectable by the user * * @return {object[]} */ calendars() { if (this.isReadOnly && this.calendarObject) { return [this.$store.getters.getCalendarById(this.calendarObject.calendarId)]; } return this.$store.getters.sortedCalendars; }, /** * Returns the object of the selected calendar * * @return {object} */ selectedCalendar() { return this.$store.getters.getCalendarById(this.calendarId); }, /** * Returns whether or not the user is allowed to delete this event * * @return {boolean} */ canDelete() { if (!this.calendarObject) { return false; } if (this.isReadOnly) { return false; } if (this.isLoading) { return false; } return this.calendarObject.existsOnServer; }, /** * Returns whether or not the user is allowed to create recurrence exceptions for this event * * @return {boolean} */ canCreateRecurrenceException() { if (!this.eventComponent) { return false; } return this.eventComponent.canCreateRecurrenceExceptions(); }, /** * Returns whether the calendar of the event can be modified * * @return {boolean} */ canModifyCalendar() { const eventComponent = this.calendarObjectInstance.eventComponent; if (!eventComponent) { return true; } return !eventComponent.isPartOfRecurrenceSet() || eventComponent.isExactForkOfPrimary; }, /** * Returns an object with properties from RFCs including * their displayName, a description, options, etc. * * @return {{absenceType, comment, geo, color, timeTransparency, description, resources, location, client, categories, accessClass, priority, status, locations, articles, clients,embalmer,embalmers}} */ rfcProps() { return (0,_models_rfcProps_js__WEBPACK_IMPORTED_MODULE_0__.getRFCProperties)(); }, /** * Returns whether or not this event can be downloaded from the server * * @return {boolean} */ hasDownloadURL() { if (!this.calendarObject) { return false; } if (this.isLoading) { return false; } return this.calendarObject.existsOnServer; }, /** * Returns the download url as a string or null if event is loading or does not exist on the server (yet) * * @return {string|null} */ downloadURL() { if (!this.calendarObject) { return null; } if (!this.calendarObject.dav) { return null; } return this.calendarObject.dav.url + '?export'; }, /** * Returns whether or not this is a new event * * @return {boolean} */ isNew() { if (!this.calendarObject) { return true; } if (!this.calendarObject.dav) { return true; } return false; }, /** * Returns the absence type * * @return {string|null} */ absenceType() { var _this$calendarObjectI34, _this$calendarObjectI35; return (_this$calendarObjectI34 = (_this$calendarObjectI35 = this.calendarObjectInstance) === null || _this$calendarObjectI35 === void 0 ? void 0 : _this$calendarObjectI35.absenceType) !== null && _this$calendarObjectI34 !== void 0 ? _this$calendarObjectI34 : ''; } }, methods: { /** * Changes the selected calendar * Does not move the calendar-object yet, that's done in save * * @param {object} selectedCalendar The new calendar selected by the user */ changeCalendar(selectedCalendar) { this.calendarId = selectedCalendar.id; // If this is a new event that does not exist on the server yet, // override the internally stored calendarId. If we did not do this, // it would create the event in the default calendar first and move it // to the desired calendar as a second step. if (this.calendarObject && !this.calendarObject.existsOnServer) { this.calendarObject.calendarId = selectedCalendar.id; } }, /** * This will force the user to update this and all future occurrences when saving */ forceModifyingFuture() { this.forceThisAndAllFuture = true; }, /** * Closes the editor and returns to normal calendar-view */ closeEditor() { if (this.isWidget) { this.$store.commit('closeWidgetEventDetails'); return; } const params = Object.assign({}, this.$store.state.route.params); delete params.object; delete params.recurrenceId; this.$router.push({ name: (0,_utils_router_js__WEBPACK_IMPORTED_MODULE_2__.getPrefixedRoute)(this.$store.state.route.name, 'CalendarView'), params }); this.$store.commit('resetCalendarObjectInstanceObjectIdAndRecurrenceId'); }, /** * Closes the editor and returns to normal calendar-view without running any action. * This is useful if the calendar-object-instance has already been saved. */ closeEditorAndSkipAction() { this.requiresActionOnRouteLeave = false; this.closeEditor(); }, /** * Resets the calendar-object back to it's original state and closes the editor */ async cancel() { if (this.isLoading) { return; } if (!this.calendarObject) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].error('Calendar-object not found'); this.closeEditor(); return; } this.$store.commit('resetCalendarObjectToDav', { calendarObject: this.calendarObject }); this.requiresActionOnRouteLeave = false; this.closeEditor(); }, keyboardCloseEditor(event) { if (event.key === 'Escape') { this.cancel(); } }, keyboardSaveEvent(event) { if (event.key === 'Enter' && event.ctrlKey === true && !this.isReadOnly && !this.canCreateRecurrenceException) { this.saveAndLeave(false); } }, keyboardDeleteEvent(event) { if (event.key === 'Delete' && event.ctrlKey === true && this.canDelete && !this.canCreateRecurrenceException) { this.deleteAndLeave(false); } }, keyboardDuplicateEvent(event) { if (event.key === 'd' && event.ctrlKey === true) { event.preventDefault(); if (!this.isNew && !this.isReadOnly && !this.canCreateRecurrenceException) { this.duplicateEvent(); } } }, /** * Saves a calendar-object * * @param {boolean} thisAndAllFuture Whether to modify only this or this and all future occurrences * @return {Promise} */ async save() { let thisAndAllFuture = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (!this.calendarObject) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].error('Calendar-object not found'); return; } if (this.isReadOnly) { return; } if (this.forceThisAndAllFuture) { thisAndAllFuture = true; } this.isLoading = true; this.isSaving = true; try { await this.$store.dispatch('saveCalendarObjectInstance', { thisAndAllFuture, calendarId: this.calendarId }); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].error("Failed to save event: ".concat(error)); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_7__.showError)((0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_5__.translate)('calendar', 'Failed to save event')); this.calendarObjectInstance.eventComponent.markDirty(); throw error; } finally { this.isLoading = false; this.isSaving = false; } }, /** * Saves a calendar-object and closes the editor * * @param {boolean} thisAndAllFuture Whether to modify only this or this and all future occurrences * @return {Promise} */ async saveAndLeave() { let thisAndAllFuture = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; await this.save(thisAndAllFuture); this.requiresActionOnRouteLeave = false; this.closeEditor(); }, /** * Duplicates a calendar-object and saves it * * @return {Promise} */ async duplicateEvent() { await this.$store.dispatch('duplicateCalendarObjectInstance'); }, /** * Deletes a calendar-object * * @param {boolean} thisAndAllFuture Whether to delete only this or this and all future occurrences * @return {Promise} */ async delete() { let thisAndAllFuture = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (!this.calendarObject) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].error('Calendar-object not found'); return; } if (this.isReadOnly) { return; } this.isLoading = true; await this.$store.dispatch('deleteCalendarObjectInstance', { thisAndAllFuture }); this.isLoading = false; }, /** * Deletes a calendar-object and closes the editor * * @param {boolean} thisAndAllFuture Whether to delete only this or this and all future occurrences * @return {Promise} */ async deleteAndLeave() { let thisAndAllFuture = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; await this.delete(thisAndAllFuture); this.requiresActionOnRouteLeave = false; this.closeEditor(); }, /** * Updates the title of this event * * @param {string} title New title */ updateTitle(title) { if (title.trim() === '') { title = null; } this.$store.commit('changeTitle', { calendarObjectInstance: this.calendarObjectInstance, title }); }, /** * Updates the description of this event * * @param {string} description New description */ updateDescription(description) { this.$store.commit('changeDescription', { calendarObjectInstance: this.calendarObjectInstance, description }); }, /** * Updates the location of this event * * @param {string} location New location */ updateLocation(location) { this.$store.commit('changeLocation', { calendarObjectInstance: this.calendarObjectInstance, location }); }, /** * Updates the comments of this event * * @param {string} comment New comments */ updateComment(comment) { this.$store.commit('changeComment', { calendarObjectInstance: this.calendarObjectInstance, comment }); }, /** * Updates the client of the event * * @param {string} client New client */ updateClient(client) { this.$store.commit('changeClient', { calendarObjectInstance: this.calendarObjectInstance, client }); }, /** * Updates the embalmer(Thanatopracteur) of the event * * @param {string} embalmer New embalmer */ updateEmbalmer(embalmer) { this.$store.commit('changeEmbalmer', { calendarObjectInstance: this.calendarObjectInstance, embalmer }); }, /** * Updates the start date of this event * * @param {Date} startDate New start date */ updateStartDate(startDate) { this.$store.dispatch('changeStartDate', { calendarObjectInstance: this.calendarObjectInstance, startDate }); }, /** * Updates the timezone of this event's start date * * @param {string} startTimezone New start timezone */ updateStartTimezone(startTimezone) { if (!startTimezone) { return; } this.$store.dispatch('changeStartTimezone', { calendarObjectInstance: this.calendarObjectInstance, startTimezone }); }, /** * Updates the end date of this event * * @param {Date} endDate New end date */ updateEndDate(endDate) { this.$store.commit('changeEndDate', { calendarObjectInstance: this.calendarObjectInstance, endDate }); }, /** * Updates the timezone of this event's end date * * @param {string} endTimezone New end timezone */ updateEndTimezone(endTimezone) { if (!endTimezone) { return; } this.$store.dispatch('changeEndTimezone', { calendarObjectInstance: this.calendarObjectInstance, endTimezone }); }, /** * Toggles the event between all-day and timed */ toggleAllDay() { this.$store.dispatch('toggleAllDay', { calendarObjectInstance: this.calendarObjectInstance }); }, /** * Toggles the event to private */ toggleIsPrivate(isPrivate) { this.$store.commit('toggleIsPrivate', { calendarObjectInstance: this.calendarObjectInstance, isPrivate }); }, /** * Toggles the event to return to siege */ toggleReturnToSiege(returnToSiege) { this.$store.commit('toggleReturnToSiege', { calendarObjectInstance: this.calendarObjectInstance, returnToSiege }); }, /** * Toggles the event to private */ addEmailId(emailId) { this.$store.commit('addEmailId', { calendarObjectInstance: this.calendarObjectInstance, emailId }); }, /** * Resets the internal state after changing the viewed calendar-object */ resetState() { this.isLoading = true; this.isSaving = false; this.isError = false; this.error = null; this.calendarId = null; this.requiresActionOnRouteLeave = true; this.forceThisAndAllFuture = false; this.isEditingMasterItem = false; this.isRecurrenceException = false; }, /** * This function returns a promise that resolves * once the calendars were fetched from the server * * @return {Promise} */ loadingCalendars() { if (this.initialCalendarsLoaded) { return Promise.resolve(); } return new Promise(resolve => { const watcher = this.$watch('initialCalendarsLoaded', () => { resolve(); watcher(); }); }); }, /** * Updates the absence type of this event * * @param {string} absenceType New absence type */ updateAbsenceType(absenceType) { this.$store.commit('changeAbsenceType', { calendarObjectInstance: this.calendarObjectInstance, absenceType }); } }, /** * This is executed before entering the Editor routes * * @param {object} to The route to navigate to * @param {object} from The route coming from * @param {Function} next Function to be called when ready to load the next view */ async beforeRouteEnter(to, from, next) { if (to.name === 'NewSidebarView' || to.name === 'NewPopoverView') { next(async vm => { vm.resetState(); const isAllDay = to.params.allDay === '1'; const start = parseInt(to.params.dtstart, 10); const end = parseInt(to.params.dtend, 10); const timezoneId = vm.$store.getters.getResolvedTimezone; try { await vm.loadingCalendars(); await vm.$store.dispatch('getCalendarObjectInstanceForNewEvent', { isAllDay, start, end, timezoneId }); vm.calendarId = vm.calendarObject.calendarId; } catch (error) { console.debug(error); vm.isError = true; vm.error = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_5__.translate)('calendar', 'It might have been deleted, or there was a typo in a link'); } finally { vm.isLoading = false; } }); } else { next(async vm => { vm.resetState(); const objectId = to.params.object; const recurrenceId = to.params.recurrenceId; if (recurrenceId === 'next') { const closeToDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_3__.dateFactory)(); // TODO: can we replace this by simply returning the new route since we are inside next() // Probably not though, because it's async try { await vm.loadingCalendars(); const recurrenceId = await vm.$store.dispatch('resolveClosestRecurrenceIdForCalendarObject', { objectId, closeToDate }); const params = Object.assign({}, vm.$route.params, { recurrenceId }); vm.$router.replace({ name: vm.$route.name, params }); } catch (error) { console.debug(error); vm.isError = true; vm.error = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_5__.translate)('calendar', 'It might have been deleted, or there was a typo in a link'); return; // if we cannot resolve next to an actual recurrenceId, return here to avoid further processing. } finally { vm.isLoading = false; } } try { await vm.loadingCalendars(); await vm.$store.dispatch('getCalendarObjectInstanceByObjectIdAndRecurrenceId', { objectId, recurrenceId }); vm.calendarId = vm.calendarObject.calendarId; vm.isEditingMasterItem = vm.eventComponent.isMasterItem(); vm.isRecurrenceException = vm.eventComponent.isRecurrenceException(); } catch (error) { console.debug(error); vm.isError = true; vm.error = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_5__.translate)('calendar', 'It might have been deleted, or there was a typo in a link'); } finally { vm.isLoading = false; } }); } }, /** * This function is called when the route changes. This can be caused by various actions: * - Change of selected time-range when creating new event * - Navigating through the calendar-view * * @param {object} to The route to navigate to * @param {object} from The route coming from * @param {Function} next Function to be called when ready to load the next view */ async beforeRouteUpdate(to, from, next) { // If we are in the New Event dialog, we want to update the selected time if (to.name === 'NewSidebarView' || to.name === 'NewPopoverView') { // If allDay, dtstart and dtend are the same there is no need to update. // This is usally the case when navigating through the calendar while the editor is open if (to.params.allDay === from.params.allDay && to.params.dtstart === from.params.dtstart && to.params.dtend === from.params.dtend) { next(); return; } const isAllDay = to.params.allDay === '1'; const start = to.params.dtstart; const end = to.params.dtend; const timezoneId = this.$store.getters.getResolvedTimezone; await this.loadingCalendars(); await this.$store.dispatch('updateCalendarObjectInstanceForNewEvent', { isAllDay, start, end, timezoneId }); next(); } else { // If both the objectId and recurrenceId remained the same // there is no need to update. This is usally the case when navigating // through the calendar while the editor is open if (to.params.object === from.params.object && to.params.recurrenceId === from.params.recurrenceId) { next(); return; } this.isLoading = true; try { await this.save(); } catch (error) { console.debug(error); next(false); return; } this.resetState(); const objectId = to.params.object; const recurrenceId = to.params.recurrenceId; if (recurrenceId === 'next') { const closeToDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_3__.dateFactory)(); await this.loadingCalendars(); const recurrenceId = await this.$store.dispatch('resolveClosestRecurrenceIdForCalendarObject', { objectId, closeToDate }); const params = Object.assign({}, this.$route.params, { recurrenceId }); next({ name: this.$route.name, params }); return; } try { await this.loadingCalendars(); await this.$store.dispatch('getCalendarObjectInstanceByObjectIdAndRecurrenceId', { objectId, recurrenceId }); this.calendarId = this.calendarObject.calendarId; this.isEditingMasterItem = this.eventComponent.isMasterItem(); this.isRecurrenceException = this.eventComponent.isRecurrenceException(); } catch (error) { console.debug(error); this.isError = true; this.error = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_5__.translate)('calendar', 'It might have been deleted, or there was a typo in the link'); } finally { this.isLoading = false; next(); } } }, /** * This route is called when the user leaves the editor * * @param {object} to The route to navigate to * @param {object} from The route coming from * @param {Function} next Function to be called when ready to load the next view */ async beforeRouteLeave(to, from, next) { // requiresActionOnRouteLeave is false when an action like deleting / saving / cancelling was already taken. // The responsibility of this method is to automatically save the event when the user clicks outside the editor if (!this.requiresActionOnRouteLeave) { next(); return; } try { if ((from.name !== 'NewPopoverView' || to.name !== 'EditPopoverView') && (from.name !== 'NewPopoverView' || to.name !== 'EditSideBarView')) { await this.save(); } next(); } catch (error) { console.debug(error); next(false); } } }); /***/ }), /***/ "./src/mixins/PropertyLinksMixin.js": /*!******************************************!*\ !*** ./src/mixins/PropertyLinksMixin.js ***! \******************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var linkifyjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! linkifyjs */ "./node_modules/linkifyjs/dist/linkify.es.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ props: { linkifyLinks: { type: Boolean, default: false } }, computed: { showLinksClickable() { return this.linkifyLinks && this.textareaHasFocus === false && typeof this.value === 'string' && this.value.length > 4 && (0,linkifyjs__WEBPACK_IMPORTED_MODULE_0__.find)(this.value).length > 0; }, linkifyMinHeight() { // return this.rows > 1 ? '68px' : '48px' return '0'; } }, data() { return { textareaHasFocus: false }; }, methods: { handleShowTextarea(evt) { if (this.isReadOnly || this.linkifyLinks === false) { // do nothing return; } if (evt.target && evt.target.tagName === 'A') { // a link was clicked, do nothing return; } if (this.textareaHasFocus === true) { // the textarea is shown already, should never happen console.error('this.textareaHasFocus is true but click event is dispatched on div'); return; } const parent = evt.currentTarget.parentElement; this.textareaHasFocus = true; this.$nextTick(() => { if (parent && parent.firstElementChild) { const textarea = parent.firstElementChild; textarea.focus(); if (this.value && this.value.length > 64) { textarea.selectionStart = textarea.selectionEnd = 0; } else { textarea.selectionStart = textarea.selectionEnd = 64; } } }); }, /** * @param {boolean} hasFocus */ handleToggleTextareaFocus(hasFocus) { if (this.linkifyLinks === false) { // do nothing return; } this.textareaHasFocus = hasFocus; } } }); /***/ }), /***/ "./src/mixins/PropertyMixin.js": /*!*************************************!*\ !*** ./src/mixins/PropertyMixin.js ***! \*************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vue_material_design_icons_Briefcase_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-material-design-icons/Briefcase.vue */ "./node_modules/vue-material-design-icons/Briefcase.vue"); /* harmony import */ var vue_material_design_icons_Check_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-material-design-icons/Check.vue */ "./node_modules/vue-material-design-icons/Check.vue"); /* harmony import */ var vue_material_design_icons_Eye_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-material-design-icons/Eye.vue */ "./node_modules/vue-material-design-icons/Eye.vue"); /* harmony import */ var vue_material_design_icons_EyedropperVariant_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-material-design-icons/EyedropperVariant.vue */ "./node_modules/vue-material-design-icons/EyedropperVariant.vue"); /* harmony import */ var vue_material_design_icons_MapMarker_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-material-design-icons/MapMarker.vue */ "./node_modules/vue-material-design-icons/MapMarker.vue"); /* harmony import */ var vue_material_design_icons_Tag_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-material-design-icons/Tag.vue */ "./node_modules/vue-material-design-icons/Tag.vue"); /* harmony import */ var vue_material_design_icons_TextBoxOutline_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-material-design-icons/TextBoxOutline.vue */ "./node_modules/vue-material-design-icons/TextBoxOutline.vue"); /* harmony import */ var vue_material_design_icons_Bell_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue-material-design-icons/Bell.vue */ "./node_modules/vue-material-design-icons/Bell.vue"); /* harmony import */ var vue_material_design_icons_Human_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! vue-material-design-icons/Human.vue */ "./node_modules/vue-material-design-icons/Human.vue"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * This is a mixin for properties. It contains common Vue stuff, that is * required commonly by all components like the event, read-only-status, etc. * * See inline for more documentation */ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ components: { Briefcase: vue_material_design_icons_Briefcase_vue__WEBPACK_IMPORTED_MODULE_0__["default"], Check: vue_material_design_icons_Check_vue__WEBPACK_IMPORTED_MODULE_1__["default"], Eye: vue_material_design_icons_Eye_vue__WEBPACK_IMPORTED_MODULE_2__["default"], EyedropperVariant: vue_material_design_icons_EyedropperVariant_vue__WEBPACK_IMPORTED_MODULE_3__["default"], MapMarker: vue_material_design_icons_MapMarker_vue__WEBPACK_IMPORTED_MODULE_4__["default"], Tag: vue_material_design_icons_Tag_vue__WEBPACK_IMPORTED_MODULE_5__["default"], TextBoxOutline: vue_material_design_icons_TextBoxOutline_vue__WEBPACK_IMPORTED_MODULE_6__["default"], Bell: vue_material_design_icons_Bell_vue__WEBPACK_IMPORTED_MODULE_7__["default"], Human: vue_material_design_icons_Human_vue__WEBPACK_IMPORTED_MODULE_8__["default"] }, props: { /** * The prop-model object containing information about the * displayed property. The information comes straight from * /src/models/rfcProps.js */ propModel: { type: Object, required: true }, /** * An indicator whether or not the event is being viewed * in read-only mode */ isReadOnly: { type: Boolean, required: true }, /** * The value to be displayed inside the property. * The type varies from property to property. */ value: { required: true }, /** * Show the icon left of the input. * Will be shown by default. */ showIcon: { type: Boolean, default: true }, searchable: { type: Boolean, required: false, default: false }, multiple: { type: Boolean, required: false, default: false } }, computed: { /** * Returns the icon stored in the property-model * If there is no icon set, it returns an empty string * * @return {string} */ icon() { return this.propModel.icon || ''; }, /** * Returns the placeholder text stored in the property-model * If there is no placeholder text set, it returns an empty string * * @return {string} */ placeholder() { return this.propModel.placeholder || ''; }, /** * Returns the placeholder text for tags stored in the property-model * If there is no placeholder text for tags set, it returns an empty string * * @return {string} */ tagPlaceholder() { return this.propModel.tagPlaceholder || ''; }, /** * Returns the info text stored in the property-model * If there is no info text set, it returns an empty string * * @return {string} */ info() { return this.propModel.info || ''; }, /** * Returns the property's readable name stored in the property-model * If there is no readable name set, it returns an empty string * * @return {string} */ readableName() { return this.propModel.readableName || ''; }, /** * Returns whether or not to display the info text. * The info text will only be displayed if there * is actually an info set and if the event is viewed * with edit permission. * * @return {boolean} */ hasInfo() { return this.propModel.info !== undefined && !this.isReadOnly; } } }); /***/ }), /***/ "./src/models/alarm.js": /*!*****************************!*\ !*** ./src/models/alarm.js ***! \*****************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getDefaultAlarmObject: () => (/* binding */ getDefaultAlarmObject), /* harmony export */ mapAlarmComponentToAlarmObject: () => (/* binding */ mapAlarmComponentToAlarmObject) /* harmony export */ }); /* harmony import */ var _utils_alarms_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/alarms.js */ "./src/utils/alarms.js"); /* harmony import */ var _utils_date_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/date.js */ "./src/utils/date.js"); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Creates a complete alarm object based on given props * * @param {object} props The alarm properties already provided * @return {object} */ const getDefaultAlarmObject = function () { let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return Object.assign({}, { // The calendar-js alarm component alarmComponent: null, // Type of alarm: DISPLAY, EMAIL, AUDIO type: null, // Whether or not the alarm is relative isRelative: false, // Date object of an absolute alarm (if it's absolute, it must be DATE-TIME) absoluteDate: null, // The time zone id of for absolute alarms absoluteTimezoneId: null, // Whether or not the relative alarm is before the event, relativeIsBefore: null, // Whether or not the alarm is relative to the event's start relativeIsRelatedToStart: null, // TIMED EVENTS: // Unit (seconds, minutes, hours, ...) if this alarm is inside a timed event relativeUnitTimed: null, // The amount of unit if this alarm is inside a timed event relativeAmountTimed: null, // ALL-DAY EVENTS: // Unit (seconds, minutes, hours, ...) if this alarm is inside an all-day event relativeUnitAllDay: null, // The amount of unit if this alarm is inside a all-day event relativeAmountAllDay: null, // The hours to display alarm for in an all-day event (e.g. 1 day before at 9:00 am) relativeHoursAllDay: null, // The minutes to display alarm for in an all-day event (e.g. 1 day before at 9:30 am) relativeMinutesAllDay: null, // The total amount of seconds for a relative alarm relativeTrigger: null }, props); }; /** * Map an alarm component to our alarm object * * @param {AlarmComponent} alarmComponent The calendar-js alarm-component to turn into an alarm object * @return {object} */ const mapAlarmComponentToAlarmObject = alarmComponent => { if (alarmComponent.trigger.isRelative()) { const relativeIsBefore = alarmComponent.trigger.value.isNegative; const relativeIsRelatedToStart = alarmComponent.trigger.related === 'START'; const { amount: relativeAmountTimed, unit: relativeUnitTimed } = (0,_utils_alarms_js__WEBPACK_IMPORTED_MODULE_0__.getAmountAndUnitForTimedEvents)(alarmComponent.trigger.value.totalSeconds); const { unit: relativeUnitAllDay, amount: relativeAmountAllDay, hours: relativeHoursAllDay, minutes: relativeMinutesAllDay } = (0,_utils_alarms_js__WEBPACK_IMPORTED_MODULE_0__.getAmountHoursMinutesAndUnitForAllDayEvents)(alarmComponent.trigger.value.totalSeconds); const relativeTrigger = alarmComponent.trigger.value.totalSeconds; return getDefaultAlarmObject({ alarmComponent, type: alarmComponent.action, isRelative: alarmComponent.trigger.isRelative(), relativeIsBefore, relativeIsRelatedToStart, relativeUnitTimed, relativeAmountTimed, relativeUnitAllDay, relativeAmountAllDay, relativeHoursAllDay, relativeMinutesAllDay, relativeTrigger }); } else { const absoluteDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_1__.getDateFromDateTimeValue)(alarmComponent.trigger.value); return getDefaultAlarmObject({ alarmComponent, type: alarmComponent.action, isRelative: alarmComponent.trigger.isRelative(), absoluteDate, absoluteTimezoneId: alarmComponent.trigger.value.timezoneId }); } }; /***/ }), /***/ "./src/models/appointmentConfig.js": /*!*****************************************!*\ !*** ./src/models/appointmentConfig.js ***! \*****************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ AppointmentConfig) /* harmony export */ }); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_calendar_availability_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/calendar-availability-vue */ "./node_modules/@nextcloud/calendar-availability-vue/dist/index.mjs"); function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /** * @copyright Copyright (c) 2021 Richard Steinmetz * * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** @class */ class AppointmentConfig { /** * Create a new AppointmentConfig from the given plain object data * * @param {object} data Appointment config data to construct an instance from * @param {?number} data.id Id * @param {?string} data.token Token * @param {string} data.name Name * @param {string} data.description Description * @param {string} data.location Location * @param {string} data.visibility Visibility * @param {string} data.targetCalendarUri Target calendar URI * @param {object} data.availability Availability * @param {number} data.length Length in seconds * @param {number} data.increment Increment in seconds * @param {number} data.preparationDuration Preparation duration in seconds * @param {number} data.followupDuration Followup duration in seconds * @param {number} data.timeBeforeNextSlot Time before next slot in seconds * @param {?number} data.dailyMax Max daily slots * @param {?number} data.futureLimit Limits how far in the future appointments can be booked * @param {?string[]} data.calendarFreeBusyUris URIs of calendars to check for conflicts * @param {bool} data.createTalkRoom Whether a Talk room should be created */ constructor(data) { var _data, _tryParseInt, _tryParseInt2; /** @member {?number} */ _defineProperty(this, "id", void 0); /** @member {?string} */ _defineProperty(this, "token", void 0); /** @member {string} */ _defineProperty(this, "name", void 0); /** @member {string} */ _defineProperty(this, "description", void 0); /** @member {string} */ _defineProperty(this, "location", void 0); /** @member {string} */ _defineProperty(this, "visibility", void 0); /** @member {string} */ _defineProperty(this, "targetCalendarUri", void 0); /** @member {object} */ _defineProperty(this, "availability", void 0); /** @member {number} */ _defineProperty(this, "length", void 0); /** @member {number} */ _defineProperty(this, "increment", void 0); /** @member {number} */ _defineProperty(this, "preparationDuration", void 0); /** @member {number} */ _defineProperty(this, "followupDuration", void 0); /** @member {number} */ _defineProperty(this, "timeBeforeNextSlot", void 0); /** @member {?number} */ _defineProperty(this, "dailyMax", void 0); /** @member {?number} */ _defineProperty(this, "futureLimit", void 0); /** @member {?string[]} */ _defineProperty(this, "calendarFreeBusyUris", void 0); /** @member {bool} */ _defineProperty(this, "createTalkRoom", void 0); (_data = data) !== null && _data !== void 0 ? _data : data = {}; this.id = data.id; this.token = data.token; this.name = data.name; this.description = data.description; this.location = data.location; this.visibility = data.visibility; this.targetCalendarUri = data.targetCalendarUri; this.availability = data.availability; this.length = (_tryParseInt = tryParseInt(data.length)) !== null && _tryParseInt !== void 0 ? _tryParseInt : 0; this.increment = (_tryParseInt2 = tryParseInt(data.increment)) !== null && _tryParseInt2 !== void 0 ? _tryParseInt2 : 0; this.preparationDuration = tryParseInt(data.preparationDuration); this.followupDuration = tryParseInt(data.followupDuration); this.timeBeforeNextSlot = tryParseInt(data.timeBeforeNextSlot); this.dailyMax = tryParseInt(data.dailyMax); this.futureLimit = tryParseInt(data.futureLimit); this.calendarFreeBusyUris = data.calendarFreeBusyUris; this.createTalkRoom = data.createTalkRoom; } /** * Create a default appointment config instance * * @param {string} targetCalendarUri * @param {ScheduleInbox} scheduleInbox * @param {string} timezoneId fallback time zone when no schedule inbox availability is set * @return {AppointmentConfig} Default appointment config instance */ static createDefault(targetCalendarUri, scheduleInbox, timezoneId) { let slots = (0,_nextcloud_calendar_availability_vue__WEBPACK_IMPORTED_MODULE_1__.getEmptySlots)(); if (scheduleInbox && scheduleInbox.availability) { var _converted$timezoneId; const converted = (0,_nextcloud_calendar_availability_vue__WEBPACK_IMPORTED_MODULE_1__.vavailabilityToSlots)(scheduleInbox.availability); slots = converted.slots; timezoneId = (_converted$timezoneId = converted.timezoneId) !== null && _converted$timezoneId !== void 0 ? _converted$timezoneId : timezoneId; } else { // Set default availability to Mo-Fr 9-5 const tsAtTime = (hours, minutes) => Math.round(new Date().setHours(hours, minutes, 0, 0) / 1000); ['MO', 'TU', 'WE', 'TH', 'FR'].forEach(day => slots[day].push({ start: tsAtTime(9, 0), end: tsAtTime(17, 0) })); } return new AppointmentConfig({ name: '', description: '', location: '', targetCalendarUri, availability: { timezoneId, slots }, visibility: 'PRIVATE', length: 5 * 60, increment: 15 * 60, preparationDuration: 0, followupDuration: 0, timeBeforeNextSlot: 0, calendarFreeBusyUris: [], futureLimit: 2 * 30 * 24 * 60 * 60 // 2 months }); } /** * Clone this instance * * @return {AppointmentConfig} A cloned version of this instance */ clone() { return AppointmentConfig.fromJSON(JSON.stringify(this)); } /** * Parse a JSON string into a new AppointmentConfig instance * * @param {string} jsonString The JSON string to parse * @return {AppointmentConfig} New instance parsed from given JSON string */ static fromJSON(jsonString) { return new AppointmentConfig(JSON.parse(jsonString)); } /** * Get the absolute booking URL of this instance * * @return {string} Absolute URL */ get bookingUrl() { const baseUrl = "".concat(window.location.protocol, "//").concat(window.location.hostname); const relativeUrl = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_0__.generateUrl)('/apps/calendar/appointment/{token}', { token: this.token }); return baseUrl + relativeUrl; } } /** * Try to parse an int from the given value or return undefined * * @param {string|number|null|undefined} value The value to parse * @return {number|undefined} Parsed number or undefined */ function tryParseInt(value) { if (value === null || value === undefined) { return undefined; } return parseInt(value); } /***/ }), /***/ "./src/models/attachment.js": /*!**********************************!*\ !*** ./src/models/attachment.js ***! \**********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getDefaultAttachmentObject: () => (/* binding */ getDefaultAttachmentObject), /* harmony export */ mapAttachmentPropertyToAttchmentObject: () => (/* binding */ mapAttachmentPropertyToAttchmentObject) /* harmony export */ }); /** * @copyright Copyright (c) 2022 Mikhail Sazanov * * @author Mikhail Sazanov * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Creates a complete attachment object based on given props * * @param {object} props The attachment properties already provided * @return {object} */ const getDefaultAttachmentObject = function () { let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return Object.assign({}, { // The calendar-js attachment property attachmentProperty: null, // The file name of the attachment fileName: null, // The attachment mime type formatType: null, // The uri of the attachment uri: null, // The value from calendar object value: null, // Preview of file xNcHasPreview: null, // File id in NC xNcFileId: null }, props); }; /** * Maps a calendar-js attachment property to our attachment object * * @param {attachmentProperty} attachmentProperty The calendar-js attachmentProperty to turn into a attachment object * @return {object} */ const mapAttachmentPropertyToAttchmentObject = attachmentProperty => { return getDefaultAttachmentObject({ attachmentProperty, fileName: attachmentProperty.getParameterFirstValue('FILENAME'), formatType: attachmentProperty.formatType, uri: attachmentProperty.uri, value: attachmentProperty.value, xNcHasPreview: attachmentProperty.getParameterFirstValue('X-NC-HAS-PREVIEW') === 'true', xNcFileId: attachmentProperty.getParameterFirstValue('X-NC-FILE-ID') }); }; /***/ }), /***/ "./src/models/attendee.js": /*!********************************!*\ !*** ./src/models/attendee.js ***! \********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getDefaultAttendeeObject: () => (/* binding */ getDefaultAttendeeObject), /* harmony export */ mapAttendeePropertyToAttendeeObject: () => (/* binding */ mapAttendeePropertyToAttendeeObject) /* harmony export */ }); /** * @copyright Copyright (c) 2020 Georg Ehrke * @copyright Copyright (c) 2023 Jonas Heinrich * * @author Georg Ehrke * @author Jonas Heinrich * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Creates a complete attendee object based on given props * * TODO: * - we should eventually support delegatedFrom and delegatedTo * * @param {object} props The attendee properties already provided * @return {object} */ const getDefaultAttendeeObject = function () { let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return Object.assign({}, { // The calendar-js attendee property attendeeProperty: null, // The display-name of the attendee commonName: null, // The calendar-user-type of the attendee calendarUserType: 'INDIVIDUAL', // The participation status of the attendee participationStatus: 'NEEDS-ACTION', // The role of the attendee role: 'REQ-PARTICIPANT', // The RSVP for the attendee rsvp: false, // The uri of the attendee uri: null, // Member address of the attendee member: null }, props); }; /** * Maps a calendar-js attendee property to our attendee object * * @param {AttendeeProperty} attendeeProperty The calendar-js attendeeProperty to turn into a attendee object * @return {object} */ const mapAttendeePropertyToAttendeeObject = attendeeProperty => { return getDefaultAttendeeObject({ attendeeProperty, commonName: attendeeProperty.commonName, calendarUserType: attendeeProperty.userType, participationStatus: attendeeProperty.participationStatus, role: attendeeProperty.role, rsvp: attendeeProperty.rsvp, uri: attendeeProperty.email, member: attendeeProperty.member }); }; /***/ }), /***/ "./src/models/calendar.js": /*!********************************!*\ !*** ./src/models/calendar.js ***! \********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getDefaultCalendarObject: () => (/* binding */ getDefaultCalendarObject), /* harmony export */ mapDavCollectionToCalendar: () => (/* binding */ mapDavCollectionToCalendar) /* harmony export */ }); /* harmony import */ var _utils_color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/color.js */ "./src/utils/color.js"); /* harmony import */ var _calendarShare_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./calendarShare.js */ "./src/models/calendarShare.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Creates a complete calendar-object based on given props * * @param {object} props Calendar-props already provided * @return {object} */ const getDefaultCalendarObject = function () { let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return Object.assign({}, { // Id of the calendar id: '', // Visible display name displayName: '', // Color of the calendar color: (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_0__.uidToHexColor)(''), // Whether or not the calendar is visible in the grid enabled: true, // Whether or not the calendar is loading events at the moment loading: false, // Whether this calendar supports VEvents supportsEvents: true, // Whether this calendar supports VJournals supportsJournals: false, // Whether this calendar supports VTodos supportsTasks: false, // The principal uri of the owner owner: '', // Timezone set for this calendar timezone: null, // List of shares shares: [], // Published url publishURL: null, // Internal CalDAV url of this calendar url: '', // Whether this calendar is read-only readOnly: false, // The order of this calendar in the calendar-list order: 0, // Whether or not the calendar is shared with me isSharedWithMe: false, // Whether or not the calendar can be shared by me canBeShared: false, // Whether or not the calendar can be published by me canBePublished: false, // Reference to cdav-lib object dav: false, // All calendar-objects from this calendar that have already been fetched calendarObjects: [], // Time-ranges that have already been fetched for this calendar fetchedTimeRanges: [] }, props); }; /** * Map a dav collection to our calendar object model * * @param {object} calendar The calendar object from the cdav library * @param {object=} currentUserPrincipal The principal model of the current user principal * @return {object} */ const mapDavCollectionToCalendar = (calendar, currentUserPrincipal) => { const id = btoa(calendar.url); const displayName = calendar.displayname || getCalendarUriFromUrl(calendar.url); // calendar.color can be set to anything on the server, // so make sure it's something that remotely looks like a color let color = (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_0__.detectColor)(calendar.color); if (!color) { // As fallback if we don't know what color that is supposed to be color = (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_0__.uidToHexColor)(displayName); } const supportsEvents = calendar.components.includes('VEVENT'); const supportsJournals = calendar.components.includes('VJOURNAL'); const supportsTasks = calendar.components.includes('VTODO'); const owner = calendar.owner; const readOnly = !calendar.isWriteable(); const canBeShared = calendar.isShareable(); const canBePublished = calendar.isPublishable(); const order = calendar.order || 0; const url = calendar.url; const publishURL = calendar.publishURL || null; const timezone = calendar.timezone || null; let isSharedWithMe = false; if (!currentUserPrincipal) { // If the user is not authenticated, the calendar // will always be marked as shared with them isSharedWithMe = true; } else { isSharedWithMe = owner !== currentUserPrincipal.url; } let enabled; if (!currentUserPrincipal) { // If the user is not authenticated, // always enable the calendar enabled = true; } else if (typeof calendar.enabled === 'boolean') { // If calendar-enabled is set, we will just take that enabled = calendar.enabled; } else { // If there is no calendar-enabled, // we will display the calendar by default and set enabled enabled = true; calendar.enabled = true; } const shares = []; if (!!currentUserPrincipal && Array.isArray(calendar.shares)) { for (const share of calendar.shares) { if (share.href === currentUserPrincipal.principalScheme) { continue; } shares.push((0,_calendarShare_js__WEBPACK_IMPORTED_MODULE_1__.mapDavShareeToCalendarShareObject)(share)); } } return getDefaultCalendarObject({ id, displayName, color, order, url, enabled, supportsEvents, supportsJournals, supportsTasks, isSharedWithMe, owner, readOnly, publishURL, canBeShared, canBePublished, shares, timezone, dav: calendar }); }; /** * Gets the calendar uri from the url * * @param {string} url The url to get calendar uri from * @return {string} */ function getCalendarUriFromUrl(url) { if (url.endsWith('/')) { url = url.substring(0, url.length - 1); } return url.substring(url.lastIndexOf('/') + 1); } /***/ }), /***/ "./src/models/calendarObject.js": /*!**************************************!*\ !*** ./src/models/calendarObject.js ***! \**************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getDefaultCalendarObjectObject: () => (/* binding */ getDefaultCalendarObjectObject), /* harmony export */ getKeyValueIcsProperty: () => (/* binding */ getKeyValueIcsProperty), /* harmony export */ mapCDavObjectToCalendarObject: () => (/* binding */ mapCDavObjectToCalendarObject), /* harmony export */ mapCalendarJsToCalendarObject: () => (/* binding */ mapCalendarJsToCalendarObject), /* harmony export */ setCustomKeyValueToIcsAndReturnIcs: () => (/* binding */ setCustomKeyValueToIcsAndReturnIcs), /* harmony export */ setCustomKeyValuesArrayToIcsAndReturnIcs: () => (/* binding */ setCustomKeyValuesArrayToIcsAndReturnIcs) /* harmony export */ }); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /* harmony import */ var _consts_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./consts.js */ "./src/models/consts.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Creates a complete calendar-object-object based on given props * * @param {object} props Calendar-object-props already provided * @return {object} */ const getDefaultCalendarObjectObject = function () { let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return Object.assign({}, { // Id of this calendar-object id: null, // Id of the associated calendar calendarId: null, // The cdav-library object storing the calendar-object dav: null, // The parsed calendar-js object calendarComponent: null, // The uid of the calendar-object uid: null, // The uri of the calendar-object uri: null, // The type of calendar-object objectType: null, // Whether or not the calendar-object is an event isEvent: false, // Whether or not the calendar-object is a journal isJournal: false, // Whether or not the calendar-object is a task isTodo: false, // Whether or not the calendar-object exists on the server existsOnServer: false }, props); }; /** * Maps a calendar-object from c-dav to our calendar-object object * * @param {VObject} dav The c-dav VObject * @param {string} calendarId The calendar-id this object is associated with * @return {object} */ const mapCDavObjectToCalendarObject = (dav, calendarId) => { const parserManager = (0,_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.getParserManager)(); const parser = parserManager.getParserForFileType('text/calendar'); // This should not be the case, but let's just be on the safe side if (typeof dav.data !== 'string' || dav.data.trim() === '') { throw new Error('Empty calendar object'); } parser.parse(dav.data); const calendarComponentIterator = parser.getItemIterator(); const calendarComponent = calendarComponentIterator.next().value; if (!calendarComponent) { throw new Error('Empty calendar object'); } const vObjectIterator = calendarComponent.getVObjectIterator(); const firstVObject = vObjectIterator.next().value; return getDefaultCalendarObjectObject({ id: btoa(dav.url), calendarId, dav, calendarComponent, uid: firstVObject.uid, uri: dav.url, objectType: firstVObject.name, isEvent: firstVObject.name === _consts_js__WEBPACK_IMPORTED_MODULE_1__.COMPONENT_NAME_EVENT, isJournal: firstVObject.name === _consts_js__WEBPACK_IMPORTED_MODULE_1__.COMPONENT_NAME_JOURNAL, isTodo: firstVObject.name === _consts_js__WEBPACK_IMPORTED_MODULE_1__.COMPONENT_NAME_VTODO, existsOnServer: true }); }; /** * Maps a calendar-component from calendar-js to our calendar-object object * * @param {CalendarComponent} calendarComponent The calendarComponent to create the calendarObject from * @param {string=} calendarId The associated calendar if applicable * @return {object} */ const mapCalendarJsToCalendarObject = function (calendarComponent) { let calendarId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; const vObjectIterator = calendarComponent.getVObjectIterator(); const firstVObject = vObjectIterator.next().value; if (!firstVObject) { throw new Error('Calendar object without vobjects'); } return getDefaultCalendarObjectObject({ calendarId, calendarComponent, uid: firstVObject.uid, objectType: firstVObject.name, isEvent: firstVObject.name === _consts_js__WEBPACK_IMPORTED_MODULE_1__.COMPONENT_NAME_EVENT, isJournal: firstVObject.name === _consts_js__WEBPACK_IMPORTED_MODULE_1__.COMPONENT_NAME_JOURNAL, isTodo: firstVObject.name === _consts_js__WEBPACK_IMPORTED_MODULE_1__.COMPONENT_NAME_VTODO }); }; const getKeyValueIcsProperty = (key, value) => { return "".concat(key, ":").concat(value, "\r\n"); }; const setCustomKeyValueToIcsAndReturnIcs = (ics, key, value) => { const property = getKeyValueIcsProperty(key, value); ics = ics.replace('END:VEVENT', "".concat(property, "END:VEVENT")); return ics; }; const setCustomKeyValuesArrayToIcsAndReturnIcs = (ics, keyValueArray) => { for (var key in keyValueArray) { const value = keyValueArray[key] ? keyValueArray[key] : ''; ics = setCustomKeyValueToIcsAndReturnIcs(ics, key, value); } return ics; }; /***/ }), /***/ "./src/models/calendarShare.js": /*!*************************************!*\ !*** ./src/models/calendarShare.js ***! \*************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getDefaultCalendarShareObject: () => (/* binding */ getDefaultCalendarShareObject), /* harmony export */ mapDavShareeToCalendarShareObject: () => (/* binding */ mapDavShareeToCalendarShareObject) /* harmony export */ }); /* harmony import */ var _consts_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts.js */ "./src/models/consts.js"); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Creates a complete calendar-share-object based on given props * * @param {object} props Calendar-share-props already provided * @return {object} */ const getDefaultCalendarShareObject = function () { let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return Object.assign({}, { // Unique identifier id: null, // Displayname of the sharee displayName: null, // Whether or not share is writable writeable: false, // Whether or not sharee is an individual user isUser: false, // Whether or not sharee is an admin-defined group isGroup: false, // Whether or not sharee is a user-defined group isCircle: false, // Uri necessary for deleting / updating share uri: null }, props); }; /** * Map a dav collection to our calendar object model * * @param {object} sharee The sharee object from the cdav library shares * @return {object} */ const mapDavShareeToCalendarShareObject = sharee => { // sharee.href might contain non-latin characters, so let's uri encode it first const id = btoa(encodeURI(sharee.href)); let displayName; if (sharee['common-name'] && sharee['common-name'].trim() !== '') { displayName = sharee['common-name']; } else if (sharee.href.startsWith(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_GROUP)) { displayName = decodeURIComponent(sharee.href.slice(28)); } else if (sharee.href.startsWith(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_USER)) { displayName = decodeURIComponent(sharee.href.slice(27)); } else { displayName = sharee.href; } const writeable = sharee.access[0].endsWith('read-write'); const isUser = sharee.href.startsWith(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_USER); const isGroup = sharee.href.startsWith(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_GROUP); const isCircle = sharee.href.startsWith(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_CIRCLE); const uri = sharee.href; return getDefaultCalendarShareObject({ id, displayName, writeable, isUser, isGroup, isCircle, uri }); }; /***/ }), /***/ "./src/models/consts.js": /*!******************************!*\ !*** ./src/models/consts.js ***! \******************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ CALDAV_BIRTHDAY_CALENDAR: () => (/* binding */ CALDAV_BIRTHDAY_CALENDAR), /* harmony export */ COMPONENT_NAME_EVENT: () => (/* binding */ COMPONENT_NAME_EVENT), /* harmony export */ COMPONENT_NAME_JOURNAL: () => (/* binding */ COMPONENT_NAME_JOURNAL), /* harmony export */ COMPONENT_NAME_VTODO: () => (/* binding */ COMPONENT_NAME_VTODO), /* harmony export */ IMPORT_STAGE_AWAITING_USER_SELECT: () => (/* binding */ IMPORT_STAGE_AWAITING_USER_SELECT), /* harmony export */ IMPORT_STAGE_DEFAULT: () => (/* binding */ IMPORT_STAGE_DEFAULT), /* harmony export */ IMPORT_STAGE_IMPORTING: () => (/* binding */ IMPORT_STAGE_IMPORTING), /* harmony export */ IMPORT_STAGE_PROCESSING: () => (/* binding */ IMPORT_STAGE_PROCESSING), /* harmony export */ ITIP_MESSAGE_ADD: () => (/* binding */ ITIP_MESSAGE_ADD), /* harmony export */ ITIP_MESSAGE_CANCEL: () => (/* binding */ ITIP_MESSAGE_CANCEL), /* harmony export */ ITIP_MESSAGE_COUNTER: () => (/* binding */ ITIP_MESSAGE_COUNTER), /* harmony export */ ITIP_MESSAGE_DECLINECOUNTER: () => (/* binding */ ITIP_MESSAGE_DECLINECOUNTER), /* harmony export */ ITIP_MESSAGE_PUBLISH: () => (/* binding */ ITIP_MESSAGE_PUBLISH), /* harmony export */ ITIP_MESSAGE_REFRESH: () => (/* binding */ ITIP_MESSAGE_REFRESH), /* harmony export */ ITIP_MESSAGE_REPLY: () => (/* binding */ ITIP_MESSAGE_REPLY), /* harmony export */ ITIP_MESSAGE_REQUEST: () => (/* binding */ ITIP_MESSAGE_REQUEST), /* harmony export */ PRINCIPAL_PREFIX_CALENDAR_RESOURCE: () => (/* binding */ PRINCIPAL_PREFIX_CALENDAR_RESOURCE), /* harmony export */ PRINCIPAL_PREFIX_CALENDAR_ROOM: () => (/* binding */ PRINCIPAL_PREFIX_CALENDAR_ROOM), /* harmony export */ PRINCIPAL_PREFIX_CIRCLE: () => (/* binding */ PRINCIPAL_PREFIX_CIRCLE), /* harmony export */ PRINCIPAL_PREFIX_GROUP: () => (/* binding */ PRINCIPAL_PREFIX_GROUP), /* harmony export */ PRINCIPAL_PREFIX_USER: () => (/* binding */ PRINCIPAL_PREFIX_USER) /* harmony export */ }); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const COMPONENT_NAME_EVENT = 'VEVENT'; const COMPONENT_NAME_JOURNAL = 'VJOURNAL'; const COMPONENT_NAME_VTODO = 'VTODO'; const ITIP_MESSAGE_ADD = 'ADD'; const ITIP_MESSAGE_CANCEL = 'CANCEL'; const ITIP_MESSAGE_COUNTER = 'COUNTER'; const ITIP_MESSAGE_DECLINECOUNTER = 'DECLINECOUNTER'; const ITIP_MESSAGE_PUBLISH = 'PUBLISH'; const ITIP_MESSAGE_REFRESH = 'REFRESH'; const ITIP_MESSAGE_REPLY = 'REPLY'; const ITIP_MESSAGE_REQUEST = 'REQUEST'; const PRINCIPAL_PREFIX_USER = 'principal:principals/users/'; const PRINCIPAL_PREFIX_GROUP = 'principal:principals/groups/'; const PRINCIPAL_PREFIX_CIRCLE = 'principal:principals/circles/'; const PRINCIPAL_PREFIX_CALENDAR_RESOURCE = 'principal:principals/calendar-resources/'; const PRINCIPAL_PREFIX_CALENDAR_ROOM = 'principal:principals/calendar-rooms/'; const CALDAV_BIRTHDAY_CALENDAR = 'contact_birthdays'; const IMPORT_STAGE_DEFAULT = 'default'; const IMPORT_STAGE_IMPORTING = 'importing'; const IMPORT_STAGE_AWAITING_USER_SELECT = 'awaitingUserSelect'; const IMPORT_STAGE_PROCESSING = 'processing'; /***/ }), /***/ "./src/models/event.js": /*!*****************************!*\ !*** ./src/models/event.js ***! \*****************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ copyCalendarObjectInstanceIntoEventComponent: () => (/* binding */ copyCalendarObjectInstanceIntoEventComponent), /* harmony export */ getDefaultEventObject: () => (/* binding */ getDefaultEventObject), /* harmony export */ mapEventComponentToEventObject: () => (/* binding */ mapEventComponentToEventObject) /* harmony export */ }); /* harmony import */ var _utils_date_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/date.js */ "./src/utils/date.js"); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /* harmony import */ var _utils_color_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/color.js */ "./src/utils/color.js"); /* harmony import */ var _alarm_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./alarm.js */ "./src/models/alarm.js"); /* harmony import */ var _attendee_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./attendee.js */ "./src/models/attendee.js"); /* harmony import */ var _attachment_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./attachment.js */ "./src/models/attachment.js"); /* harmony import */ var _recurrenceRule_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./recurrenceRule.js */ "./src/models/recurrenceRule.js"); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Creates a complete calendar-object-instance-object based on given props * * @param {object} props The props already provided * @return {object} */ const getDefaultEventObject = function () { let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return Object.assign({}, { // The real event-component coming from calendar-js eventComponent: null, // Title of the event title: null, // Start date of the event startDate: null, // Timezone of the start date startTimezoneId: null, // End date of the event endDate: null, // Timezone of the end date endTimezoneId: null, // Indicator whether or not event is all-day isAllDay: false, // Whether or not the user is allowed to toggle the all-day checkbox canModifyAllDay: true, // Location that the event takes places in location: null, //client of the event client: null, //embalmer(Thanato) of the event embalmer: null, //absenceType absenceType: null, //Private isPrivate: false, // Whether or not the event is return to siege returnToSiege: false, //comment of the event comment: null, // description of the event description: null, // Access class of the event (PUBLIC, PRIVATE, CONFIDENTIAL) accessClass: null, // Status of the event (CONFIRMED, TENTATIVE, CANCELLED) status: null, // Whether or not to block this event in Free-Busy reports (TRANSPARENT, OPAQUE) timeTransparency: null, // The recurrence rule of this event. We only support one recurrence-rule recurrenceRule: (0,_recurrenceRule_js__WEBPACK_IMPORTED_MODULE_6__.getDefaultRecurrenceRuleObject)(), // Whether or not this event has multiple recurrence-rules hasMultipleRRules: false, // Whether or not this is the master item isMasterItem: false, // Whether or not this is a recurrence-exception isRecurrenceException: false, // Whether or not the applied modifications require to update this and all future forceThisAndAllFuture: false, // Whether or not it's possible to create a recurrence-exception for this event canCreateRecurrenceException: false, // Attendees of this event attendees: [], // Organizer of the event organizer: null, // Alarm of the event alarms: [], // Custom color of the event customColor: null, // Categories categories: [], // The event's UID emailId: null, // Attachments of this event attachments: [] }, props); }; /** * * @param {EventComponent} eventComponent The calendar-js eventComponent * @return {object} */ const mapEventComponentToEventObject = eventComponent => { const eventObject = getDefaultEventObject({ eventComponent, title: eventComponent.title, isAllDay: eventComponent.isAllDay(), isPrivate: false, returnToSiege: false, canModifyAllDay: eventComponent.canModifyAllDay(), location: eventComponent.location, client: "CLIENT", embalmer: "TEST", comment: "", absenceType: "", emailId: null, description: eventComponent.description, accessClass: eventComponent.accessClass, status: eventComponent.status, timeTransparency: eventComponent.timeTransparency, categories: Array.from(eventComponent.getCategoryIterator()), isMasterItem: eventComponent.isMasterItem(), isRecurrenceException: eventComponent.isRecurrenceException(), canCreateRecurrenceException: eventComponent.canCreateRecurrenceExceptions() }); /** * According to RFC5545, DTEND is exclusive. This is rather intuitive for timed-events * but rather unintuitive for all-day events * * That's why, when an event is all-day from 2019-10-03 to 2019-10-04, * it will be displayed as 2019-10-03 to 2019-10-03 in the editor. */ eventObject.startDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_0__.getDateFromDateTimeValue)(eventComponent.startDate); eventObject.startTimezoneId = eventComponent.startDate.timezoneId; if (eventComponent.isAllDay()) { const endDate = eventComponent.endDate.clone(); endDate.addDuration(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_1__.DurationValue.fromSeconds(-1 * 60 * 60 * 24)); eventObject.endDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_0__.getDateFromDateTimeValue)(endDate); } else { eventObject.endDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_0__.getDateFromDateTimeValue)(eventComponent.endDate); } eventObject.endTimezoneId = eventComponent.endDate.timezoneId; /** * Extract organizer if there is any */ if (eventComponent.organizer) { const organizerProperty = eventComponent.getFirstProperty('ORGANIZER'); eventObject.organizer = { commonName: organizerProperty.commonName, uri: organizerProperty.email, attendeeProperty: organizerProperty }; } /** * Extract alarms */ for (const alarm of eventComponent.getAlarmIterator()) { eventObject.alarms.push((0,_alarm_js__WEBPACK_IMPORTED_MODULE_3__.mapAlarmComponentToAlarmObject)(alarm)); } /** * Extract attendees */ for (const attendee of eventComponent.getAttendeeIterator()) { eventObject.attendees.push((0,_attendee_js__WEBPACK_IMPORTED_MODULE_4__.mapAttendeePropertyToAttendeeObject)(attendee)); } /** * Extract attachments */ for (const attachment of eventComponent.getPropertyIterator('ATTACH')) { eventObject.attachments.push((0,_attachment_js__WEBPACK_IMPORTED_MODULE_5__.mapAttachmentPropertyToAttchmentObject)(attachment)); } /** * Extract recurrence-rule */ const recurrenceRuleIterator = eventComponent.getPropertyIterator('RRULE'); const recurrenceRuleFirstIteration = recurrenceRuleIterator.next(); const firstRecurrenceRule = recurrenceRuleFirstIteration.value; if (firstRecurrenceRule) { eventObject.recurrenceRule = (0,_recurrenceRule_js__WEBPACK_IMPORTED_MODULE_6__.mapRecurrenceRuleValueToRecurrenceRuleObject)(firstRecurrenceRule.getFirstValue(), eventComponent.startDate); eventObject.hasMultipleRRules = !recurrenceRuleIterator.next().done; } /** * Convert the CSS 3 color name to a hex color */ if (eventComponent.hasProperty('COLOR')) { const hexColor = (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_2__.getHexForColorName)(eventComponent.getFirstPropertyFirstValue('COLOR')); if (hexColor !== null) { eventObject.customColor = hexColor; } } if (eventComponent.hasProperty('CLIENT')) { eventObject.client = eventComponent.getFirstPropertyFirstValue('CLIENT'); } if (eventComponent.hasProperty('ISPRIVATE')) { eventObject.isPrivate = eventComponent.getFirstPropertyFirstValue('ISPRIVATE') === '1' ? true : false; } if (eventComponent.hasProperty('RETURNTOSIEGE')) { eventObject.returnToSiege = eventComponent.getFirstPropertyFirstValue('RETURNTOSIEGE') === '1' ? true : false; } if (eventComponent.hasProperty('EMBALMER')) { eventObject.embalmer = eventComponent.getFirstPropertyFirstValue('EMBALMER'); } if (eventComponent.hasProperty('COMMENT')) { eventObject.comment = eventComponent.getFirstPropertyFirstValue('COMMENT'); } if (eventComponent.hasProperty('ABSENCETYPE')) { eventObject.absenceType = eventComponent.getFirstPropertyFirstValue('ABSENCETYPE'); } if (eventComponent.hasProperty('EMAILID')) { eventObject.emailId = eventComponent.getFirstPropertyFirstValue('EMAILID'); } return eventObject; }; /** * Copy data from a calendar-object-instance into a calendar-js event-component * * @param {object} eventObject The calendar-object-instance object * @param {EventComponent} eventComponent The calendar-js EventComponent object */ const copyCalendarObjectInstanceIntoEventComponent = (eventObject, eventComponent) => { eventComponent.title = eventObject.title; eventComponent.location = eventObject.location; eventComponent.client = eventObject.client; eventComponent.embalmer = eventObject.embalmer; eventComponent.isPrivate = eventObject.isPrivate; eventComponent.returnToSiege = eventObject.returnToSiege; eventComponent.comment = eventObject.comment; eventComponent.emailId = eventObject.emailId; eventComponent.description = eventObject.description; eventComponent.accessClass = eventObject.accessClass; eventComponent.status = eventObject.status; eventComponent.timeTransparency = eventObject.timeTransparency; for (const category of eventObject.categories) { eventComponent.addCategory(category); } if (eventObject.organizer) { eventComponent.setOrganizerFromNameAndEMail(eventObject.organizer.commonName, eventObject.organizer.uri); } for (const alarm of eventObject.alarms) { if (alarm.isRelative) { const duration = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_1__.DurationValue.fromSeconds(alarm.relativeTrigger); eventComponent.addRelativeAlarm(alarm.type, duration, alarm.relativeIsRelatedToStart); } else { const date = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_1__.DateTimeValue.fromJSDate(alarm.absoluteDate); eventComponent.addAbsoluteAlarm(alarm.type, date); } } for (const attendee of eventObject.attendees) { eventComponent.addProperty(attendee.attendeeProperty); } for (const rule of eventObject.eventComponent.getPropertyIterator('RRULE')) { eventComponent.addProperty(rule); } if (eventObject.customColor) { eventComponent.color = (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_2__.getClosestCSS3ColorNameForHex)(eventObject.customColor); } }; /***/ }), /***/ "./src/models/principal.js": /*!*********************************!*\ !*** ./src/models/principal.js ***! \*********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getDefaultPrincipalObject: () => (/* binding */ getDefaultPrincipalObject), /* harmony export */ mapDavToPrincipal: () => (/* binding */ mapDavToPrincipal) /* harmony export */ }); /* harmony import */ var _consts_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts.js */ "./src/models/consts.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Creates a complete principal-object based on given props * * @param {object} props Principal-props already provided * @return {any} */ const getDefaultPrincipalObject = props => Object.assign({}, { // Id of the principal id: null, // Calendar-user-type. This can be INDIVIDUAL, GROUP, RESOURCE or ROOM calendarUserType: 'INDIVIDUAL', // E-Mail address of principal used for scheduling emailAddress: null, // The principals display-name // TODO: this should be renamed to displayName displayname: null, // principalScheme principalScheme: null, // The internal user-id in case it is of type INDIVIDUAL and a user // TODO: userId is deprecrated, use principalId instead userId: null, // url to the DAV-principal-resource url: null, // The cdav-library object dav: null, // Whether or not this principal represents a circle isCircle: false, // Whether or not this principal represents a user isUser: false, // Whether or not this principal represents a group isGroup: false, // Whether or not this principal represents a calendar-resource isCalendarResource: false, // Whether or not this principal represents a calendar-room isCalendarRoom: false, // The id of the principal without prefix. e.g. userId / groupId / etc. principalId: null, // The url of the default calendar for invitations scheduleDefaultCalendarUrl: null }, props); /** * converts a dav principal into a vuex object * * @param {object} dav cdav-library Principal object * @return {object} */ const mapDavToPrincipal = dav => { const id = btoa(encodeURI(dav.url)); const calendarUserType = dav.calendarUserType; const principalScheme = dav.principalScheme; const emailAddress = dav.email; const displayname = dav.displayname; const scheduleDefaultCalendarUrl = dav.scheduleDefaultCalendarUrl; const isUser = dav.principalScheme.startsWith(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_USER); const isGroup = dav.principalScheme.startsWith(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_GROUP); const isCircle = dav.principalScheme.startsWith(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_CIRCLE); const isCalendarResource = dav.principalScheme.startsWith(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_CALENDAR_RESOURCE); const isCalendarRoom = dav.principalScheme.startsWith(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_CALENDAR_ROOM); let principalId = null; if (isUser) { principalId = dav.principalScheme.substring(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_USER.length); } else if (isGroup) { principalId = dav.principalScheme.substring(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_GROUP.length); } else if (isCircle) { principalId = dav.principalScheme.substring(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_CIRCLE.length); } else if (isCalendarResource) { principalId = dav.principalScheme.substring(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_CALENDAR_RESOURCE.length); } else if (isCalendarRoom) { principalId = dav.principalScheme.substring(_consts_js__WEBPACK_IMPORTED_MODULE_0__.PRINCIPAL_PREFIX_CALENDAR_ROOM.length); } const url = dav.principalUrl; const userId = dav.userId; return getDefaultPrincipalObject({ id, calendarUserType, principalScheme, emailAddress, displayname, url, dav, isUser, isGroup, isCircle, isCalendarResource, isCalendarRoom, principalId, userId, scheduleDefaultCalendarUrl }); }; /***/ }), /***/ "./src/models/recurrenceRule.js": /*!**************************************!*\ !*** ./src/models/recurrenceRule.js ***! \**************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getDefaultRecurrenceRuleObject: () => (/* binding */ getDefaultRecurrenceRuleObject), /* harmony export */ mapRecurrenceRuleValueToRecurrenceRuleObject: () => (/* binding */ mapRecurrenceRuleValueToRecurrenceRuleObject) /* harmony export */ }); /* harmony import */ var _utils_recurrence_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/recurrence.js */ "./src/utils/recurrence.js"); /* harmony import */ var _utils_date_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/date.js */ "./src/utils/date.js"); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Creates a complete recurrence-rule-object based on given props * * @param {object} props Recurrence-rule-object-props already provided * @return {object} */ const getDefaultRecurrenceRuleObject = function () { let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return Object.assign({}, { // The calendar-js recurrence-rule value recurrenceRuleValue: null, // The frequency of the recurrence-rule (DAILY, WEEKLY, ...) frequency: 'NONE', // The interval of the recurrence-rule, must be a positive integer interval: 1, // Positive integer if recurrence-rule limited by count, null otherwise count: null, // Date if recurrence-rule limited by date, null otherwise // We do not store a timezone here, since we only care about the date part until: null, // List of byDay components to limit/expand the recurrence-rule byDay: [], // List of byMonth components to limit/expand the recurrence-rule byMonth: [], // List of byMonthDay components to limit/expand the recurrence-rule byMonthDay: [], // A position to limit the recurrence-rule (e.g. -1 for last Friday) bySetPosition: null, // Whether or not the rule is not supported for editing isUnsupported: false }, props); }; /** * Maps a calendar-js recurrence-rule-value to an recurrence-rule-object * * @param {RecurValue} recurrenceRuleValue The calendar-js recurrence rule value * @param {DateTimeValue} baseDate The base-date used to fill unset values * @return {object} */ const mapRecurrenceRuleValueToRecurrenceRuleObject = (recurrenceRuleValue, baseDate) => { switch (recurrenceRuleValue.frequency) { case 'DAILY': return mapDailyRuleValueToRecurrenceRuleObject(recurrenceRuleValue); case 'WEEKLY': return mapWeeklyRuleValueToRecurrenceRuleObject(recurrenceRuleValue, baseDate); case 'MONTHLY': return mapMonthlyRuleValueToRecurrenceRuleObject(recurrenceRuleValue, baseDate); case 'YEARLY': return mapYearlyRuleValueToRecurrenceRuleObject(recurrenceRuleValue, baseDate); default: // SECONDLY, MINUTELY, HOURLY return getDefaultRecurrenceRuleObjectForRecurrenceValue(recurrenceRuleValue, { isUnsupported: true }); } }; const FORBIDDEN_BY_PARTS_DAILY = ['BYSECOND', 'BYMINUTE', 'BYHOUR', 'BYDAY', 'BYMONTHDAY', 'BYYEARDAY', 'BYWEEKNO', 'BYMONTH', 'BYSETPOS']; const FORBIDDEN_BY_PARTS_WEEKLY = ['BYSECOND', 'BYMINUTE', 'BYHOUR', 'BYMONTHDAY', 'BYYEARDAY', 'BYWEEKNO', 'BYMONTH', 'BYSETPOS']; const FORBIDDEN_BY_PARTS_MONTHLY = ['BYSECOND', 'BYMINUTE', 'BYHOUR', 'BYYEARDAY', 'BYWEEKNO', 'BYMONTH']; const FORBIDDEN_BY_PARTS_YEARLY = ['BYSECOND', 'BYMINUTE', 'BYHOUR', 'BYMONTHDAY', 'BYYEARDAY', 'BYWEEKNO']; const SUPPORTED_BY_DAY_WEEKLY = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA']; /** * Get all numbers between start and end as strings * * @param {number} start Lower end of range * @param {number} end Upper end of range * @return {string[]} */ const getRangeAsStrings = (start, end) => { return Array.apply(null, Array(end - start + 1)).map((_, n) => n + start).map(s => s.toString()); }; const SUPPORTED_BY_MONTHDAY_MONTHLY = getRangeAsStrings(1, 31); const SUPPORTED_BY_MONTH_YEARLY = getRangeAsStrings(1, 12); /** * Maps a daily calendar-js recurrence-rule-value to an recurrence-rule-object * * @param {RecurValue} recurrenceRuleValue The calendar-js recurrence rule value * @return {object} */ const mapDailyRuleValueToRecurrenceRuleObject = recurrenceRuleValue => { /** * We only support DAILY rules without any by-parts in the editor. * If the recurrence-rule contains any by-parts, mark it as unsupported. */ const isUnsupported = containsRecurrenceComponent(recurrenceRuleValue, FORBIDDEN_BY_PARTS_DAILY); return getDefaultRecurrenceRuleObjectForRecurrenceValue(recurrenceRuleValue, { isUnsupported }); }; /** * Maps a weekly calendar-js recurrence-rule-value to an recurrence-rule-object * * @param {RecurValue} recurrenceRuleValue The calendar-js recurrence rule value * @param {DateTimeValue} baseDate The base-date used to fill unset values * @return {object} */ const mapWeeklyRuleValueToRecurrenceRuleObject = (recurrenceRuleValue, baseDate) => { /** * For WEEKLY recurrences, our editor only allows BYDAY * * As defined in RFC5545 3.3.10. Recurrence Rule: * > Each BYDAY value can also be preceded by a positive (+n) or * > negative (-n) integer. If present, this indicates the nth * > occurrence of a specific day within the MONTHLY or YEARLY "RRULE". * * RFC 5545 specifies other components, which can be used along WEEKLY. * Among them are BYMONTH and BYSETPOS. We don't support those. */ const containsUnsupportedByParts = containsRecurrenceComponent(recurrenceRuleValue, FORBIDDEN_BY_PARTS_WEEKLY); const containsInvalidByDayPart = recurrenceRuleValue.getComponent('BYDAY').some(weekday => !SUPPORTED_BY_DAY_WEEKLY.includes(weekday)); const isUnsupported = containsUnsupportedByParts || containsInvalidByDayPart; const byDay = recurrenceRuleValue.getComponent('BYDAY').filter(weekday => SUPPORTED_BY_DAY_WEEKLY.includes(weekday)); // If the BYDAY is empty, add the day that the event occurs in // E.g. if the event is on a Wednesday, automatically set BYDAY:WE if (byDay.length === 0) { byDay.push((0,_utils_recurrence_js__WEBPACK_IMPORTED_MODULE_0__.getWeekDayFromDate)(baseDate.jsDate)); } return getDefaultRecurrenceRuleObjectForRecurrenceValue(recurrenceRuleValue, { byDay, isUnsupported }); }; /** * Maps a monthly calendar-js recurrence-rule-value to an recurrence-rule-object * * @param {RecurValue} recurrenceRuleValue The calendar-js recurrence rule value * @param {DateTimeValue} baseDate The base-date used to fill unset values * @return {object} */ const mapMonthlyRuleValueToRecurrenceRuleObject = (recurrenceRuleValue, baseDate) => { /** * We only supports BYMONTHDAY, BYDAY, BYSETPOS in order to expand the monthly rule. * It supports either BYMONTHDAY or the combination of BYDAY and BYSETPOS. They have to be used exclusively * and cannot be combined. * * We do not support other BY-parts like BYMONTH * * For monthly recurrence-rules, BYDAY components are allowed to be preceded by positive or negative integers. * The Nextcloud-editor supports at most one BYDAY component with an integer. * If it's presented with such a BYDAY component, it will internally be converted to BYDAY without integer and BYSETPOS. * e.g. * BYDAY=3WE => BYDAY=WE,BYSETPOS=3 * * BYSETPOS is limited to -2, -1, 1, 2, 3, 4, 5 * Other values are not supported * * BYDAY is limited to "MO", "TU", "WE", "TH", "FR", "SA", "SU", * "MO,TU,WE,TH,FR,SA,SU", "MO,TU,WE,TH,FR", "SA,SU" * * BYMONTHDAY is limited to "1", "2", ..., "31" */ let isUnsupported = containsRecurrenceComponent(recurrenceRuleValue, FORBIDDEN_BY_PARTS_MONTHLY); let byDay = []; let bySetPosition = null; let byMonthDay = []; // This handles the first case, where we have a BYMONTHDAY rule if (containsRecurrenceComponent(recurrenceRuleValue, ['BYMONTHDAY'])) { // verify there is no BYDAY or BYSETPOS at the same time if (containsRecurrenceComponent(recurrenceRuleValue, ['BYDAY', 'BYSETPOS'])) { isUnsupported = true; } const containsInvalidByMonthDay = recurrenceRuleValue.getComponent('BYMONTHDAY').some(monthDay => !SUPPORTED_BY_MONTHDAY_MONTHLY.includes(monthDay.toString())); isUnsupported = isUnsupported || containsInvalidByMonthDay; byMonthDay = recurrenceRuleValue.getComponent('BYMONTHDAY').filter(monthDay => SUPPORTED_BY_MONTHDAY_MONTHLY.includes(monthDay.toString())).map(monthDay => monthDay.toString()); // This handles cases where we have both BYDAY and BYSETPOS } else if (containsRecurrenceComponent(recurrenceRuleValue, ['BYDAY']) && containsRecurrenceComponent(recurrenceRuleValue, ['BYSETPOS'])) { if (isAllowedByDay(recurrenceRuleValue.getComponent('BYDAY'))) { byDay = recurrenceRuleValue.getComponent('BYDAY'); } else { byDay = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU']; isUnsupported = true; } const setPositionArray = recurrenceRuleValue.getComponent('BYSETPOS'); if (setPositionArray.length === 1 && isAllowedBySetPos(setPositionArray[0])) { bySetPosition = setPositionArray[0]; } else { bySetPosition = 1; isUnsupported = true; } // This handles cases where we only have a BYDAY } else if (containsRecurrenceComponent(recurrenceRuleValue, ['BYDAY'])) { const byDayArray = recurrenceRuleValue.getComponent('BYDAY'); if (byDayArray.length > 1) { byMonthDay.push(baseDate.day.toString()); isUnsupported = true; } else { const firstElement = byDayArray[0]; const match = /^(-?\d)([A-Z]{2})$/.exec(firstElement); if (match) { const matchedBySetPosition = match[1]; const matchedByDay = match[2]; if (isAllowedBySetPos(matchedBySetPosition)) { byDay = [matchedByDay]; bySetPosition = parseInt(matchedBySetPosition, 10); } else { byDay = [matchedByDay]; bySetPosition = 1; isUnsupported = true; } } else { byMonthDay.push(baseDate.day.toString()); isUnsupported = true; } } // This is a fallback where we just default BYMONTHDAY to the start date of the event } else { byMonthDay.push(baseDate.day.toString()); } return getDefaultRecurrenceRuleObjectForRecurrenceValue(recurrenceRuleValue, { byDay, bySetPosition, byMonthDay, isUnsupported }); }; /** * Maps a yearly calendar-js recurrence-rule-value to an recurrence-rule-object * * @param {RecurValue} recurrenceRuleValue The calendar-js recurrence rule value * @param {DateTimeValue} baseDate The base-date used to fill unset values * @return {object} */ const mapYearlyRuleValueToRecurrenceRuleObject = (recurrenceRuleValue, baseDate) => { /** * We only supports BYMONTH, BYDAY, BYSETPOS in order to expand the yearly rule. * It supports a combination of them. * * We do not support other BY-parts. * * For yearly recurrence-rules, BYDAY components are allowed to be preceded by positive or negative integers. * The Nextcloud-editor supports at most one BYDAY component with an integer. * If it's presented with such a BYDAY component, it will internally be converted to BYDAY without integer and BYSETPOS. * e.g. * BYDAY=3WE => BYDAY=WE,BYSETPOS=3 * * BYSETPOS is limited to -2, -1, 1, 2, 3, 4, 5 * Other values are not supported * * BYDAY is limited to "MO", "TU", "WE", "TH", "FR", "SA", "SU", * "MO,TU,WE,TH,FR,SA,SU", "MO,TU,WE,TH,FR", "SA,SU" */ let isUnsupported = containsRecurrenceComponent(recurrenceRuleValue, FORBIDDEN_BY_PARTS_YEARLY); let byDay = []; let bySetPosition = null; let byMonth = []; if (containsRecurrenceComponent(recurrenceRuleValue, ['BYMONTH'])) { const containsInvalidByMonthDay = recurrenceRuleValue.getComponent('BYMONTH').some(month => !SUPPORTED_BY_MONTH_YEARLY.includes(month.toString())); isUnsupported = isUnsupported || containsInvalidByMonthDay; byMonth = recurrenceRuleValue.getComponent('BYMONTH').filter(monthDay => SUPPORTED_BY_MONTH_YEARLY.includes(monthDay.toString())).map(month => month.toString()); } else { byMonth.push(baseDate.month.toString()); } if (containsRecurrenceComponent(recurrenceRuleValue, ['BYDAY']) && containsRecurrenceComponent(recurrenceRuleValue, ['BYSETPOS'])) { if (isAllowedByDay(recurrenceRuleValue.getComponent('BYDAY'))) { byDay = recurrenceRuleValue.getComponent('BYDAY'); } else { byDay = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU']; isUnsupported = true; } const setPositionArray = recurrenceRuleValue.getComponent('BYSETPOS'); if (setPositionArray.length === 1 && isAllowedBySetPos(setPositionArray[0])) { bySetPosition = setPositionArray[0]; } else { bySetPosition = 1; isUnsupported = true; } } else if (containsRecurrenceComponent(recurrenceRuleValue, ['BYDAY'])) { const byDayArray = recurrenceRuleValue.getComponent('BYDAY'); if (byDayArray.length > 1) { isUnsupported = true; } else { const firstElement = byDayArray[0]; const match = /^(-?\d)([A-Z]{2})$/.exec(firstElement); if (match) { const matchedBySetPosition = match[1]; const matchedByDay = match[2]; if (isAllowedBySetPos(matchedBySetPosition)) { byDay = [matchedByDay]; bySetPosition = parseInt(matchedBySetPosition, 10); } else { byDay = [matchedByDay]; bySetPosition = 1; isUnsupported = true; } } else { isUnsupported = true; } } } return getDefaultRecurrenceRuleObjectForRecurrenceValue(recurrenceRuleValue, { byDay, bySetPosition, byMonth, isUnsupported }); }; /** * Checks if the given parameter is a supported BYDAY value * * @param {string[]} byDay The byDay component to check * @return {boolean} */ const isAllowedByDay = byDay => { return ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU', 'FR,MO,SA,SU,TH,TU,WE', 'FR,MO,TH,TU,WE', 'SA,SU'].includes(byDay.slice().sort().join(',')); }; /** * Checks if the given parameter is a supported BYSETPOS value * * @param {string} bySetPos The bySetPos component to check * @return {boolean} */ const isAllowedBySetPos = bySetPos => { return ['-2', '-1', '1', '2', '3', '4', '5'].includes(bySetPos.toString()); }; /** * Checks if the recurrence-rule contains any of the given components * * @param {RecurValue} recurrenceRule The recurrence-rule value to check for the given components * @param {string[]} components List of components to check for * @return {boolean} */ const containsRecurrenceComponent = (recurrenceRule, components) => { for (const component of components) { const componentValue = recurrenceRule.getComponent(component); if (componentValue.length > 0) { return true; } } return false; }; /** * Returns a full recurrence-rule-object with default values derived from recurrenceRuleValue * and additional props * * @param {RecurValue} recurrenceRuleValue The recurrence-rule value to get default values from * @param {object} props The properties to provide on top of default one * @return {object} */ const getDefaultRecurrenceRuleObjectForRecurrenceValue = (recurrenceRuleValue, props) => { const isUnsupported = recurrenceRuleValue.count !== null && recurrenceRuleValue.until !== null; let isUnsupportedProps = {}; if (isUnsupported) { isUnsupportedProps = { isUnsupported }; } return getDefaultRecurrenceRuleObject(Object.assign({}, { recurrenceRuleValue, frequency: recurrenceRuleValue.frequency, interval: parseInt(recurrenceRuleValue.interval, 10) || 1, count: recurrenceRuleValue.count, until: recurrenceRuleValue.until ? (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_1__.getDateFromDateTimeValue)(recurrenceRuleValue.until) : null }, props, isUnsupportedProps)); }; /***/ }), /***/ "./src/models/resourceProps.js": /*!*************************************!*\ !*** ./src/models/resourceProps.js ***! \*************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ formatRoomType: () => (/* binding */ formatRoomType), /* harmony export */ getAllRoomTypes: () => (/* binding */ getAllRoomTypes) /* harmony export */ }); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /** * @copyright Copyright (c) 2021 Richard Steinmetz * * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Return all supported room types * * @return {{label: string, value: string}[]} List of supported room types */ function getAllRoomTypes() { return [{ value: 'meeting-room', label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Meeting room') }, { value: 'lecture-hall', label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Lecture hall') }, { value: 'seminar-room', label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Seminar room') }, { value: 'other', label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Other') }]; } /** * Format room type as a human readable and localized string * * @param {string} value Raw room type * @return {string|null} Human readable and localized room type or null if given raw value is invalid */ function formatRoomType(value) { var _option$label; const option = getAllRoomTypes().find(option => option.value === value); return (_option$label = option === null || option === void 0 ? void 0 : option.label) !== null && _option$label !== void 0 ? _option$label : null; } /***/ }), /***/ "./src/models/rfcProps.js": /*!********************************!*\ !*** ./src/models/rfcProps.js ***! \********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getRFCProperties: () => (/* binding */ getRFCProperties) /* harmony export */ }); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var _defaults_defaultCategories_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../defaults/defaultCategories.js */ "./src/defaults/defaultCategories.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Gets all supported RFC properties * * @return {{color: {readableName: *, icon: string, multiple: boolean, info: *}, timeTransparency: {readableName: *, defaultValue: string, icon: string, multiple: boolean, options: *[], info: *}, description: {readableName: *, icon: string, placeholder: *, defaultNumberOfRows: number}, location: {readableName: *, icon: string, placeholder: *}, categories: {readableName: *, icon: string, multiple: boolean, options: *, tagPlaceholder: *, placeholder: *, info: *}, accessClass: {readableName: *, defaultValue: string, icon: string, options: *[], multiple: boolean, info: *}, status: {readableName: *, defaultValue: string, icon: string, options: *[], multiple: boolean, info: *}, locations: {readableName: *, defaultValue: string, icon: string, options: *[], multiple: boolean, info: *}, articles: {readableName: *, defaultValue: string, icon: string, options: *[], multiple: boolean, info: *}}} */ const getRFCProperties = () => { return { /** * https://tools.ietf.org/html/rfc5545#section-3.8.1.3 */ accessClass: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'When shared show'), icon: 'Eye', options: [{ value: 'PUBLIC', label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'When shared show full event') }, { value: 'CONFIDENTIAL', label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'When shared show only busy') }, { value: 'PRIVATE', label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'When shared hide this event') }], multiple: false, info: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'The visibility of this event in shared calendars.'), defaultValue: 'PUBLIC' }, /** * https://tools.ietf.org/html/rfc5545#section-3.8.1.7 */ location: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Location'), placeholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choisir le lieu'), icon: 'MapMarker' }, /** * https://tools.ietf.org/html/rfc5545#section-3.8.1.5 */ description: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Description'), placeholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choisir les soins'), icon: 'TextBoxOutline', defaultNumberOfRows: 2 }, /** * https://tools.ietf.org/html/rfc5545#section-3.8.1.11 */ status: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Status'), icon: 'Check', options: [{ value: 'CONFIRMED', label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Confirmed') }, { value: 'TENTATIVE', label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Tentative') }, { value: 'CANCELLED', label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Canceled') }], multiple: false, info: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Confirmation about the overall status of the event.'), defaultValue: 'CONFIRMED' }, /** * https://tools.ietf.org/html/rfc5545#section-3.8.2.7 */ timeTransparency: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Show as'), icon: 'Briefcase', multiple: false, info: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Take this event into account when calculating free-busy information.'), options: [{ value: 'TRANSPARENT', label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Free') }, { value: 'OPAQUE', label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Busy') }], defaultValue: 'TRANSPARENT' }, /** * https://tools.ietf.org/html/rfc5545#section-3.8.1.2 */ categories: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Categories'), icon: 'Tag', multiple: true, info: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Categories help you to structure and organize your events.'), placeholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Search or add categories'), tagPlaceholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Add this as a new category'), options: (0,_defaults_defaultCategories_js__WEBPACK_IMPORTED_MODULE_1__.getDefaultCategories)() }, /** * https://tools.ietf.org/html/rfc7986#section-5.9 */ color: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Custom color'), icon: 'EyedropperVariant', multiple: false, info: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Special color of this event. Overrides the calendar-color.') }, locations: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Locations'), icon: 'Tag', searchable: true, multiple: false, info: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choisir le lieu du soin.'), placeholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choisir un lieu'), tagPlaceholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choisir un lieu'), options: [] }, clients: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Clients'), icon: 'Human', searchable: true, multiple: false, info: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choisir le donneur d\'ordre.'), placeholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choisir un client'), tagPlaceholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choisir un client'), options: [] }, client: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choisir un client'), placeholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choisir un client'), icon: 'Human' }, absenceType: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Type d\'absence'), placeholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Type d\'absence') }, embalmers: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Embalmers'), icon: 'Human', searchable: true, multiple: false, info: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Thanatopracteur from Gestion'), placeholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choose thanatopracteur'), tagPlaceholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choose thanatopracteur'), options: [] }, embalmer: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Embalmer'), placeholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Add a thanatopracteur'), icon: 'Human' }, articles: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Articles'), icon: 'TextBoxOutline', searchable: true, multiple: true, info: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choisir les soins à appliquer.'), placeholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choisir les soins'), tagPlaceholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Choisir les soins'), options: [] }, comment: { readableName: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Comment'), icon: 'TextBoxOutline', info: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Commentaires.'), placeholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Commentaires'), tagPlaceholder: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('calendar', 'Commentaires'), options: [], defaultNumberOfRows: 4 } }; }; /***/ }), /***/ "./src/router.js": /*!***********************!*\ !*** ./src/router.js ***! \***********************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); /* harmony import */ var vue_router__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue-router */ "./node_modules/vue-router/dist/vue-router.esm.js"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _views_Calendar_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./views/Calendar.vue */ "./src/views/Calendar.vue"); /* harmony import */ var _views_EditSimple_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./views/EditSimple.vue */ "./src/views/EditSimple.vue"); /* harmony import */ var _views_EditSidebar_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./views/EditSidebar.vue */ "./src/views/EditSidebar.vue"); /* harmony import */ var _utils_router_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/router.js */ "./src/utils/router.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ vue__WEBPACK_IMPORTED_MODULE_5__["default"].use(vue_router__WEBPACK_IMPORTED_MODULE_6__["default"]); const webRootWithIndexPHP = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_0__.getRootUrl)() + '/index.php'; const doesURLContainIndexPHP = window.location.pathname.startsWith(webRootWithIndexPHP); const base = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_0__.generateUrl)('apps/calendar', {}, { noRewrite: doesURLContainIndexPHP }); const router = new vue_router__WEBPACK_IMPORTED_MODULE_6__["default"]({ mode: 'history', base, routes: [{ path: '/p/:tokens/:view/:firstDay', component: _views_Calendar_vue__WEBPACK_IMPORTED_MODULE_1__["default"], name: 'PublicCalendarView', children: [{ path: '/p/:tokens/:view/:firstDay/view/popover/:object/:recurrenceId', name: 'PublicEditPopoverView', component: _views_EditSimple_vue__WEBPACK_IMPORTED_MODULE_2__["default"] }, { path: '/p/:tokens/:view/:firstDay/view/sidebar/:object/:recurrenceId', name: 'PublicEditSidebarView', component: _views_EditSidebar_vue__WEBPACK_IMPORTED_MODULE_3__["default"] }] }, { path: '/embed/:tokens/:view/:firstDay', component: _views_Calendar_vue__WEBPACK_IMPORTED_MODULE_1__["default"], name: 'EmbedCalendarView', children: [{ path: '/embed/:tokens/:view/:firstDay/view/popover/:object/:recurrenceId', name: 'EmbedEditPopoverView', component: _views_EditSimple_vue__WEBPACK_IMPORTED_MODULE_2__["default"] }, { path: '/embed/:tokens/:view/:firstDay/view/sidebar/:object/:recurrenceId', name: 'EmbedEditSidebarView', component: _views_EditSidebar_vue__WEBPACK_IMPORTED_MODULE_3__["default"] }] }, /** * This route is the root-view that does not contain any parameters so far. * Users usually access it by clicking the calendar-icon in the navigation bar. * * It automatically redirects you to the calendar view, showing the current month * in the user's preferred view. */ { path: '/', redirect: "/".concat((0,_utils_router_js__WEBPACK_IMPORTED_MODULE_4__.getInitialView)(), "/now") }, { path: '/p/:tokens/:fancyName?', redirect: "/p/:tokens/".concat((0,_utils_router_js__WEBPACK_IMPORTED_MODULE_4__.getInitialView)(), "/now") }, { path: '/public/:tokens/:fancyName?', redirect: "/p/:tokens/".concat((0,_utils_router_js__WEBPACK_IMPORTED_MODULE_4__.getInitialView)(), "/now") }, { path: '/embed/:tokens', redirect: "/embed/:tokens/".concat((0,_utils_router_js__WEBPACK_IMPORTED_MODULE_4__.getInitialView)(), "/now") }, { path: '/new/:view?', redirect: to => { var _to$params$view; return "/".concat((_to$params$view = to.params.view) !== null && _to$params$view !== void 0 ? _to$params$view : (0,_utils_router_js__WEBPACK_IMPORTED_MODULE_4__.getInitialView)(), "/now/new/").concat((0,_utils_router_js__WEBPACK_IMPORTED_MODULE_4__.getPreferredEditorRoute)(), "/0/").concat((0,_utils_router_js__WEBPACK_IMPORTED_MODULE_4__.getDefaultStartDateForNewEvent)(), "/").concat((0,_utils_router_js__WEBPACK_IMPORTED_MODULE_4__.getDefaultEndDateForNewEvent)()); } }, { path: '/new/:allDay/:dtstart/:dtend', redirect: () => "/".concat((0,_utils_router_js__WEBPACK_IMPORTED_MODULE_4__.getInitialView)(), "/:dtstart/new/").concat((0,_utils_router_js__WEBPACK_IMPORTED_MODULE_4__.getPreferredEditorRoute)(), "/:allDay/:dtstart/:dtend") }, { path: '/edit/:object', redirect: () => "/".concat((0,_utils_router_js__WEBPACK_IMPORTED_MODULE_4__.getInitialView)(), "/now/edit/").concat((0,_utils_router_js__WEBPACK_IMPORTED_MODULE_4__.getPreferredEditorRoute)(), "/:object/next") }, { path: '/edit/:object/:recurrenceId', redirect: () => "/".concat((0,_utils_router_js__WEBPACK_IMPORTED_MODULE_4__.getInitialView)(), "/now/edit/").concat((0,_utils_router_js__WEBPACK_IMPORTED_MODULE_4__.getPreferredEditorRoute)(), "/:object/:recurrenceId") }, /** * This is the main route that contains the current view and viewed day * It has to be last, so that other routes starting with /p/, etc. match first */ { path: '/:view/:firstDay', component: _views_Calendar_vue__WEBPACK_IMPORTED_MODULE_1__["default"], name: 'CalendarView', children: [{ path: '/:view/:firstDay/edit/popover/:object/:recurrenceId', name: 'EditPopoverView', component: _views_EditSimple_vue__WEBPACK_IMPORTED_MODULE_2__["default"] }, { path: '/:view/:firstDay/edit/sidebar/:object/:recurrenceId', name: 'EditSidebarView', component: _views_EditSidebar_vue__WEBPACK_IMPORTED_MODULE_3__["default"] }, { path: '/:view/:firstDay/new/popover/:allDay/:dtstart/:dtend', name: 'NewPopoverView', component: _views_EditSimple_vue__WEBPACK_IMPORTED_MODULE_2__["default"] }, { path: '/:view/:firstDay/new/sidebar/:allDay/:dtstart/:dtend', name: 'NewSidebarView', component: _views_EditSidebar_vue__WEBPACK_IMPORTED_MODULE_3__["default"] }] }] }); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (router); /***/ }), /***/ "./src/services/appointmentConfigService.js": /*!**************************************************!*\ !*** ./src/services/appointmentConfigService.js ***! \**************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createConfig: () => (/* binding */ createConfig), /* harmony export */ deleteConfig: () => (/* binding */ deleteConfig), /* harmony export */ updateConfig: () => (/* binding */ updateConfig) /* harmony export */ }); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var _models_appointmentConfig_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../models/appointmentConfig.js */ "./src/models/appointmentConfig.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/logger.js */ "./src/utils/logger.js"); /** * @copyright Copyright (c) 2021 Richard Steinmetz * * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Create a new appointment config in the backend * * @param {AppointmentConfig} config The config to save * @return {Promise} Full appointment config with an id */ async function createConfig(config) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_3__["default"].debug('Creating appointment config', { config }); const url = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_0__.generateUrl)('/apps/calendar/v1/appointment_configs'); const response = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_1__["default"].post(url, config); return new _models_appointmentConfig_js__WEBPACK_IMPORTED_MODULE_2__["default"](response.data.data); } /** * Delete a stored appointment config from the backend * * @param {number} id The id of the config * @return {Promise} */ async function deleteConfig(id) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_3__["default"].debug('Deleting appointment config', { id }); const url = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_0__.generateUrl)('/apps/calendar/v1/appointment_configs/{id}', { id }); await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_1__["default"].delete(url); } /** * Update an appointment config in the backend * * @param {AppointmentConfig} config The config to update * @return {Promise} Updated appointment config as stored in the backend */ async function updateConfig(config) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_3__["default"].debug('Updating appointment config', { config }); const url = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_0__.generateUrl)('/apps/calendar/v1/appointment_configs/{id}', { id: config.id }); const response = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_1__["default"].put(url, config); return new _models_appointmentConfig_js__WEBPACK_IMPORTED_MODULE_2__["default"](response.data.data); } /***/ }), /***/ "./src/services/attachmentService.js": /*!*******************************************!*\ !*** ./src/services/attachmentService.js ***! \*******************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createFolder: () => (/* binding */ createFolder), /* harmony export */ getFileInfo: () => (/* binding */ getFileInfo), /* harmony export */ shareFile: () => (/* binding */ shareFile), /* harmony export */ shareFileWith: () => (/* binding */ shareFileWith), /* harmony export */ uploadLocalAttachment: () => (/* binding */ uploadLocalAttachment), /* harmony export */ uploadRemoteFile: () => (/* binding */ uploadRemoteFile) /* harmony export */ }); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var webdav__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! webdav */ "./node_modules/webdav/dist/web/index.js"); /** * @copyright 2022 Mikhail Sazanov * * @author 2022 Mikhail Sazanov * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Makes a share link for a given file or directory. * * @param {string} path The file path from the user's root directory. e.g. `/myfile.txt` * @return {string} url share link */ const shareFile = async function (path) { try { const res = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].post((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateOcsUrl)('apps/files_sharing/api/v1/', 2) + 'shares', { shareType: OC.Share.SHARE_TYPE_LINK, path }); return res.data.ocs.data; } catch (error) { var _error$response; if (error !== null && error !== void 0 && (_error$response = error.response) !== null && _error$response !== void 0 && (_error$response = _error$response.data) !== null && _error$response !== void 0 && (_error$response = _error$response.ocs) !== null && _error$response !== void 0 && (_error$response = _error$response.meta) !== null && _error$response !== void 0 && _error$response.message) { console.error("Error while sharing file: ".concat(error.response.data.ocs.meta.message)); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)(error.response.data.ocs.meta.message); throw error; } else { console.error('Error while sharing file: Unknown error'); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)((0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__.translate)('calendar', 'Error while sharing file')); throw error; } } }; /** * Share file with a user with permissions * * @param path * @param sharedWith * @param permissions * @return {Promise<[{path: string, permissions, scope: string, name: string, backend: string, type: string},{path: string, permissions: *, scope: string, name: string, backend: string, type: string}]>} */ const shareFileWith = async function (path, sharedWith) { let permissions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 17; try { const url = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateOcsUrl)('apps/files_sharing/api/v1/', 2); const res = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].post("".concat(url, "shares"), { password: null, shareType: OC.Share.SHARE_TYPE_USER, // WITH USERS, permissions, // 14 - edit, 17 - view path, shareWith: sharedWith }); return res.data.ocs.data; } catch (error) { var _error$response2; if (error !== null && error !== void 0 && (_error$response2 = error.response) !== null && _error$response2 !== void 0 && (_error$response2 = _error$response2.data) !== null && _error$response2 !== void 0 && (_error$response2 = _error$response2.ocs) !== null && _error$response2 !== void 0 && (_error$response2 = _error$response2.meta) !== null && _error$response2 !== void 0 && _error$response2.message) { console.error("Error while sharing file with user: ".concat(error.response.data.ocs.meta.message)); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)(error.response.data.ocs.meta.message); throw error; } else { console.error('Error while sharing file with user: Unknown error'); (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)((0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__.translate)('calendar', 'Error while sharing file with user')); throw error; } } }; const createFolder = async function (folderName, userId) { const url = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateRemoteUrl)("dav/files/".concat(userId, "/").concat(folderName)); try { await (0,_nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"])({ method: 'MKCOL', url }); } catch (e) { var _e$response; if ((e === null || e === void 0 || (_e$response = e.response) === null || _e$response === void 0 ? void 0 : _e$response.status) !== 405) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)((0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__.translate)('calendar', 'Error creating a folder {folder}', { folder: folderName })); // Maybe the actual upload succeeds -> keep going return folderName; } // Folder already exists if (folderName !== '/') { folderName = await findFirstOwnedFolder(folderName, userId); } } return folderName; }; const findFirstOwnedFolder = async function (path, userId) { var _info$multistatus; const infoXml = await getFileInfo(path, userId); const info = await (0,webdav__WEBPACK_IMPORTED_MODULE_4__.parseXML)(infoXml); const mountType = info === null || info === void 0 || (_info$multistatus = info.multistatus) === null || _info$multistatus === void 0 || (_info$multistatus = _info$multistatus.response[0]) === null || _info$multistatus === void 0 || (_info$multistatus = _info$multistatus.propstat) === null || _info$multistatus === void 0 || (_info$multistatus = _info$multistatus.prop) === null || _info$multistatus === void 0 ? void 0 : _info$multistatus['mount-type']; if (mountType !== 'shared') { return path; } const hierarchy = path.split('/'); hierarchy.pop(); if (hierarchy.length === 1) { return '/'; } return findFirstOwnedFolder(hierarchy.join('/'), userId); }; const uploadLocalAttachment = async function (folder, files, dav, componentAttachments) { const attachments = []; const promises = []; files.forEach(file => { // temp fix, until we decide where to save the attachments if (componentAttachments.map(attachment => attachment.fileName.split('/').pop()).indexOf(file.name) !== -1) { // TODO may be show user confirmation dialog to create a file named Existing_File_(2) ? (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)((0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__.translate)('calendar', 'Attachment {fileName} already exists!', { fileName: file.name })); } else { const url = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateRemoteUrl)("dav/files/".concat(dav.userId, "/").concat(folder, "/").concat(file.name)); const res = _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].put(url, file).then(resp => { const data = { fileName: file.name, formatType: file.type, uri: url, value: url, path: "/".concat(file.name) }; if (resp.status === 204 || resp.status === 201) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showSuccess)((0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__.translate)('calendar', 'Attachment {fileName} added!', { fileName: file.name })); attachments.push(data); } }).catch(() => { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)((0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__.translate)('calendar', 'An error occurred during uploading file {fileName}', { fileName: file.name })); }); promises.push(res); } }); await Promise.all(promises); return attachments; }; const uploadRemoteFile = async function (folder, fileUrl, fileName, dav) { try { // Télécharger le fichier distant const response = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].get(fileUrl, { responseType: 'blob' }); // Envoyer le fichier récupéré en PUT vers WebDAV const url = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateRemoteUrl)("dav/files/".concat(dav.userId, "/").concat(folder, "/").concat(fileName)); const uploadResponse = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].put(url, response.data, { headers: { 'Content-Type': response.data.type // Utilise le type MIME du fichier } }); if (uploadResponse.status === 204 || uploadResponse.status === 201) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showSuccess)((0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__.translate)('calendar', 'Attachment {fileName} added!', { fileName: fileName })); return { fileName: fileName, formatType: response.data.type, uri: url, value: url, path: "/".concat(fileName) }; } } catch (error) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)((0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__.translate)('calendar', 'An error occurred during uploading file {fileName}', { fileName: fileName })); return null; } }; // TODO is shared or not @share-types@ const getFileInfo = async function (path, userId) { const url = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateRemoteUrl)("dav/files/".concat(userId, "/").concat(path)); const res = await (0,_nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"])({ method: 'PROPFIND', url, data: "\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t" }).catch(() => { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_2__.showError)((0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_3__.translate)('calendar', 'An error occurred during getting file information')); }); return res.data; }; /***/ }), /***/ "./src/services/caldavService.js": /*!***************************************!*\ !*** ./src/services/caldavService.js ***! \***************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ advancedPrincipalPropertySearch: () => (/* binding */ advancedPrincipalPropertySearch), /* harmony export */ createCalendar: () => (/* binding */ createCalendar), /* harmony export */ createSubscription: () => (/* binding */ createSubscription), /* harmony export */ enableBirthdayCalendar: () => (/* binding */ enableBirthdayCalendar), /* harmony export */ findAll: () => (/* binding */ findAll), /* harmony export */ findAllDeletedCalendars: () => (/* binding */ findAllDeletedCalendars), /* harmony export */ findAllSubscriptions: () => (/* binding */ findAllSubscriptions), /* harmony export */ findPrincipalByUrl: () => (/* binding */ findPrincipalByUrl), /* harmony export */ findPublicCalendarsByTokens: () => (/* binding */ findPublicCalendarsByTokens), /* harmony export */ findSchedulingInbox: () => (/* binding */ findSchedulingInbox), /* harmony export */ findSchedulingOutbox: () => (/* binding */ findSchedulingOutbox), /* harmony export */ getBirthdayCalendar: () => (/* binding */ getBirthdayCalendar), /* harmony export */ getCurrentUserPrincipal: () => (/* binding */ getCurrentUserPrincipal), /* harmony export */ initializeClientForPublicView: () => (/* binding */ initializeClientForPublicView), /* harmony export */ initializeClientForUserView: () => (/* binding */ initializeClientForUserView), /* harmony export */ principalPropertySearchByDisplaynameOrEmail: () => (/* binding */ principalPropertySearchByDisplaynameOrEmail) /* harmony export */ }); /* harmony import */ var _nextcloud_cdav_library__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/cdav-library */ "./node_modules/@nextcloud/cdav-library/dist/dist.js"); /* harmony import */ var _nextcloud_cdav_library__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_cdav_library__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_auth__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/auth */ "./node_modules/@nextcloud/auth/dist/index.es.mjs"); /* harmony import */ var _models_consts_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../models/consts.js */ "./src/models/consts.js"); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const clients = {}; const getClientKey = headers => JSON.stringify(headers); const getClient = function () { let headers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; const clientKey = getClientKey(headers); if (clients[clientKey]) { return clients[clientKey]; } clients[clientKey] = new (_nextcloud_cdav_library__WEBPACK_IMPORTED_MODULE_0___default())({ rootUrl: (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateRemoteUrl)('dav') }, () => { const mergedHeaders = { 'X-Requested-With': 'XMLHttpRequest', requesttoken: (0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_2__.getRequestToken)(), 'X-NC-CalDAV-Webcal-Caching': 'On', ...headers }; const xhr = new XMLHttpRequest(); const oldOpen = xhr.open; // override open() method to add headers xhr.open = function () { const result = oldOpen.apply(this, arguments); for (const name in mergedHeaders) { xhr.setRequestHeader(name, mergedHeaders[name]); } return result; }; OC.registerXHRForErrorProcessing(xhr); // eslint-disable-line no-undef return xhr; }); return clients[clientKey]; }; /** * Initializes the client for use in the user-view */ const initializeClientForUserView = async () => { await getClient().connect({ enableCalDAV: true }); }; /** * Initializes the client for use in the public/embed-view */ const initializeClientForPublicView = async () => { await getClient()._createPublicCalendarHome(); }; /** * Fetch all calendars from the server * * @param {object} headers * @return {Promise} */ const getCalendarHome = headers => getClient(headers).calendarHomes[0]; /** * Fetch all collections in the calendar home from the server * * @return {Promise} */ const findAll = () => { return getCalendarHome().findAllCalDAVCollectionsGrouped(); }; /** * Fetch all subscriptions in the calendar home from the server */ const findAllSubscriptions = async () => { const headers = { 'X-NC-CalDAV-Webcal-Caching': 'Off' }; // Ensure the client is initialized once await getClient(headers).connect({ enableCalDAV: true }); return getCalendarHome(headers).findAllSubscriptions(); }; /** * Fetch all deleted calendars from the server * * @return {Promise} */ const findAllDeletedCalendars = () => { return getCalendarHome().findAllDeletedCalendars(); }; /** * Fetch public calendars by their token * * @param {string[]} tokens List of tokens * @return {Promise} */ const findPublicCalendarsByTokens = async tokens => { const findPromises = []; for (const token of tokens) { const promise = getClient().publicCalendarHome.find(token).catch(() => null); // Catch outdated tokens findPromises.push(promise); } const calendars = await Promise.all(findPromises); return calendars.filter(calendar => calendar !== null); }; /** * Fetches all scheduling inboxes * * Nitpick detail: Technically, we shouldn't be querying all scheduling inboxes * in the calendar-home and just take the first one, but rather query the * "CALDAV:schedule-inbox-URL" property on the principal URL and take that one. * However, it doesn't make any difference for the Nextcloud CalDAV server * and saves us extraneous requests here. * * https://tools.ietf.org/html/rfc6638#section-2.2.1 * * @return {Promise} */ const findSchedulingInbox = async () => { const inboxes = await getCalendarHome().findAllScheduleInboxes(); return inboxes[0]; }; /** * Fetches all scheduling outboxes * * Nitpick detail: Technically, we shouldn't be querying all scheduling outboxes * in the calendar-home and just take the first one, but rather query the * "CALDAV:schedule-outbox-URL" property on the principal URL and take that one. * However, it doesn't make any difference for the Nextcloud CalDAV server * and saves us extraneous requests here. * * https://tools.ietf.org/html/rfc6638#section-2.1.1 * * @return {Promise} */ const findSchedulingOutbox = async () => { const outboxes = await getCalendarHome().findAllScheduleOutboxes(); return outboxes[0]; }; /** * Creates a calendar * * @param {string} displayName Visible name * @param {string} color Color * @param {string[]} components Supported component set * @param {number} order Order of calendar in list * @param {string} timezoneIcs ICS representation of timezone * @return {Promise} */ const createCalendar = async (displayName, color, components, order, timezoneIcs) => { return getCalendarHome().createCalendarCollection(displayName, color, components, order, timezoneIcs); }; /** * Creates a subscription * * This function does not return a subscription, but a cached calendar * * @param {string} displayName Visible name * @param {string} color Color * @param {string} source Link to WebCAL Source * @param {number} order Order of calendar in list * @return {Promise} */ const createSubscription = async (displayName, color, source, order) => { return getCalendarHome().createSubscribedCollection(displayName, color, source, order); }; /** * Enables the birthday calendar * * @return {Promise} */ const enableBirthdayCalendar = async () => { await getCalendarHome().enableBirthdayCalendar(); return getBirthdayCalendar(); }; /** * Gets the birthday calendar * * @return {Promise} */ const getBirthdayCalendar = async () => { return getCalendarHome().find(_models_consts_js__WEBPACK_IMPORTED_MODULE_3__.CALDAV_BIRTHDAY_CALENDAR); }; /** * Returns the Current User Principal * * @return {Principal} */ const getCurrentUserPrincipal = () => { return getClient().currentUserPrincipal; }; /** * Finds calendar principals by displayname * * @param {string} term The search-term * @return {Promise} */ const principalPropertySearchByDisplaynameOrEmail = async term => { return getClient().principalPropertySearchByDisplaynameOrEmail(term); }; /** * Performs a principal property search based on multiple advanced filters * * @param {object} query The destructuring query object * @param {string=} query.displayName The display name to search for * @param {number=} query.capacity The minimum required seating capacity * @param {string[]=} query.features The features to filter by * @param {string=} query.roomType The room type to filter by * @return {Promise} */ const advancedPrincipalPropertySearch = async query => { return getClient().advancedPrincipalPropertySearch(query); }; /** * Finds one principal by it's URL * * @param {string} url The principal-url * @return {Promise} */ const findPrincipalByUrl = async url => { return getClient().findPrincipal(url); }; /***/ }), /***/ "./src/services/circleService.js": /*!***************************************!*\ !*** ./src/services/circleService.js ***! \***************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ circleGetMembers: () => (/* binding */ circleGetMembers), /* harmony export */ circleSearchByName: () => (/* binding */ circleSearchByName) /* harmony export */ }); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /** * @copyright Copyright (c) 2023 Jonas Heinrich * * @author Jonas Heinrich * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Finds circles by displayname * * @param {string} query The search-term * @return {Promise} */ const circleSearchByName = async query => { let results; try { results = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].get((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateOcsUrl)('apps/files_sharing/api/v1/') + 'sharees', { params: { format: 'json', search: query, perPage: 200, itemType: 'pringroucipals' } }); } catch (error) { return []; } if (results.data.ocs.meta.status === 'failure') { return []; } let circles = []; if (Array.isArray(results.data.ocs.data.circles)) { circles = circles.concat(results.data.ocs.data.circles); } if (Array.isArray(results.data.ocs.data.exact.circles)) { circles = circles.concat(results.data.ocs.data.exact.circles); } if (circles.length === 0) { return []; } return circles.filter(circle => { return true; }).map(circle => ({ displayname: circle.label, population: circle.value.circle.population, id: circle.value.circle.id, instance: circle.value.circle.owner.instance })); }; /** * Get members of circle by id * * @param {string} circleId The circle id to query * @return {Promise} */ const circleGetMembers = async circleId => { let results; try { results = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].get((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.linkTo)('calendar', 'index.php') + '/v1/circles/getmembers', { params: { format: 'json', circleId } }); } catch (error) { console.debug(error); return []; } return results; }; /***/ }), /***/ "./src/services/freeBusyService.js": /*!*****************************************!*\ !*** ./src/services/freeBusyService.js ***! \*****************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ checkResourceAvailability: () => (/* binding */ checkResourceAvailability) /* harmony export */ }); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /* harmony import */ var _utils_attendee_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/attendee.js */ "./src/utils/attendee.js"); /* harmony import */ var _utils_freebusy_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/freebusy.js */ "./src/utils/freebusy.js"); /** * @copyright 2021 Christoph Wurst * * @author 2021 Christoph Wurst * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Check resource availability using a free busy request * and amend the status to the option object (option.isAvailable) * * @param {object[]} options The search results to amend with an availability * @param {string} principalEmail Principal of the organizer * @param {DateTimeValue} start Start date * @param {DateTimeValue} end End date */ async function checkResourceAvailability(options, principalEmail, start, end) { if (options.length === 0) { return; } const organizer = new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.AttendeeProperty('ORGANIZER', (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_1__.addMailtoPrefix)(principalEmail)); const attendees = []; for (const option of options) { attendees.push(new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.AttendeeProperty('ATTENDEE', (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_1__.addMailtoPrefix)(option.email))); } for await (const [attendeeProperty] of (0,_utils_freebusy_js__WEBPACK_IMPORTED_MODULE_2__.doFreeBusyRequest)(start, end, organizer, attendees)) { const attendeeEmail = (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_1__.removeMailtoPrefix)(attendeeProperty.email); for (const option of options) { if ((0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_1__.removeMailtoPrefix)(option.email) === attendeeEmail) { options.participationStatus = ''; option.isAvailable = false; break; } } } } /***/ }), /***/ "./src/services/freeBusySlotService.js": /*!*********************************************!*\ !*** ./src/services/freeBusySlotService.js ***! \*********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getBusySlots: () => (/* binding */ getBusySlots), /* harmony export */ getFirstFreeSlot: () => (/* binding */ getFirstFreeSlot) /* harmony export */ }); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /* harmony import */ var _caldavService_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./caldavService.js */ "./src/services/caldavService.js"); /* harmony import */ var _fullcalendar_eventSources_freeBusyResourceEventSourceFunction_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../fullcalendar/eventSources/freeBusyResourceEventSourceFunction.js */ "./src/fullcalendar/eventSources/freeBusyResourceEventSourceFunction.js"); /* harmony import */ var _timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./timezoneDataProviderService.js */ "./src/services/timezoneDataProviderService.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/logger.js */ "./src/utils/logger.js"); /** * @copyright 2024 Grigory Vodyanov * * @author 2024 Grigory Vodyanov * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Get the first available slot for an event using freebusy API * * @param {AttendeeProperty} organizer The organizer of the event * @param {AttendeeProperty[]} attendees Array of the event's attendees * @param {Date} start The start date and time of the event * @param {Date} end The end date and time of the event * @param timeZoneId * @return {Promise<>} */ async function getBusySlots(organizer, attendees, start, end, timeZoneId) { let timezoneObject = (0,_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_3__["default"])().getTimezoneForId(timeZoneId); if (!timezoneObject) { timezoneObject = (0,_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_3__["default"])().getTimezoneForId('UTC'); _utils_logger_js__WEBPACK_IMPORTED_MODULE_4__["default"].error("FreeBusyEventSource: Timezone ".concat(timeZoneId, " not found, falling back to UTC.")); } const startDateTime = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DateTimeValue.fromJSDate(start, true); const endDateTime = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DateTimeValue.fromJSDate(end, true); const organizerAsAttendee = new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.AttendeeProperty('ATTENDEE', organizer.email); const freeBusyComponent = (0,_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.createFreeBusyRequest)(startDateTime, endDateTime, organizer, [organizerAsAttendee, ...attendees]); const freeBusyICS = freeBusyComponent.toICS(); let outbox; try { outbox = await (0,_caldavService_js__WEBPACK_IMPORTED_MODULE_1__.findSchedulingOutbox)(); } catch (error) { return { error }; } let freeBusyData; try { freeBusyData = await outbox.freeBusyRequest(freeBusyICS); } catch (error) { return { error }; } const events = []; for (const [uri, data] of Object.entries(freeBusyData)) { events.push(...(0,_fullcalendar_eventSources_freeBusyResourceEventSourceFunction_js__WEBPACK_IMPORTED_MODULE_2__["default"])(uri, data.calendarData, data.success, startDateTime, endDateTime, timezoneObject)); } return { events }; } /** * Get the first available slot for an event using the freebusy API * * @param {Date} start The start date and time of the event * @param {Date} end The end date and time of the event * @param retrievedEvents Events found by the freebusy API * @return [] */ function getFirstFreeSlot(start, end, retrievedEvents) { var _events$; let duration = getDurationInSeconds(start, end); if (duration === 0) { duration = 86400; // one day } const endSearchDate = new Date(start); endSearchDate.setDate(start.getDate() + 7); if (retrievedEvents.error) { return [{ error: retrievedEvents.error }]; } const events = sortEvents(retrievedEvents); let currentCheckedTime = start; const currentCheckedTimeEnd = new Date(currentCheckedTime); currentCheckedTimeEnd.setSeconds(currentCheckedTime.getSeconds() + duration); const foundSlots = []; let offset = 1; if (new Date((_events$ = events[0]) === null || _events$ === void 0 ? void 0 : _events$.start) < currentCheckedTime) { offset = 0; } for (let i = 0; i < events.length + offset && i < 5; i++) { var _foundSlots$i, _foundSlots; foundSlots[i] = checkTimes(currentCheckedTime, duration, events); if (foundSlots[i].nextEvent !== undefined && foundSlots[i].nextEvent !== null) { currentCheckedTime = new Date(foundSlots[i].nextEvent.end); } // avoid repetitions caused by events blocking at first iteration of currentCheckedTime if (((_foundSlots$i = foundSlots[i]) === null || _foundSlots$i === void 0 ? void 0 : _foundSlots$i.start) === ((_foundSlots = foundSlots[i - 1]) === null || _foundSlots === void 0 ? void 0 : _foundSlots.start) && foundSlots[i] !== undefined) { foundSlots[i] = {}; break; } } const roundedSlots = []; foundSlots.forEach(slot => { const roundedTime = roundTime(slot.start, slot.end, slot.blockingEvent, slot.nextEvent, duration); if (roundedTime !== null && roundedTime.start < endSearchDate) { roundedSlots.push({ start: roundedTime.start, end: roundedTime.end }); } }); return roundedSlots; } /** * * @param start * @param end * @return {number} */ function getDurationInSeconds(start, end) { // convert dates to UTC to account for daylight saving time const startUTC = new Date(start).toUTCString(); const endUTC = new Date(end).toUTCString(); const durationMs = new Date(endUTC) - new Date(startUTC); // convert milliseconds to seconds return Math.floor(durationMs / 1000); } /** * * @param currentCheckedTime * @param currentCheckedTimeEnd * @param blockingEvent * @param nextEvent * @param duration */ function roundTime(currentCheckedTime, currentCheckedTimeEnd, blockingEvent, nextEvent, duration) { if (currentCheckedTime === null) return null; if (!blockingEvent) return { start: currentCheckedTime, end: currentCheckedTimeEnd }; // make sure that difference between currentCheckedTime and blockingEvent.end is at least 15 minutes if ((currentCheckedTime - new Date(blockingEvent.end)) / (1000 * 60) < 15) { currentCheckedTime.setMinutes(currentCheckedTime.getMinutes() + 15); } // needed to fix edge case errors if ((currentCheckedTime - new Date(blockingEvent.end)) / (1000 * 60) > 15) { currentCheckedTime.setMinutes(currentCheckedTime.getMinutes() - 15); } // round to the nearest 30 minutes if (currentCheckedTime.getMinutes() < 30) { currentCheckedTime.setMinutes(30); } else { currentCheckedTime.setMinutes(0); currentCheckedTime.setHours(currentCheckedTime.getHours() + 1); } // update currentCheckedTimeEnd again since currentCheckedTime was updated currentCheckedTimeEnd = new Date(currentCheckedTime); currentCheckedTimeEnd.setSeconds(currentCheckedTime.getSeconds() + duration); // if the rounding of the event doesn't conflict with the start of the next one if (currentCheckedTimeEnd > new Date(nextEvent === null || nextEvent === void 0 ? void 0 : nextEvent.start)) { return null; } return { start: currentCheckedTime, end: currentCheckedTimeEnd }; } /** * * @param currentCheckedTime * @param duration * @param events */ function checkTimes(currentCheckedTime, duration, events) { let slotIsBusy = false; let blockingEvent = null; let nextEvent = null; let currentCheckedTimeEnd = new Date(currentCheckedTime); currentCheckedTimeEnd.setSeconds(currentCheckedTime.getSeconds() + duration); // loop every 5 minutes since start date // check if there are no events in the duration starting from that minute while (true) { events.every(event => { slotIsBusy = false; const eventStart = new Date(event.start); const eventEnd = new Date(event.end); currentCheckedTimeEnd = new Date(currentCheckedTime); currentCheckedTimeEnd.setSeconds(currentCheckedTime.getSeconds() + duration); // start of event is within the range that we are checking if (eventStart >= currentCheckedTime && eventStart <= currentCheckedTimeEnd) { slotIsBusy = true; blockingEvent = event; return false; } // end of event is within range that we are checking if (eventEnd >= currentCheckedTime && eventEnd <= currentCheckedTimeEnd) { slotIsBusy = true; blockingEvent = event; return false; } // range that we are checking is within ends of event if (eventStart <= currentCheckedTime && eventEnd >= currentCheckedTimeEnd) { slotIsBusy = true; blockingEvent = event; return false; } return true; }); if (slotIsBusy) { currentCheckedTime.setMinutes(currentCheckedTime.getMinutes() + 5); } else break; } if (blockingEvent !== null) { const blockingIndex = events.findIndex(event => event === blockingEvent); nextEvent = events[blockingIndex + 1]; } else { if (events.length > 0) nextEvent = events[0]; } return { start: currentCheckedTime, end: currentCheckedTimeEnd, nextEvent, blockingEvent }; } // make a function that sorts a list of objects by the "start" property function sortEvents(events) { // remove events that have the same start and end time, if not done causes problems const mappedEvents = new Map(); for (const obj of events) { const key = obj.start.toString() + obj.end.toString(); if (!mappedEvents.has(key)) { mappedEvents.set(key, obj); } } return Array.from(mappedEvents.values()).sort((a, b) => new Date(a.start) - new Date(b.start)); } /***/ }), /***/ "./src/services/isCirclesEnabled.js": /*!******************************************!*\ !*** ./src/services/isCirclesEnabled.js ***! \******************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/initial-state */ "./node_modules/@nextcloud/initial-state/dist/index.es.mjs"); /** * @copyright Copyright (c) 2021 John Molakvoæ * @copyright Copyright (c) 2023 Jonas Heinrich * * @author John Molakvoæ * @author Jonas Heinrich * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const isCirclesEnabled = (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_0__.loadState)('calendar', 'isCirclesEnabled', false); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isCirclesEnabled); /***/ }), /***/ "./src/services/readFileAsTextService.js": /*!***********************************************!*\ !*** ./src/services/readFileAsTextService.js ***! \***********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ readFileAsText: () => (/* binding */ readFileAsText) /* harmony export */ }); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Team Popcorn * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Read a file object as text * * @param {File} file The file object to get contents from * @return {Promise} */ const readFileAsText = file => { const fileReader = new FileReader(); return new Promise((resolve, reject) => { fileReader.onload = () => { resolve(fileReader.result); }; fileReader.onerror = e => { reject(e); }; fileReader.readAsText(file); }); }; /***/ }), /***/ "./src/services/roleService.js": /*!*************************************!*\ !*** ./src/services/roleService.js ***! \*************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ async fetchAndCommitRoles(commit) { try { var url = '/apps/gestion/getUserConnectedGroups'; const ajaxUrl = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateUrl)(url); _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].get(ajaxUrl).then(response => { let roles = JSON.parse(response.data); commit("setUserRole", roles); }).catch(error => {}); } catch (error) {} } }); /***/ }), /***/ "./src/services/settings.js": /*!**********************************!*\ !*** ./src/services/settings.js ***! \**********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ setConfig: () => (/* binding */ setConfig) /* harmony export */ }); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var _utils_settings_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/settings.js */ "./src/utils/settings.js"); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * * @param {string} key Config-key to set * @param {string | number | boolean} value Config-value to set * @return {Promise} */ const setConfig = async (key, value) => { await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].post((0,_utils_settings_js__WEBPACK_IMPORTED_MODULE_1__.getLinkToConfig)(key), { value }); }; /***/ }), /***/ "./src/services/talkService.js": /*!*************************************!*\ !*** ./src/services/talkService.js ***! \*************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createTalkRoom: () => (/* binding */ createTalkRoom), /* harmony export */ doesContainTalkLink: () => (/* binding */ doesContainTalkLink), /* harmony export */ extractCallTokenFromUrl: () => (/* binding */ extractCallTokenFromUrl), /* harmony export */ updateTalkParticipants: () => (/* binding */ updateTalkParticipants) /* harmony export */ }); /* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.es.mjs"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/initial-state */ "./node_modules/@nextcloud/initial-state/dist/index.es.mjs"); /* harmony import */ var _nextcloud_auth__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/auth */ "./node_modules/@nextcloud/auth/dist/index.es.mjs"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _utils_attendee_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/attendee.js */ "./src/utils/attendee.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Team Popcorn * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Creates a new public talk room * * @param {?string} eventTitle Title of the event * @param {?string} eventDescription Description of the event * @param {?string[]} attendees Attendees of the event * * @return {Promise} */ async function createTalkRoom() { let eventTitle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; let eventDescription = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; let attendees = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; const apiVersion = (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_3__.loadState)('calendar', 'talk_api_version'); try { const response = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].post((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateOcsUrl)('apps/spreed/api/' + apiVersion + '/', 2) + 'room', { roomType: 3, roomName: eventTitle || (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__.translate)('calendar', 'Chat room for event') }); const conversation = response.data.ocs.data; const token = conversation.token; if (eventDescription) { await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].put((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateOcsUrl)('apps/spreed/api/' + apiVersion + '/', 2) + 'room/' + token + '/description', { description: eventDescription }); } return generateURLForToken(token); } catch (error) { console.debug(error); throw error; } } /** * * @param eventComponent */ async function updateTalkParticipants(eventComponent) { var _eventComponent$getCo, _eventComponent$getCo2; const apiVersion = (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_3__.loadState)('calendar', 'talk_api_version'); const url = (_eventComponent$getCo = (_eventComponent$getCo2 = eventComponent.getConferenceList()[0]) === null || _eventComponent$getCo2 === void 0 ? void 0 : _eventComponent$getCo2.uri) !== null && _eventComponent$getCo !== void 0 ? _eventComponent$getCo : eventComponent.location; if (!url || !url.startsWith(window.location.protocol + '//' + window.location.host)) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__["default"].debug('Event\'s conference/location is from another host', url); return; } const token = extractCallTokenFromUrl(url); if (!token) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__["default"].debug('URL ' + url + ' contains no call token'); return; } try { const { data: { ocs: { data: room } } } = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].get((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateOcsUrl)('apps/spreed/api/' + apiVersion + '/', 2) + 'room/' + token); const participantsResponse = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].get((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateOcsUrl)('apps/spreed/api/' + apiVersion + '/', 2) + 'room/' + token + '/participants'); // Ignore if the actor isn't owner of the conversation if (!participantsResponse.data.ocs.data.some(participant => participant.actorId === (0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_4__.getCurrentUser)().uid && participant.participantType <= 2)) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__["default"].debug('Current user is not a moderator or owner', { currentUser: (0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_4__.getCurrentUser)().uid, conversation: participantsResponse.data.ocs.data }); return; } console.info('room', room); for (const attendee of eventComponent.getAttendeeIterator()) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__["default"].debug('Processing attendee', { attendee }); if (['GROUP', 'RESOURCE', 'ROOM'].includes(attendee.userType)) { continue; } const participantId = (0,_utils_attendee_js__WEBPACK_IMPORTED_MODULE_6__.removeMailtoPrefix)(attendee.email); try { var _searchResult$data$oc; // Map attendee email to Nextcloud user uid const searchResult = await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].get((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateOcsUrl)('core/autocomplete/', 2) + 'get?search=' + encodeURIComponent(participantId) + '&itemType=&itemId=%20&shareTypes[]=0&limit=2'); // Only map if there is exactly one result if (searchResult.data.ocs.data.length === 1 && searchResult.data.ocs.data[0].id !== (0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_4__.getCurrentUser)().uid) { await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].post((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateOcsUrl)('apps/spreed/api/' + apiVersion + '/', 2) + 'room/' + token + '/participants', { newParticipant: searchResult.data.ocs.data[0].id, source: 'users' }); } else if (((_searchResult$data$oc = searchResult.data.ocs.data[0]) === null || _searchResult$data$oc === void 0 ? void 0 : _searchResult$data$oc.id) === (0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_4__.getCurrentUser)().uid) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__["default"].debug('Skipping organizer ' + searchResult.data.ocs.data[0].id); } else if (room.type === 3) { await _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].post((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateOcsUrl)('apps/spreed/api/' + apiVersion + '/', 2) + 'room/' + token + '/participants', { newParticipant: participantId, source: 'emails' }); } else { _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__["default"].debug('Attendee ' + participantId + ' ignored as Talk participant'); } } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__["default"].info('Could not add attendee ' + participantId + ' as Talk participant', { error }); } } } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__["default"].warn('Could not update Talk room attendees', { error }); } } /** * Checks whether the value contains a talk link * * @param {?string} text Haystack * @return {boolean} */ function doesContainTalkLink(text) { if (!text) { return false; } // TODO: there is most definitely a more reliable way, // but this works for now const fakeUrl = generateURLForToken(); return text.includes(fakeUrl); } /** * Generates an absolute URL to the talk room based on the token * * @param {string} token The token to the call room * @return {string} */ function generateURLForToken() { let token = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; return window.location.protocol + '//' + window.location.host + (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateUrl)('/call/' + token); } /** * Extract a spreed call token from the given URL * * @param {string} callUrl URL of the spreed call * @return {string|undefined} Matched token or undefined if URL is invalid */ function extractCallTokenFromUrl(callUrl) { var _callUrl$match$, _callUrl$match; return (_callUrl$match$ = (_callUrl$match = callUrl.match(/\/call\/([a-z0-9]*)(\/|#.*)?$/)) === null || _callUrl$match === void 0 ? void 0 : _callUrl$match[1]) !== null && _callUrl$match$ !== void 0 ? _callUrl$match$ : undefined; } /***/ }), /***/ "./src/services/timezoneDataProviderService.js": /*!*****************************************************!*\ !*** ./src/services/timezoneDataProviderService.js ***! \*****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const timezoneManager = (0,_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.getTimezoneManager)(); let initialized = false; /** * Gets the timezone-manager * initializes it if necessary * * @return {TimezoneManager} */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { if (!initialized) { timezoneManager.registerDefaultTimezones(); initialized = true; } return timezoneManager; } /***/ }), /***/ "./src/services/timezoneDetectionService.js": /*!**************************************************!*\ !*** ./src/services/timezoneDetectionService.js ***! \**************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ detectTimezone: () => (/* binding */ detectTimezone) /* harmony export */ }); /* harmony import */ var jstz__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jstz */ "./node_modules/jstz/index.js"); /* harmony import */ var jstz__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jstz__WEBPACK_IMPORTED_MODULE_0__); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Returns the current timezone of the user * * @return {string} Current timezone of user */ const detectTimezone = () => { const determinedTimezone = jstz__WEBPACK_IMPORTED_MODULE_0___default().determine(); if (!determinedTimezone) { return 'UTC'; } const timezoneName = determinedTimezone.name(); if (!timezoneName) { return 'UTC'; } return timezoneName; }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (detectTimezone); /***/ }), /***/ "./src/services/windowTitleService.js": /*!********************************************!*\ !*** ./src/services/windowTitleService.js ***! \********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _filters_dateRangeFormat_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../filters/dateRangeFormat.js */ "./src/filters/dateRangeFormat.js"); /* harmony import */ var _utils_date_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/date.js */ "./src/utils/date.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const originalWindowTitle = document.title; /** * This function listens to the router and * automatically adjusts the title of the window * * @param {VueRouter} router The VueJS Router instance * @param {Store} store The vuex store */ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(router, store) { /** * Updates the title of the window * * @param {Date} date viewed Date * @param {string} view Name of the current view * @param {string} locale Locale to be used for formatting */ function updateTitle(date, view, locale) { const title = (0,_filters_dateRangeFormat_js__WEBPACK_IMPORTED_MODULE_0__["default"])(date, view, locale); document.title = [title, originalWindowTitle].join(' - '); } /** * This listens to router changes and automatically * updates the title */ router.beforeEach((to, from, next) => { if (!to.params.firstDay) { next(); return; } const date = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_1__.getDateFromFirstdayParam)(to.params.firstDay); const view = to.params.view; const locale = store.state.settings.momentLocale; updateTitle(date, view, locale); next(); }); /** * This listens to changes of the locale * and automatically updates it. */ store.subscribe(mutation => { var _router$currentRoute$; if (mutation.type !== 'setMomentLocale') { return; } if (!((_router$currentRoute$ = router.currentRoute.params) !== null && _router$currentRoute$ !== void 0 && _router$currentRoute$.firstDay)) { return; } const date = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_1__.getDateFromFirstdayParam)(router.currentRoute.params.firstDay); const view = router.currentRoute.params.view; const { locale } = mutation.payload; updateTitle(date, view, locale); }); } /***/ }), /***/ "./src/store/appointmentConfigs.js": /*!*****************************************!*\ !*** ./src/store/appointmentConfigs.js ***! \*****************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); /* harmony import */ var pinia__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! pinia */ "./node_modules/pinia/dist/pinia.mjs"); /* harmony import */ var _services_appointmentConfigService_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../services/appointmentConfigService.js */ "./src/services/appointmentConfigService.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/logger.js */ "./src/utils/logger.js"); /** * @copyright Copyright (c) 2021 Richard Steinmetz * * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,pinia__WEBPACK_IMPORTED_MODULE_2__.defineStore)('appointmentConfig', { state: () => { return { configs: {} }; }, getters: { allConfigs() { return Object.values(this.configs); } }, actions: { addInitialConfigs(configs) { for (const config of configs) { vue__WEBPACK_IMPORTED_MODULE_3__["default"].set(this.configs, config.id, config); } }, async updateConfig(_ref) { let { config } = _ref; try { const updatedConfig = await (0,_services_appointmentConfigService_js__WEBPACK_IMPORTED_MODULE_0__.updateConfig)(config); this.updateConfigMutation(updatedConfig); return updatedConfig; } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].error('Failed to update config', { error }); throw error; } }, async createConfig(_ref2) { let { config } = _ref2; try { const fullConfig = await (0,_services_appointmentConfigService_js__WEBPACK_IMPORTED_MODULE_0__.createConfig)(config); this.addConfigMutation(fullConfig); return fullConfig; } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].error('Failed to create config', { error }); throw error; } }, async deleteConfig(_ref3) { let { id } = _ref3; try { await (0,_services_appointmentConfigService_js__WEBPACK_IMPORTED_MODULE_0__.deleteConfig)(id); this.deleteConfigMutation(id); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].error('Failed to delete config', { error }); throw error; } }, updateConfigMutation(config) { if (!this.configs[config.id]) { return; } vue__WEBPACK_IMPORTED_MODULE_3__["default"].set(this.configs, config.id, config.clone()); }, addConfigMutation(config) { vue__WEBPACK_IMPORTED_MODULE_3__["default"].set(this.configs, config.id, config); }, deleteConfigMutation(id) { if (!this.configs[id]) { return; } vue__WEBPACK_IMPORTED_MODULE_3__["default"].delete(this.configs, id); } } })); /***/ }), /***/ "./src/store/calendarObjectInstance.js": /*!*********************************************!*\ !*** ./src/store/calendarObjectInstance.js ***! \*********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); /* harmony import */ var _services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../services/timezoneDataProviderService.js */ "./src/services/timezoneDataProviderService.js"); /* harmony import */ var _utils_date_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/date.js */ "./src/utils/date.js"); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /* harmony import */ var _utils_recurrence_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/recurrence.js */ "./src/utils/recurrence.js"); /* harmony import */ var _models_event_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../models/event.js */ "./src/models/event.js"); /* harmony import */ var _utils_alarms_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/alarms.js */ "./src/utils/alarms.js"); /* harmony import */ var _utils_color_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/color.js */ "./src/utils/color.js"); /* harmony import */ var _models_alarm_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../models/alarm.js */ "./src/models/alarm.js"); /* harmony import */ var _utils_calendarObject_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/calendarObject.js */ "./src/utils/calendarObject.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _settings_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./settings.js */ "./src/store/settings.js"); /* harmony import */ var _models_rfcProps_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../models/rfcProps.js */ "./src/models/rfcProps.js"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _services_talkService_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../services/talkService.js */ "./src/services/talkService.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * @copyright Copyright (c) 2023 Jonas Heinrich * * @author Georg Ehrke * @author Jonas Heinrich * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const state = { isNew: null, calendarObject: null, calendarObjectInstance: null, existingEvent: { objectId: null, recurrenceId: null } }; const mutations = { /** * Set a calendar-object-instance that will be opened in the editor (existing event) * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObject The calendar-object currently being edited * @param {object} data.calendarObjectInstance The calendar-object-instance currently being edited * @param {string} data.objectId The objectId of the calendar-object * @param {number} data.recurrenceId The recurrence-id of the calendar-object-instance */ setCalendarObjectInstanceForExistingEvent(state, _ref) { let { calendarObject, calendarObjectInstance, objectId, recurrenceId } = _ref; state.isNew = false; state.calendarObject = calendarObject; state.calendarObjectInstance = calendarObjectInstance; state.existingEvent.objectId = objectId; state.existingEvent.recurrenceId = recurrenceId; }, /** * Set a calendar-object-instance that will be opened in the editor (new event) * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObject The calendar-object currently being created * @param {object} data.calendarObjectInstance The calendar-object-instance currently being crated */ setCalendarObjectInstanceForNewEvent(state, _ref2) { let { calendarObject, calendarObjectInstance } = _ref2; state.isNew = true; state.calendarObject = calendarObject; state.calendarObjectInstance = calendarObjectInstance; state.existingEvent.objectId = null; state.existingEvent.recurrenceId = null; }, /** * * @param {object} state The Vuex state */ resetCalendarObjectInstanceObjectIdAndRecurrenceId(state) { state.isNew = false; state.calendarObject = null; state.calendarObjectInstance = null; state.existingEvent.objectId = null; state.existingEvent.recurrenceId = null; }, /** * Change the title of the event * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.title The new Title */ changeTitle(state, _ref3) { let { calendarObjectInstance, title } = _ref3; calendarObjectInstance.eventComponent.title = title; calendarObjectInstance.title = title; }, /** * Change the event's start * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {Date} data.startDate New start date to set */ changeStartDate(state, _ref4) { let { calendarObjectInstance, startDate } = _ref4; calendarObjectInstance.eventComponent.startDate.year = startDate.getFullYear(); calendarObjectInstance.eventComponent.startDate.month = startDate.getMonth() + 1; calendarObjectInstance.eventComponent.startDate.day = startDate.getDate(); calendarObjectInstance.eventComponent.startDate.hour = startDate.getHours(); calendarObjectInstance.eventComponent.startDate.minute = startDate.getMinutes(); calendarObjectInstance.eventComponent.startDate.second = 0; const isAllDay = calendarObjectInstance.eventComponent.isAllDay(); const endDateObj = calendarObjectInstance.eventComponent.endDate.clone(); const startDateObj = calendarObjectInstance.eventComponent.startDate.clone(); if (isAllDay) { endDateObj.addDuration(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.DurationValue.fromSeconds(-1 * 60 * 60 * 24)); if (endDateObj.compare(startDateObj) === -1) { const timezone = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__["default"])().getTimezoneForId(endDateObj.timezoneId); calendarObjectInstance.eventComponent.endDate = calendarObjectInstance.eventComponent.startDate.getInTimezone(timezone); calendarObjectInstance.endDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_1__.getDateFromDateTimeValue)(calendarObjectInstance.eventComponent.endDate); calendarObjectInstance.eventComponent.endDate.addDuration(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.DurationValue.fromSeconds(60 * 60 * 24)); } } else { if (endDateObj.compare(startDateObj) === -1) { const timezone = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__["default"])().getTimezoneForId(endDateObj.timezoneId); calendarObjectInstance.eventComponent.endDate = calendarObjectInstance.eventComponent.startDate.getInTimezone(timezone); calendarObjectInstance.endDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_1__.getDateFromDateTimeValue)(calendarObjectInstance.eventComponent.endDate); } } calendarObjectInstance.startDate = startDate; }, /** * Change the timezone of the event's start * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.startTimezone New timezone to set for start */ changeStartTimezone(state, _ref5) { let { calendarObjectInstance, startTimezone } = _ref5; const timezone = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__["default"])().getTimezoneForId(startTimezone); calendarObjectInstance.eventComponent.startDate.replaceTimezone(timezone); calendarObjectInstance.startTimezoneId = startTimezone; // Either both are floating or both have a timezone, but it can't be mixed if (startTimezone === 'floating' || calendarObjectInstance.endTimezoneId === 'floating') { calendarObjectInstance.eventComponent.endDate.replaceTimezone(timezone); calendarObjectInstance.endTimezoneId = startTimezone; } }, /** * Change the event's end * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {Date} data.endDate New end date to set */ changeEndDate(state, _ref6) { let { calendarObjectInstance, endDate } = _ref6; // If the event is using DURATION, endDate is dynamically generated. // In order to alter it, we need to explicitly set DTEND const endDateObject = calendarObjectInstance.eventComponent.endDate; calendarObjectInstance.eventComponent.endDate = endDateObject; calendarObjectInstance.eventComponent.endDate.year = endDate.getFullYear(); calendarObjectInstance.eventComponent.endDate.month = endDate.getMonth() + 1; calendarObjectInstance.eventComponent.endDate.day = endDate.getDate(); calendarObjectInstance.eventComponent.endDate.hour = endDate.getHours(); calendarObjectInstance.eventComponent.endDate.minute = endDate.getMinutes(); calendarObjectInstance.eventComponent.endDate.second = 0; const isAllDay = calendarObjectInstance.eventComponent.isAllDay(); const endDateObj = calendarObjectInstance.eventComponent.endDate.clone(); const startDateObj = calendarObjectInstance.eventComponent.startDate.clone(); if (isAllDay) { if (endDateObj.compare(startDateObj) === -1) { const timezone = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__["default"])().getTimezoneForId(startDateObj.timezoneId); calendarObjectInstance.eventComponent.startDate = calendarObjectInstance.eventComponent.endDate.getInTimezone(timezone); calendarObjectInstance.startDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_1__.getDateFromDateTimeValue)(calendarObjectInstance.eventComponent.startDate); } // endDate is inclusive, but DTEND needs to be exclusive, so always add one day calendarObjectInstance.eventComponent.endDate.addDuration(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.DurationValue.fromSeconds(60 * 60 * 24)); } else { // Is end before start? if (endDateObj.compare(startDateObj) === -1) { // Is end more than one day before start? endDateObj.addDuration(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.DurationValue.fromSeconds(60 * 60 * 24)); if (endDateObj.compare(startDateObj) === -1) { const timezone = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__["default"])().getTimezoneForId(startDateObj.timezoneId); calendarObjectInstance.eventComponent.startDate = calendarObjectInstance.eventComponent.endDate.getInTimezone(timezone); calendarObjectInstance.startDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_1__.getDateFromDateTimeValue)(calendarObjectInstance.eventComponent.startDate); } else { // add one day to endDate if the endDate is before the startDate which allows to easily create events that reach over or to 0:00 calendarObjectInstance.eventComponent.endDate.addDuration(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.DurationValue.fromSeconds(60 * 60 * 24)); endDate = new Date(endDate.getTime() + 24 * 60 * 60 * 1000); } } } calendarObjectInstance.endDate = endDate; }, /** * Change the timezone of the event's end * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.endTimezone New timezone to set for end */ changeEndTimezone(state, _ref7) { let { calendarObjectInstance, endTimezone } = _ref7; const timezone = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__["default"])().getTimezoneForId(endTimezone); calendarObjectInstance.eventComponent.endDate.replaceTimezone(timezone); calendarObjectInstance.endTimezoneId = endTimezone; // Either both are floating or both have a timezone, but it can't be mixed if (endTimezone === 'floating' || calendarObjectInstance.startTimezoneId === 'floating') { calendarObjectInstance.eventComponent.startDate.replaceTimezone(timezone); calendarObjectInstance.startTimezoneId = endTimezone; } }, /** * Switch from a timed event to allday or vice versa * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object */ toggleAllDay(state, _ref8) { let { calendarObjectInstance } = _ref8; if (!calendarObjectInstance.eventComponent.canModifyAllDay()) { return; } const isAllDay = calendarObjectInstance.eventComponent.isAllDay(); calendarObjectInstance.eventComponent.startDate.isDate = !isAllDay; calendarObjectInstance.eventComponent.endDate.isDate = !isAllDay; calendarObjectInstance.isAllDay = calendarObjectInstance.eventComponent.isAllDay(); // isAllDay = old value if (isAllDay) { calendarObjectInstance.eventComponent.endDate.addDuration(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.DurationValue.fromSeconds(-1 * 60 * 60 * 24)); } else { calendarObjectInstance.eventComponent.endDate.addDuration(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.DurationValue.fromSeconds(60 * 60 * 24)); } }, /** * Is private * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object */ toggleIsPrivate(state, _ref9) { let { calendarObjectInstance, isPrivate } = _ref9; calendarObjectInstance.eventComponent.isPrivate = isPrivate; calendarObjectInstance.isPrivate = isPrivate; }, /** * Is private * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object */ toggleReturnToSiege(state, _ref10) { let { calendarObjectInstance, returnToSiege } = _ref10; calendarObjectInstance.eventComponent.returnToSiege = returnToSiege; calendarObjectInstance.returnToSiege = returnToSiege; }, /** *Email id * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object */ addEmailId(state, _ref11) { let { calendarObjectInstance, emailId } = _ref11; calendarObjectInstance.eventComponent.emailId = emailId; calendarObjectInstance.emailId = emailId; }, /** * Changes the time of a timed event to the default values * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object */ changeTimeToDefaultForTimedEvents(state, _ref12) { let { calendarObjectInstance } = _ref12; const startDate = calendarObjectInstance.eventComponent.startDate; const endDate = calendarObjectInstance.eventComponent.endDate; if (startDate.hour === 0 && startDate.minute === 0 && endDate.hour === 0 && endDate.minute === 0) { startDate.hour = 10; endDate.hour = 11; calendarObjectInstance.startDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_1__.getDateFromDateTimeValue)(startDate); calendarObjectInstance.endDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_1__.getDateFromDateTimeValue)(endDate); } }, /** * Change the location of an event * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.location New location to set */ changeLocation(state, _ref13) { let { calendarObjectInstance, location } = _ref13; // Special case: delete Apple-specific location property to avoid inconsistencies calendarObjectInstance.eventComponent.deleteAllProperties('X-APPLE-STRUCTURED-LOCATION'); calendarObjectInstance.eventComponent.location = location; calendarObjectInstance.location = location; }, /** * Change the comment of an event * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.comment New comment to set */ changeComment(state, _ref14) { let { calendarObjectInstance, comment } = _ref14; calendarObjectInstance.eventComponent.comment = comment; calendarObjectInstance.comment = comment; }, /** * Change the client of an event * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.client New client to set */ changeClient(state, _ref15) { let { calendarObjectInstance, client } = _ref15; calendarObjectInstance.eventComponent.client = client; calendarObjectInstance.client = client; }, /** * Change the embalmer (Thanato) of an event * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.embalmer New embalmer to set */ changeEmbalmer(state, _ref16) { let { calendarObjectInstance, embalmer } = _ref16; calendarObjectInstance.eventComponent.embalmer = embalmer; calendarObjectInstance.embalmer = embalmer; }, /** * Change the absence type of an event * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.embalmer New embalmer to set */ changeAbsenceType(state, _ref17) { let { calendarObjectInstance, absenceType } = _ref17; calendarObjectInstance.eventComponent.absenceType = absenceType !== null && absenceType !== void 0 ? absenceType : null; calendarObjectInstance.absenceType = absenceType !== null && absenceType !== void 0 ? absenceType : null; if (absenceType) { const types = [{ value: 'LEAVE', label: 'Congé' }, { value: 'REST', label: 'Repos' }, { value: 'DISEASE', label: 'Arrêt maladie' }]; types.forEach(element => { if (element.value == absenceType) { calendarObjectInstance.title = element.label; calendarObjectInstance.eventComponent.title = element.label; if (absenceType == 'LEAVE') { const startDate = calendarObjectInstance.eventComponent.startDate; const endDate = calendarObjectInstance.eventComponent.endDate; startDate.hour = 8; endDate.hour = 17; calendarObjectInstance.startDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_1__.getDateFromDateTimeValue)(startDate); calendarObjectInstance.endDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_1__.getDateFromDateTimeValue)(endDate); } } }); } }, /** * Change the description of an event * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.description New description to set */ changeDescription(state, _ref18) { let { calendarObjectInstance, description } = _ref18; // To avoid inconsistencies (bug #3863), remove all parameters (e.g., ALTREP) upon modification const descriptionProperty = calendarObjectInstance.eventComponent.getFirstProperty('Description'); if (descriptionProperty) { for (const parameter of descriptionProperty.getParametersIterator()) { descriptionProperty.deleteParameter(parameter.name); } } // Delete custom description properties calendarObjectInstance.eventComponent.deleteAllProperties('X-ALT-DESC'); calendarObjectInstance.eventComponent.description = description; calendarObjectInstance.description = description; }, /** * Change the access class of an event * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.accessClass New access class to set */ changeAccessClass(state, _ref19) { let { calendarObjectInstance, accessClass } = _ref19; calendarObjectInstance.eventComponent.accessClass = accessClass; calendarObjectInstance.accessClass = accessClass; }, /** * Change the status of an event * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.status New status to set */ changeStatus(state, _ref20) { let { calendarObjectInstance, status } = _ref20; calendarObjectInstance.eventComponent.status = status; calendarObjectInstance.status = status; }, /** * Change the time-transparency of an event * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.timeTransparency New time-transparency to set */ changeTimeTransparency(state, _ref21) { let { calendarObjectInstance, timeTransparency } = _ref21; calendarObjectInstance.eventComponent.timeTransparency = timeTransparency; calendarObjectInstance.timeTransparency = timeTransparency; }, /** * Change the customized color of an event * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string | null} data.customColor New color to set */ changeCustomColor(state, _ref22) { let { calendarObjectInstance, customColor } = _ref22; if (customColor === null) { calendarObjectInstance.eventComponent.deleteAllProperties('COLOR'); vue__WEBPACK_IMPORTED_MODULE_14__["default"].set(calendarObjectInstance, 'customColor', null); return; } const cssColorName = (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_6__.getClosestCSS3ColorNameForHex)(customColor); const hexColorOfCssName = (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_6__.getHexForColorName)(cssColorName); // Abort if either is undefined if (!cssColorName || !hexColorOfCssName) { console.error('Setting custom color failed'); console.error('customColor: ', customColor); console.error('cssColorName: ', cssColorName); console.error('hexColorOfCssName: ', hexColorOfCssName); return; } calendarObjectInstance.eventComponent.color = cssColorName; vue__WEBPACK_IMPORTED_MODULE_14__["default"].set(calendarObjectInstance, 'customColor', hexColorOfCssName); }, /** * Adds an attendee to the event and sets the organizer if not present already * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.commonName Displayname of attendee * @param {string} data.uri Email address of attendee * @param {string} data.calendarUserType Calendar-user-type of attendee (INDIVIDUAL, GROUP, RESOURCE, ROOM) * @param {string} data.participationStatus Participation Status of attendee * @param {string} data.role Role of Attendee * @param {boolean} data.rsvp Whether or not to request a response from the attendee * @param {string=} data.language Preferred language of the attendee * @param {string=} data.timezoneId Preferred timezone of the attendee * @param {object=} data.organizer Principal of the organizer to be set if not present * @param data.member */ addAttendee(state, _ref23) { let { calendarObjectInstance, commonName, uri, calendarUserType = null, participationStatus = null, role = null, rsvp = null, language = null, timezoneId = null, organizer = null, member = null } = _ref23; const attendee = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.AttendeeProperty.fromNameAndEMail(commonName, uri); if (calendarUserType !== null) { attendee.userType = calendarUserType; } if (participationStatus !== null) { attendee.participationStatus = participationStatus; } if (role !== null) { attendee.role = role; } if (rsvp !== null) { attendee.rsvp = rsvp; } if (language !== null) { attendee.language = language; } if (timezoneId !== null) { attendee.updateParameterIfExist('TZID', timezoneId); } if (member !== null) { attendee.updateParameterIfExist('MEMBER', member); } // TODO - use real addAttendeeFrom method calendarObjectInstance.eventComponent.addProperty(attendee); calendarObjectInstance.attendees.push({ commonName, participationStatus, role, rsvp, uri, attendeeProperty: attendee }); if (!calendarObjectInstance.organizer && organizer) { this.commit('setOrganizer', { calendarObjectInstance, commonName: organizer.displayname, email: organizer.emailAddress }); } }, /** * Removes an attendee from the event * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.attendee The attendee object to remove */ removeAttendee(state, _ref24) { let { calendarObjectInstance, attendee } = _ref24; calendarObjectInstance.eventComponent.removeAttendee(attendee.attendeeProperty); // Also remove members if attendee is a group if (attendee.attendeeProperty.userType === 'GROUP') { attendee.members.forEach(function (member) { calendarObjectInstance.eventComponent.removeAttendee(member.attendeeProperty); const index = calendarObjectInstance.attendees.indexOf(member); if (index !== -1) { calendarObjectInstance.attendees.splice(index, 1); } }); } const index = calendarObjectInstance.attendees.indexOf(attendee); if (index !== -1) { calendarObjectInstance.attendees.splice(index, 1); } }, /** * Changes an attendees' participation status * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.attendee The attendee object * @param {string} data.participationStatus New Participation Status of attendee */ changeAttendeesParticipationStatus(state, _ref25) { let { attendee, participationStatus } = _ref25; attendee.attendeeProperty.participationStatus = participationStatus; attendee.participationStatus = participationStatus; }, /** * Changes an attendees' role * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.attendee The attendee object * @param {string} data.role New role of attendee */ changeAttendeesRole(state, _ref26) { let { attendee, role } = _ref26; attendee.attendeeProperty.role = role; attendee.role = role; }, /** * Changes an attendees' RVSP * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.attendee The attendee object */ toggleAttendeeRSVP(state, _ref27) { let { attendee } = _ref27; const oldRSVP = attendee.attendeeProperty.rsvp; attendee.attendeeProperty.rsvp = !oldRSVP; attendee.rsvp = !oldRSVP; }, /** * Set the event's organizer * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string=} data.commonName Displayname of organizer * @param {string} data.email Email-address of organizer */ setOrganizer(state, _ref28) { let { calendarObjectInstance, commonName = null, email } = _ref28; calendarObjectInstance.eventComponent.setOrganizerFromNameAndEMail(commonName, email); vue__WEBPACK_IMPORTED_MODULE_14__["default"].set(calendarObjectInstance, 'organizer', {}); vue__WEBPACK_IMPORTED_MODULE_14__["default"].set(calendarObjectInstance.organizer, 'commonName', commonName); vue__WEBPACK_IMPORTED_MODULE_14__["default"].set(calendarObjectInstance.organizer, 'uri', email); vue__WEBPACK_IMPORTED_MODULE_14__["default"].set(calendarObjectInstance.organizer, 'attendeeProperty', calendarObjectInstance.eventComponent.getFirstProperty('ORGANIZER')); }, /** * Adds a category to the event * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.category Category to add */ addCategory(state, _ref29) { let { calendarObjectInstance, category } = _ref29; calendarObjectInstance.eventComponent.addCategory(category); calendarObjectInstance.categories.push(category); }, /** * Removes a category from the event * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.category Category to remove */ removeCategory(state, _ref30) { let { calendarObjectInstance, category } = _ref30; calendarObjectInstance.eventComponent.removeCategory(category); const index = calendarObjectInstance.categories.indexOf(category); if (index !== -1) { calendarObjectInstance.categories.splice(index, 1); } }, /** * Change the interval of the recurrence-rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify * @param {string} data.interval The new interval to set */ changeRecurrenceInterval(state, _ref31) { let { calendarObjectInstance, recurrenceRule, interval } = _ref31; if (recurrenceRule.recurrenceRuleValue) { recurrenceRule.recurrenceRuleValue.interval = interval; recurrenceRule.interval = interval; console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Change the frequency of the recurrence-rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify * @param {string} data.frequency The new frequency to set */ changeRecurrenceFrequency(state, _ref32) { let { calendarObjectInstance, recurrenceRule, frequency } = _ref32; if (recurrenceRule.recurrenceRuleValue) { recurrenceRule.recurrenceRuleValue.frequency = frequency; recurrenceRule.frequency = frequency; console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Change the count limit of the recurrence-rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify * @param {string} data.count The new count to set */ changeRecurrenceCount(state, _ref33) { let { calendarObjectInstance, recurrenceRule, count } = _ref33; if (recurrenceRule.recurrenceRuleValue) { recurrenceRule.recurrenceRuleValue.count = count; recurrenceRule.count = count; recurrenceRule.until = null; console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Change the until limit of the recurrence-rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify * @param {Date} data.until The new until to set */ changeRecurrenceUntil(state, _ref34) { let { calendarObjectInstance, recurrenceRule, until } = _ref34; if (recurrenceRule.recurrenceRuleValue) { // RFC 5545, setion 3.3.10: until must be in UTC if the start time is timezone-aware if (calendarObjectInstance.startTimezoneId !== 'floating') { recurrenceRule.recurrenceRuleValue.until = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.DateTimeValue.fromJSDate(until, { zone: 'utc' }); } else { recurrenceRule.recurrenceRuleValue.until = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.DateTimeValue.fromJSDate(until); } recurrenceRule.until = until; recurrenceRule.count = null; console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Changes the recurrence-rule to never end * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify */ changeRecurrenceToInfinite(state, _ref35) { let { calendarObjectInstance, recurrenceRule } = _ref35; if (recurrenceRule.recurrenceRuleValue) { recurrenceRule.recurrenceRuleValue.setToInfinite(); recurrenceRule.until = null; recurrenceRule.count = null; console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Reset the By-parts of the recurrence rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify */ resetRecurrenceByParts(state, _ref36) { let { calendarObjectInstance, recurrenceRule } = _ref36; if (recurrenceRule.recurrenceRuleValue) { const parts = ['BYSECOND', 'BYMINUTE', 'BYHOUR', 'BYDAY', 'BYMONTHDAY', 'BYYEARDAY', 'BYWEEKNO', 'BYMONTH', 'BYSETPOS']; for (const part of parts) { recurrenceRule.recurrenceRuleValue.setComponent(part, []); } vue__WEBPACK_IMPORTED_MODULE_14__["default"].set(recurrenceRule, 'byDay', []); vue__WEBPACK_IMPORTED_MODULE_14__["default"].set(recurrenceRule, 'byMonth', []); vue__WEBPACK_IMPORTED_MODULE_14__["default"].set(recurrenceRule, 'byMonthDay', []); vue__WEBPACK_IMPORTED_MODULE_14__["default"].set(recurrenceRule, 'bySetPosition', null); console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Reset the By-parts of the recurrence rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify */ setDefaultRecurrenceByPartsForWeekly(state, _ref37) { let { calendarObjectInstance, recurrenceRule } = _ref37; if (recurrenceRule.recurrenceRuleValue) { const byDay = (0,_utils_recurrence_js__WEBPACK_IMPORTED_MODULE_3__.getWeekDayFromDate)(calendarObjectInstance.startDate); recurrenceRule.recurrenceRuleValue.setComponent('BYDAY', [byDay]); recurrenceRule.byDay.push(byDay); console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Reset the By-parts of the recurrence rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify */ setDefaultRecurrenceByPartsForMonthly(state, _ref38) { let { calendarObjectInstance, recurrenceRule } = _ref38; if (recurrenceRule.recurrenceRuleValue) { const byMonthDay = calendarObjectInstance.startDate.getDate().toString(); recurrenceRule.recurrenceRuleValue.setComponent('BYMONTHDAY', [byMonthDay]); recurrenceRule.byMonthDay.push(byMonthDay); console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify */ setDefaultRecurrenceByPartsForMonthlyBySetPosition(state, _ref39) { let { calendarObjectInstance, recurrenceRule } = _ref39; if (recurrenceRule.recurrenceRuleValue) { const { byDay, bySetPosition } = (0,_utils_recurrence_js__WEBPACK_IMPORTED_MODULE_3__.getBySetPositionAndBySetFromDate)(calendarObjectInstance.startDate); recurrenceRule.recurrenceRuleValue.setComponent('BYDAY', [byDay]); recurrenceRule.recurrenceRuleValue.setComponent('BYSETPOS', [bySetPosition]); recurrenceRule.byDay.push(byDay); recurrenceRule.bySetPosition = bySetPosition; console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Reset the By-parts of the recurrence rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify */ setDefaultRecurrenceByPartsForYearly(state, _ref40) { let { calendarObjectInstance, recurrenceRule } = _ref40; if (recurrenceRule.recurrenceRuleValue) { const byMonth = calendarObjectInstance.startDate.getMonth() + 1; // Javascript months are zero-based recurrenceRule.recurrenceRuleValue.setComponent('BYMONTH', [byMonth]); recurrenceRule.byMonth.push(byMonth); console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Change the until limit of the recurrence-rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify * @param {string} data.byDay The new until to set */ addByDayToRecurrenceRule(state, _ref41) { let { calendarObjectInstance, recurrenceRule, byDay } = _ref41; if (recurrenceRule.recurrenceRuleValue) { const byDayList = recurrenceRule.recurrenceRuleValue.getComponent('BYDAY'); const index = byDayList.indexOf(byDay); if (index === -1) { byDayList.push(byDay); recurrenceRule.recurrenceRuleValue.setComponent('BYDAY', byDayList); } const index2 = recurrenceRule.byDay.indexOf(byDay); if (index2 === -1) { recurrenceRule.byDay.push(byDay); } console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Change the until limit of the recurrence-rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify * @param {string} data.byDay The new until to set */ removeByDayFromRecurrenceRule(state, _ref42) { let { calendarObjectInstance, recurrenceRule, byDay } = _ref42; if (recurrenceRule.recurrenceRuleValue) { const byDayList = recurrenceRule.recurrenceRuleValue.getComponent('BYDAY'); const index = byDayList.indexOf(byDay); if (index !== -1) { byDayList.splice(index, 1); recurrenceRule.recurrenceRuleValue.setComponent('BYDAY', byDayList); } const index2 = recurrenceRule.byDay.indexOf(byDay); if (index2 !== -1) { recurrenceRule.byDay.splice(index2, 1); } console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Change the until limit of the recurrence-rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify * @param {string} data.byMonthDay The new until to set */ addByMonthDayToRecurrenceRule(state, _ref43) { let { calendarObjectInstance, recurrenceRule, byMonthDay } = _ref43; if (recurrenceRule.recurrenceRuleValue) { const byMonthDayList = recurrenceRule.recurrenceRuleValue.getComponent('BYMONTHDAY'); const index = byMonthDayList.indexOf(byMonthDay); if (index === -1) { byMonthDayList.push(byMonthDay); recurrenceRule.recurrenceRuleValue.setComponent('BYMONTHDAY', byMonthDayList); } const index2 = recurrenceRule.byMonthDay.indexOf(byMonthDay); if (index2 === -1) { recurrenceRule.byMonthDay.push(byMonthDay); } console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Change the until limit of the recurrence-rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify * @param {string} data.byMonthDay The new until to set */ removeByMonthDayFromRecurrenceRule(state, _ref44) { let { calendarObjectInstance, recurrenceRule, byMonthDay } = _ref44; if (recurrenceRule.recurrenceRuleValue) { const byMonthDayList = recurrenceRule.recurrenceRuleValue.getComponent('BYMONTHDAY'); const index = byMonthDayList.indexOf(byMonthDay); if (index !== -1) { byMonthDayList.splice(index, 1); recurrenceRule.recurrenceRuleValue.setComponent('BYMONTHDAY', byMonthDayList); } const index2 = recurrenceRule.byMonthDay.indexOf(byMonthDay); if (index2 !== -1) { recurrenceRule.byMonthDay.splice(index2, 1); } console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Change the until limit of the recurrence-rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify * @param {string} data.byMonth The new until to set */ addByMonthToRecurrenceRule(state, _ref45) { let { calendarObjectInstance, recurrenceRule, byMonth } = _ref45; if (recurrenceRule.recurrenceRuleValue) { console.debug('addByMonthToRecurrenceRule', byMonth); const byMonthList = recurrenceRule.recurrenceRuleValue.getComponent('BYMONTH'); const index = byMonthList.indexOf(byMonth); if (index === -1) { byMonthList.push(byMonth); recurrenceRule.recurrenceRuleValue.setComponent('BYMONTH', byMonthList); } const index2 = recurrenceRule.byMonth.indexOf(byMonth); if (index2 === -1) { recurrenceRule.byMonth.push(byMonth); } console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Change the until limit of the recurrence-rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify * @param {string} data.byMonth The new until to set */ removeByMonthFromRecurrenceRule(state, _ref46) { let { calendarObjectInstance, recurrenceRule, byMonth } = _ref46; if (recurrenceRule.recurrenceRuleValue) { console.debug('removeByMonthFromRecurrenceRule', byMonth); const byMonthList = recurrenceRule.recurrenceRuleValue.getComponent('BYMONTH'); const index = byMonthList.indexOf(byMonth); if (index !== -1) { byMonthList.splice(index, 1); recurrenceRule.recurrenceRuleValue.setComponent('BYMONTH', byMonthList); } const index2 = recurrenceRule.byMonth.indexOf(byMonth); if (index2 !== -1) { recurrenceRule.byMonth.splice(index2, 1); } console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify * @param {string[]} data.byDay The new until to set */ changeRecurrenceByDay(state, _ref47) { let { calendarObjectInstance, recurrenceRule, byDay } = _ref47; if (recurrenceRule.recurrenceRuleValue) { recurrenceRule.recurrenceRuleValue.setComponent('BYDAY', byDay); vue__WEBPACK_IMPORTED_MODULE_14__["default"].set(recurrenceRule, 'byDay', byDay); console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Change the until limit of the recurrence-rule * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify * @param {string} data.bySetPosition The new until to set */ changeRecurrenceBySetPosition(state, _ref48) { let { calendarObjectInstance, recurrenceRule, bySetPosition } = _ref48; if (recurrenceRule.recurrenceRuleValue) { recurrenceRule.recurrenceRuleValue.setComponent('BYSETPOS', [bySetPosition]); vue__WEBPACK_IMPORTED_MODULE_14__["default"].set(recurrenceRule, 'bySetPosition', bySetPosition); console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify */ unsetRecurrenceBySetPosition(state, _ref49) { let { calendarObjectInstance, recurrenceRule } = _ref49; if (recurrenceRule.recurrenceRuleValue) { recurrenceRule.recurrenceRuleValue.setComponent('BYSETPOS', []); vue__WEBPACK_IMPORTED_MODULE_14__["default"].set(recurrenceRule, 'bySetPosition', null); console.debug(recurrenceRule.recurrenceRuleValue._innerValue.toString()); } }, /** * Remove the recurrence-rule from the calendarObjectInstance * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify */ removeRecurrenceRuleFromCalendarObjectInstance(state, _ref50) { let { calendarObjectInstance, recurrenceRule } = _ref50; if (recurrenceRule.recurrenceRuleValue) { calendarObjectInstance.eventComponent.deleteAllProperties('RRULE'); vue__WEBPACK_IMPORTED_MODULE_14__["default"].set(calendarObjectInstance, 'recurrenceRule', (0,_models_event_js__WEBPACK_IMPORTED_MODULE_4__.getDefaultEventObject)().recurrenceRule); console.debug(calendarObjectInstance); console.debug(recurrenceRule); } }, /** * Add a new recurrence-rule to the calendarObjectInstance * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object */ addRecurrenceRuleFromCalendarObjectInstance(state, _ref51) { let { calendarObjectInstance } = _ref51; const recurrenceValue = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.RecurValue.fromData({}); const recurrenceProperty = new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.Property('RRULE', recurrenceValue); calendarObjectInstance.eventComponent.addProperty(recurrenceProperty); calendarObjectInstance.recurrenceRule.recurrenceRuleValue = recurrenceValue; }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.recurrenceRule The recurrenceRule object to modify */ markRecurrenceRuleAsSupported(state, _ref52) { let { calendarObjectInstance, recurrenceRule } = _ref52; recurrenceRule.isUnsupported = false; }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.alarm The alarm object * @param {string} data.type New type of alarm */ changeAlarmType(state, _ref53) { let { calendarObjectInstance, alarm, type } = _ref53; if (alarm.alarmComponent) { alarm.alarmComponent.action = type; alarm.type = type; console.debug(alarm.alarmComponent.toICALJs().toString()); } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.alarm The alarm object * @param {number} data.amount New amount of timed event */ changeAlarmAmountTimed(state, _ref54) { let { calendarObjectInstance, alarm, amount } = _ref54; if (alarm.alarmComponent) { alarm.alarmComponent.trigger.value.totalSeconds = (0,_utils_alarms_js__WEBPACK_IMPORTED_MODULE_5__.getTotalSecondsFromAmountAndUnitForTimedEvents)(amount, alarm.relativeUnitTimed, alarm.relativeIsBefore); alarm.relativeAmountTimed = amount; alarm.relativeTrigger = alarm.alarmComponent.trigger.value.totalSeconds; console.debug(alarm.alarmComponent.toICALJs().toString()); } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.alarm The alarm object * @param {string} data.unit New unit of timed event */ changeAlarmUnitTimed(state, _ref55) { let { calendarObjectInstance, alarm, unit } = _ref55; if (alarm.alarmComponent) { alarm.alarmComponent.trigger.value.totalSeconds = (0,_utils_alarms_js__WEBPACK_IMPORTED_MODULE_5__.getTotalSecondsFromAmountAndUnitForTimedEvents)(alarm.relativeAmountTimed, unit, alarm.relativeIsBefore); alarm.relativeUnitTimed = unit; alarm.relativeTrigger = alarm.alarmComponent.trigger.value.totalSeconds; console.debug(alarm.alarmComponent.toICALJs().toString()); } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.alarm The alarm object * @param {number} data.amount New amount of all-day event */ changeAlarmAmountAllDay(state, _ref56) { let { calendarObjectInstance, alarm, amount } = _ref56; if (alarm.alarmComponent) { alarm.alarmComponent.trigger.value.totalSeconds = (0,_utils_alarms_js__WEBPACK_IMPORTED_MODULE_5__.getTotalSecondsFromAmountHourMinutesAndUnitForAllDayEvents)(amount, alarm.relativeHoursAllDay, alarm.relativeMinutesAllDay, alarm.relativeUnitAllDay); alarm.relativeAmountAllDay = amount; alarm.relativeTrigger = alarm.alarmComponent.trigger.value.totalSeconds; console.debug(alarm.alarmComponent.toICALJs().toString()); } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.alarm The alarm object * @param {string} data.unit New Unit of all-day event */ changeAlarmUnitAllDay(state, _ref57) { let { calendarObjectInstance, alarm, unit } = _ref57; if (alarm.alarmComponent) { alarm.alarmComponent.trigger.value.totalSeconds = (0,_utils_alarms_js__WEBPACK_IMPORTED_MODULE_5__.getTotalSecondsFromAmountHourMinutesAndUnitForAllDayEvents)(alarm.relativeAmountAllDay, alarm.relativeHoursAllDay, alarm.relativeMinutesAllDay, unit); alarm.relativeUnitAllDay = unit; alarm.relativeTrigger = alarm.alarmComponent.trigger.value.totalSeconds; console.debug(alarm.alarmComponent.toICALJs().toString()); } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.alarm The alarm object * @param {number} data.hours New Hour * @param {number} data.minutes New Minutes */ changeAlarmHoursMinutesAllDay(state, _ref58) { let { calendarObjectInstance, alarm, hours, minutes } = _ref58; if (alarm.alarmComponent) { alarm.alarmComponent.trigger.value.totalSeconds = (0,_utils_alarms_js__WEBPACK_IMPORTED_MODULE_5__.getTotalSecondsFromAmountHourMinutesAndUnitForAllDayEvents)(alarm.relativeAmountAllDay, hours, minutes, alarm.relativeUnitAllDay); alarm.relativeHoursAllDay = hours; alarm.relativeMinutesAllDay = minutes; alarm.relativeTrigger = alarm.alarmComponent.trigger.value.totalSeconds; console.debug(alarm.alarmComponent.toICALJs().toString()); } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.alarm The alarm object * @param {Date} data.date New date object */ changeAlarmAbsoluteDate(state, _ref59) { let { calendarObjectInstance, alarm, date } = _ref59; if (alarm.alarmComponent) { alarm.alarmComponent.trigger.value.year = date.getFullYear(); alarm.alarmComponent.trigger.value.month = date.getMonth() + 1; alarm.alarmComponent.trigger.value.day = date.getDate(); alarm.alarmComponent.trigger.value.hour = date.getHours(); alarm.alarmComponent.trigger.value.minute = date.getMinutes(); alarm.alarmComponent.trigger.value.second = 0; alarm.absoluteDate = date; console.debug(alarm.alarmComponent.toICALJs().toString()); } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.alarm The alarm object * @param {string} data.timezoneId New timezoneId */ changeAlarmAbsoluteTimezoneId(state, _ref60) { let { calendarObjectInstance, alarm, timezoneId } = _ref60; if (alarm.alarmComponent) { const timezone = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_0__["default"])().getTimezoneForId(timezoneId); alarm.alarmComponent.trigger.value.replaceTimezone(timezone); alarm.absoluteTimezoneId = timezoneId; console.debug(alarm.alarmComponent.toICALJs().toString()); } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.alarm The alarm object */ changeAlarmFromRelativeToAbsolute(state, _ref61) { let { calendarObjectInstance, alarm } = _ref61; if (alarm.alarmComponent) { const triggerDateTime = calendarObjectInstance.eventComponent.startDate.clone(); // The trigger of an alarm must be DATE-TIME, startDate can be either. triggerDateTime.isDate = false; triggerDateTime.addDuration(alarm.alarmComponent.trigger.value); alarm.alarmComponent.setTriggerFromAbsolute(triggerDateTime); alarm.absoluteDate = (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_1__.getDateFromDateTimeValue)(alarm.alarmComponent.trigger.value); alarm.absoluteTimezoneId = alarm.alarmComponent.trigger.value.timezoneId; console.debug(alarm.alarmComponent.toICALJs().toString()); } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.alarm The alarm object */ changeAlarmFromAbsoluteToRelative(state, _ref62) { let { calendarObjectInstance, alarm } = _ref62; if (alarm.alarmComponent) { const duration = alarm.alarmComponent.trigger.value.subtractDateWithTimezone(calendarObjectInstance.eventComponent.startDate); alarm.alarmComponent.setTriggerFromRelative(duration); alarm.relativeIsBefore = alarm.alarmComponent.trigger.value.isNegative; alarm.relativeIsRelatedToStart = true; alarm.relativeTrigger = duration.totalSeconds; } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.alarm The alarm object */ resetAlarmRelativeParts(state, _ref63) { let { alarm } = _ref63; alarm.relativeIsBefore = null; alarm.relativeIsRelatedToStart = null; alarm.relativeUnitTimed = null; alarm.relativeAmountTimed = null; alarm.relativeUnitAllDay = null; alarm.relativeAmountAllDay = null; alarm.relativeHoursAllDay = null; alarm.relativeMinutesAllDay = null; alarm.relativeTrigger = null; }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.alarm The alarm object */ resetAlarmAbsoluteParts(state, _ref64) { let { alarm } = _ref64; alarm.absoluteDate = null; alarm.absoluteTimezoneId = null; }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.alarm The alarm object */ updateAlarmAllDayParts(state, _ref65) { let { calendarObjectInstance, alarm } = _ref65; if (alarm.alarmComponent) { const totalSeconds = alarm.alarmComponent.trigger.value.totalSeconds; const allDayParts = (0,_utils_alarms_js__WEBPACK_IMPORTED_MODULE_5__.getAmountHoursMinutesAndUnitForAllDayEvents)(totalSeconds); alarm.relativeUnitAllDay = allDayParts.unit; alarm.relativeAmountAllDay = allDayParts.amount; alarm.relativeHoursAllDay = allDayParts.hours; alarm.relativeMinutesAllDay = allDayParts.minutes; } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.alarm The alarm object */ updateAlarmTimedParts(state, _ref66) { let { calendarObjectInstance, alarm } = _ref66; if (alarm.alarmComponent) { const totalSeconds = alarm.alarmComponent.trigger.value.totalSeconds; const timedParts = (0,_utils_alarms_js__WEBPACK_IMPORTED_MODULE_5__.getAmountAndUnitForTimedEvents)(totalSeconds); alarm.relativeUnitTimed = timedParts.unit; alarm.relativeAmountTimed = timedParts.amount; console.debug(alarm.alarmComponent.toICALJs().toString()); } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {string} data.type Type of alarm * @param {number} data.totalSeconds Total amount of seconds for new alarm */ addAlarmToCalendarObjectInstance(state, _ref67) { let { calendarObjectInstance, type, totalSeconds } = _ref67; if (calendarObjectInstance.eventComponent) { const eventComponent = calendarObjectInstance.eventComponent; const duration = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.DurationValue.fromSeconds(totalSeconds); const alarmComponent = eventComponent.addRelativeAlarm(type, duration); const alarmObject = (0,_models_alarm_js__WEBPACK_IMPORTED_MODULE_7__.mapAlarmComponentToAlarmObject)(alarmComponent); calendarObjectInstance.alarms.push(alarmObject); console.debug(alarmObject.alarmComponent.toICALJs().toString()); } }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.alarm The alarm object */ removeAlarmFromCalendarObjectInstance(state, _ref68) { let { calendarObjectInstance, alarm } = _ref68; if (alarm.alarmComponent) { calendarObjectInstance.eventComponent.removeAlarm(alarm.alarmComponent); const index = calendarObjectInstance.alarms.indexOf(alarm); if (index !== -1) { calendarObjectInstance.alarms.splice(index, 1); } } }, /** * @deprecated * @param state * @param calendarObjectInstance.calendarObjectInstance * @param calendarObjectInstance * @param calendarObjectInstance.sharedData * @param sharedData */ addAttachmentBySharedData(state, _ref69) { let { calendarObjectInstance, sharedData } = _ref69; const attachment = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.AttachmentProperty.fromLink(sharedData.url); const fileName = sharedData.fileName; // hot-fix needed temporary, becase calendar-js has no fileName get-setter const parameterFileName = new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.Parameter('FILENAME', fileName); // custom has-preview parameter from dav file const xNcHasPreview = new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.Parameter('X-NC-HAS-PREVIEW', sharedData['has-preview'].toString()); // custom file id parameter from dav file const xNcFileId = new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.Parameter('X-NC-FILE-ID', sharedData.fileid.toString()); // custom share-types parameter from dav file const xNcSharedTypes = new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.Parameter('X-NC-SHARED-TYPES', sharedData['share-types']['share-type'] ? sharedData['share-types']['share-type'].join(',') : ''); attachment.setParameter(parameterFileName); attachment.setParameter(xNcFileId); attachment.setParameter(xNcHasPreview); attachment.setParameter(xNcSharedTypes); attachment.isNew = true; attachment.shareTypes = sharedData['share-types']['share-type'] ? sharedData['share-types']['share-type'].join(',') : ''; attachment.fileName = fileName; attachment.xNcFileId = sharedData.fileid; attachment.xNcHasPreview = sharedData['has-preview']; attachment.formatType = sharedData.getcontenttype; attachment.uri = sharedData.url ? sharedData.url : (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_12__.generateUrl)("/f/".concat(sharedData.fileid)); calendarObjectInstance.eventComponent.addProperty(attachment); calendarObjectInstance.attachments.push(attachment); // console.log(attachment) }, addAttachmentWithProperty(state, _ref70) { var _ref71, _sharedData$shareTyp, _sharedData$shareTyp2, _sharedData$shareTyp3; let { calendarObjectInstance, sharedData } = _ref70; const attachment = {}; const fileName = sharedData.fileName; attachment.isNew = true; attachment.shareTypes = (_ref71 = typeof (sharedData === null || sharedData === void 0 || (_sharedData$shareTyp = sharedData['share-types']) === null || _sharedData$shareTyp === void 0 ? void 0 : _sharedData$shareTyp['share-type']) === 'number' ? sharedData === null || sharedData === void 0 || (_sharedData$shareTyp2 = sharedData['share-types']) === null || _sharedData$shareTyp2 === void 0 || (_sharedData$shareTyp2 = _sharedData$shareTyp2['share-type']) === null || _sharedData$shareTyp2 === void 0 ? void 0 : _sharedData$shareTyp2.toString() : sharedData === null || sharedData === void 0 || (_sharedData$shareTyp3 = sharedData['share-types']) === null || _sharedData$shareTyp3 === void 0 || (_sharedData$shareTyp3 = _sharedData$shareTyp3['share-type']) === null || _sharedData$shareTyp3 === void 0 ? void 0 : _sharedData$shareTyp3.join(',')) !== null && _ref71 !== void 0 ? _ref71 : null; attachment.fileName = fileName; attachment.xNcFileId = sharedData.fileid; attachment.xNcHasPreview = sharedData['has-preview']; attachment.formatType = sharedData.getcontenttype; attachment.uri = sharedData.url ? sharedData.url : (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_12__.generateUrl)("/f/".concat(sharedData.fileid)); const attachmentProperty = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.AttachmentProperty.fromLink(attachment.uri, attachment.formatType); const parameterFileName = new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.Parameter('FILENAME', fileName); const xNcHasPreview = new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.Parameter('X-NC-HAS-PREVIEW', attachment.xNcHasPreview.toString()); const xNcFileId = new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.Parameter('X-NC-FILE-ID', attachment.xNcFileId.toString()); // ADD X-NC-SHARED-TYPES only if sharet-type not empty if (attachment.shareTypes !== null) { const xNcSharedTypes = new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.Parameter('X-NC-SHARED-TYPES', attachment.shareTypes); attachmentProperty.setParameter(xNcSharedTypes); } attachmentProperty.setParameter(parameterFileName); attachmentProperty.setParameter(xNcFileId); attachmentProperty.setParameter(xNcHasPreview); attachmentProperty.uri = attachment.uri; attachment.attachmentProperty = attachmentProperty; calendarObjectInstance.eventComponent.addProperty(attachmentProperty); calendarObjectInstance.attachments.push(attachment); }, /** * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {object} data.calendarObjectInstance The calendarObjectInstance object * @param {object} data.attachment The attachment object */ deleteAttachment(state, _ref72) { let { calendarObjectInstance, attachment } = _ref72; try { const index = calendarObjectInstance.attachments.indexOf(attachment); if (index !== -1) { calendarObjectInstance.attachments.splice(index, 1); } calendarObjectInstance.eventComponent.removeAttachment(attachment.attachmentProperty); } catch {} }, setAbsenceType(state, _ref73) { let { calendarObjectInstance, absenceType } = _ref73; if (calendarObjectInstance) { calendarObjectInstance.absenceType = absenceType; } } }; const getters = {}; const actions = { /** * Returns the closest existing recurrence-id of a calendar-object * close to the given date. * This is either the next occurrence in the future or * in case there are no more future occurrences the closest * occurrence in the past * * @param {object} vuex The vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.dispatch The Vuex dispatch function * @param {Function} vuex.commit The Vuex commit function * @param {object} data The destructuring object * @param {string} data.objectId The objectId of the calendar-object to edit * @param {Date} data.closeToDate The date to get a close occurrence to * @return {Promise} */ async resolveClosestRecurrenceIdForCalendarObject(_ref74, _ref75) { let { state, dispatch, commit } = _ref74; let { objectId, closeToDate } = _ref75; const calendarObject = await dispatch('getEventByObjectId', { objectId }); const iterator = calendarObject.calendarComponent.getVObjectIterator(); const firstVObject = iterator.next().value; const d = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.DateTimeValue.fromJSDate(closeToDate, true); return firstVObject.recurrenceManager.getClosestOccurrence(d).getReferenceRecurrenceId().unixTime; }, /** * Gets the calendar-object and calendar-object-instance * for a given objectId and recurrenceId. * * If the recurrenceId does not represent a valid instance, * an error will be thrown. * * @param {object} vuex The vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.dispatch The Vuex dispatch function * @param {Function} vuex.commit The Vuex commit function * @param {object} data The destructuring object * @param {string} data.objectId The objectId of the calendar-object to edit * @param {number} data.recurrenceId The recurrence-id to edit * @return {Promise<{calendarObject: object, calendarObjectInstance: object}>} */ async getCalendarObjectInstanceByObjectIdAndRecurrenceId(_ref76, _ref77) { let { state, dispatch, commit } = _ref76; let { objectId, recurrenceId } = _ref77; if (state.existingEvent.objectId === objectId && state.existingEvent.recurrenceId === recurrenceId) { return Promise.resolve({ calendarObject: state.calendarObject, calendarObjectInstance: state.calendarObjectInstance }); } const recurrenceIdDate = new Date(recurrenceId * 1000); const calendarObject = await dispatch('getEventByObjectId', { objectId }); const eventComponent = (0,_utils_calendarObject_js__WEBPACK_IMPORTED_MODULE_8__.getObjectAtRecurrenceId)(calendarObject, recurrenceIdDate); if (eventComponent === null) { throw new Error('Not a valid recurrence-id'); } const calendarObjectInstance = (0,_models_event_js__WEBPACK_IMPORTED_MODULE_4__.mapEventComponentToEventObject)(eventComponent); commit('setCalendarObjectInstanceForExistingEvent', { calendarObject, calendarObjectInstance, objectId, recurrenceId }); return { calendarObject, calendarObjectInstance }; }, /** * Gets the new calendar-object-instance. * * @param {object} vuex The vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.dispatch The Vuex dispatch function * @param {Function} vuex.commit The Vuex commit function * @param {object} data The destructuring object * @param {boolean} data.isAllDay Whether or not the new event is supposed to be all-day * @param {number} data.start The start of the new event (unixtime) * @param {number} data.end The end of the new event (unixtime) * @param {string} data.timezoneId The timezoneId of the new event * @return {Promise<{calendarObject: object, calendarObjectInstance: object}>} */ async getCalendarObjectInstanceForNewEvent(_ref78, _ref79) { let { state, dispatch, commit } = _ref78; let { isAllDay, start, end, timezoneId } = _ref79; if (state.isNew === true) { return Promise.resolve({ calendarObject: state.calendarObject, calendarObjectInstance: state.calendarObjectInstance }); } const calendarObject = await dispatch('createNewEvent', { start, end, isAllDay, timezoneId }); const startDate = new Date(start * 1000); const eventComponent = (0,_utils_calendarObject_js__WEBPACK_IMPORTED_MODULE_8__.getObjectAtRecurrenceId)(calendarObject, startDate); const calendarObjectInstance = (0,_models_event_js__WEBPACK_IMPORTED_MODULE_4__.mapEventComponentToEventObject)(eventComponent); // Add an alarm if the user set a default one in the settings. If // not, defaultReminder will not be a number (rather the string "none"). const defaultReminder = parseInt(_settings_js__WEBPACK_IMPORTED_MODULE_10__["default"].state.defaultReminder); if (!isNaN(defaultReminder)) { commit('addAlarmToCalendarObjectInstance', { calendarObjectInstance, type: 'DISPLAY', totalSeconds: defaultReminder }); _utils_logger_js__WEBPACK_IMPORTED_MODULE_9__["default"].debug("Added defaultReminder (".concat(defaultReminder, "s) to newly created event")); } // Add default status const rfcProps = (0,_models_rfcProps_js__WEBPACK_IMPORTED_MODULE_11__.getRFCProperties)(); const status = rfcProps.status.defaultValue; commit('changeStatus', { calendarObjectInstance, status }); commit('setCalendarObjectInstanceForNewEvent', { calendarObject, calendarObjectInstance }); return { calendarObject, calendarObjectInstance }; }, /** * Updates the existing calendar-object-instance. * * @param {object} vuex The vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.dispatch The Vuex dispatch function * @param {Function} vuex.commit The Vuex commit function * @param {object} data The destructuring object * @param {boolean} data.isAllDay Whether or not the new event is supposed to be all-day * @param {number} data.start The start of the new event (unixtime) * @param {number} data.end The end of the new event (unixtime) * @param {string} data.timezoneId The timezoneId of the new event * @return {Promise<{calendarObject: object, calendarObjectInstance: object}>} */ async updateCalendarObjectInstanceForNewEvent(_ref80, _ref81) { let { state, dispatch, commit } = _ref80; let { isAllDay, start, end, timezoneId } = _ref81; await dispatch('updateTimeOfNewEvent', { calendarObjectInstance: state.calendarObjectInstance, start, end, isAllDay, timezoneId }); commit('setCalendarObjectInstanceForNewEvent', { calendarObject: state.calendarObject, calendarObjectInstance: state.calendarObjectInstance }); return { calendarObject: state.calendarObject, calendarObjectInstance: state.calendarObjectInstance }; }, /** * Saves changes made to a single calendar-object-instance * * @param {object} vuex The vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.dispatch The Vuex dispatch function * @param {Function} vuex.commit The Vuex commit function * @param {object} data The destructuring object * @param {boolean} data.thisAndAllFuture Whether or not to save changes for all future occurrences or just this one * @param {string} data.calendarId The new calendar-id to store it in * @return {Promise} */ async saveCalendarObjectInstance(_ref82, _ref83) { let { state, dispatch, commit } = _ref82; let { thisAndAllFuture, calendarId } = _ref83; const eventComponent = state.calendarObjectInstance.eventComponent; const calendarObject = state.calendarObject; (0,_utils_alarms_js__WEBPACK_IMPORTED_MODULE_5__.updateAlarms)(eventComponent); (0,_services_talkService_js__WEBPACK_IMPORTED_MODULE_13__.updateTalkParticipants)(eventComponent); let additionalFieldWasUpdated = eventComponent.client != null || eventComponent.isPrivate != null || eventComponent.returnToSiege != null || eventComponent.absenceType || eventComponent.emailId || eventComponent.comment != null; if (eventComponent.isDirty() || additionalFieldWasUpdated) { const isForkedItem = eventComponent.primaryItem !== null; let original = null; let fork = null; // We check if two things apply: // - primaryItem !== null -> Is this a fork or not? // - eventComponent.canCreateRecurrenceExceptions() - Can we create a recurrence-exception for this item if (isForkedItem && eventComponent.canCreateRecurrenceExceptions()) { [original, fork] = eventComponent.createRecurrenceException(thisAndAllFuture); } await dispatch('updateCalendarObject', { calendarObject }); if (original !== null && fork !== null && original.root !== fork.root) { await dispatch('createCalendarObjectFromFork', { eventComponent: fork, calendarId }); } } if (calendarId !== state.calendarObject.calendarId) { await dispatch('moveCalendarObject', { calendarObject, newCalendarId: calendarId }); } }, /** * Duplicate calendar-object-instance * * @param {object} vuex The vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.dispatch The Vuex dispatch function * @param {Function} vuex.commit The Vuex commit function * @return {Promise} */ async duplicateCalendarObjectInstance(_ref84) { let { state, dispatch, commit } = _ref84; const oldCalendarObjectInstance = state.calendarObjectInstance; const oldEventComponent = oldCalendarObjectInstance.eventComponent; const startDate = oldEventComponent.startDate.getInUTC(); const endDate = oldEventComponent.endDate.getInUTC(); const calendarObject = await dispatch('createNewEvent', { start: startDate.unixTime, end: endDate.unixTime, timezoneId: oldEventComponent.startDate.timezoneId, isAllDay: oldEventComponent.isAllDay() }); const eventComponent = (0,_utils_calendarObject_js__WEBPACK_IMPORTED_MODULE_8__.getObjectAtRecurrenceId)(calendarObject, startDate.jsDate); (0,_models_event_js__WEBPACK_IMPORTED_MODULE_4__.copyCalendarObjectInstanceIntoEventComponent)(oldCalendarObjectInstance, eventComponent); const calendarObjectInstance = (0,_models_event_js__WEBPACK_IMPORTED_MODULE_4__.mapEventComponentToEventObject)(eventComponent); await commit('setCalendarObjectInstanceForNewEvent', { calendarObject, calendarObjectInstance }); }, /** * Deletes a calendar-object-instance * * @param {object} vuex The vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.dispatch The Vuex dispatch function * @param {Function} vuex.commit The Vuex commit function * @param {object} data The destructuring object * @param {boolean} data.thisAndAllFuture Whether or not to delete all future occurrences or just this one * @return {Promise} */ async deleteCalendarObjectInstance(_ref85, _ref86) { let { state, dispatch, commit } = _ref85; let { thisAndAllFuture } = _ref86; const eventComponent = state.calendarObjectInstance.eventComponent; const isRecurrenceSetEmpty = eventComponent.removeThisOccurrence(thisAndAllFuture); const calendarObject = state.calendarObject; if (isRecurrenceSetEmpty) { await dispatch('deleteCalendarObject', { calendarObject }); } else { await dispatch('updateCalendarObject', { calendarObject }); } }, /** * * @param {object} data The destructuring object for Vuex * @param {Function} data.commit The Vuex commit function * @param {object} data2 The destructuring object for data * @param {object} data2.calendarObjectInstance The calendarObjectInstance object * @param {Date} data2.startDate The new start-date */ changeStartDate(_ref87, _ref88) { let { commit } = _ref87; let { calendarObjectInstance, startDate } = _ref88; const difference = startDate.getTime() - calendarObjectInstance.startDate.getTime(); const endDate = new Date(calendarObjectInstance.endDate.getTime() + difference); commit('changeStartDate', { calendarObjectInstance, startDate }); commit('changeEndDate', { calendarObjectInstance, endDate }); }, /** * Change the timezone of the event's start * * @param {object} data The destructuring object for Vuex * @param {Function} data.commit The Vuex commit function * @param {object} data2 The destructuring object for data * @param {object} data2.calendarObjectInstance The calendarObjectInstance object * @param {string} data2.startTimezone New timezone to set for start */ changeStartTimezone(_ref89, _ref90) { let { commit } = _ref89; let { calendarObjectInstance, startTimezone } = _ref90; commit('changeStartTimezone', { calendarObjectInstance, startTimezone }); // Simulate a change of the start time to trigger the comparison // of start and end and trigger an update of end if necessary commit('changeStartDate', { calendarObjectInstance, startDate: calendarObjectInstance.startDate }); }, /** * Change the timezone of the event's end * * @param {object} data The destructuring object for Vuex * @param {Function} data.commit The Vuex commit function * @param {object} data2 The destructuring object for data * @param {object} data2.calendarObjectInstance The calendarObjectInstance object * @param {string} data2.endTimezone New timezone to set for end */ changeEndTimezone(_ref91, _ref92) { let { commit } = _ref91; let { calendarObjectInstance, endTimezone } = _ref92; commit('changeEndTimezone', { calendarObjectInstance, endTimezone }); // Simulate a change of the end time to trigger the comparison // of start and end and trigger an update of start if necessary commit('changeEndDate', { calendarObjectInstance, endDate: calendarObjectInstance.endDate }); }, /** * * @param {object} data The destructuring object for Vuex * @param {Function} data.commit The Vuex commit function * @param {Function} data.dispatch The Vuex dispatch function * @param {object} data2 The destructuring object for data * @param {object} data2.calendarObjectInstance The calendarObjectInstance object * @param {object} data2.recurrenceRule The recurrenceRule object to modify * @param {string} data2.frequency The new frequency to set */ changeRecurrenceFrequency(_ref93, _ref94) { let { commit, dispatch } = _ref93; let { calendarObjectInstance, recurrenceRule, frequency } = _ref94; console.debug(calendarObjectInstance); console.debug(recurrenceRule); console.debug(frequency); if (recurrenceRule.frequency === 'NONE' && frequency !== 'NONE') { // Add a new recurrence-rule commit('addRecurrenceRuleFromCalendarObjectInstance', { calendarObjectInstance }); commit('resetRecurrenceByParts', { calendarObjectInstance, recurrenceRule }); commit('changeRecurrenceFrequency', { calendarObjectInstance, recurrenceRule: calendarObjectInstance.recurrenceRule, frequency }); commit('changeRecurrenceInterval', { calendarObjectInstance, recurrenceRule: calendarObjectInstance.recurrenceRule, interval: 1 }); commit('changeRecurrenceToInfinite', { calendarObjectInstance, recurrenceRule: calendarObjectInstance.recurrenceRule }); dispatch('setDefaultRecurrenceByParts', { calendarObjectInstance, recurrenceRule, frequency }); console.debug("changed from none to ".concat(frequency)); } else if (recurrenceRule.frequency !== 'NONE' && frequency === 'NONE') { console.debug('calling removeRecurrenceRuleFromCalendarObjectInstance'); // Remove the recurrence-rule commit('removeRecurrenceRuleFromCalendarObjectInstance', { calendarObjectInstance, recurrenceRule }); } else { // Change frequency of existing recurrence-rule commit('resetRecurrenceByParts', { calendarObjectInstance, recurrenceRule }); commit('changeRecurrenceFrequency', { calendarObjectInstance, recurrenceRule: calendarObjectInstance.recurrenceRule, frequency }); dispatch('setDefaultRecurrenceByParts', { calendarObjectInstance, recurrenceRule, frequency }); } }, /** * * @param {object} data The destructuring object for Vuex * @param {Function} data.commit The Vuex commit function * @param {object} data2 The destructuring object for data * @param {object} data2.calendarObjectInstance The calendarObjectInstance object * @param {object} data2.recurrenceRule The recurrenceRule object to modify * @param {string} data2.frequency The new frequency to set */ setDefaultRecurrenceByParts(_ref95, _ref96) { let { commit } = _ref95; let { calendarObjectInstance, recurrenceRule, frequency } = _ref96; switch (frequency) { case 'WEEKLY': commit('setDefaultRecurrenceByPartsForWeekly', { calendarObjectInstance, recurrenceRule }); break; case 'MONTHLY': commit('setDefaultRecurrenceByPartsForMonthly', { calendarObjectInstance, recurrenceRule }); break; case 'YEARLY': commit('setDefaultRecurrenceByPartsForYearly', { calendarObjectInstance, recurrenceRule }); break; } }, /** * * @param {object} data The destructuring object for Vuex * @param {Function} data.commit The Vuex commit function * @param {object} data2 The destructuring object for data * @param {object} data2.calendarObjectInstance The calendarObjectInstance object * @param {object} data2.recurrenceRule The recurrenceRule object to modify */ setRecurrenceToInfinite(_ref97, _ref98) { let { commit } = _ref97; let { calendarObjectInstance, recurrenceRule } = _ref98; commit('changeRecurrenceToInfinite', { calendarObjectInstance, recurrenceRule }); }, /** * * @param {object} data The destructuring object for Vuex * @param {Function} data.commit The Vuex commit function * @param {object} data2 The destructuring object for data * @param {object} data2.calendarObjectInstance The calendarObjectInstance object * @param {object} data2.recurrenceRule The recurrenceRule object to modify */ changeMonthlyRecurrenceFromByDayToBySetPosition(_ref99, _ref100) { let { commit } = _ref99; let { calendarObjectInstance, recurrenceRule } = _ref100; console.debug('changeMonthlyRecurrenceFromByDayToBySetPosition'); commit('resetRecurrenceByParts', { calendarObjectInstance, recurrenceRule }); commit('setDefaultRecurrenceByPartsForMonthlyBySetPosition', { calendarObjectInstance, recurrenceRule }); }, /** * * @param {object} data The destructuring object for Vuex * @param {Function} data.commit The Vuex commit function * @param {object} data2 The destructuring object for data * @param {object} data2.calendarObjectInstance The calendarObjectInstance object * @param {object} data2.recurrenceRule The recurrenceRule object to modify */ changeMonthlyRecurrenceFromBySetPositionToByDay(_ref101, _ref102) { let { commit } = _ref101; let { calendarObjectInstance, recurrenceRule } = _ref102; console.debug('changeMonthlyRecurrenceFromBySetPositionToByDay'); commit('resetRecurrenceByParts', { calendarObjectInstance, recurrenceRule }); commit('setDefaultRecurrenceByPartsForMonthly', { calendarObjectInstance, recurrenceRule }); }, /** * * @param {object} data The destructuring object for Vuex * @param {Function} data.commit The Vuex commit function * @param {object} data2 The destructuring object for data * @param {object} data2.calendarObjectInstance The calendarObjectInstance object * @param {object} data2.recurrenceRule The recurrenceRule object to modify */ enableYearlyRecurrenceBySetPosition(_ref103, _ref104) { let { commit } = _ref103; let { calendarObjectInstance, recurrenceRule } = _ref104; commit('setDefaultRecurrenceByPartsForMonthlyBySetPosition', { calendarObjectInstance, recurrenceRule }); }, /** * * @param {object} data The destructuring object for Vuex * @param {Function} data.commit The Vuex commit function * @param {object} data2 The destructuring object for data * @param {object} data2.calendarObjectInstance The calendarObjectInstance object * @param {object} data2.recurrenceRule The recurrenceRule object to modify */ disableYearlyRecurrenceBySetPosition(_ref105, _ref106) { let { commit } = _ref105; let { calendarObjectInstance, recurrenceRule } = _ref106; commit('changeRecurrenceByDay', { calendarObjectInstance, recurrenceRule, byDay: [] }); commit('unsetRecurrenceBySetPosition', { calendarObjectInstance, recurrenceRule }); }, /** * * @param {object} data The destructuring object for Vuex * @param {Function} data.commit The Vuex commit function * @param {object} data2 The destructuring object for data * @param {object} data2.calendarObjectInstance The calendarObjectInstance object * @param {object} data2.recurrenceRule The recurrenceRule object to modify */ enableRecurrenceLimitByUntil(_ref107, _ref108) { let { commit } = _ref107; let { calendarObjectInstance, recurrenceRule } = _ref108; let until; switch (recurrenceRule.frequency) { // Defaults to 7 days case 'DAILY': until = new Date(calendarObjectInstance.startDate.getTime() + 7 * 24 * 60 * 60 * 1000); break; // Defaults to 4 weeks case 'WEEKLY': until = new Date(calendarObjectInstance.startDate.getTime() + 4 * 7 * 24 * 60 * 60 * 1000); break; // Defaults to 10 year case 'YEARLY': until = new Date(calendarObjectInstance.startDate.getFullYear() + 10, calendarObjectInstance.startDate.getMonth(), calendarObjectInstance.startDate.getDate(), 23, 59, 59); break; // Defaults to 12 months case 'MONTHLY': default: until = new Date(calendarObjectInstance.startDate.getFullYear() + 1, calendarObjectInstance.startDate.getMonth(), calendarObjectInstance.startDate.getDate(), 23, 59, 59); break; } commit('changeRecurrenceToInfinite', { calendarObjectInstance, recurrenceRule }); commit('changeRecurrenceUntil', { calendarObjectInstance, recurrenceRule, until }); }, /** * * @param {object} data The destructuring object for Vuex * @param {Function} data.commit The Vuex commit function * @param {object} data2 The destructuring object for data * @param {object} data2.calendarObjectInstance The calendarObjectInstance object * @param {object} data2.recurrenceRule The recurrenceRule object to modify */ enableRecurrenceLimitByCount(_ref109, _ref110) { let { commit } = _ref109; let { calendarObjectInstance, recurrenceRule } = _ref110; commit('changeRecurrenceToInfinite', { calendarObjectInstance, recurrenceRule }); commit('changeRecurrenceCount', { calendarObjectInstance, recurrenceRule, count: 2 // Default value is two }); }, changeAlarmAmountTimed(_ref111, _ref112) { let { commit } = _ref111; let { calendarObjectInstance, alarm, amount } = _ref112; commit('changeAlarmAmountTimed', { calendarObjectInstance, alarm, amount }); commit('updateAlarmAllDayParts', { calendarObjectInstance, alarm }); }, changeAlarmUnitTimed(_ref113, _ref114) { let { commit } = _ref113; let { calendarObjectInstance, alarm, unit } = _ref114; commit('changeAlarmUnitTimed', { calendarObjectInstance, alarm, unit }); commit('updateAlarmAllDayParts', { calendarObjectInstance, alarm }); }, changeAlarmAmountAllDay(_ref115, _ref116) { let { commit } = _ref115; let { calendarObjectInstance, alarm, amount } = _ref116; commit('changeAlarmAmountAllDay', { calendarObjectInstance, alarm, amount }); commit('updateAlarmTimedParts', { calendarObjectInstance, alarm }); }, changeAlarmUnitAllDay(_ref117, _ref118) { let { commit } = _ref117; let { calendarObjectInstance, alarm, unit } = _ref118; commit('changeAlarmUnitAllDay', { calendarObjectInstance, alarm, unit }); commit('updateAlarmTimedParts', { calendarObjectInstance, alarm }); }, changeAlarmHoursMinutesAllDay(_ref119, _ref120) { let { commit } = _ref119; let { calendarObjectInstance, alarm, hours, minutes } = _ref120; commit('changeAlarmHoursMinutesAllDay', { calendarObjectInstance, alarm, hours, minutes }); commit('updateAlarmTimedParts', { calendarObjectInstance, alarm }); }, changeAlarmFromRelativeToAbsolute(_ref121, _ref122) { let { commit } = _ref121; let { calendarObjectInstance, alarm } = _ref122; commit('changeAlarmFromRelativeToAbsolute', { calendarObjectInstance, alarm }); commit('resetAlarmRelativeParts', { alarm }); }, changeAlarmFromAbsoluteToRelative(_ref123, _ref124) { let { commit } = _ref123; let { calendarObjectInstance, alarm } = _ref124; commit('changeAlarmFromAbsoluteToRelative', { calendarObjectInstance, alarm }); commit('updateAlarmAllDayParts', { calendarObjectInstance, alarm }); commit('updateAlarmTimedParts', { calendarObjectInstance, alarm }); commit('resetAlarmAbsoluteParts', { alarm }); }, toggleAllDay(_ref125, _ref126) { let { commit, getters } = _ref125; let { calendarObjectInstance } = _ref126; commit('toggleAllDay', { calendarObjectInstance }); if (!calendarObjectInstance.isAllDay) { if (calendarObjectInstance.startTimezoneId === 'floating') { const startTimezone = getters.getResolvedTimezone; commit('changeStartTimezone', { calendarObjectInstance, startTimezone }); } commit('changeTimeToDefaultForTimedEvents', { calendarObjectInstance }); } } // async changeAbsenceType({ commit }, { calendarObjectInstance, absenceType }) { // try { // commit('setAbsenceType', { calendarObjectInstance, absenceType }); // } catch (error) { // console.error('Erreur lors de la mise à jour du type d\'absence:', error); // } // }, }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ state, mutations, getters, actions }); /***/ }), /***/ "./src/store/calendarObjects.js": /*!**************************************!*\ !*** ./src/store/calendarObjects.js ***! \**************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); /* harmony import */ var _models_calendarObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../models/calendarObject.js */ "./src/models/calendarObject.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @author John Molakvoæ * * @author Thomas Citharel * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const state = { calendarObjects: {}, modificationCount: 0 }; const mutations = { /** * Adds an array of calendar-objects to the store * * @param {object} state The store data * @param {object} data The destructuring object * @param {object[]} data.calendarObjects Calendar-objects to add */ appendCalendarObjects(state, _ref) { let { calendarObjects = [] } = _ref; for (const calendarObject of calendarObjects) { if (!state.calendarObjects[calendarObject.id]) { vue__WEBPACK_IMPORTED_MODULE_3__["default"].set(state.calendarObjects, calendarObject.id, calendarObject); } } }, /** * Adds one calendar-object to the store * * @param {object} state The store data * @param {object} data The destructuring object * @param {object} data.calendarObject Calendar-object to add */ appendCalendarObject(state, _ref2) { let { calendarObject } = _ref2; if (!state.calendarObjects[calendarObject.id]) { vue__WEBPACK_IMPORTED_MODULE_3__["default"].set(state.calendarObjects, calendarObject.id, calendarObject); } }, /** * Updates a calendar-object id * * @param {object} state The store data * @param {object} data The destructuring object * @param {object} data.calendarObject Calendar-object to update */ updateCalendarObjectId(state, _ref3) { let { calendarObject } = _ref3; if (calendarObject.dav === null) { calendarObject.id = null; } else { calendarObject.id = btoa(calendarObject.dav.url); } }, /** * Updates a calendar-object's calendarId * * @param {object} state The store data * @param {object} data The destructuring object * @param {string} data.calendarObjectId Id of calendar-object to update * @param {string} data.calendarId New calendarId */ updateCalendarObjectIdCalendarId(state, _ref4) { let { calendarObjectId, calendarId } = _ref4; state.calendarObjects[calendarObjectId].calendarId = calendarId; }, /** * Resets a calendar-object to it's original server state * * @param {object} state The store data * @param {object} data The destructuring object * @param {object} data.calendarObject Calendar-object to reset */ resetCalendarObjectToDav(state, _ref5) { let { calendarObject } = _ref5; calendarObject = state.calendarObjects[calendarObject.id]; // If this object does not exist on the server yet, there is nothing to do if (!calendarObject || !calendarObject.existsOnServer) { return; } const parserManager = (0,_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.getParserManager)(); const parser = parserManager.getParserForFileType('text/calendar'); parser.parse(calendarObject.dav.data); const itemIterator = parser.getItemIterator(); const firstVCalendar = itemIterator.next().value; if (firstVCalendar) { calendarObject.calendarComponent = firstVCalendar; } }, /** * Removes a calendar-object from the store * * @param {object} state The store data * @param {object} data The destructuring object * @param {object} data.calendarObject Calendar-object to delete */ deleteCalendarObject(state, _ref6) { let { calendarObject } = _ref6; vue__WEBPACK_IMPORTED_MODULE_3__["default"].delete(state.calendarObjects, calendarObject.id); }, /** * Increments the modification count * * @param {object} state The store data */ incrementModificationCount(state) { state.modificationCount++; } }; const getters = { /** * Gets a calendar-object based on its id * * @param {object} state The store data * @return {function({String}): CalendarObject} */ getCalendarObjectById: state => id => state.calendarObjects[id] }; const actions = { /** * Moves a calendar-object to a different calendar * * @param {object} context the store mutations * @param {object} data destructuring object * @param {CalendarObject} data.calendarObject Calendar-object to delete * @param {string} data.newCalendarId Calendar-Id of calendar to move this calendar-object to * @return {Promise} */ async moveCalendarObject(context, _ref7) { let { calendarObject, newCalendarId } = _ref7; if (!calendarObject.existsOnServer) { return; } const oldCalendarObjectId = calendarObject.id; const oldCalendarId = calendarObject.calendarId; if (oldCalendarId === newCalendarId) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].error('Old calendar Id and new calendar Id are the same, nothing to move …'); return; } const newCalendar = context.getters.getCalendarById(newCalendarId); if (!newCalendar) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].error('Calendar to move to not found, aborting …'); return; } await calendarObject.dav.move(newCalendar.dav); // Update calendarId in calendarObject manually as it is not stored in dav context.commit('updateCalendarObjectIdCalendarId', { calendarObjectId: calendarObject.id, calendarId: newCalendarId }); context.commit('addCalendarObjectToCalendar', { calendar: { id: newCalendarId }, calendarObjectId: calendarObject.id }); context.commit('addCalendarObjectIdToAllTimeRangesOfCalendar', { calendarId: newCalendarId, calendarObjectId: calendarObject.id }); context.commit('deleteCalendarObjectFromCalendar', { calendar: { id: oldCalendarId }, calendarObjectId: oldCalendarObjectId }); context.commit('removeCalendarObjectIdFromAllTimeRangesOfCalendar', { calendarId: oldCalendarId, calendarObjectId: oldCalendarObjectId }); context.commit('incrementModificationCount'); }, /** * Updates a calendar-object * * @param {object} context the store mutations * @param {object} data destructuring object * @param {CalendarObject} data.calendarObject Calendar-object to delete * @return {Promise} */ async updateCalendarObject(context, _ref8) { let { calendarObject } = _ref8; let eventComponent = calendarObject.calendarComponent.getFirstComponent('VEVENT'); if (calendarObject.existsOnServer) { let icsValue = calendarObject.calendarComponent.toICS(); if (eventComponent != null) { if (eventComponent.client != null) { let newClientKeyValue = "CLIENT:" + eventComponent.client; let regexEmptyClient = /CLIENT:(?!\d)(?=\s*[\r\n])/g; if (regexEmptyClient.test(icsValue)) { icsValue = icsValue.replace(regexEmptyClient, newClientKeyValue); } let regex = /CLIENT:\d+/; if (regex.test(icsValue)) { icsValue = icsValue.replace(regex, newClientKeyValue); } else { const customKeyValue = { "CLIENT": eventComponent.client }; icsValue = (0,_models_calendarObject_js__WEBPACK_IMPORTED_MODULE_0__.setCustomKeyValuesArrayToIcsAndReturnIcs)(icsValue, customKeyValue); } } if (eventComponent.comment != null) { let newCommentKeyValue = "COMMENT:" + eventComponent.comment; let regex = /^COMMENT:.*$/m; if (regex.test(icsValue)) { icsValue = icsValue.replace(regex, newCommentKeyValue); } else { const customKeyValue = { "COMMENT": eventComponent.comment }; icsValue = (0,_models_calendarObject_js__WEBPACK_IMPORTED_MODULE_0__.setCustomKeyValuesArrayToIcsAndReturnIcs)(icsValue, customKeyValue); } } if (eventComponent.isPrivate != null) { let isPrivateValue = eventComponent.isPrivate ? "1" : "0"; let newIsPrivateKeyValue = "ISPRIVATE:" + isPrivateValue; let regex = /ISPRIVATE:\d+/; if (regex.test(icsValue)) { icsValue = icsValue.replace(regex, newIsPrivateKeyValue); } else { const customKeyValue = { "ISPRIVATE": isPrivateValue }; icsValue = (0,_models_calendarObject_js__WEBPACK_IMPORTED_MODULE_0__.setCustomKeyValuesArrayToIcsAndReturnIcs)(icsValue, customKeyValue); } } if (eventComponent.emailId != null) { let emailIdValue = eventComponent.emailId; let emailIdValueValue = "EMAILID:" + emailIdValue; let regex = /EMAILID:\d+/; if (regex.test(icsValue)) { icsValue = icsValue.replace(regex, emailIdValueValue); } else { const customKeyValue = { "EMAILID": emailIdValue }; icsValue = (0,_models_calendarObject_js__WEBPACK_IMPORTED_MODULE_0__.setCustomKeyValuesArrayToIcsAndReturnIcs)(icsValue, customKeyValue); } } if (eventComponent.absenceType != null && eventComponent.absenceType != '') { let absenceTypeValue = eventComponent.absenceType; let key = "ABSENCETYPE:" + absenceTypeValue; let regex = /^ABSENCETYPE:.*$/m; if (regex.test(icsValue)) { icsValue = icsValue.replace(regex, key); } else { const customKeyValue = { "ABSENCETYPE": absenceTypeValue }; icsValue = (0,_models_calendarObject_js__WEBPACK_IMPORTED_MODULE_0__.setCustomKeyValuesArrayToIcsAndReturnIcs)(icsValue, customKeyValue); } } if (eventComponent.returnToSiege != null && eventComponent.returnToSiege != '') { let returnToSiegeValue = eventComponent.returnToSiege; let key = "RETURNTOSIEGE:" + returnToSiegeValue; let regex = /RETURNTOSIEGE:\d+/; if (regex.test(icsValue)) { icsValue = icsValue.replace(regex, key); } else { const customKeyValue = { "RETURNTOSIEGE": returnToSiegeValue }; icsValue = (0,_models_calendarObject_js__WEBPACK_IMPORTED_MODULE_0__.setCustomKeyValuesArrayToIcsAndReturnIcs)(icsValue, customKeyValue); } } } calendarObject.dav.data = icsValue; await calendarObject.dav.update(); context.commit('addCalendarObjectIdToAllTimeRangesOfCalendar', { calendarId: calendarObject.calendarId, calendarObjectId: calendarObject.id }); context.commit('resetCalendarObjectToDav', { calendarObject }); context.commit('incrementModificationCount'); return; // TODO - catch conflicts } const calendar = context.getters.getCalendarById(calendarObject.calendarId); let icsValue = calendarObject.calendarComponent.toICS(); if (eventComponent != null) { var _eventComponent$absen; const customKeyValue = { "CLIENT": eventComponent.client, "EMBALMER": eventComponent.embalmer, "ISPRIVATE": eventComponent.isPrivate ? "1" : "0", "RETURNTOSIEGE": eventComponent.returnToSiege ? "1" : "0", "COMMENT": eventComponent.comment, "EMAILID": eventComponent.emailId, "ABSENCETYPE": (_eventComponent$absen = eventComponent.absenceType) !== null && _eventComponent$absen !== void 0 ? _eventComponent$absen : '' }; icsValue = (0,_models_calendarObject_js__WEBPACK_IMPORTED_MODULE_0__.setCustomKeyValuesArrayToIcsAndReturnIcs)(icsValue, customKeyValue); } calendarObject.dav = await calendar.dav.createVObject(icsValue); calendarObject.existsOnServer = true; context.commit('updateCalendarObjectId', { calendarObject }); context.commit('appendCalendarObject', { calendarObject }); context.commit('addCalendarObjectToCalendar', { calendar: { id: calendarObject.calendarId }, calendarObjectId: calendarObject.id }); context.commit('addCalendarObjectIdToAllTimeRangesOfCalendar', { calendarId: calendarObject.calendarId, calendarObjectId: calendarObject.id }); context.commit('resetCalendarObjectToDav', { calendarObject }); context.commit('incrementModificationCount'); }, /** * Creates a new calendar-object from an recurrence-exception fork * * @param {object} context The Vuex context * @param {object} data destructuring object * @param {EventComponent} data.eventComponent EventComponent to store * @param {string} data.calendarId The calendar-id to store it in * @return {Promise} */ async createCalendarObjectFromFork(context, _ref9) { let { eventComponent, calendarId } = _ref9; const calendar = context.getters.getCalendarById(calendarId); const calendarObject = (0,_models_calendarObject_js__WEBPACK_IMPORTED_MODULE_0__.mapCalendarJsToCalendarObject)(eventComponent.root, calendar.id); calendarObject.dav = await calendar.dav.createVObject(calendarObject.calendarComponent.toICS()); calendarObject.existsOnServer = true; context.commit('updateCalendarObjectId', { calendarObject }); context.commit('appendCalendarObject', { calendarObject }); context.commit('addCalendarObjectToCalendar', { calendar: { id: calendarObject.calendarId }, calendarObjectId: calendarObject.id }); context.commit('addCalendarObjectIdToAllTimeRangesOfCalendar', { calendarId: calendar.id, calendarObjectId: calendarObject.id }); context.commit('incrementModificationCount'); }, /** * Deletes a calendar-object * * @param {object} context the store mutations * @param {object} data destructuring object * @param {CalendarObject} data.calendarObject Calendar-object to delete * @return {Promise} */ async deleteCalendarObject(context, _ref10) { let { calendarObject } = _ref10; // If this calendar-object was not created on the server yet, // no need to send requests to the server if (calendarObject.existsOnServer) { await calendarObject.dav.delete(); } context.commit('deleteCalendarObject', { calendarObject }); context.commit('deleteCalendarObjectFromCalendar', { calendar: { id: calendarObject.calendarId }, calendarObjectId: calendarObject.id }); context.commit('removeCalendarObjectIdFromAnyTimeRange', { calendarObjectId: calendarObject.id }); context.commit('incrementModificationCount'); }, /** * Creates a new calendar object based on start, end, timezone and isAllDay * * @param {object} context the store mutations * @param {object} data destructuring object * @param {number} data.start Timestamp for start of new event * @param {number} data.end Timestamp for end of new event * @param {string} data.timezoneId asd * @param {boolean} data.isAllDay foo * @return {Promise} */ createNewEvent(context, _ref11) { let { start, end, timezoneId, isAllDay } = _ref11; const timezoneManager = (0,_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.getTimezoneManager)(); const timezone = timezoneManager.getTimezoneForId(timezoneId); const startDate = new Date(start * 1000); const endDate = new Date(end * 1000); const startDateTime = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.DateTimeValue.fromJSDate(startDate, true).getInTimezone(timezone); const endDateTime = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.DateTimeValue.fromJSDate(endDate, true).getInTimezone(timezone); if (isAllDay) { startDateTime.isDate = true; endDateTime.isDate = true; } const calendar = (0,_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_2__.createEvent)(startDateTime, endDateTime); for (const vObject of calendar.getVObjectIterator()) { vObject.undirtify(); } const firstCalendar = context.getters.sortedCalendars[0].id; return Promise.resolve((0,_models_calendarObject_js__WEBPACK_IMPORTED_MODULE_0__.mapCalendarJsToCalendarObject)(calendar, firstCalendar)); }, /** * Updates the time of the new calendar object * * @param {object} data The destructuring object for Vuex * @param {Function} data.commit The Vuex commit function * @param {Function} data.dispatch The Vuex dispatch function * @param {object} data2 destructuring object * @param {CalendarObject} data2.calendarObjectInstance Calendar-object to * @param {number} data2.start Timestamp for start of new event * @param {number} data2.end Timestamp for end of new event * @param {string} data2.timezoneId asd * @param {boolean} data2.isAllDay foo */ updateTimeOfNewEvent(_ref12, _ref13) { let { commit, dispatch } = _ref12; let { calendarObjectInstance, start, end, timezoneId, isAllDay } = _ref13; const isDirty = calendarObjectInstance.eventComponent.isDirty(); const startDate = new Date(start * 1000); const endDate = new Date(end * 1000); if (calendarObjectInstance.isAllDay !== isAllDay) { commit('toggleAllDay', { calendarObjectInstance }); } dispatch('changeStartTimezone', { calendarObjectInstance, startTimezone: timezoneId }); dispatch('changeEndTimezone', { calendarObjectInstance, endTimezone: timezoneId }); commit('changeStartDate', { calendarObjectInstance, startDate }); if (isAllDay) { // The full-calendar end date is exclusive, but the end-date // that changeEndDate expects is inclusive, so we have to deduct one day. commit('changeEndDate', { calendarObjectInstance, endDate: new Date(endDate.getTime() - 24 * 60 * 60 * 1000) }); } else { commit('changeEndDate', { calendarObjectInstance, endDate }); } if (!isDirty) { calendarObjectInstance.eventComponent.undirtify(); } } }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ state, mutations, getters, actions }); /***/ }), /***/ "./src/store/calendars.js": /*!********************************!*\ !*** ./src/store/calendars.js ***! \********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); /* harmony import */ var _services_caldavService_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../services/caldavService.js */ "./src/services/caldavService.js"); /* harmony import */ var _models_calendarObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../models/calendarObject.js */ "./src/models/calendarObject.js"); /* harmony import */ var _utils_date_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/date.js */ "./src/utils/date.js"); /* harmony import */ var _models_calendar_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../models/calendar.js */ "./src/models/calendar.js"); /* harmony import */ var p_limit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! p-limit */ "./node_modules/p-limit/index.js"); /* harmony import */ var _utils_color_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/color.js */ "./src/utils/color.js"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var _services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../services/timezoneDataProviderService.js */ "./src/services/timezoneDataProviderService.js"); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /* harmony import */ var _models_consts_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../models/consts.js */ "./src/models/consts.js"); /* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @copyright Copyright (c) 2019 John Molakvoæ * * @copyright Copyright (c) 2019 Thomas Citharel * * @author Georg Ehrke * * @author John Molakvoæ * * @author Thomas Citharel * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const state = { calendars: [], trashBin: undefined, scheduleInbox: undefined, deletedCalendars: [], deletedCalendarObjects: [], calendarsById: {}, initialCalendarsLoaded: false, editCalendarModal: undefined, widgetView: 'dayGridMonth', widgetDate: 'now', widgetEventDetailsOpen: false, widgetEventDetails: {}, widgetRef: undefined }; const mutations = { /** * Adds calendar into state * * @param {object} state the store data * @param {object} data destructuring object * @param {object} data.calendar the calendar to add */ addCalendar(state, _ref) { let { calendar } = _ref; const object = (0,_models_calendar_js__WEBPACK_IMPORTED_MODULE_3__.getDefaultCalendarObject)(calendar); if (!state.calendars.some(existing => existing.id === object.id)) { state.calendars.push(object); } vue__WEBPACK_IMPORTED_MODULE_11__["default"].set(state.calendarsById, object.id, object); }, addTrashBin(state, _ref2) { let { trashBin } = _ref2; state.trashBin = trashBin; }, setWidgetView(state, _ref3) { let { viewName } = _ref3; state.widgetView = viewName; }, setWidgetDate(state, _ref4) { let { widgetDate } = _ref4; state.widgetDate = widgetDate; }, setWidgetRef(state, _ref5) { let { widgetRef } = _ref5; state.widgetRef = widgetRef; }, setSelectedEvent(state, _ref6) { let { object, recurrenceId } = _ref6; state.widgetEventDetailsOpen = true; state.widgetEventDetails = { object, recurrenceId }; }, closeWidgetEventDetails(state) { state.widgetEventDetailsOpen = false; }, addScheduleInbox(state, _ref7) { let { scheduleInbox } = _ref7; state.scheduleInbox = scheduleInbox; }, /** * Adds deleted calendar into state * * @param {object} state the store data * @param {object} data destructuring object * @param {object} data.calendar calendar the calendar to add */ addDeletedCalendar(state, _ref8) { let { calendar } = _ref8; if (state.deletedCalendars.some(c => c.url === calendar.url)) { // This calendar is already known return; } state.deletedCalendars.push(calendar); }, /** * Removes a deleted calendar * * @param {object} state the store data * @param {object} data destructuring object * @param {object} data.calendar the deleted calendar to remove */ removeDeletedCalendar(state, _ref9) { let { calendar } = _ref9; state.deletedCalendars = state.deletedCalendars.filter(c => c !== calendar); }, /** * Removes a deleted calendar object * * @param {object} state the store data * @param {object} data destructuring object * @param {object} data.vobject the deleted calendar object to remove */ removeDeletedCalendarObject(state, _ref10) { let { vobject } = _ref10; state.deletedCalendarObjects = state.deletedCalendarObjects.filter(vo => vo.id !== vobject.id); }, /** * Adds a deleted vobject into state * * @param {object} state the store data * @param {object} data destructuring object * @param {object} data.vobject the calendar vobject to add */ addDeletedCalendarObject(state, _ref11) { let { vobject } = _ref11; if (state.deletedCalendarObjects.some(c => c.uri === vobject.uri)) { // This vobject is already known return; } state.deletedCalendarObjects.push(vobject); }, /** * Deletes a calendar * * @param {object} state the store data * @param {object} data destructuring object * @param {object} data.calendar the calendar to delete */ deleteCalendar(state, _ref12) { let { calendar } = _ref12; state.calendars.splice(state.calendars.indexOf(calendar), 1); vue__WEBPACK_IMPORTED_MODULE_11__["default"].delete(state.calendarsById, calendar.id); }, /** * Toggles a calendar's visibility * * @param {object} state the store mutations * @param {object} data destructuring object * @param {object} data.calendar the calendar to toggle */ toggleCalendarEnabled(state, _ref13) { let { calendar } = _ref13; state.calendarsById[calendar.id].enabled = !state.calendarsById[calendar.id].enabled; }, /** * Renames a calendar * * @param {object} state the store mutations * @param {object} data destructuring object * @param {object} data.calendar the calendar to rename * @param {string} data.newName the new name of the calendar */ renameCalendar(state, _ref14) { let { calendar, newName } = _ref14; state.calendarsById[calendar.id].displayName = newName; }, /** * Changes calendar's color * * @param {object} state the store mutations * @param {object} data destructuring object * @param {object} data.calendar the calendar to rename * @param {string} data.newColor the new color of the calendar */ changeCalendarColor(state, _ref15) { let { calendar, newColor } = _ref15; state.calendarsById[calendar.id].color = newColor; }, /** * Changes calendar's order * * @param {object} state the store mutations * @param {object} data destructuring object * @param {object} data.calendar the calendar to rename * @param {string} data.newOrder the new order of the calendar */ changeCalendarOrder(state, _ref16) { let { calendar, newOrder } = _ref16; state.calendarsById[calendar.id].order = newOrder; }, /** * Adds multiple calendar-objects to calendar * * @param {object} state the store mutations * @param {object} data destructuring object * @param {object} data.calendar The calendar to append objects to * @param {string[]} data.calendarObjectIds The calendar object ids to append */ appendCalendarObjectsToCalendar(state, _ref17) { let { calendar, calendarObjectIds } = _ref17; for (const calendarObjectId of calendarObjectIds) { if (state.calendarsById[calendar.id].calendarObjects.indexOf(calendarObjectId) === -1) { state.calendarsById[calendar.id].calendarObjects.push(calendarObjectId); } } }, /** * Adds calendar-object to calendar * * @param {object} state the store mutations * @param {object} data destructuring object * @param {object} data.calendar The calendar to append objects to * @param {string} data.calendarObjectId The calendar object id to append */ addCalendarObjectToCalendar(state, _ref18) { let { calendar, calendarObjectId } = _ref18; if (state.calendarsById[calendar.id].calendarObjects.indexOf(calendarObjectId) === -1) { state.calendarsById[calendar.id].calendarObjects.push(calendarObjectId); } }, /** * Removes calendar-object from calendar * * @param {object} state the store mutations * @param {object} data destructuring object * @param {object} data.calendar The calendar to delete objects from * @param {string} data.calendarObjectId The calendar object ids to delete */ deleteCalendarObjectFromCalendar(state, _ref19) { let { calendar, calendarObjectId } = _ref19; const index = state.calendarsById[calendar.id].calendarObjects.indexOf(calendarObjectId); if (index !== -1) { state.calendarsById[calendar.id].calendarObjects.slice(index, 1); } }, /** * Adds fetched time-range to calendar * * @param {object} state the store mutations * @param {object} data destructuring object * @param {object} data.calendar The calendar to append a time-range to * @param {number} data.fetchedTimeRangeId The time-range-id to append */ addFetchedTimeRangeToCalendar(state, _ref20) { let { calendar, fetchedTimeRangeId } = _ref20; state.calendarsById[calendar.id].fetchedTimeRanges.push(fetchedTimeRangeId); }, /** * Removes fetched time-range from calendar * * @param {object} state the store mutations * @param {object} data destructuring object * @param {object} data.calendar The calendar to remove a time-range from * @param {number} data.fetchedTimeRangeId The time-range-id to remove */ deleteFetchedTimeRangeFromCalendar(state, _ref21) { let { calendar, fetchedTimeRangeId } = _ref21; const index = state.calendarsById[calendar.id].fetchedTimeRanges.indexOf(fetchedTimeRangeId); if (index !== -1) { state.calendarsById[calendar.id].fetchedTimeRanges.slice(index, 1); } }, /** * Shares calendar with a user or group * * @param {object} state the store data * @param {object} data destructuring object * @param {object} data.calendar the calendar * @param {string} data.user the userId * @param {string} data.displayName the displayName * @param {string} data.uri the sharing principalScheme uri * @param {boolean} data.isGroup is this a group? * @param {boolean} data.isCircle is this a circle? */ shareCalendar(state, _ref22) { let { calendar, user, displayName, uri, isGroup, isCircle } = _ref22; const newSharee = { displayName, id: user, writeable: false, isGroup, isCircle, uri }; state.calendarsById[calendar.id].shares.push(newSharee); }, /** * Removes Sharee from calendar shares list * * @param {object} state the store data * @param {object} data destructuring object * @param {object} data.calendar the calendar * @param {string} data.uri the sharee uri */ unshareCalendar(state, _ref23) { let { calendar, uri } = _ref23; calendar = state.calendars.find(search => search.id === calendar.id); const shareIndex = calendar.shares.findIndex(sharee => sharee.uri === uri); calendar.shares.splice(shareIndex, 1); }, /** * Toggles sharee's writable permission * * @param {object} state the store data * @param {object} data destructuring object * @param {object} data.calendar the calendar * @param {string} data.uri the sharee uri */ toggleCalendarShareWritable(state, _ref24) { let { calendar, uri } = _ref24; calendar = state.calendars.find(search => search.id === calendar.id); const sharee = calendar.shares.find(sharee => sharee.uri === uri); sharee.writeable = !sharee.writeable; }, /** * Publishes a calendar calendar * * @param {object} state the store data * @param {object} data destructuring object * @param {object} data.calendar the calendar to publish * @param {string} data.publishURL published URL of calendar */ publishCalendar(state, _ref25) { let { calendar, publishURL } = _ref25; calendar = state.calendars.find(search => search.id === calendar.id); calendar.publishURL = publishURL; }, /** * Unpublishes a calendar * * @param {object} state the store data * @param {object} data destructuring object * @param {object} data.calendar the calendar to unpublish */ unpublishCalendar(state, _ref26) { let { calendar } = _ref26; calendar = state.calendars.find(search => search.id === calendar.id); calendar.publishURL = null; }, /** * Marks initial loading of calendars as complete * * @param {object} state the store data */ initialCalendarsLoaded(state) { state.initialCalendarsLoaded = true; }, /** * Marks a calendar as loading * * @param {object} state the store data * @param {object} data destructuring object * @param {object} data.calendar the calendar to mark as loading */ markCalendarAsLoading(state, _ref27) { let { calendar } = _ref27; state.calendarsById[calendar.id].loading = true; }, /** * Marks a calendar as finished loading * * @param {object} state the store data * @param {object} data destructuring object * @param {object} data.calendar the calendar to mark as finished loading */ markCalendarAsNotLoading(state, _ref28) { let { calendar } = _ref28; state.calendarsById[calendar.id].loading = false; }, showEditCalendarModal(state, _ref29) { let { calendarId } = _ref29; state.editCalendarModal = { calendarId }; }, hideEditCalendarModal(state) { state.editCalendarModal = undefined; }, setCalendarDeleteCountdown(state, _ref30) { let { calendar, countdown } = _ref30; vue__WEBPACK_IMPORTED_MODULE_11__["default"].set(state.calendarsById[calendar.id], 'countdown', countdown); }, setCalendarDeleteHandles(state, _ref31) { let { calendar, deleteTimeout, deleteInterval } = _ref31; vue__WEBPACK_IMPORTED_MODULE_11__["default"].set(state.calendarsById[calendar.id], 'deleteTimeout', deleteTimeout); vue__WEBPACK_IMPORTED_MODULE_11__["default"].set(state.calendarsById[calendar.id], 'deleteInterval', deleteInterval); } }; const getters = { /** * List of sorted calendars and subscriptions * * @param {object} state the store data * @param {object} store the store * @param {object} rootState the rootState * @return {Array} */ sortedCalendarsSubscriptions(state, store, rootState) { return state.calendars.filter(calendar => calendar.supportsEvents || rootState.settings.showTasks && calendar.supportsTasks).sort((a, b) => a.order - b.order); }, /** * List of sorted calendars * * @param {object} state the store data * @return {Array} */ sortedCalendars(state) { return state.calendars.filter(calendar => calendar.supportsEvents).filter(calendar => !calendar.readOnly).sort((a, b) => a.order - b.order); }, /** * List of sorted calendars owned by the principal * * @param {object} state the store data * @return {Array} */ ownSortedCalendars(state) { return state.calendars.filter(calendar => calendar.supportsEvents).filter(calendar => !calendar.readOnly).filter(calendar => !calendar.isSharedWithMe).sort((a, b) => a.order - b.order); }, widgetView(state) { return state.widgetView; }, widgetDate(state) { return state.widgetDate; }, widgetEventDetailsOpen(state) { return state.widgetEventDetailsOpen; }, widgetRef(state) { return state.widgetRef; }, hasTrashBin(state) { return state.trashBin !== undefined && state.trashBin.retentionDuration !== 0; }, trashBin(state) { return state.trashBin; }, scheduleInbox: state => { return state.scheduleInbox; }, /** * List of deleted sorted calendars * * @param {object} state the store data * @return {Array} */ sortedDeletedCalendars(state) { return state.deletedCalendars.sort((a, b) => a.deletedAt - b.deletedAt); }, /** * List of deleted calendars objects * * @param {object} state the store data * @return {Array} */ deletedCalendarObjects(state) { const calendarUriMap = {}; state.calendars.forEach(calendar => { const withoutTrail = calendar.url.replace(/\/$/, ''); const uri = withoutTrail.slice(withoutTrail.lastIndexOf('/') + 1); calendarUriMap[uri] = calendar; }); return state.deletedCalendarObjects.map(obj => ({ calendar: calendarUriMap[obj.dav._props['{http://nextcloud.com/ns}calendar-uri']], ...obj })); }, /** * List of sorted subscriptions * * @param {object} state the store data * @return {Array} */ sortedSubscriptions(state) { return state.calendars.filter(calendar => calendar.supportsEvents).filter(calendar => calendar.readOnly).sort((a, b) => a.order - b.order); }, /** * List of enabled calendars and subscriptions * * @param {object} state the store data * @param {object} store the store * @param {object} rootState the rootState * @return {Array} */ enabledCalendars(state, store, rootState) { return state.calendars.filter(calendar => calendar.supportsEvents || rootState.settings.showTasks && calendar.supportsTasks).filter(calendar => calendar.enabled); }, /** * Gets a calendar by it's Id * * @param {object} state the store data * @return {function({String}): {Object}} */ getCalendarById: state => calendarId => state.calendarsById[calendarId], /** * Gets a calendar by its url * * @param {object} state the store data * @return {function({String}): {Object}} */ getCalendarByUrl: state => url => state.calendars.find(calendar => calendar.url === url), /** * Gets the contact's birthday calendar or null * * @param {object} state the store data * @return {object | null} */ getBirthdayCalendar: state => { for (const calendar of state.calendars) { const url = calendar.url.slice(0, -1); const lastSlash = url.lastIndexOf('/'); const uri = url.slice(lastSlash + 1); if (uri === _models_consts_js__WEBPACK_IMPORTED_MODULE_9__.CALDAV_BIRTHDAY_CALENDAR) { return calendar; } } return null; }, /** * Whether or not a birthday calendar exists * * @param {object} state The Vuex state * @param {object} getters the vuex getters * @return {boolean} */ hasBirthdayCalendar: (state, getters) => { return !!getters.getBirthdayCalendar; }, /** * * @param {object} state the store data * @param {object} getters the store getters * @return {function({Boolean}, {Boolean}, {Boolean}): {Object}[]} */ sortedCalendarFilteredByComponents: (state, getters) => (vevent, vjournal, vtodo) => { return getters.sortedCalendars.filter(calendar => { if (vevent && !calendar.supportsEvents) { return false; } if (vjournal && !calendar.supportsJournals) { return false; } if (vtodo && !calendar.supportsTasks) { return false; } return true; }); }, editCalendarModal: state => state.editCalendarModal }; const actions = { /** * Retrieve and commit calendars and other collections * * @param {object} context the store object * @param {object} context.commit the store mutations * @param {object} context.state the store state * @param {object} context.getters the store getters * @return {Promise} the results */ async loadCollections(_ref32) { let { commit, state, getters } = _ref32; const { calendars, trashBins, scheduleInboxes, subscriptions } = await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_0__.findAll)(); console.info('calendar home scanned', calendars, trashBins, subscriptions); calendars.map(calendar => (0,_models_calendar_js__WEBPACK_IMPORTED_MODULE_3__.mapDavCollectionToCalendar)(calendar, getters.getCurrentUserPrincipal)).forEach(calendar => { commit('addCalendar', { calendar }); }); if (trashBins.length) { commit('addTrashBin', { trashBin: trashBins[0] }); } if (scheduleInboxes.length) { commit('addScheduleInbox', { scheduleInbox: scheduleInboxes[0] }); } commit('initialCalendarsLoaded'); return { calendars: state.calendars, trashBin: state.trashBin }; }, /** * Retrieve and commit deleted calendars * * @param {object} context the store object * @param {object} context.commit the store mutations * @return {Promise} the calendars */ async loadDeletedCalendars(_ref33) { let { commit } = _ref33; const calendars = await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_0__.findAllDeletedCalendars)(); calendars.forEach(calendar => commit('addDeletedCalendar', { calendar })); }, /** * Retrieve and commit deleted calendar objects * * @param {object} context the store object * @param {object} context.commit the store mutations * @param {object} context.state the store state */ async loadDeletedCalendarObjects(_ref34) { let { commit, state } = _ref34; const vobjects = await state.trashBin.findDeletedObjects(); console.info('vobjects loaded', { vobjects }); vobjects.forEach(vobject => { try { const calendarObject = (0,_models_calendarObject_js__WEBPACK_IMPORTED_MODULE_1__.mapCDavObjectToCalendarObject)(vobject, undefined); commit('addDeletedCalendarObject', { vobject: calendarObject }); } catch (error) { console.error('could not convert calendar object', vobject, error); } }); }, /** * * @param {object} context the store object * @param {object} context.commit the store mutations * @param {object} data The data destructuring object * @param {string[]} data.tokens The tokens to load * @return {Promise} */ async getPublicCalendars(_ref35, _ref36) { let { commit } = _ref35; let { tokens } = _ref36; const calendars = await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_0__.findPublicCalendarsByTokens)(tokens); const calendarObjects = []; for (const davCalendar of calendars) { const calendar = (0,_models_calendar_js__WEBPACK_IMPORTED_MODULE_3__.mapDavCollectionToCalendar)(davCalendar); commit('addCalendar', { calendar }); calendarObjects.push(calendar); } commit('initialCalendarsLoaded'); return calendarObjects; }, /** * Append a new calendar to array of existing calendars * * @param {object} context the store mutations * @param {object} data destructuring object * @param {object} data.displayName The name of the new calendar * @param {object} data.color The color of the new calendar * @param {object} data.order The order of the new calendar * @param {string[]} data.components The supported components of the calendar * @param {string=} data.timezone The timezoneId * @return {Promise} */ async appendCalendar(context, _ref37) { let { displayName, color, order, components = ['VEVENT'], timezone = null } = _ref37; if (timezone === null) { timezone = context.getters.getResolvedTimezone; } let timezoneIcs = null; const timezoneObject = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_7__["default"])().getTimezoneForId(timezone); if (timezoneObject !== _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_8__.Timezone.utc && timezoneObject !== _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_8__.Timezone.floating) { const calendar = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_8__.CalendarComponent.fromEmpty(); calendar.addComponent(_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_8__.TimezoneComponent.fromICALJs(timezoneObject.toICALJs())); timezoneIcs = calendar.toICS(false); } const response = await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_0__.createCalendar)(displayName, color, components, order, timezoneIcs); const calendar = (0,_models_calendar_js__WEBPACK_IMPORTED_MODULE_3__.mapDavCollectionToCalendar)(response, context.getters.getCurrentUserPrincipal); context.commit('addCalendar', { calendar }); }, /** * Append a new subscription to array of existing calendars * * @param {object} context the store mutations * @param {object} data destructuring object * @param {string} data.displayName Name of new subscription * @param {string} data.color Color of new subscription * @param {string} data.order Order of new subscription * @param {string} data.source Source of new subscription * @return {Promise} */ async appendSubscription(context, _ref38) { let { displayName, color, order, source } = _ref38; const response = await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_0__.createSubscription)(displayName, color, source, order); const calendar = (0,_models_calendar_js__WEBPACK_IMPORTED_MODULE_3__.mapDavCollectionToCalendar)(response, context.getters.getCurrentUserPrincipal); context.commit('addCalendar', { calendar }); }, /** * Delete a calendar * * @param {object} context the store mutations Current context * @param {object} data destructuring object * @param {object} data.calendar the calendar to delete * @return {Promise} */ async deleteCalendar(context, _ref39) { let { calendar } = _ref39; await calendar.dav.delete(); context.commit('deleteCalendar', { calendar }); }, /** * Delete a calendar in the trash bin * * @param {object} context the store mutations Current context * @param {object} data destructuring object * @param {object} data.calendar the calendar to delete * @return {Promise} */ async deleteCalendarPermanently(context, _ref40) { let { calendar } = _ref40; await calendar.delete({ 'X-NC-CalDAV-No-Trashbin': 1 }); context.commit('removeDeletedCalendar', { calendar }); }, deleteCalendarAfterTimeout(context, _ref41) { let { calendar, countdown = 7 } = _ref41; context.commit('setCalendarDeleteCountdown', { calendar, countdown }); const deleteInterval = setInterval(() => { countdown--; if (countdown < 0) { countdown = 0; } context.commit('setCalendarDeleteCountdown', { calendar, countdown }); }, 1000); const deleteTimeout = setTimeout(async () => { try { await context.dispatch('deleteCalendar', { calendar }); } catch (error) { (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_10__.showError)((0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_6__.translate)('calendar', 'An error occurred, unable to delete the calendar.')); console.error(error); } finally { clearInterval(deleteInterval); } }, 7000); context.commit('setCalendarDeleteHandles', { calendar, deleteInterval, deleteTimeout }); }, cancelCalendarDeletion(context, _ref42) { let { calendar } = _ref42; if (calendar.deleteInterval) clearInterval(calendar.deleteInterval); if (calendar.deleteTimeout) clearTimeout(calendar.deleteTimeout); context.commit('setCalendarDeleteHandles', { calendar, deleteInterval: undefined, deleteTimeout: undefined }); }, async restoreCalendar(_ref43, _ref44) { let { commit, state } = _ref43; let { calendar } = _ref44; await state.trashBin.restore(calendar.url); commit('removeDeletedCalendar', { calendar }); }, async restoreCalendarObject(_ref45, _ref46) { var _component$startDate, _component$endDate; let { commit, state, getters } = _ref45; let { vobject } = _ref46; await state.trashBin.restore(vobject.uri); // Clean up the data locally commit('removeDeletedCalendarObject', { vobject }); // Delete cached time range that includes the restored event const calendarObject = (0,_models_calendarObject_js__WEBPACK_IMPORTED_MODULE_1__.mapCDavObjectToCalendarObject)(vobject.dav, undefined); const component = calendarObject.calendarComponent.getFirstComponent(vobject.objectType); const timeRange = getters.getTimeRangeForCalendarCoveringRange(vobject.calendar.id, (_component$startDate = component.startDate) === null || _component$startDate === void 0 ? void 0 : _component$startDate.unixTime, (_component$endDate = component.endDate) === null || _component$endDate === void 0 ? void 0 : _component$endDate.unixTime); if (timeRange) { commit('deleteFetchedTimeRangeFromCalendar', { calendar: vobject.calendar, fetchedTimeRangeId: timeRange.id }); commit('removeTimeRange', { timeRangeId: timeRange.id }); } // Trigger calendar refresh commit('incrementModificationCount'); }, /** * Deletes a calendar-object permanently * * @param {object} context the store mutations * @param {object} data destructuring object * @param {vobject} data.vobject Calendar-object to delete * @return {Promise} */ async deleteCalendarObjectPermanently(context, _ref47) { let { vobject } = _ref47; await vobject.dav.delete({ 'X-NC-CalDAV-No-Trashbin': 1 }); context.commit('removeDeletedCalendarObject', { vobject }); }, /** * Toggle whether a calendar is enabled * * @param {object} context the store mutations Current context * @param {object} data destructuring object * @param {object} data.calendar the calendar to modify * @return {Promise} */ async toggleCalendarEnabled(context, _ref48) { let { calendar } = _ref48; context.commit('markCalendarAsLoading', { calendar }); calendar.dav.enabled = !calendar.dav.enabled; try { await calendar.dav.update(); context.commit('markCalendarAsNotLoading', { calendar }); context.commit('toggleCalendarEnabled', { calendar }); } catch (error) { context.commit('markCalendarAsNotLoading', { calendar }); throw error; } }, /** * Rename a calendar * * @param {object} context the store mutations Current context * @param {object} data destructuring object * @param {object} data.calendar the calendar to modify * @param {string} data.newName the new name of the calendar * @return {Promise} */ async renameCalendar(context, _ref49) { let { calendar, newName } = _ref49; calendar.dav.displayname = newName; await calendar.dav.update(); context.commit('renameCalendar', { calendar, newName }); }, /** * Change a calendar's color * * @param {object} context the store mutations Current context * @param {object} data destructuring object * @param {object} data.calendar the calendar to modify * @param {string} data.newColor the new color of the calendar * @return {Promise} */ async changeCalendarColor(context, _ref50) { let { calendar, newColor } = _ref50; calendar.dav.color = newColor; await calendar.dav.update(); context.commit('changeCalendarColor', { calendar, newColor }); }, /** * Share calendar with User or Group * * @param {object} context the store mutations Current context * @param {object} data destructuring object * @param {object} data.calendar the calendar to share * @param {string} data.user the userId * @param {string} data.displayName the displayName * @param {string} data.uri the sharing principalScheme uri * @param {boolean} data.isGroup is this a group? * @param {boolean} data.isCircle is this a circle? */ async shareCalendar(context, _ref51) { let { calendar, user, displayName, uri, isGroup, isCircle } = _ref51; // Share calendar with entered group or user await calendar.dav.share(uri); context.commit('shareCalendar', { calendar, user, displayName, uri, isGroup, isCircle }); }, /** * Toggle permissions of calendar Sharees writeable rights * * @param {object} context the store mutations Current context * @param {object} data destructuring object * @param {object} data.calendar the calendar to change * @param {string} data.uri the sharing principalScheme uri */ async toggleCalendarShareWritable(context, _ref52) { let { calendar, uri } = _ref52; const sharee = calendar.shares.find(sharee => sharee.uri === uri); await calendar.dav.share(uri, !sharee.writeable); context.commit('toggleCalendarShareWritable', { calendar, uri }); }, /** * Remove sharee from calendar * * @param {object} context the store mutations Current context * @param {object} data destructuring object * @param {object} data.calendar the calendar to change * @param {string} data.uri the sharing principalScheme uri */ async unshareCalendar(context, _ref53) { let { calendar, uri } = _ref53; await calendar.dav.unshare(uri); context.commit('unshareCalendar', { calendar, uri }); }, /** * Publish a calendar * * @param {object} context the store mutations Current context * @param {object} data destructuring object * @param {object} data.calendar the calendar to change * @return {Promise} */ async publishCalendar(context, _ref54) { let { calendar } = _ref54; await calendar.dav.publish(); const publishURL = calendar.dav.publishURL; context.commit('publishCalendar', { calendar, publishURL }); }, /** * Unpublish a calendar * * @param {object} context the store mutations Current context * @param {object} data destructuring object * @param {object} data.calendar the calendar to change * @return {Promise} */ async unpublishCalendar(context, _ref55) { let { calendar } = _ref55; await calendar.dav.unpublish(); context.commit('unpublishCalendar', { calendar }); }, /** * Retrieve the events of the specified calendar * and commit the results * * @param {object} context the store mutations * @param {object} data destructuring object * @param {object} data.calendar the calendar to get events from * @param {Date} data.from the date to start querying events from * @param {Date} data.to the last date to query events from * @return {Promise} */ async getEventsFromCalendarInTimeRange(context, _ref56) { let { calendar, from, to } = _ref56; context.commit('markCalendarAsLoading', { calendar }); const response = await calendar.dav.findByTypeInTimeRange('VEVENT', from, to); let responseTodo = []; if (context.rootState.settings.showTasks) { responseTodo = await calendar.dav.findByTypeInTimeRange('VTODO', from, to); } context.commit('addTimeRange', { calendarId: calendar.id, from: (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_2__.getUnixTimestampFromDate)(from), to: (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_2__.getUnixTimestampFromDate)(to), lastFetched: (0,_utils_date_js__WEBPACK_IMPORTED_MODULE_2__.getUnixTimestampFromDate)((0,_utils_date_js__WEBPACK_IMPORTED_MODULE_2__.dateFactory)()), calendarObjectIds: [] }); const insertId = context.getters.getLastTimeRangeInsertId; context.commit('addFetchedTimeRangeToCalendar', { calendar, fetchedTimeRangeId: insertId }); const calendarObjects = []; const calendarObjectIds = []; for (const r of response.concat(responseTodo)) { try { const calendarObject = (0,_models_calendarObject_js__WEBPACK_IMPORTED_MODULE_1__.mapCDavObjectToCalendarObject)(r, calendar.id); calendarObjects.push(calendarObject); calendarObjectIds.push(calendarObject.id); } catch (e) { console.error("could not convert calendar object of calendar ".concat(calendar.id), e, { response: r }); } } context.commit('appendCalendarObjects', { calendarObjects }); context.commit('appendCalendarObjectsToCalendar', { calendar, calendarObjectIds }); context.commit('appendCalendarObjectIdsToTimeFrame', { timeRangeId: insertId, calendarObjectIds }); context.commit('markCalendarAsNotLoading', { calendar }); return context.rootState.fetchedTimeRanges.lastTimeRangeInsertId; }, /** * Retrieve one object * * @param {object} context the store mutations * @param {object} data destructuring object * @param {string} data.objectId Id of the object to fetch * @return {Promise} */ async getEventByObjectId(context, _ref57) { let { objectId } = _ref57; // TODO - we should still check if the calendar-object is up to date // - Just send head and compare etags if (context.getters.getCalendarObjectById(objectId)) { return Promise.resolve(context.getters.getCalendarObjectById(objectId)); } // This might throw an exception, but we will leave it up to the methods // calling this action to properly handle it const objectPath = atob(objectId); const lastSlashIndex = objectPath.lastIndexOf('/'); const calendarPath = objectPath.slice(0, lastSlashIndex + 1); const objectFileName = objectPath.slice(lastSlashIndex + 1); const calendarId = btoa(calendarPath); if (!context.state.calendarsById[calendarId]) { return Promise.reject(new Error('')); } const calendar = context.state.calendarsById[calendarId]; const vObject = await calendar.dav.find(objectFileName); const calendarObject = (0,_models_calendarObject_js__WEBPACK_IMPORTED_MODULE_1__.mapCDavObjectToCalendarObject)(vObject, calendar.id); context.commit('appendCalendarObject', { calendarObject }); context.commit('addCalendarObjectToCalendar', { calendar: { id: calendarId }, calendarObjectId: calendarObject.id }); return calendarObject; }, /** * Import events into calendar * * @param {object} context the store mutations */ async importEventsIntoCalendar(context) { context.commit('changeStage', _models_consts_js__WEBPACK_IMPORTED_MODULE_9__.IMPORT_STAGE_IMPORTING); // Create a copy const files = context.rootState.importFiles.importFiles.slice(); let totalCount = 0; for (const file of files) { totalCount += file.parser.getItemCount(); const calendarId = context.rootState.importFiles.importCalendarRelation[file.id]; if (calendarId === 'new') { const displayName = file.parser.getName() || (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_6__.translate)('calendar', 'Imported {filename}', { filename: file.name }); const color = file.parser.getColor() || (0,_utils_color_js__WEBPACK_IMPORTED_MODULE_5__.uidToHexColor)(displayName); const components = []; if (file.parser.containsVEvents()) { components.push('VEVENT'); } if (file.parser.containsVJournals()) { components.push('VJOURNAL'); } if (file.parser.containsVTodos()) { components.push('VTODO'); } const response = await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_0__.createCalendar)(displayName, color, components, 0); const calendar = (0,_models_calendar_js__WEBPACK_IMPORTED_MODULE_3__.mapDavCollectionToCalendar)(response, context.getters.getCurrentUserPrincipal); context.commit('addCalendar', { calendar }); context.commit('setCalendarForFileId', { fileId: file.id, calendarId: calendar.id }); } } context.commit('setTotal', totalCount); const limit = (0,p_limit__WEBPACK_IMPORTED_MODULE_4__["default"])(3); const requests = []; for (const file of files) { const calendarId = context.rootState.importFiles.importCalendarRelation[file.id]; const calendar = context.getters.getCalendarById(calendarId); for (const item of file.parser.getItemIterator()) { requests.push(limit(async () => { const ics = item.toICS(); let davObject; try { davObject = await calendar.dav.createVObject(ics); } catch (error) { context.commit('incrementDenied'); console.error(error); return; } const calendarObject = (0,_models_calendarObject_js__WEBPACK_IMPORTED_MODULE_1__.mapCDavObjectToCalendarObject)(davObject, calendarId); context.commit('appendCalendarObject', { calendarObject }); context.commit('addCalendarObjectToCalendar', { calendar, calendarObjectId: calendarObject.id }); context.commit('addCalendarObjectIdToAllTimeRangesOfCalendar', { calendarId: calendar.id, calendarObjectId: calendarObject.id }); context.commit('incrementAccepted'); })); } } await Promise.all(requests); context.commit('changeStage', _models_consts_js__WEBPACK_IMPORTED_MODULE_9__.IMPORT_STAGE_PROCESSING); }, /** * * @param {object} context the store object * @param {object} context.commit the store mutations * @param {object} context.state the store state * @param {object} data The data destructuring object * @param {object} data.newOrder The object containing String => Number with the new order * @return {Promise} */ async updateCalendarListOrder(_ref58, _ref59) { let { state, commit } = _ref58; let { newOrder } = _ref59; // keep a record of the original order in case we need to do a rollback const limit = (0,p_limit__WEBPACK_IMPORTED_MODULE_4__["default"])(3); const requests = []; const calendarsToUpdate = []; for (const key in newOrder) { requests.push(limit(async () => { const calendar = state.calendarsById[key]; // Do not update unless necessary if (calendar.dav.order === newOrder[key]) { return; } calendar.dav.order = newOrder[key]; await calendar.dav.update(); calendarsToUpdate.push({ calendar, newOrder: newOrder[key] }); })); } await Promise.all(requests); for (const { calendar, newOrder } of calendarsToUpdate) { console.debug(calendar, newOrder); commit('changeCalendarOrder', { calendar, newOrder }); } } }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ state, mutations, getters, actions }); /***/ }), /***/ "./src/store/contacts.js": /*!*******************************!*\ !*** ./src/store/contacts.js ***! \*******************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const state = { contacts: [], contactByEMail: {} }; const mutations = { /** * Append a single contact to the store * * @param {object} state The store data * @param {object} data The destructuring object * @param {object} data.contact The contact to append to the store */ appendContact(state, _ref) { let { contact } = _ref; if (state.contacts.indexOf(contact) === -1) { state.contacts.push(contact); } for (const email of contact.emails) { // In the unlikely case that multiple contacts // share the same email address, we will just follow // first come, first served. if (state.contactByEMail[email] === undefined) { vue__WEBPACK_IMPORTED_MODULE_0__["default"].set(state.contactByEMail, email, contact); } } }, /** * Removes a single contact from the store * * @param {object} state The store data * @param {object} data The destructuring object * @param {object} data.contact The contact to remove from the store */ removeContact(state, _ref2) { let { contact } = _ref2; for (const email of contact.emails) { if (state.contactByEMail[email] === contact) { vue__WEBPACK_IMPORTED_MODULE_0__["default"].delete(state.contactByEMail, email); } } const index = state.contacts.indexOf(contact); if (index !== -1) { state.contacts.splice(index, 1); } } }; const getters = {}; const actions = {}; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ state, mutations, getters, actions }); /***/ }), /***/ "./src/store/davRestrictions.js": /*!**************************************!*\ !*** ./src/store/davRestrictions.js ***! \**************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const state = { minimumDate: '1970-01-01T00:00:00Z', maximumDate: '2037-12-31T23:59:59Z' }; const mutations = { /** * Initialize restrictions imposed by CalDAV server * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {string} data.minimumDate The minimum-date allowed by the CalDAV server * @param {string} data.maximumDate The maximum-date allowed by the CalDAV server */ loadDavRestrictionsFromServer(state, _ref) { let { minimumDate, maximumDate } = _ref; state.minimumDate = minimumDate; state.maximumDate = maximumDate; } }; const getters = {}; const actions = {}; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ state, mutations, getters, actions }); /***/ }), /***/ "./src/store/fetchedTimeRanges.js": /*!****************************************!*\ !*** ./src/store/fetchedTimeRanges.js ***! \****************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const state = { lastTimeRangeInsertId: -1, fetchedTimeRanges: [], fetchedTimeRangesById: {} }; const mutations = { /** * Adds a fetched time-range to the state * * @param {object} state The vuex state * @param {object} data The destructuring object * @param {string} data.calendarId Calendar-id which objects have been fetched * @param {number} data.from timestamp of start * @param {number} data.to timestamp of end * @param {number} data.lastFetched timestamp of last-fetched * @param {string[]} data.calendarObjectIds array of calendarObjectIds */ addTimeRange(state, _ref) { let { calendarId, from, to, lastFetched, calendarObjectIds } = _ref; const fetchedTimeRange = { id: ++state.lastTimeRangeInsertId, calendarId, from, to, lastFetched, calendarObjectIds }; state.fetchedTimeRanges.push(fetchedTimeRange); vue__WEBPACK_IMPORTED_MODULE_0__["default"].set(state.fetchedTimeRangesById, fetchedTimeRange.id, fetchedTimeRange); }, /** * Removes a fetched time-range from the state * * @param {object} state The vuex state * @param {object} data The destructuring object * @param {number} data.timeRangeId Id of time-range to remove */ removeTimeRange(state, _ref2) { let { timeRangeId } = _ref2; const obj = state.fetchedTimeRangesById[timeRangeId]; const index = state.fetchedTimeRanges.indexOf(obj); if (index !== -1) { state.fetchedTimeRanges.splice(index, 1); vue__WEBPACK_IMPORTED_MODULE_0__["default"].delete(state.fetchedTimeRangesById, timeRangeId); } }, /** * Adds a calendar-object-id to an already fetched time-range * * @param {object} state The vuex state * @param {object} data The destructuring object * @param {number} data.timeRangeId The id of the time-range * @param {string[]} data.calendarObjectIds The array of ids of the calendar-object to add */ appendCalendarObjectIdsToTimeFrame(state, _ref3) { let { timeRangeId, calendarObjectIds } = _ref3; for (const calendarObjectId of calendarObjectIds) { if (state.fetchedTimeRangesById[timeRangeId].calendarObjectIds.indexOf(calendarObjectId) === -1) { state.fetchedTimeRangesById[timeRangeId].calendarObjectIds.push(calendarObjectId); } } }, /** * Adds a calendar-object-id to an already fetched time-range * * @param {object} state The vuex state * @param {object} data The destructuring object * @param {number} data.timeRangeId The id of the time-range * @param {string} data.calendarObjectId The id of the calendar-object to add */ appendCalendarObjectIdToTimeRange(state, _ref4) { let { timeRangeId, calendarObjectId } = _ref4; state.fetchedTimeRangesById[timeRangeId].calendarObjectIds.push(calendarObjectId); }, /** * Removes a calendar-object-id from an already fetched time-range * * @param {object} state The vuex state * @param {object} data The destructuring object * @param {number} data.timeRangeId The id of the timerange * @param {string} data.calendarObjectId The id of the calendar-object to remove */ removeCalendarObjectIdFromTimeRange(state, _ref5) { let { timeRangeId, calendarObjectId } = _ref5; const index = state.fetchedTimeRangesById[timeRangeId].calendarObjectIds.indexOf(calendarObjectId); if (index !== -1) { state.fetchedTimeRangesById[timeRangeId].calendarObjectIds.splice(index, 1); } }, /** * Removes a calendar-object-id from any time-range it may occur in * * @param {object} state The vuex state * @param {object} data The destructuring object * @param {string} data.calendarObjectId The id of the calendar-object to remove */ removeCalendarObjectIdFromAnyTimeRange(state, _ref6) { let { calendarObjectId } = _ref6; for (const timeRange of state.fetchedTimeRanges) { const index = timeRange.calendarObjectIds.indexOf(calendarObjectId); if (index !== -1) { timeRange.calendarObjectIds.splice(index, 1); } } }, /** * Updates the last-fetched timestamp of a time-range * * @param {object} state The vuex state * @param {object} data The destructuring object * @param {number} data.timeRangeId The id of the timerange * @param {number} data.lastFetched Timestamp of last-fetched */ updateTimestampOfLastFetched(state, _ref7) { let { timeRangeId, lastFetched } = _ref7; state.fetchedTimeRangesById[timeRangeId].lastFetched = lastFetched; }, /** * Adds a calendar-object-id to all time-ranges of a given caloendar * * @param {object} state The vuex state * @param {object} data The destructuring object * @param {string} data.calendarObjectId The id of the calendar-object * @param {string} data.calendarId The id of the calendar */ addCalendarObjectIdToAllTimeRangesOfCalendar(state, _ref8) { let { calendarObjectId, calendarId } = _ref8; for (const timerange of state.fetchedTimeRanges) { if (timerange.calendarId !== calendarId) { continue; } if (timerange.calendarObjectIds.indexOf(calendarObjectId) === -1) { timerange.calendarObjectIds.push(calendarObjectId); } } }, /** * Removes a calendar-object-id to all time-ranges of a given caloendar * * @param {object} state The vuex state * @param {object} data The destructuring object * @param {string} data.calendarObjectId The id of the calendar-object * @param {string} data.calendarId The id of the calendar */ removeCalendarObjectIdFromAllTimeRangesOfCalendar(state, _ref9) { let { calendarObjectId, calendarId } = _ref9; for (const timerange of state.fetchedTimeRanges) { if (timerange.calendarId !== calendarId) { continue; } const index = timerange.calendarObjectIds.indexOf(calendarObjectId); if (index !== -1) { timerange.calendarObjectIds.splice(index, 1); } } }, /** * clear FetchedTimeRanges Store * * @param {object} state The vuex state */ clearFetchedTimeRanges(state) { state.lastTimeRangeInsertId = -1; state.fetchedTimeRanges = []; state.fetchedTimeRangesById = {}; } }; const getters = { /** * Get all time-ranges for a calendar * * @param {object} state The vuex state * @return {function({String}): {Object}[]} */ getAllTimeRangesForCalendar: state => calendarId => state.fetchedTimeRanges.filter(f => f.calendarId === calendarId), /** * Get time-range covering * * @param {object} state The vuex state * @return {function({Number}, {Number}, {Number}): {Object}|false} */ getTimeRangeForCalendarCoveringRange: state => (calendarId, requestedFrom, requestedTo) => { return state.fetchedTimeRanges.find(f => { return f.calendarId === calendarId && f.from <= requestedFrom && f.to >= requestedTo; }); }, /** * Get all time-ranges that have been last fetched before a given time * * @param {object} state The vuex state * @return {function({Number}): {Object}[]} */ getAllTimeRangesOlderThan: state => olderThan => state.fetchedTimeRanges.filter(f => f.lastFetched <= olderThan), /** * * @param {object} state The vuex state * @return {number} */ getLastTimeRangeInsertId: state => state.lastTimeRangeInsertId, /** * * @param {object} state The vuex state * @param {object} getters The vuex getters * @return {function({Number}): {CalendarObject}[]} */ getCalendarObjectsByTimeRangeId: (state, getters) => timeRangeId => { if (!state.fetchedTimeRangesById[timeRangeId]) { return []; } return state.fetchedTimeRangesById[timeRangeId].calendarObjectIds.map(calendarObjectId => { return getters.getCalendarObjectById(calendarObjectId); }); } }; const actions = {}; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ state, mutations, getters, actions }); /***/ }), /***/ "./src/store/importFiles.js": /*!**********************************!*\ !*** ./src/store/importFiles.js ***! \**********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); /** * @copyright Copyright (c) 2019 Team Popcorn * * @copyright Copyright (c) 2020 Georg Ehrke * * @author Team Popcorn * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const state = { lastFileInsertId: -1, importFiles: [], importFilesById: {}, importCalendarRelation: {} }; const mutations = { /** * Adds a file to the state * * @param {object} state The vuex state * @param {object} data The destructuring object * @param {string} data.contents Contents of file * @param {number} data.lastModified Timestamp of last modification * @param {string} data.name Name of file * @param {AbstractParser} data.parser The parser * @param {number} data.size Size of file * @param {string} data.type mime-type of file */ addFile(state, _ref) { let { contents, lastModified, name, parser, size, type } = _ref; const file = { id: ++state.lastFileInsertId, contents, lastModified, name, parser, size, type }; state.importFiles.push(file); vue__WEBPACK_IMPORTED_MODULE_0__["default"].set(state.importFilesById, file.id, file); }, /** * Sets a calendar for the file * * @param {object} state The vuex state * @param {object} data The destructuring object * @param {number} data.fileId Id of file to select calendar for * @param {string} data.calendarId Id of calendar to import file into */ setCalendarForFileId(state, _ref2) { let { fileId, calendarId } = _ref2; vue__WEBPACK_IMPORTED_MODULE_0__["default"].set(state.importCalendarRelation, fileId, calendarId); }, /** * Removes all files from state * * @param {object} state The vuex state */ removeAllFiles(state) { vue__WEBPACK_IMPORTED_MODULE_0__["default"].set(state, 'importFiles', []); vue__WEBPACK_IMPORTED_MODULE_0__["default"].set(state, 'importFilesById', {}); vue__WEBPACK_IMPORTED_MODULE_0__["default"].set(state, 'importCalendarRelation', {}); } }; const getters = {}; const actions = {}; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ state, mutations, getters, actions }); /***/ }), /***/ "./src/store/importState.js": /*!**********************************!*\ !*** ./src/store/importState.js ***! \**********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _models_consts_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../models/consts.js */ "./src/models/consts.js"); /** * @copyright Copyright (c) 2019 Team Popcorn * * @copyright Copyright (c) 2020 Georg Ehrke * * @author Team Popcorn * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const state = { total: 0, accepted: 0, denied: 0, stage: _models_consts_js__WEBPACK_IMPORTED_MODULE_0__.IMPORT_STAGE_DEFAULT }; const mutations = { /** * Increment the number of calendar-objects accepted * * @param {object} state the store data */ incrementAccepted(state) { state.accepted++; }, /** * Increment the number of calendar-objects denied * * @param {object} state the store data */ incrementDenied(state) { state.denied++; }, /** * Set the total number of calendar-objects * * @param {object} state the store data * @param {number} total the total number of calendar-objects to import */ setTotal(state, total) { state.total = total; }, /** * Change stage to the indicated one * * @param {object} state the store data * @param {string} stage the name of the stage, see /src/models/consts.js */ changeStage(state, stage) { state.stage = stage; }, /** * Reset to the default state * * @param {object} state the store data */ resetState(state) { state.total = 0; state.accepted = 0; state.denied = 0; state.stage = _models_consts_js__WEBPACK_IMPORTED_MODULE_0__.IMPORT_STAGE_DEFAULT; } }; const getters = {}; const actions = {}; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ state, mutations, getters, actions }); /***/ }), /***/ "./src/store/index.js": /*!****************************!*\ !*** ./src/store/index.js ***! \****************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); /* harmony import */ var _calendarObjectInstance_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./calendarObjectInstance.js */ "./src/store/calendarObjectInstance.js"); /* harmony import */ var _calendarObjects_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./calendarObjects.js */ "./src/store/calendarObjects.js"); /* harmony import */ var _calendars_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./calendars.js */ "./src/store/calendars.js"); /* harmony import */ var _contacts_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contacts.js */ "./src/store/contacts.js"); /* harmony import */ var _davRestrictions_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./davRestrictions.js */ "./src/store/davRestrictions.js"); /* harmony import */ var _fetchedTimeRanges_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./fetchedTimeRanges.js */ "./src/store/fetchedTimeRanges.js"); /* harmony import */ var _importFiles_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./importFiles.js */ "./src/store/importFiles.js"); /* harmony import */ var _importState_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./importState.js */ "./src/store/importState.js"); /* harmony import */ var _principals_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./principals.js */ "./src/store/principals.js"); /* harmony import */ var _settings_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./settings.js */ "./src/store/settings.js"); /* harmony import */ var _userRole_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./userRole.js */ "./src/store/userRole.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @author John Molakvoæ * * @author Thomas Citharel * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ vue__WEBPACK_IMPORTED_MODULE_11__["default"].use(vuex__WEBPACK_IMPORTED_MODULE_12__["default"]); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new vuex__WEBPACK_IMPORTED_MODULE_12__["default"].Store({ modules: { calendarObjectInstance: _calendarObjectInstance_js__WEBPACK_IMPORTED_MODULE_0__["default"], calendarObjects: _calendarObjects_js__WEBPACK_IMPORTED_MODULE_1__["default"], calendars: _calendars_js__WEBPACK_IMPORTED_MODULE_2__["default"], contacts: _contacts_js__WEBPACK_IMPORTED_MODULE_3__["default"], davRestrictions: _davRestrictions_js__WEBPACK_IMPORTED_MODULE_4__["default"], fetchedTimeRanges: _fetchedTimeRanges_js__WEBPACK_IMPORTED_MODULE_5__["default"], importFiles: _importFiles_js__WEBPACK_IMPORTED_MODULE_6__["default"], importState: _importState_js__WEBPACK_IMPORTED_MODULE_7__["default"], principals: _principals_js__WEBPACK_IMPORTED_MODULE_8__["default"], settings: _settings_js__WEBPACK_IMPORTED_MODULE_9__["default"], userRole: _userRole_js__WEBPACK_IMPORTED_MODULE_10__["default"] } // // Throw errors when the state is edited outside of mutations // strict: true })); /***/ }), /***/ "./src/store/principals.js": /*!*********************************!*\ !*** ./src/store/principals.js ***! \*********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); /* harmony import */ var _services_caldavService_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../services/caldavService.js */ "./src/services/caldavService.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _models_principal_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../models/principal.js */ "./src/models/principal.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const state = { principals: [], principalsById: {}, currentUserPrincipal: null }; const mutations = { /** * Adds a principal to the state * * @param {object} state The vuex state * @param {object} data The destructuring object * @param {object} data.principal The principal to add */ addPrincipal(state, _ref) { let { principal } = _ref; const object = (0,_models_principal_js__WEBPACK_IMPORTED_MODULE_2__.getDefaultPrincipalObject)(principal); if (state.principalsById[object.id]) { return; } state.principals.push(object); vue__WEBPACK_IMPORTED_MODULE_3__["default"].set(state.principalsById, object.id, object); }, /** * Adds the current user principal to the state * * @param {object} state The vuex state * @param {object} data destructuring object * @param {string} data.principalId principalId of the current-user-principal */ setCurrentUserPrincipal(state, _ref2) { let { principalId } = _ref2; state.currentUserPrincipal = principalId; }, /** * Changes the schedule-default-calendar-URL of a principal * * @param {object} state The vuex state * @param {object} data The destructuring object * @param {object} data.principal The principal to modify * @param {string} data.scheduleDefaultCalendarUrl The new schedule-default-calendar-URL */ changePrincipalScheduleDefaultCalendarUrl(state, _ref3) { let { principal, scheduleDefaultCalendarUrl } = _ref3; vue__WEBPACK_IMPORTED_MODULE_3__["default"].set(state.principalsById[principal.id], 'scheduleDefaultCalendarUrl', scheduleDefaultCalendarUrl); } }; const getters = { /** * Gets a principal object by its url * * @param {object} state the store data * @return {function({String}): {Object}} */ getPrincipalByUrl: state => url => state.principals.find(principal => principal.url === url), /** * Gets a principal object by its id * * @param {object} state the store data * @return {function({String}): {Object}} */ getPrincipalById: state => id => state.principalsById[id], /** * Gets the principal object of the current-user-principal * * @param {object} state the store data * @return {{Object}} */ getCurrentUserPrincipal: state => state.principalsById[state.currentUserPrincipal], /** * Gets the email-address of the current-user-principal * * @param {object} state the store data * @return {string|undefined} */ getCurrentUserPrincipalEmail: state => { var _state$principalsById; return (_state$principalsById = state.principalsById[state.currentUserPrincipal]) === null || _state$principalsById === void 0 ? void 0 : _state$principalsById.emailAddress; } }; const actions = { /** * Fetches a principal from the DAV server and commits it to the state * * @param {object} context The vuex context * @param {string} url The URL of the principal * @return {Promise} */ async fetchPrincipalByUrl(context, _ref4) { let { url } = _ref4; // Don't refetch principals we already have if (context.getters.getPrincipalByUrl(url)) { return; } const principal = await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_0__.findPrincipalByUrl)(url); if (!principal) { // TODO - handle error return; } context.commit('addPrincipal', { principal: (0,_models_principal_js__WEBPACK_IMPORTED_MODULE_2__.mapDavToPrincipal)(principal) }); }, /** * Fetches the current-user-principal * * @param {object} context The vuex context * @return {Promise} */ async fetchCurrentUserPrincipal(context) { const currentUserPrincipal = (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentUserPrincipal)(); if (!currentUserPrincipal) { // TODO - handle error return; } const principal = (0,_models_principal_js__WEBPACK_IMPORTED_MODULE_2__.mapDavToPrincipal)(currentUserPrincipal); context.commit('addPrincipal', { principal }); context.commit('setCurrentUserPrincipal', { principalId: principal.id }); _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].debug("Current user principal is ".concat(principal.url)); }, /** * Change a principal's schedule-default-calendar-URL * * @param {object} context The vuex context * @param {object} data The destructuring object * @param {object} data.principal The principal to modify * @param {string} data.scheduleDefaultCalendarUrl The new schedule-default-calendar-URL * @return {Promise} */ async changePrincipalScheduleDefaultCalendarUrl(context, _ref5) { let { principal, scheduleDefaultCalendarUrl } = _ref5; principal.dav.scheduleDefaultCalendarUrl = scheduleDefaultCalendarUrl; await principal.dav.update(); context.commit('changePrincipalScheduleDefaultCalendarUrl', { principal, scheduleDefaultCalendarUrl }); } }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ state, mutations, getters, actions }); /***/ }), /***/ "./src/store/settings.js": /*!*******************************!*\ !*** ./src/store/settings.js ***! \*******************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _services_caldavService_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../services/caldavService.js */ "./src/services/caldavService.js"); /* harmony import */ var _models_calendar_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../models/calendar.js */ "./src/models/calendar.js"); /* harmony import */ var _services_timezoneDetectionService_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/timezoneDetectionService.js */ "./src/services/timezoneDetectionService.js"); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /* harmony import */ var _services_settings_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../services/settings.js */ "./src/services/settings.js"); /* harmony import */ var _utils_logger_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/logger.js */ "./src/utils/logger.js"); /* harmony import */ var _services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../services/timezoneDataProviderService.js */ "./src/services/timezoneDataProviderService.js"); /* harmony import */ var _services_attachmentService_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../services/attachmentService.js */ "./src/services/attachmentService.js"); /** * @copyright Copyright (c) 2020 Georg Ehrke * @copyright Copyright (c) 2022 Informatyka Boguslawski sp. z o.o. sp.k., http://www.ib.pl/ * * @author Georg Ehrke * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const state = { // env appVersion: null, firstRun: null, talkEnabled: false, disableAppointments: false, publicCalendars: null, // user-defined calendar settings eventLimit: null, showTasks: null, showWeekends: null, showWeekNumbers: null, skipPopover: null, slotDuration: null, defaultReminder: null, tasksEnabled: false, timezone: 'automatic', hideEventExport: false, forceEventAlarmType: false, canSubscribeLink: true, showResources: true, // user-defined Nextcloud settings momentLocale: 'en', attachmentsFolder: '/Calendar', attachmentsFolderCreated: false }; const mutations = { /** * Updates the user's setting for event limit * * @param {object} state The Vuex state */ toggleEventLimitEnabled(state) { state.eventLimit = !state.eventLimit; }, /** * Updates the user's setting for visibility of event popover * * @param {object} state The Vuex state */ togglePopoverEnabled(state) { state.skipPopover = !state.skipPopover; }, /** * Updates the user's setting for visibility of weekends * * @param {object} state The Vuex state */ toggleTasksEnabled(state) { state.showTasks = !state.showTasks; }, /** * Updates the user's setting for visibility of weekends * * @param {object} state The Vuex state */ toggleWeekendsEnabled(state) { state.showWeekends = !state.showWeekends; }, /** * Updates the user's setting for visibility of week numbers * * @param {object} state The Vuex state */ toggleWeekNumberEnabled(state) { state.showWeekNumbers = !state.showWeekNumbers; }, /** * Updates the user's preferred slotDuration * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {string} data.slotDuration The new slot duration */ setSlotDuration(state, _ref) { let { slotDuration } = _ref; state.slotDuration = slotDuration; }, /** * Updates the user's preferred defaultReminder * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {string} data.defaultReminder The new default reminder length */ setDefaultReminder(state, _ref2) { let { defaultReminder } = _ref2; state.defaultReminder = defaultReminder; }, /** * Updates the user's timezone * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {string} data.timezoneId The new timezone */ setTimezone(state, _ref3) { let { timezoneId } = _ref3; state.timezone = timezoneId; }, /** * Updates the user's attachments folder * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {string} data.attachmentsFolder The new attachments folder */ setAttachmentsFolder(state, _ref4) { let { attachmentsFolder } = _ref4; state.attachmentsFolder = attachmentsFolder; state.attachmentsFolderCreated = false; }, /** * Update wheter the user's attachments folder has been created * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {boolean} data.attachmentsFolderCreated True if the folder has been created */ setAttachmentsFolderCreated(state, _ref5) { let { attachmentsFolderCreated } = _ref5; state.attachmentsFolderCreated = attachmentsFolderCreated; }, /** * Initialize settings * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {string} data.appVersion The version of the Nextcloud app * @param {boolean} data.eventLimit Whether or not to limit number of visible events in grid view * @param {boolean} data.firstRun Whether or not this is the first run * @param {boolean} data.showWeekNumbers Whether or not to show week numbers * @param {boolean} data.showTasks Whether or not to display tasks with a due-date * @param {boolean} data.showWeekends Whether or not to display weekends * @param {boolean} data.skipPopover Whether or not to skip the simple event popover * @param {string} data.slotDuration The duration of one slot in the agendaView * @param {string} data.defaultReminder The default reminder to set on newly created events * @param {boolean} data.talkEnabled Whether or not the talk app is enabled * @param {boolean} data.tasksEnabled Whether ot not the tasks app is enabled * @param {string} data.timezone The timezone to view the calendar in. Either an Olsen timezone or "automatic" * @param {boolean} data.hideEventExport * @param {string} data.forceEventAlarmType * @param {boolean} data.disableAppointments Allow to disable the appointments feature * @param {boolean} data.canSubscribeLink * @param {string} data.attachmentsFolder Default user's attachments folder * @param {boolean} data.showResources Show or hide the resources tab * @param {string} data.publicCalendars */ loadSettingsFromServer(state, _ref6) { let { appVersion, eventLimit, firstRun, showWeekNumbers, showTasks, showWeekends, skipPopover, slotDuration, defaultReminder, talkEnabled, tasksEnabled, timezone, hideEventExport, forceEventAlarmType, disableAppointments, canSubscribeLink, attachmentsFolder, showResources, publicCalendars } = _ref6; (0,_utils_logger_js__WEBPACK_IMPORTED_MODULE_5__.logInfo)("\nInitial settings:\n\t- AppVersion: ".concat(appVersion, "\n\t- EventLimit: ").concat(eventLimit, "\n\t- FirstRun: ").concat(firstRun, "\n\t- ShowWeekNumbers: ").concat(showWeekNumbers, "\n\t- ShowTasks: ").concat(showTasks, "\n\t- ShowWeekends: ").concat(showWeekends, "\n\t- SkipPopover: ").concat(skipPopover, "\n\t- SlotDuration: ").concat(slotDuration, "\n\t- DefaultReminder: ").concat(defaultReminder, "\n\t- TalkEnabled: ").concat(talkEnabled, "\n\t- TasksEnabled: ").concat(tasksEnabled, "\n\t- Timezone: ").concat(timezone, "\n\t- HideEventExport: ").concat(hideEventExport, "\n\t- ForceEventAlarmType: ").concat(forceEventAlarmType, "\n\t- disableAppointments: ").concat(disableAppointments, "\n\t- CanSubscribeLink: ").concat(canSubscribeLink, "\n\t- attachmentsFolder: ").concat(attachmentsFolder, "\n\t- ShowResources: ").concat(showResources, "\n\t- PublicCalendars: ").concat(publicCalendars, "\n")); state.appVersion = appVersion; state.eventLimit = eventLimit; state.firstRun = firstRun; state.showWeekNumbers = showWeekNumbers; state.showTasks = showTasks; state.showWeekends = showWeekends; state.skipPopover = skipPopover; state.slotDuration = slotDuration; state.defaultReminder = defaultReminder; state.talkEnabled = talkEnabled; state.tasksEnabled = tasksEnabled; state.timezone = timezone; state.hideEventExport = hideEventExport; state.forceEventAlarmType = forceEventAlarmType; state.disableAppointments = disableAppointments; state.canSubscribeLink = canSubscribeLink; state.attachmentsFolder = attachmentsFolder; state.showResources = showResources; state.publicCalendars = publicCalendars; }, /** * Sets the name of the moment.js locale to be used * * @param {object} state The Vuex state * @param {object} data The destructuring object * @param {string} data.locale The moment.js locale to be used */ setMomentLocale(state, _ref7) { let { locale } = _ref7; (0,_utils_logger_js__WEBPACK_IMPORTED_MODULE_5__.logInfo)("Updated moment locale: ".concat(locale)); state.momentLocale = locale; } }; const getters = { isTalkEnabled: state => state.talkEnabled, /** * Gets the resolved timezone. * If the timezone is set to automatic, it returns the user's current timezone * Otherwise, it returns the Olsen timezone stored * * @param {object} state The Vuex state * @return {string} */ getResolvedTimezone: state => state.timezone === 'automatic' ? (0,_services_timezoneDetectionService_js__WEBPACK_IMPORTED_MODULE_2__.detectTimezone)() : state.timezone, /** * Gets the resolved timezone object. * Falls back to UTC if timezone is invalid. * * @param {object} state The Vuex state * @param {object} getters The vuex getters * @return {object} The calendar-js timezone object */ getResolvedTimezoneObject: (state, getters) => { const timezone = getters.getResolvedTimezone; let timezoneObject = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_6__["default"])().getTimezoneForId(timezone); if (!timezoneObject) { timezoneObject = (0,_services_timezoneDataProviderService_js__WEBPACK_IMPORTED_MODULE_6__["default"])().getTimezoneForId('UTC'); } return timezoneObject; } }; const actions = { /** * Updates the user's setting for visibility of birthday calendar * * @param {object} vuex The Vuex destructuring object * @param {object} vuex.getters The Vuex Getters * @param {Function} vuex.commit The Vuex commit Function * @param {Function} vuex.dispatch The Vuex dispatch Function * @return {Promise} */ async toggleBirthdayCalendarEnabled(_ref8) { let { getters, commit, dispatch } = _ref8; if (getters.hasBirthdayCalendar) { const calendar = getters.getBirthdayCalendar; await dispatch('deleteCalendar', { calendar }); } else { const davCalendar = await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_0__.enableBirthdayCalendar)(); const calendar = (0,_models_calendar_js__WEBPACK_IMPORTED_MODULE_1__.mapDavCollectionToCalendar)(davCalendar); commit('addCalendar', { calendar }); } }, /** * Updates the user's setting for event limit * * @param {object} vuex The Vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.commit The Vuex commit Function * @return {Promise} */ async toggleEventLimitEnabled(_ref9) { let { state, commit } = _ref9; const newState = !state.eventLimit; const value = newState ? 'yes' : 'no'; await (0,_services_settings_js__WEBPACK_IMPORTED_MODULE_4__.setConfig)('eventLimit', value); commit('toggleEventLimitEnabled'); }, /** * Updates the user's setting for visibility of event popover * * @param {object} context The Vuex context * @param {object} context.state The store state * @param {object} context.commit The store mutations * @return {Promise} */ async togglePopoverEnabled(_ref10) { let { state, commit } = _ref10; const newState = !state.skipPopover; const value = newState ? 'yes' : 'no'; await (0,_services_settings_js__WEBPACK_IMPORTED_MODULE_4__.setConfig)('skipPopover', value); commit('togglePopoverEnabled'); }, /** * Updates the user's setting for visibility of weekends * * @param {object} context The Vuex context * @param {object} context.state The store state * @param {object} context.commit The store mutations * @return {Promise} */ async toggleWeekendsEnabled(_ref11) { let { state, commit } = _ref11; const newState = !state.showWeekends; const value = newState ? 'yes' : 'no'; await (0,_services_settings_js__WEBPACK_IMPORTED_MODULE_4__.setConfig)('showWeekends', value); commit('toggleWeekendsEnabled'); }, /** * Updates the user's setting for visibility of tasks * * @param {object} vuex The Vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.commit The Vuex commit Function * @return {Promise} */ async toggleTasksEnabled(_ref12) { let { state, commit } = _ref12; const newState = !state.showTasks; const value = newState ? 'yes' : 'no'; await (0,_services_settings_js__WEBPACK_IMPORTED_MODULE_4__.setConfig)('showTasks', value); commit('toggleTasksEnabled'); commit('clearFetchedTimeRanges'); commit('incrementModificationCount'); }, /** * Updates the user's setting for visibility of week numbers * * @param {object} vuex The Vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.commit The Vuex commit Function * @return {Promise} */ async toggleWeekNumberEnabled(_ref13) { let { state, commit } = _ref13; const newState = !state.showWeekNumbers; const value = newState ? 'yes' : 'no'; await (0,_services_settings_js__WEBPACK_IMPORTED_MODULE_4__.setConfig)('showWeekNr', value); commit('toggleWeekNumberEnabled'); }, /** * Updates the view to be used as initial view when opening * the calendar app again * * @param {object} context The Vuex destructuring object * @param {object} data The destructuring object * @param {string} data.initialView New view to be used as initial view * @return {Promise} */ async setInitialView(context, _ref14) { let { initialView } = _ref14; await (0,_services_settings_js__WEBPACK_IMPORTED_MODULE_4__.setConfig)('view', initialView); }, /** * Updates the user's preferred slotDuration * * @param {object} vuex The Vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.commit The Vuex commit Function * @param {object} data The destructuring object * @param {string} data.slotDuration The new slot duration */ async setSlotDuration(_ref15, _ref16) { let { state, commit } = _ref15; let { slotDuration } = _ref16; if (state.slotDuration === slotDuration) { return; } await (0,_services_settings_js__WEBPACK_IMPORTED_MODULE_4__.setConfig)('slotDuration', slotDuration); commit('setSlotDuration', { slotDuration }); }, /** * Updates the user's preferred defaultReminder * * @param {object} vuex The Vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.commit The Vuex commit Function * @param {object} data The destructuring object * @param {string} data.defaultReminder The new default reminder */ async setDefaultReminder(_ref17, _ref18) { let { state, commit } = _ref17; let { defaultReminder } = _ref18; if (state.defaultReminder === defaultReminder) { return; } await (0,_services_settings_js__WEBPACK_IMPORTED_MODULE_4__.setConfig)('defaultReminder', defaultReminder); commit('setDefaultReminder', { defaultReminder }); }, /** * Updates the user's timezone * * @param {object} vuex The Vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.commit The Vuex commit Function * @param {object} data The destructuring object * @param {string} data.timezoneId The new timezone * @return {Promise} */ async setTimezone(_ref19, _ref20) { let { state, commit } = _ref19; let { timezoneId } = _ref20; if (state.timezone === timezoneId) { return; } await (0,_services_settings_js__WEBPACK_IMPORTED_MODULE_4__.setConfig)('timezone', timezoneId); commit('setTimezone', { timezoneId }); }, /** * Updates the user's attachments folder * * @param {object} vuex The Vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.commit The Vuex commit Function * @param {object} data The destructuring object * @param {string} data.attachmentsFolder The new attachments folder * @return {Promise} */ async setAttachmentsFolder(_ref21, _ref22) { let { state, commit } = _ref21; let { attachmentsFolder } = _ref22; if (state.attachmentsFolder === attachmentsFolder) { return; } await (0,_services_settings_js__WEBPACK_IMPORTED_MODULE_4__.setConfig)('attachmentsFolder', attachmentsFolder); commit('setAttachmentsFolder', { attachmentsFolder }); }, /** * Create the user's attachment folder if it doesn't exist and return its path * * @param {object} vuex The Vuex destructuring object * @param {object} vuex.state The Vuex state * @param {Function} vuex.commit The Vuex commit Function * @param {Function} vuex.dispatch The Vuex commit function * @param {object} vuex.getters The Vuex getters object * @return {Promise} The path of the user's attachments folder */ async createAttachmentsFolder(_ref23) { let { state, commit, dispatch, getters } = _ref23; if (state.attachmentsFolderCreated) { return state.attachmentsFolder; } const userId = getters.getCurrentUserPrincipal.dav.userId; const path = await _services_attachmentService_js__WEBPACK_IMPORTED_MODULE_7__.createFolder(state.attachmentsFolder, userId); if (path !== state.attachmentsFolder) { await dispatch('setAttachmentsFolder', { attachmentsFolder: path }); } commit('setAttachmentsFolderCreated', { attachmentsFolderCreated: true }); return path; }, /** * Initializes the calendar-js configuration * * @param {object} vuex The Vuex destructuring object * @param {object} vuex.state The Vuex state */ initializeCalendarJsConfig(_ref24) { let { state } = _ref24; (0,_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_3__.setConfig)('PRODID', "-//IDN nextcloud.com//Calendar app ".concat(state.appVersion, "//EN")); (0,_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_3__.setConfig)('property-list-significant-change', ['SUMMARY', 'LOCATION', 'DESCRIPTION', 'CLIENT']); } }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ state, mutations, getters, actions }); /***/ }), /***/ "./src/store/userRole.js": /*!*******************************!*\ !*** ./src/store/userRole.js ***! \*******************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _services_roleService__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../services/roleService */ "./src/services/roleService.js"); const state = { roles: [] // Store the roles here }; const mutations = { setUserRole(state, roles) { state.roles = roles; } }; const actions = { async fetchUserRoles(_ref) { let { commit } = _ref; try { // Pass commit to the service await _services_roleService__WEBPACK_IMPORTED_MODULE_0__["default"].fetchAndCommitRoles(commit); } catch (error) {} } }; const getters = { isAdmin: state => state.roles.includes("admin"), canAccessPreviousEvent: state => state.roles.includes("Ligne") == false && state.roles.includes("ligne") == false }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ namespaced: true, state, mutations, actions, getters }); /***/ }), /***/ "./src/utils/alarms.js": /*!*****************************!*\ !*** ./src/utils/alarms.js ***! \*****************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getAmountAndUnitForTimedEvents: () => (/* binding */ getAmountAndUnitForTimedEvents), /* harmony export */ getAmountHoursMinutesAndUnitForAllDayEvents: () => (/* binding */ getAmountHoursMinutesAndUnitForAllDayEvents), /* harmony export */ getFactorForAlarmUnit: () => (/* binding */ getFactorForAlarmUnit), /* harmony export */ getTotalSecondsFromAmountAndUnitForTimedEvents: () => (/* binding */ getTotalSecondsFromAmountAndUnitForTimedEvents), /* harmony export */ getTotalSecondsFromAmountHourMinutesAndUnitForAllDayEvents: () => (/* binding */ getTotalSecondsFromAmountHourMinutesAndUnitForAllDayEvents), /* harmony export */ updateAlarms: () => (/* binding */ updateAlarms) /* harmony export */ }); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Get the factor for a given unit * * @param {string} unit The name of the unit to get the factor of * @return {number} */ function getFactorForAlarmUnit(unit) { switch (unit) { case 'seconds': return 1; case 'minutes': return 60; case 'hours': return 60 * 60; case 'days': return 24 * 60 * 60; case 'weeks': return 7 * 24 * 60 * 60; default: return 1; } } /** * Gets the amount of days / weeks, unit from total seconds * * @param {number} totalSeconds Total amount of seconds * @return {{amount: number, unit: string}} */ function getAmountAndUnitForTimedEvents(totalSeconds) { // Before or after the event is handled somewhere else, // so make sure totalSeconds is positive totalSeconds = Math.abs(totalSeconds); // Handle the special case of 0, so we don't show 0 weeks if (totalSeconds === 0) { return { amount: 0, unit: 'minutes' }; } if (totalSeconds % (7 * 24 * 60 * 60) === 0) { return { amount: totalSeconds / (7 * 24 * 60 * 60), unit: 'weeks' }; } if (totalSeconds % (24 * 60 * 60) === 0) { return { amount: totalSeconds / (24 * 60 * 60), unit: 'days' }; } if (totalSeconds % (60 * 60) === 0) { return { amount: totalSeconds / (60 * 60), unit: 'hours' }; } if (totalSeconds % 60 === 0) { return { amount: totalSeconds / 60, unit: 'minutes' }; } return { amount: totalSeconds, unit: 'seconds' }; } /** * Get the total amount of seconds based on amount and unit for timed events * * @param {number} amount Amount of unit * @param {string} unit Minutes/Hours/Days/Weeks * @param {boolean=} isBefore Whether the reminder is before or after the event * @return {number} */ function getTotalSecondsFromAmountAndUnitForTimedEvents(amount, unit) { let isBefore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; return amount * getFactorForAlarmUnit(unit) * (isBefore ? -1 : 1); } /** * Gets the amount of days / weeks, unit, hours and minutes from total seconds * * @param {number} totalSeconds Total amount of seconds * @return {{amount: *, unit: *, hours: *, minutes: *}} */ function getAmountHoursMinutesAndUnitForAllDayEvents(totalSeconds) { const dayFactor = getFactorForAlarmUnit('days'); const hourFactor = getFactorForAlarmUnit('hours'); const minuteFactor = getFactorForAlarmUnit('minutes'); const isNegative = totalSeconds < 0; totalSeconds = Math.abs(totalSeconds); let dayPart = Math.floor(totalSeconds / dayFactor); const hourPart = totalSeconds % dayFactor; if (hourPart !== 0) { if (isNegative) { dayPart++; } } let amount = 0; let unit = null; if (dayPart === 0) { unit = 'days'; } else if (dayPart % 7 === 0) { amount = dayPart / 7; unit = 'weeks'; } else { amount = dayPart; unit = 'days'; } let hours = Math.floor(hourPart / hourFactor); const minutePart = hourPart % hourFactor; let minutes = Math.floor(minutePart / minuteFactor); if (isNegative) { hours = 24 - hours; if (minutes !== 0) { hours--; minutes = 60 - minutes; } } return { amount, unit, hours, minutes }; } /** * Get the total amount of seconds for all-day events * * @param {number} amount amount of unit * @param {number} hours Time of reminder * @param {number} minutes Time of reminder * @param {string} unit days/weeks * @return {number} */ function getTotalSecondsFromAmountHourMinutesAndUnitForAllDayEvents(amount, hours, minutes, unit) { if (unit === 'weeks') { amount *= 7; unit = 'days'; } // 0 is on the same day of the all-day event => positive // 1 ... n before the event is negative const isNegative = amount > 0; if (isNegative) { // If it's negative, we need to subtract one day amount--; // Convert days to seconds amount *= getFactorForAlarmUnit(unit); let invertedHours = 24 - hours; let invertedMinutes = 0; if (minutes !== 0) { invertedHours--; invertedMinutes = 60 - minutes; } amount += invertedHours * getFactorForAlarmUnit('hours'); amount += invertedMinutes * getFactorForAlarmUnit('minutes'); amount *= -1; } else { // Convert days to seconds amount *= getFactorForAlarmUnit('days'); amount += hours * getFactorForAlarmUnit('hours'); amount += minutes * getFactorForAlarmUnit('minutes'); } return amount; } /** * Propagate data from an event component to all EMAIL alarm components. * An alarm component must contain a description, summary and all attendees to be notified. * We don't have a separate UI for maintaining attendees of an alarm, so we just copy them from the event. * * https://www.rfc-editor.org/rfc/rfc5545#section-3.6.6 * * @param {AbstractRecurringComponent} eventComponent */ function updateAlarms(eventComponent) { for (const alarmComponent of eventComponent.getAlarmIterator()) { if (alarmComponent.action !== 'EMAIL' && alarmComponent.action !== 'DISPLAY') { continue; } alarmComponent.deleteAllProperties('SUMMARY'); const summaryProperty = eventComponent.getFirstProperty('SUMMARY'); if (summaryProperty) { alarmComponent.addProperty(summaryProperty.clone()); } else { const defaultSummary = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__.translate)('calendar', 'Untitled event'); alarmComponent.addProperty(new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.Property('SUMMARY', defaultSummary)); } if (!alarmComponent.hasProperty('DESCRIPTION')) { const defaultDescription = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__.translate)('calendar', 'This is an event reminder.'); alarmComponent.addProperty(new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.Property('DESCRIPTION', defaultDescription)); } alarmComponent.deleteAllProperties('ATTENDEE'); for (const attendee of eventComponent.getAttendeeIterator()) { if (['RESOURCE', 'ROOM'].includes(attendee.userType)) { continue; } // Only copy the email address (value) of the attendee alarmComponent.addProperty(new _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.AttendeeProperty('ATTENDEE', attendee.value)); } } } /***/ }), /***/ "./src/utils/attendee.js": /*!*******************************!*\ !*** ./src/utils/attendee.js ***! \*******************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ addMailtoPrefix: () => (/* binding */ addMailtoPrefix), /* harmony export */ organizerDisplayName: () => (/* binding */ organizerDisplayName), /* harmony export */ removeMailtoPrefix: () => (/* binding */ removeMailtoPrefix) /* harmony export */ }); /** * @copyright Copyright (c) 2021 Richard Steinmetz * * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Remove the mailto prefix from a URI and return it * * @param {string} uri URI to remove the prefix from * @return {string} URI without a mailto prefix */ function removeMailtoPrefix(uri) { if (typeof uri !== 'string') { return ''; } if (uri.startsWith('mailto:')) { return uri.slice(7); } return uri; } /** * Add the mailto prefix to a URI if it doesn't have one yet and return it * * @param {string} uri URI to add the prefix to * @return {string} URI with a mailto prefix */ function addMailtoPrefix(uri) { if (typeof uri !== 'string') { return 'mailto:'; } if (uri.startsWith('mailto:')) { return uri; } return "mailto:".concat(uri); } /** * Get the display name of an organizer * * @param {?object} organizer Organizer object to extract a display name from * @return {string} Display name of given organizer */ function organizerDisplayName(organizer) { if (!organizer) { return ''; } if (organizer.commonName) { return organizer.commonName; } return removeMailtoPrefix(organizer.uri); } /***/ }), /***/ "./src/utils/calendarObject.js": /*!*************************************!*\ !*** ./src/utils/calendarObject.js ***! \*************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getAllObjectsInTimeRange: () => (/* binding */ getAllObjectsInTimeRange), /* harmony export */ getObjectAtRecurrenceId: () => (/* binding */ getObjectAtRecurrenceId) /* harmony export */ }); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Get all recurrence-items in given range * * @param {object} calendarObject Calendar-object model * @param {Date} start Begin of time-range * @param {Date} end End of time-range * @return {Array} */ const getAllObjectsInTimeRange = (calendarObject, start, end) => { const iterator = calendarObject.calendarComponent.getVObjectIterator(); const firstVObject = iterator.next().value; if (!firstVObject) { return []; } const s = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DateTimeValue.fromJSDate(start, true); const e = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DateTimeValue.fromJSDate(end, true); return firstVObject.recurrenceManager.getAllOccurrencesBetween(s, e); }; /** * Get recurrence-item at exactly a given recurrence-Id * * @param {object} calendarObject Calendar-object model * @param {Date} recurrenceId RecurrenceId to retrieve * @return {AbstractRecurringComponent|null} */ const getObjectAtRecurrenceId = (calendarObject, recurrenceId) => { const iterator = calendarObject.calendarComponent.getVObjectIterator(); const firstVObject = iterator.next().value; if (!firstVObject) { return null; } const d = _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.DateTimeValue.fromJSDate(recurrenceId, true); return firstVObject.recurrenceManager.getOccurrenceAtExactly(d); }; /***/ }), /***/ "./src/utils/closestColor.js": /*!***********************************!*\ !*** ./src/utils/closestColor.js ***! \***********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ closestColor) /* harmony export */ }); /* harmony import */ var css_color_names__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! css-color-names */ "./node_modules/css-color-names/css-color-names.json"); /* harmony import */ var lodash_sortBy_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/sortBy.js */ "./node_modules/lodash/sortBy.js"); /* harmony import */ var lodash_sortBy_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_sortBy_js__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var lodash_pick_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash/pick.js */ "./node_modules/lodash/pick.js"); /* harmony import */ var lodash_pick_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_pick_js__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var lodash_uniqBy_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash/uniqBy.js */ "./node_modules/lodash/uniqBy.js"); /* harmony import */ var lodash_uniqBy_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_uniqBy_js__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var color_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! color-string */ "./node_modules/color-string/index.js"); /* harmony import */ var color_string__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(color_string__WEBPACK_IMPORTED_MODULE_4__); /** * @copyright Copyright (c) 2023 Richard Steinmetz * * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ // Code was taken from: // - https://github.com/juliuste/closest-css-color // - https://github.com/gausie/colour-proximity // - https://github.com/gausie/colour-proximity/pull/3 const uniqColorKeys = lodash_uniqBy_js__WEBPACK_IMPORTED_MODULE_3___default()(Object.keys(css_color_names__WEBPACK_IMPORTED_MODULE_0__), c => css_color_names__WEBPACK_IMPORTED_MODULE_0__[c]); const filteredColors = lodash_pick_js__WEBPACK_IMPORTED_MODULE_2___default()(css_color_names__WEBPACK_IMPORTED_MODULE_0__, uniqColorKeys); const colors = lodash_sortBy_js__WEBPACK_IMPORTED_MODULE_1___default()(Object.keys(filteredColors).map(name => ({ name, hex: filteredColors[name] })), c => c.hex); const defaults = { detailed: false }; /** * Find the closest CSS color to a given hex color. * * Adapted from https://github.com/juliuste/closest-css-color * * Copyright (c) 2021, Julius Tens * * Permission to use, copy, modify, and/or distribute this software for any purpose with or without * fee is hereby granted, provided that the above copyright notice and this permission notice * appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS * SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. * * @param {string} hex Hex color string * @param {object} opt Options * @param {boolean=} opt.detailed Return color object instead of just the name * @return {string|{name: string, hex: string}} Closest color name or object */ function closestColor(hex) { let opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; const options = { ...defaults, ...opt }; const sortedColors = lodash_sortBy_js__WEBPACK_IMPORTED_MODULE_1___default()(colors, c => proximity(hex, c.hex)); if (options.detailed) { return sortedColors[0]; } return sortedColors[0].name; } /** * Calculate the proximity between two colors. * * Adapted from https://github.com/gausie/colour-proximity * * Copyright (c) 2013, Samuel Gaus * * @param {string} s1 Hex color string 1 * @param {string} s2 Hex color string 2 * @return {number} */ function proximity(s1, s2) { const c1 = rgb2lab(color_string__WEBPACK_IMPORTED_MODULE_4__.get.rgb(s1)); const c2 = rgb2lab(color_string__WEBPACK_IMPORTED_MODULE_4__.get.rgb(s2)); return Math.sqrt(Math.pow(c1[0] - c2[0], 2) + Math.pow(c1[1] - c2[1], 2) + Math.pow(c1[2] - c2[2], 2)); } /** * Adapted from https://github.com/gausie/colour-proximity * * Copyright (c) 2013, Samuel Gaus * * @param {number[]} input RGB array */ function rgb2lab(input) { // This code is adapted from various functions at http://www.easyrgb.com/index.php?X=MATH const rgb = [0, 0, 0]; const xyz = [0, 0, 0]; const Lab = [0, 0, 0]; for (let i = 0; i < input.length; i++) { let value = input[i] / 255; if (value > 0.04045) { value = Math.pow((value + 0.055) / 1.055, 2.4); } else { value = value / 12.92; } rgb[i] = value * 100; } xyz[0] = (rgb[0] * 0.4124 + rgb[1] * 0.3576 + rgb[2] * 0.1805) / 95.047; // ref_X = 95.047 Observer= 2°, Illuminant= D65 xyz[1] = (rgb[0] * 0.2126 + rgb[1] * 0.7152 + rgb[2] * 0.0722) / 100.0; // ref_Y = 100.000 xyz[2] = (rgb[0] * 0.0193 + rgb[1] * 0.1192 + rgb[2] * 0.9505) / 108.883; // ref_Z = 108.883 for (let i = 0; i < 3; i++) { let value = xyz[i]; if (value > 0.008856) { value = Math.pow(value, 1 / 3); } else { value = 7.787 * value + 16 / 116; } xyz[i] = value; } Lab[0] = parseFloat((116 * xyz[1] - 16).toFixed(3)); Lab[1] = parseFloat((500 * (xyz[0] - xyz[1])).toFixed(3)); Lab[2] = parseFloat((200 * (xyz[1] - xyz[2])).toFixed(3)); return Lab; } /***/ }), /***/ "./src/utils/color.js": /*!****************************!*\ !*** ./src/utils/color.js ***! \****************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ detectColor: () => (/* binding */ detectColor), /* harmony export */ generateTextColorForHex: () => (/* binding */ generateTextColorForHex), /* harmony export */ generateTextColorForRGB: () => (/* binding */ generateTextColorForRGB), /* harmony export */ getClosestCSS3ColorNameForHex: () => (/* binding */ getClosestCSS3ColorNameForHex), /* harmony export */ getHexForColorName: () => (/* binding */ getHexForColorName), /* harmony export */ hexToRGB: () => (/* binding */ hexToRGB), /* harmony export */ isLight: () => (/* binding */ isLight), /* harmony export */ uidToHexColor: () => (/* binding */ uidToHexColor) /* harmony export */ }); /* harmony import */ var color_convert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! color-convert */ "./node_modules/color-convert/index.js"); /* harmony import */ var color_convert__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(color_convert__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _uidToColor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./uidToColor.js */ "./src/utils/uidToColor.js"); /* harmony import */ var css_color_names__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! css-color-names */ "./node_modules/css-color-names/css-color-names.json"); /* harmony import */ var _closestColor_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./closestColor.js */ "./src/utils/closestColor.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Detect if a color is light or dark * * @param {object} data The destructuring object * @param {number} data.red Red part of the RGB * @param {number} data.green Green part of the RGB * @param {number} data.blue Blue part of the RGB * @return {boolean} true if color is light, false if color is dark */ function isLight(_ref) { let { red, green, blue } = _ref; const brightness = (red * 299 + green * 587 + blue * 114) / 1000; return brightness > 130; } /** * Get a text-color that's readable on a given background color * * @param {string} hexColor The hex color to get a text color for * @return {string} the matching text color */ function generateTextColorForHex(hexColor) { return generateTextColorForRGB(hexToRGB(hexColor)); } /** * Get a text-color that's readable on a given background color * * @param {object} data The destructuring object * @param {number} data.red Red part of the RGB * @param {number} data.green Green part of the RGB * @param {number} data.blue Blue part of the RGB * @return {string} */ function generateTextColorForRGB(_ref2) { let { red, green, blue } = _ref2; return isLight({ red, green, blue }) ? '#000000' : '#FAFAFA'; } /** * Convert hex string to RGB * * @param {string} hexColor The hex color to convert * @return {string} the RGB result */ function hexToRGB(hexColor) { if (hexColor == null) { return { red: 0, green: 0, blue: 0 }; } const [red, green, blue] = color_convert__WEBPACK_IMPORTED_MODULE_0___default().hex.rgb(hexColor.slice(1)); return { red, green, blue }; } /** * Generates a hex color based on RGB string * * @param {string} uid The string to generate a color from * @return {string} The hex color */ function uidToHexColor(uid) { const color = (0,_uidToColor_js__WEBPACK_IMPORTED_MODULE_1__.uidToColor)(uid); return '#' + color_convert__WEBPACK_IMPORTED_MODULE_0___default().rgb.hex(color.r, color.g, color.b); } /** * Detects a color from a given string * * @param {string} color The color to get the real RGB hex string from * @return {string|boolean|*} String if color detected, boolean if not */ function detectColor(color) { if (/^(#)((?:[A-Fa-f0-9]{3}){1,2})$/.test(color)) { // #ff00ff and #f0f return color; } else if (/^((?:[A-Fa-f0-9]{3}){1,2})$/.test(color)) { // ff00ff and f0f return '#' + color; } else if (/^(#)((?:[A-Fa-f0-9]{8}))$/.test(color)) { // #ff00ffff and #f0ff return color.slice(0, 7); } else if (/^((?:[A-Fa-f0-9]{8}))$/.test(color)) { // ff00ffff and f0ff return '#' + color.slice(0, 6); } return false; } /** * Gets the HEX code for a css3 color name * * @param {string} colorName The name of the css3 color * @return {string | null} string of HEX if valid color, null if not */ function getHexForColorName(colorName) { return css_color_names__WEBPACK_IMPORTED_MODULE_2__[colorName] || null; } /** * Gets the closest css3 color name for a given HEX code * * @param {string} hex The HEX code to get a css3 color name for * @return {string} */ function getClosestCSS3ColorNameForHex(hex) { return (0,_closestColor_js__WEBPACK_IMPORTED_MODULE_3__["default"])(hex); } /***/ }), /***/ "./src/utils/date.js": /*!***************************!*\ !*** ./src/utils/date.js ***! \***************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ dateFactory: () => (/* binding */ dateFactory), /* harmony export */ getDateFromDateTimeValue: () => (/* binding */ getDateFromDateTimeValue), /* harmony export */ getDateFromFirstdayParam: () => (/* binding */ getDateFromFirstdayParam), /* harmony export */ getUnixTimestampFromDate: () => (/* binding */ getUnixTimestampFromDate), /* harmony export */ getYYYYMMDDFromDate: () => (/* binding */ getYYYYMMDDFromDate), /* harmony export */ getYYYYMMDDFromFirstdayParam: () => (/* binding */ getYYYYMMDDFromFirstdayParam), /* harmony export */ modifyDate: () => (/* binding */ modifyDate) /* harmony export */ }); /* harmony import */ var _logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./logger.js */ "./src/utils/logger.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * returns a new Date object * * @return {Date} */ function dateFactory() { return new Date(); } /** * formats a Date object as YYYYMMDD * * @param {Date} date Date to format * @return {string} */ function getYYYYMMDDFromDate(date) { return new Date(date.getTime() - date.getTimezoneOffset() * 60000).toISOString().split('T')[0]; } /** * get unix time from date object * * @param {Date} date Date to format * @return {number} */ function getUnixTimestampFromDate(date) { return Math.floor(date.getTime() / 1000); } /** * Gets a Date-object based on the firstday param used in routes * * @param {string} firstDayParam The firstday param from the router * @return {Date} */ function getDateFromFirstdayParam(firstDayParam) { if (firstDayParam === 'now') { return dateFactory(); } const [year, month, date] = firstDayParam.split('-').map(str => parseInt(str, 10)); if (Number.isNaN(year) || Number.isNaN(month) || Number.isNaN(date)) { _logger_js__WEBPACK_IMPORTED_MODULE_0__["default"].error('First day parameter contains non-numerical components, falling back to today'); return dateFactory(); } const dateObject = dateFactory(); dateObject.setFullYear(year, month - 1, date); dateObject.setHours(0, 0, 0, 0); return dateObject; } /** * formats firstday param as YYYYMMDD * * @param {string} firstDayParam The firstday param from the router * @return {string} */ function getYYYYMMDDFromFirstdayParam(firstDayParam) { if (firstDayParam === 'now') { return getYYYYMMDDFromDate(dateFactory()); } return firstDayParam; } /** * Gets a date object based on the given DateTimeValue * Ignores given timezone-information * * @param {DateTimeValue} dateTimeValue Value to get date from * @return {Date} */ function getDateFromDateTimeValue(dateTimeValue) { return new Date(dateTimeValue.year, dateTimeValue.month - 1, dateTimeValue.day, dateTimeValue.hour, dateTimeValue.minute, 0, 0); } /** * modifies a date * * @param {Date} date Date object to modify * @param {object} data The destructuring object * @param {number} data.day Number of days to add * @param {number} data.week Number of weeks to add * @param {number} data.month Number of months to add * @param data.year * @return {Date} */ function modifyDate(date, _ref) { let { day = 0, week = 0, month = 0, year = 0 } = _ref; date = new Date(date.getTime()); date.setDate(date.getDate() + day); date.setDate(date.getDate() + week * 7); date.setMonth(date.getMonth() + month); date.setFullYear(date.getFullYear() + year); return date; } /***/ }), /***/ "./src/utils/freebusy.js": /*!*******************************!*\ !*** ./src/utils/freebusy.js ***! \*******************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ doFreeBusyRequest: () => (/* binding */ doFreeBusyRequest), /* harmony export */ getColorForFBType: () => (/* binding */ getColorForFBType) /* harmony export */ }); /* harmony import */ var _nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/calendar-js */ "./node_modules/@nextcloud/calendar-js/dist/index.es.mjs"); /* harmony import */ var _services_caldavService_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/caldavService.js */ "./src/services/caldavService.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Gets the corresponding color for a given Free/Busy type * * @param {string} type The type of the FreeBusy property * @return {string} */ function getColorForFBType() { let type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'BUSY'; switch (type) { case 'FREE': return 'rgba(255,255,255,0)'; case 'BUSY-TENTATIVE': return 'rgba(184,129,0,0.3)'; case 'BUSY': return 'rgba(217,24,18,0.3)'; case 'BUSY-UNAVAILABLE': return 'rgba(219,219,219)'; default: return 'rgba(0,113,173,0.3)'; } } // TODO: Tuple types (mixed array) will be added in jsdoc 4 /* eslint-disable jsdoc/valid-types */ /** * Generator that yields tuples of an attendee property and the corresponding free busy property * Only yields tuples where the attendee is actually blocked * * @generator * @param {DateTimeValue} start Start date * @param {DateTimeValue} end End date * @param {AttendeeProperty} organizer The organizer whose scheduling outbox to use * @param {AttendeeProperty[]} attendees Attendees to request the free busy times from * @yields {[AttendeeProperty, FreeBusyProperty]} Tuples of attendee property and free busy property where the attendee is blocked * @return {AsyncGenerator<[AttendeeProperty, FreeBusyProperty], void, void>} Generator that yields tuples of attendee property and free busy property where the attendee is blocked */ async function* doFreeBusyRequest(start, end, organizer, attendees) { const freeBusyComponent = (0,_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.createFreeBusyRequest)(start, end, organizer, attendees); const freeBusyICS = freeBusyComponent.toICS(); const outbox = await (0,_services_caldavService_js__WEBPACK_IMPORTED_MODULE_1__.findSchedulingOutbox)(); const freeBusyData = await outbox.freeBusyRequest(freeBusyICS); for (const [, data] of Object.entries(freeBusyData)) { if (!data.success) { continue; } const parserManager = (0,_nextcloud_calendar_js__WEBPACK_IMPORTED_MODULE_0__.getParserManager)(); const parser = parserManager.getParserForFileType('text/calendar'); parser.parse(data.calendarData); // TODO: fix me upstream, parser only exports VEVENT, VJOURNAL and VTODO at the moment const calendarComponent = parser._calendarComponent; const freeBusyComponent = calendarComponent.getFirstComponent('VFREEBUSY'); if (!freeBusyComponent) { continue; } for (const attendeeProperty of freeBusyComponent.getPropertyIterator('ATTENDEE')) { for (const freeBusyProperty of freeBusyComponent.getPropertyIterator('FREEBUSY')) { if (freeBusyProperty.type === 'FREE') { // We care about anything BUT free slots continue; } yield [attendeeProperty, freeBusyProperty]; } } } } /* eslint-disable jsdoc/valid-types */ /***/ }), /***/ "./src/utils/localization.js": /*!***********************************!*\ !*** ./src/utils/localization.js ***! \***********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getLangConfigForVue2DatePicker: () => (/* binding */ getLangConfigForVue2DatePicker) /* harmony export */ }); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Maps a moment locale to a vue2-datepicker locale * * See https://github.com/mengxiong10/vue2-datepicker/blob/master/locale.md * * @param {string} momentLocale Name of the moment locale * @return {object} The vue2-datepicker lang object */ const getLangConfigForVue2DatePicker = momentLocale => { const dateFormat = _nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"].localeData(momentLocale).longDateFormat('L').toUpperCase(); return { formatLocale: { months: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__.getMonthNames)(), monthsShort: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__.getMonthNamesShort)(), weekdays: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__.getDayNames)(), weekdaysShort: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__.getDayNamesShort)(), weekdaysMin: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__.getDayNamesMin)(), firstDayOfWeek: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_1__.getFirstDay)(), firstWeekContainsDate: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"].localeData(momentLocale).firstDayOfYear(), meridiem: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"].localeData(momentLocale).meridiem, meridiemParse: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"].localeData(momentLocale).meridiemParse, isPM: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_0__["default"].localeData(momentLocale).isPM }, yearFormat: 'YYYY', monthFormat: 'MMM', monthBeforeYear: dateFormat.indexOf('M') < dateFormat.indexOf('Y') }; }; /***/ }), /***/ "./src/utils/logger.js": /*!*****************************!*\ !*** ./src/utils/logger.js ***! \*****************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ logDebug: () => (/* binding */ logDebug), /* harmony export */ logError: () => (/* binding */ logError), /* harmony export */ logFatal: () => (/* binding */ logFatal), /* harmony export */ logInfo: () => (/* binding */ logInfo), /* harmony export */ logWarn: () => (/* binding */ logWarn) /* harmony export */ }); /* harmony import */ var _nextcloud_logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/logger */ "./node_modules/@nextcloud/logger/dist/index.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ const logger = (0,_nextcloud_logger__WEBPACK_IMPORTED_MODULE_0__.getLoggerBuilder)().setApp('calendar').detectUser().build(); /** * Logs a debug message * * @param {string} message The message to log * @param {object=} context Additional context if needed */ const logDebug = function (message) { let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; logger.debug(message, context); }; /** * Logs an error message * * @param {string} message The message to log * @param {object=} context Additional context if needed */ const logError = function (message) { let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; logger.error(message, context); }; /** * Logs a fatal message * * @param {string} message The message to log * @param {object=} context Additional context if needed */ const logFatal = function (message) { let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; logger.fatal(message, context); }; /** * Logs an info message * * @param {string} message The message to log * @param {object=} context Additional context if needed */ const logInfo = function (message) { let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; logger.info(message, context); }; /** * Logs a warn message * * @param {string} message The message to log * @param {object=} context Additional context if needed */ const logWarn = function (message) { let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; logger.warn(message, context); }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (logger); /***/ }), /***/ "./src/utils/moment.js": /*!*****************************!*\ !*** ./src/utils/moment.js ***! \*****************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ loadMomentLocalization) /* harmony export */ }); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.mjs"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @copyright Copyright (c) 2018 John Molakvoæ * * @author Georg Ehrke * * @author John Molakvoæ * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * * @return {Promise} */ async function loadMomentLocalization() { const locale = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.getLocale)().replace('_', '-').toLowerCase(); const language = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.getLanguage)().replace('_', '-').toLowerCase(); if (locale === language) { return getLocaleFor(locale); } const [realLocale, realLanguage] = await Promise.all([getLocaleFor(locale), getLocaleFor(language)]); if (realLocale === realLanguage) { return realLocale; } const name = "nextcloud-calendar-fake-locale-".concat(realLocale, "-").concat(realLanguage); _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"].defineLocale(name, { parentLocale: realLanguage, longDateFormat: { LT: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"].localeData(realLocale).longDateFormat('LT'), LTS: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"].localeData(realLocale).longDateFormat('LTS'), L: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"].localeData(realLocale).longDateFormat('L'), LL: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"].localeData(realLocale).longDateFormat('LL'), LLL: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"].localeData(realLocale).longDateFormat('LLL'), LLLL: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"].localeData(realLocale).longDateFormat('LLLL'), l: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"].localeData(realLocale).longDateFormat('l'), ll: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"].localeData(realLocale).longDateFormat('ll'), lll: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"].localeData(realLocale).longDateFormat('lll'), llll: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"].localeData(realLocale).longDateFormat('llll') }, week: { dow: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.getFirstDay)(), doy: _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__["default"].localeData(realLocale).firstDayOfYear() } }); return name; } /** * Dynamically loads the requested locale and returns the actually loaded locale * * @param {string} locale Name of locale to load * @return {Promise} */ async function getLocaleFor(locale) { // IMPORTANT: Keep each '/moment/local/...' string as is. Otherwise, webpack might not bundle // locale data because the contentRegExp fails to detect any files. try { // default load e.g. en-de await __webpack_require__("./node_modules/moment/locale lazy recursive ^\\.\\/.*\\.js$")("./".concat(locale, ".js")); return locale; } catch (error) { const splitLocale = locale.split('-'); try { // failure: fallback to first part of locale, which // should be language locale = splitLocale[0]; await __webpack_require__("./node_modules/moment/locale lazy recursive ^\\.\\/.*\\.js$")("./".concat(locale, ".js")); return locale; } catch (e) { // failure, fallback to english console.debug('Fallback to locale', 'en'); // English is the default locale and doesn't need to imported. // It is already included in moment.js. } } return 'en'; } /***/ }), /***/ "./src/utils/randomId.js": /*!*******************************!*\ !*** ./src/utils/randomId.js ***! \*******************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ randomId: () => (/* binding */ randomId) /* harmony export */ }); /** * @copyright Copyright (c) 2021 Richard Steinmetz * * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Generate a random hex id to use with vue components. * * WARNING: This method does not use a secure random generator and isn't suited for * cryptographic purposes. * * @return {string} A random hex id */ function randomId() { return Math.random().toString(16).slice(2); } /***/ }), /***/ "./src/utils/recurrence.js": /*!*********************************!*\ !*** ./src/utils/recurrence.js ***! \*********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getBySetPositionAndBySetFromDate: () => (/* binding */ getBySetPositionAndBySetFromDate), /* harmony export */ getWeekDayFromDate: () => (/* binding */ getWeekDayFromDate) /* harmony export */ }); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Gets the ByDay and BySetPosition * * @param {Date} jsDate The date to get the weekday of * @return {object} */ function getBySetPositionAndBySetFromDate(jsDate) { const byDay = getWeekDayFromDate(jsDate); let bySetPosition = 1; let dayOfMonth = jsDate.getDate(); for (; dayOfMonth > 7; dayOfMonth -= 7) { bySetPosition++; } return { byDay, bySetPosition }; } /** * Gets the string-representation of the weekday of a given date * * @param {Date} jsDate The date to get the weekday of * @return {string} */ function getWeekDayFromDate(jsDate) { switch (jsDate.getDay()) { case 0: return 'SU'; case 1: return 'MO'; case 2: return 'TU'; case 3: return 'WE'; case 4: return 'TH'; case 5: return 'FR'; case 6: return 'SA'; default: throw TypeError('Invalid date-object given'); } } /***/ }), /***/ "./src/utils/router.js": /*!*****************************!*\ !*** ./src/utils/router.js ***! \*****************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getDefaultEndDateForNewEvent: () => (/* binding */ getDefaultEndDateForNewEvent), /* harmony export */ getDefaultStartDateForNewEvent: () => (/* binding */ getDefaultStartDateForNewEvent), /* harmony export */ getInitialView: () => (/* binding */ getInitialView), /* harmony export */ getPreferredEditorRoute: () => (/* binding */ getPreferredEditorRoute), /* harmony export */ getPrefixedRoute: () => (/* binding */ getPrefixedRoute), /* harmony export */ isPublicOrEmbeddedRoute: () => (/* binding */ isPublicOrEmbeddedRoute) /* harmony export */ }); /* harmony import */ var _nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/initial-state */ "./node_modules/@nextcloud/initial-state/dist/index.es.mjs"); /* harmony import */ var _date_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./date.js */ "./src/utils/date.js"); /** * @copyright Copyright (c) 2020 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Gets the initial view * * @return {string} */ function getInitialView() { try { return (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_0__.loadState)('calendar', 'initial_view'); } catch (error) { return 'dayGridMonth'; } } /** * Gets the preferred editor view * * @return {string} Either popover or sidebar */ function getPreferredEditorRoute() { let skipPopover; try { skipPopover = (0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_0__.loadState)('calendar', 'skip_popover'); } catch (error) { skipPopover = false; } // Don't show the popover if the window size is too small (less then its max width of 450 px + a bit) // The mobile breakpoint of the reworked modals is 1024 px / 2 so simply use that. if (window.innerWidth <= 1024 / 2) { skipPopover = true; } return skipPopover ? 'sidebar' : 'popover'; } /** * Gets the default start-date for a new event * * @return {string} */ function getDefaultStartDateForNewEvent() { const start = (0,_date_js__WEBPACK_IMPORTED_MODULE_1__.dateFactory)(); start.setHours(start.getHours() + Math.ceil(start.getMinutes() / 60)); start.setMinutes(0); return String((0,_date_js__WEBPACK_IMPORTED_MODULE_1__.getUnixTimestampFromDate)(start)); } /** * Gets the default end-date for a new event * * @return {string} */ function getDefaultEndDateForNewEvent() { // When we have a setting for default event duration, // this needs to be taken into consideration here const start = getDefaultStartDateForNewEvent(); const end = new Date(Number(start) * 1000); end.setHours(end.getHours() + 1); return String((0,_date_js__WEBPACK_IMPORTED_MODULE_1__.getUnixTimestampFromDate)(end)); } /** * Prefixes a desired route name based on the current route * * @param {string} currentRouteName The name of the current route * @param {string} toRouteName The name of the desired route * @return {string} */ function getPrefixedRoute(currentRouteName, toRouteName) { if (currentRouteName.startsWith('Embed')) { return 'Embed' + toRouteName; } if (currentRouteName.startsWith('Public')) { return 'Public' + toRouteName; } return toRouteName; } /** * Checks whether a routeName represents a public / embedded route * * @param {string} routeName Name of the route * @return {boolean} */ function isPublicOrEmbeddedRoute(routeName) { return routeName.startsWith('Embed') || routeName.startsWith('Public'); } /***/ }), /***/ "./src/utils/settings.js": /*!*******************************!*\ !*** ./src/utils/settings.js ***! \*******************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getLinkToConfig: () => (/* binding */ getLinkToConfig) /* harmony export */ }); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Get URL to modify config-key * * @param {string} key URL of config-key to modify * @return {string} */ function getLinkToConfig(key) { return [(0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_0__.linkTo)('calendar', 'index.php'), 'v1/config', key].join('/'); } /***/ }), /***/ "./src/utils/uidToColor.js": /*!*********************************!*\ !*** ./src/utils/uidToColor.js ***! \*********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ uidToColor: () => (/* binding */ uidToColor) /* harmony export */ }); /* harmony import */ var md5__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! md5 */ "./node_modules/md5/md5.js"); /* harmony import */ var md5__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(md5__WEBPACK_IMPORTED_MODULE_0__); /** * @copyright Copyright (c) 2018 John Molakvoæ * * @author John Molakvoæ * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * This is copied from nextcloud-vue for now, until it is exposed upstream. */ const uidToColor = uid => { // Normalize hash let hash = uid.toLowerCase(); // Already a md5 hash? if (hash.match(/^([0-9a-f]{4}-?){8}$/) === null) { hash = md5__WEBPACK_IMPORTED_MODULE_0___default()(hash); } hash = hash.replace(/[^0-9a-f]/g, ''); const steps = 6; const finalPalette = GenColors(steps); /** * Convert a string to an integer evenly * * @param {string} hash The string to convert * @param {number} maximum The maximum value * @return {number} The integer calculated */ function hashToInt(hash, maximum) { let finalInt = 0; const result = []; // Splitting evenly the string for (let i = 0; i < hash.length; i++) { // chars in md5 goes up to f, hex:16 result.push(parseInt(hash.charAt(i), 16) % 16); } // Adds up all results for (const j in result) { finalInt += result[j]; } // chars in md5 goes up to f, hex:16 // make sure we're always using int in our operation return parseInt(parseInt(finalInt, 10) % maximum, 10); } return finalPalette[hashToInt(hash, steps * 3)]; }; /** * Color object * * @param {number} r The red value * @param {number} g The green value * @param {number} b The blue value */ function Color(r, g, b) { this.r = r; this.g = g; this.b = b; } /** * Calculate the number of steps * * @param {number} steps The number of steps * @param {Array} ends The ends * @return {Array} Array containing the number of steps per color */ function stepCalc(steps, ends) { const step = new Array(3); step[0] = (ends[1].r - ends[0].r) / steps; step[1] = (ends[1].g - ends[0].g) / steps; step[2] = (ends[1].b - ends[0].b) / steps; return step; } /** * Create a color palette from two colors * * @param {number} steps The number of steps the palette has * @param {string} color1 The first color * @param {string} color2 The second color * @return {Array} The created palette array */ function mixPalette(steps, color1, color2) { const palette = []; palette.push(color1); const step = stepCalc(steps, [color1, color2]); for (let i = 1; i < steps; i++) { const r = parseInt(color1.r + step[0] * i, 10); const g = parseInt(color1.g + step[1] * i, 10); const b = parseInt(color1.b + step[2] * i, 10); palette.push(new Color(r, g, b)); } return palette; } /** * Generate colors from the official nextcloud color * You can provide how many colors you want (multiplied by 3) * if step = 6 * 3 colors * 6 will result in 18 generated colors * * @param {number} [steps] Number of steps to go from a color to another * @return {object[]} */ function GenColors(steps) { if (!steps) { steps = 6; } const red = new Color(182, 70, 157); const yellow = new Color(221, 203, 85); const blue = new Color(0, 130, 201); // Nextcloud blue const palette1 = mixPalette(steps, red, yellow); const palette2 = mixPalette(steps, yellow, blue); const palette3 = mixPalette(steps, blue, red); return palette1.concat(palette2).concat(palette3); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uidToColor); /***/ }), /***/ "./src/utils/url.js": /*!**************************!*\ !*** ./src/utils/url.js ***! \**************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ urldecode: () => (/* binding */ urldecode) /* harmony export */ }); /** * @copyright Copyright (c) 2021 Richard Steinmetz * * @author Richard Steinmetz * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ /** * Works like urldecode() from php * * @see https://www.php.net/manual/en/function.urldecode.php * @param {string} url The url to be decoded * @return {string} The decoded url */ function urldecode(url) { return decodeURIComponent(url.replace(/\+/g, ' ')); } /***/ }), /***/ "./node_modules/base64-js/index.js": /*!*****************************************!*\ !*** ./node_modules/base64-js/index.js ***! \*****************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; exports.byteLength = byteLength exports.toByteArray = toByteArray exports.fromByteArray = fromByteArray var lookup = [] var revLookup = [] var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' for (var i = 0, len = code.length; i < len; ++i) { lookup[i] = code[i] revLookup[code.charCodeAt(i)] = i } // Support decoding URL-safe base64 strings, as Node.js does. // See: https://en.wikipedia.org/wiki/Base64#URL_applications revLookup['-'.charCodeAt(0)] = 62 revLookup['_'.charCodeAt(0)] = 63 function getLens (b64) { var len = b64.length if (len % 4 > 0) { throw new Error('Invalid string. Length must be a multiple of 4') } // Trim off extra bytes after placeholder bytes are found // See: https://github.com/beatgammit/base64-js/issues/42 var validLen = b64.indexOf('=') if (validLen === -1) validLen = len var placeHoldersLen = validLen === len ? 0 : 4 - (validLen % 4) return [validLen, placeHoldersLen] } // base64 is 4/3 + up to two characters of the original data function byteLength (b64) { var lens = getLens(b64) var validLen = lens[0] var placeHoldersLen = lens[1] return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen } function _byteLength (b64, validLen, placeHoldersLen) { return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen } function toByteArray (b64) { var tmp var lens = getLens(b64) var validLen = lens[0] var placeHoldersLen = lens[1] var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) var curByte = 0 // if there are placeholders, only get up to the last complete 4 chars var len = placeHoldersLen > 0 ? validLen - 4 : validLen var i for (i = 0; i < len; i += 4) { tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] arr[curByte++] = (tmp >> 16) & 0xFF arr[curByte++] = (tmp >> 8) & 0xFF arr[curByte++] = tmp & 0xFF } if (placeHoldersLen === 2) { tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) arr[curByte++] = tmp & 0xFF } if (placeHoldersLen === 1) { tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) arr[curByte++] = (tmp >> 8) & 0xFF arr[curByte++] = tmp & 0xFF } return arr } function tripletToBase64 (num) { return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] } function encodeChunk (uint8, start, end) { var tmp var output = [] for (var i = start; i < end; i += 3) { tmp = ((uint8[i] << 16) & 0xFF0000) + ((uint8[i + 1] << 8) & 0xFF00) + (uint8[i + 2] & 0xFF) output.push(tripletToBase64(tmp)) } return output.join('') } function fromByteArray (uint8) { var tmp var len = uint8.length var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes var parts = [] var maxChunkLength = 16383 // must be multiple of 3 // go through the array every three bytes, we'll deal with trailing stuff later for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) } // pad the end with zeros, but make sure to not forget the extra bytes if (extraBytes === 1) { tmp = uint8[len - 1] parts.push( lookup[tmp >> 2] + lookup[(tmp << 4) & 0x3F] + '==' ) } else if (extraBytes === 2) { tmp = (uint8[len - 2] << 8) + uint8[len - 1] parts.push( lookup[tmp >> 10] + lookup[(tmp >> 4) & 0x3F] + lookup[(tmp << 2) & 0x3F] + '=' ) } return parts.join('') } /***/ }), /***/ "./node_modules/buffer/index.js": /*!**************************************!*\ !*** ./node_modules/buffer/index.js ***! \**************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; /*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT */ /* eslint-disable no-proto */ const base64 = __webpack_require__(/*! base64-js */ "./node_modules/base64-js/index.js") const ieee754 = __webpack_require__(/*! ieee754 */ "./node_modules/ieee754/index.js") const customInspectSymbol = (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation : null exports.Buffer = Buffer exports.SlowBuffer = SlowBuffer exports.INSPECT_MAX_BYTES = 50 const K_MAX_LENGTH = 0x7fffffff exports.kMaxLength = K_MAX_LENGTH /** * If `Buffer.TYPED_ARRAY_SUPPORT`: * === true Use Uint8Array implementation (fastest) * === false Print warning and recommend using `buffer` v4.x which has an Object * implementation (most compatible, even IE6) * * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, * Opera 11.6+, iOS 4.2+. * * We report that the browser does not support typed arrays if the are not subclassable * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support * for __proto__ and has a buggy typed array implementation. */ Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && typeof console.error === 'function') { console.error( 'This browser lacks typed array (Uint8Array) support which is required by ' + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' ) } function typedArraySupport () { // Can typed array instances can be augmented? try { const arr = new Uint8Array(1) const proto = { foo: function () { return 42 } } Object.setPrototypeOf(proto, Uint8Array.prototype) Object.setPrototypeOf(arr, proto) return arr.foo() === 42 } catch (e) { return false } } Object.defineProperty(Buffer.prototype, 'parent', { enumerable: true, get: function () { if (!Buffer.isBuffer(this)) return undefined return this.buffer } }) Object.defineProperty(Buffer.prototype, 'offset', { enumerable: true, get: function () { if (!Buffer.isBuffer(this)) return undefined return this.byteOffset } }) function createBuffer (length) { if (length > K_MAX_LENGTH) { throw new RangeError('The value "' + length + '" is invalid for option "size"') } // Return an augmented `Uint8Array` instance const buf = new Uint8Array(length) Object.setPrototypeOf(buf, Buffer.prototype) return buf } /** * The Buffer constructor returns instances of `Uint8Array` that have their * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of * `Uint8Array`, so the returned instances will have all the node `Buffer` methods * and the `Uint8Array` methods. Square bracket notation works as expected -- it * returns a single octet. * * The `Uint8Array` prototype remains unmodified. */ function Buffer (arg, encodingOrOffset, length) { // Common case. if (typeof arg === 'number') { if (typeof encodingOrOffset === 'string') { throw new TypeError( 'The "string" argument must be of type string. Received type number' ) } return allocUnsafe(arg) } return from(arg, encodingOrOffset, length) } Buffer.poolSize = 8192 // not used by this implementation function from (value, encodingOrOffset, length) { if (typeof value === 'string') { return fromString(value, encodingOrOffset) } if (ArrayBuffer.isView(value)) { return fromArrayView(value) } if (value == null) { throw new TypeError( 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + (typeof value) ) } if (isInstance(value, ArrayBuffer) || (value && isInstance(value.buffer, ArrayBuffer))) { return fromArrayBuffer(value, encodingOrOffset, length) } if (typeof SharedArrayBuffer !== 'undefined' && (isInstance(value, SharedArrayBuffer) || (value && isInstance(value.buffer, SharedArrayBuffer)))) { return fromArrayBuffer(value, encodingOrOffset, length) } if (typeof value === 'number') { throw new TypeError( 'The "value" argument must not be of type number. Received type number' ) } const valueOf = value.valueOf && value.valueOf() if (valueOf != null && valueOf !== value) { return Buffer.from(valueOf, encodingOrOffset, length) } const b = fromObject(value) if (b) return b if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === 'function') { return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length) } throw new TypeError( 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + (typeof value) ) } /** * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError * if value is a number. * Buffer.from(str[, encoding]) * Buffer.from(array) * Buffer.from(buffer) * Buffer.from(arrayBuffer[, byteOffset[, length]]) **/ Buffer.from = function (value, encodingOrOffset, length) { return from(value, encodingOrOffset, length) } // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: // https://github.com/feross/buffer/pull/148 Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype) Object.setPrototypeOf(Buffer, Uint8Array) function assertSize (size) { if (typeof size !== 'number') { throw new TypeError('"size" argument must be of type number') } else if (size < 0) { throw new RangeError('The value "' + size + '" is invalid for option "size"') } } function alloc (size, fill, encoding) { assertSize(size) if (size <= 0) { return createBuffer(size) } if (fill !== undefined) { // Only pay attention to encoding if it's a string. This // prevents accidentally sending in a number that would // be interpreted as a start offset. return typeof encoding === 'string' ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill) } return createBuffer(size) } /** * Creates a new filled Buffer instance. * alloc(size[, fill[, encoding]]) **/ Buffer.alloc = function (size, fill, encoding) { return alloc(size, fill, encoding) } function allocUnsafe (size) { assertSize(size) return createBuffer(size < 0 ? 0 : checked(size) | 0) } /** * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. * */ Buffer.allocUnsafe = function (size) { return allocUnsafe(size) } /** * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. */ Buffer.allocUnsafeSlow = function (size) { return allocUnsafe(size) } function fromString (string, encoding) { if (typeof encoding !== 'string' || encoding === '') { encoding = 'utf8' } if (!Buffer.isEncoding(encoding)) { throw new TypeError('Unknown encoding: ' + encoding) } const length = byteLength(string, encoding) | 0 let buf = createBuffer(length) const actual = buf.write(string, encoding) if (actual !== length) { // Writing a hex string, for example, that contains invalid characters will // cause everything after the first invalid character to be ignored. (e.g. // 'abxxcd' will be treated as 'ab') buf = buf.slice(0, actual) } return buf } function fromArrayLike (array) { const length = array.length < 0 ? 0 : checked(array.length) | 0 const buf = createBuffer(length) for (let i = 0; i < length; i += 1) { buf[i] = array[i] & 255 } return buf } function fromArrayView (arrayView) { if (isInstance(arrayView, Uint8Array)) { const copy = new Uint8Array(arrayView) return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength) } return fromArrayLike(arrayView) } function fromArrayBuffer (array, byteOffset, length) { if (byteOffset < 0 || array.byteLength < byteOffset) { throw new RangeError('"offset" is outside of buffer bounds') } if (array.byteLength < byteOffset + (length || 0)) { throw new RangeError('"length" is outside of buffer bounds') } let buf if (byteOffset === undefined && length === undefined) { buf = new Uint8Array(array) } else if (length === undefined) { buf = new Uint8Array(array, byteOffset) } else { buf = new Uint8Array(array, byteOffset, length) } // Return an augmented `Uint8Array` instance Object.setPrototypeOf(buf, Buffer.prototype) return buf } function fromObject (obj) { if (Buffer.isBuffer(obj)) { const len = checked(obj.length) | 0 const buf = createBuffer(len) if (buf.length === 0) { return buf } obj.copy(buf, 0, 0, len) return buf } if (obj.length !== undefined) { if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { return createBuffer(0) } return fromArrayLike(obj) } if (obj.type === 'Buffer' && Array.isArray(obj.data)) { return fromArrayLike(obj.data) } } function checked (length) { // Note: cannot use `length < K_MAX_LENGTH` here because that fails when // length is NaN (which is otherwise coerced to zero.) if (length >= K_MAX_LENGTH) { throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') } return length | 0 } function SlowBuffer (length) { if (+length != length) { // eslint-disable-line eqeqeq length = 0 } return Buffer.alloc(+length) } Buffer.isBuffer = function isBuffer (b) { return b != null && b._isBuffer === true && b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false } Buffer.compare = function compare (a, b) { if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { throw new TypeError( 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' ) } if (a === b) return 0 let x = a.length let y = b.length for (let i = 0, len = Math.min(x, y); i < len; ++i) { if (a[i] !== b[i]) { x = a[i] y = b[i] break } } if (x < y) return -1 if (y < x) return 1 return 0 } Buffer.isEncoding = function isEncoding (encoding) { switch (String(encoding).toLowerCase()) { case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'latin1': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return true default: return false } } Buffer.concat = function concat (list, length) { if (!Array.isArray(list)) { throw new TypeError('"list" argument must be an Array of Buffers') } if (list.length === 0) { return Buffer.alloc(0) } let i if (length === undefined) { length = 0 for (i = 0; i < list.length; ++i) { length += list[i].length } } const buffer = Buffer.allocUnsafe(length) let pos = 0 for (i = 0; i < list.length; ++i) { let buf = list[i] if (isInstance(buf, Uint8Array)) { if (pos + buf.length > buffer.length) { if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) buf.copy(buffer, pos) } else { Uint8Array.prototype.set.call( buffer, buf, pos ) } } else if (!Buffer.isBuffer(buf)) { throw new TypeError('"list" argument must be an Array of Buffers') } else { buf.copy(buffer, pos) } pos += buf.length } return buffer } function byteLength (string, encoding) { if (Buffer.isBuffer(string)) { return string.length } if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { return string.byteLength } if (typeof string !== 'string') { throw new TypeError( 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + 'Received type ' + typeof string ) } const len = string.length const mustMatch = (arguments.length > 2 && arguments[2] === true) if (!mustMatch && len === 0) return 0 // Use a for loop to avoid recursion let loweredCase = false for (;;) { switch (encoding) { case 'ascii': case 'latin1': case 'binary': return len case 'utf8': case 'utf-8': return utf8ToBytes(string).length case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return len * 2 case 'hex': return len >>> 1 case 'base64': return base64ToBytes(string).length default: if (loweredCase) { return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 } encoding = ('' + encoding).toLowerCase() loweredCase = true } } } Buffer.byteLength = byteLength function slowToString (encoding, start, end) { let loweredCase = false // No need to verify that "this.length <= MAX_UINT32" since it's a read-only // property of a typed array. // This behaves neither like String nor Uint8Array in that we set start/end // to their upper/lower bounds if the value passed is out of range. // undefined is handled specially as per ECMA-262 6th Edition, // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. if (start === undefined || start < 0) { start = 0 } // Return early if start > this.length. Done here to prevent potential uint32 // coercion fail below. if (start > this.length) { return '' } if (end === undefined || end > this.length) { end = this.length } if (end <= 0) { return '' } // Force coercion to uint32. This will also coerce falsey/NaN values to 0. end >>>= 0 start >>>= 0 if (end <= start) { return '' } if (!encoding) encoding = 'utf8' while (true) { switch (encoding) { case 'hex': return hexSlice(this, start, end) case 'utf8': case 'utf-8': return utf8Slice(this, start, end) case 'ascii': return asciiSlice(this, start, end) case 'latin1': case 'binary': return latin1Slice(this, start, end) case 'base64': return base64Slice(this, start, end) case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return utf16leSlice(this, start, end) default: if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) encoding = (encoding + '').toLowerCase() loweredCase = true } } } // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) // to detect a Buffer instance. It's not possible to use `instanceof Buffer` // reliably in a browserify context because there could be multiple different // copies of the 'buffer' package in use. This method works even for Buffer // instances that were created from another copy of the `buffer` package. // See: https://github.com/feross/buffer/issues/154 Buffer.prototype._isBuffer = true function swap (b, n, m) { const i = b[n] b[n] = b[m] b[m] = i } Buffer.prototype.swap16 = function swap16 () { const len = this.length if (len % 2 !== 0) { throw new RangeError('Buffer size must be a multiple of 16-bits') } for (let i = 0; i < len; i += 2) { swap(this, i, i + 1) } return this } Buffer.prototype.swap32 = function swap32 () { const len = this.length if (len % 4 !== 0) { throw new RangeError('Buffer size must be a multiple of 32-bits') } for (let i = 0; i < len; i += 4) { swap(this, i, i + 3) swap(this, i + 1, i + 2) } return this } Buffer.prototype.swap64 = function swap64 () { const len = this.length if (len % 8 !== 0) { throw new RangeError('Buffer size must be a multiple of 64-bits') } for (let i = 0; i < len; i += 8) { swap(this, i, i + 7) swap(this, i + 1, i + 6) swap(this, i + 2, i + 5) swap(this, i + 3, i + 4) } return this } Buffer.prototype.toString = function toString () { const length = this.length if (length === 0) return '' if (arguments.length === 0) return utf8Slice(this, 0, length) return slowToString.apply(this, arguments) } Buffer.prototype.toLocaleString = Buffer.prototype.toString Buffer.prototype.equals = function equals (b) { if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') if (this === b) return true return Buffer.compare(this, b) === 0 } Buffer.prototype.inspect = function inspect () { let str = '' const max = exports.INSPECT_MAX_BYTES str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() if (this.length > max) str += ' ... ' return '' } if (customInspectSymbol) { Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect } Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { if (isInstance(target, Uint8Array)) { target = Buffer.from(target, target.offset, target.byteLength) } if (!Buffer.isBuffer(target)) { throw new TypeError( 'The "target" argument must be one of type Buffer or Uint8Array. ' + 'Received type ' + (typeof target) ) } if (start === undefined) { start = 0 } if (end === undefined) { end = target ? target.length : 0 } if (thisStart === undefined) { thisStart = 0 } if (thisEnd === undefined) { thisEnd = this.length } if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { throw new RangeError('out of range index') } if (thisStart >= thisEnd && start >= end) { return 0 } if (thisStart >= thisEnd) { return -1 } if (start >= end) { return 1 } start >>>= 0 end >>>= 0 thisStart >>>= 0 thisEnd >>>= 0 if (this === target) return 0 let x = thisEnd - thisStart let y = end - start const len = Math.min(x, y) const thisCopy = this.slice(thisStart, thisEnd) const targetCopy = target.slice(start, end) for (let i = 0; i < len; ++i) { if (thisCopy[i] !== targetCopy[i]) { x = thisCopy[i] y = targetCopy[i] break } } if (x < y) return -1 if (y < x) return 1 return 0 } // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, // OR the last index of `val` in `buffer` at offset <= `byteOffset`. // // Arguments: // - buffer - a Buffer to search // - val - a string, Buffer, or number // - byteOffset - an index into `buffer`; will be clamped to an int32 // - encoding - an optional encoding, relevant is val is a string // - dir - true for indexOf, false for lastIndexOf function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { // Empty buffer means no match if (buffer.length === 0) return -1 // Normalize byteOffset if (typeof byteOffset === 'string') { encoding = byteOffset byteOffset = 0 } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff } else if (byteOffset < -0x80000000) { byteOffset = -0x80000000 } byteOffset = +byteOffset // Coerce to Number. if (numberIsNaN(byteOffset)) { // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer byteOffset = dir ? 0 : (buffer.length - 1) } // Normalize byteOffset: negative offsets start from the end of the buffer if (byteOffset < 0) byteOffset = buffer.length + byteOffset if (byteOffset >= buffer.length) { if (dir) return -1 else byteOffset = buffer.length - 1 } else if (byteOffset < 0) { if (dir) byteOffset = 0 else return -1 } // Normalize val if (typeof val === 'string') { val = Buffer.from(val, encoding) } // Finally, search either indexOf (if dir is true) or lastIndexOf if (Buffer.isBuffer(val)) { // Special case: looking for empty string/buffer always fails if (val.length === 0) { return -1 } return arrayIndexOf(buffer, val, byteOffset, encoding, dir) } else if (typeof val === 'number') { val = val & 0xFF // Search for a byte value [0-255] if (typeof Uint8Array.prototype.indexOf === 'function') { if (dir) { return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) } else { return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) } } return arrayIndexOf(buffer, [val], byteOffset, encoding, dir) } throw new TypeError('val must be string, number or Buffer') } function arrayIndexOf (arr, val, byteOffset, encoding, dir) { let indexSize = 1 let arrLength = arr.length let valLength = val.length if (encoding !== undefined) { encoding = String(encoding).toLowerCase() if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') { if (arr.length < 2 || val.length < 2) { return -1 } indexSize = 2 arrLength /= 2 valLength /= 2 byteOffset /= 2 } } function read (buf, i) { if (indexSize === 1) { return buf[i] } else { return buf.readUInt16BE(i * indexSize) } } let i if (dir) { let foundIndex = -1 for (i = byteOffset; i < arrLength; i++) { if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { if (foundIndex === -1) foundIndex = i if (i - foundIndex + 1 === valLength) return foundIndex * indexSize } else { if (foundIndex !== -1) i -= i - foundIndex foundIndex = -1 } } } else { if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength for (i = byteOffset; i >= 0; i--) { let found = true for (let j = 0; j < valLength; j++) { if (read(arr, i + j) !== read(val, j)) { found = false break } } if (found) return i } } return -1 } Buffer.prototype.includes = function includes (val, byteOffset, encoding) { return this.indexOf(val, byteOffset, encoding) !== -1 } Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, true) } Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, false) } function hexWrite (buf, string, offset, length) { offset = Number(offset) || 0 const remaining = buf.length - offset if (!length) { length = remaining } else { length = Number(length) if (length > remaining) { length = remaining } } const strLen = string.length if (length > strLen / 2) { length = strLen / 2 } let i for (i = 0; i < length; ++i) { const parsed = parseInt(string.substr(i * 2, 2), 16) if (numberIsNaN(parsed)) return i buf[offset + i] = parsed } return i } function utf8Write (buf, string, offset, length) { return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) } function asciiWrite (buf, string, offset, length) { return blitBuffer(asciiToBytes(string), buf, offset, length) } function base64Write (buf, string, offset, length) { return blitBuffer(base64ToBytes(string), buf, offset, length) } function ucs2Write (buf, string, offset, length) { return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) } Buffer.prototype.write = function write (string, offset, length, encoding) { // Buffer#write(string) if (offset === undefined) { encoding = 'utf8' length = this.length offset = 0 // Buffer#write(string, encoding) } else if (length === undefined && typeof offset === 'string') { encoding = offset length = this.length offset = 0 // Buffer#write(string, offset[, length][, encoding]) } else if (isFinite(offset)) { offset = offset >>> 0 if (isFinite(length)) { length = length >>> 0 if (encoding === undefined) encoding = 'utf8' } else { encoding = length length = undefined } } else { throw new Error( 'Buffer.write(string, encoding, offset[, length]) is no longer supported' ) } const remaining = this.length - offset if (length === undefined || length > remaining) length = remaining if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { throw new RangeError('Attempt to write outside buffer bounds') } if (!encoding) encoding = 'utf8' let loweredCase = false for (;;) { switch (encoding) { case 'hex': return hexWrite(this, string, offset, length) case 'utf8': case 'utf-8': return utf8Write(this, string, offset, length) case 'ascii': case 'latin1': case 'binary': return asciiWrite(this, string, offset, length) case 'base64': // Warning: maxLength not taken into account in base64Write return base64Write(this, string, offset, length) case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return ucs2Write(this, string, offset, length) default: if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) encoding = ('' + encoding).toLowerCase() loweredCase = true } } } Buffer.prototype.toJSON = function toJSON () { return { type: 'Buffer', data: Array.prototype.slice.call(this._arr || this, 0) } } function base64Slice (buf, start, end) { if (start === 0 && end === buf.length) { return base64.fromByteArray(buf) } else { return base64.fromByteArray(buf.slice(start, end)) } } function utf8Slice (buf, start, end) { end = Math.min(buf.length, end) const res = [] let i = start while (i < end) { const firstByte = buf[i] let codePoint = null let bytesPerSequence = (firstByte > 0xEF) ? 4 : (firstByte > 0xDF) ? 3 : (firstByte > 0xBF) ? 2 : 1 if (i + bytesPerSequence <= end) { let secondByte, thirdByte, fourthByte, tempCodePoint switch (bytesPerSequence) { case 1: if (firstByte < 0x80) { codePoint = firstByte } break case 2: secondByte = buf[i + 1] if ((secondByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) if (tempCodePoint > 0x7F) { codePoint = tempCodePoint } } break case 3: secondByte = buf[i + 1] thirdByte = buf[i + 2] if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { codePoint = tempCodePoint } } break case 4: secondByte = buf[i + 1] thirdByte = buf[i + 2] fourthByte = buf[i + 3] if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { codePoint = tempCodePoint } } } } if (codePoint === null) { // we did not generate a valid codePoint so insert a // replacement char (U+FFFD) and advance only 1 byte codePoint = 0xFFFD bytesPerSequence = 1 } else if (codePoint > 0xFFFF) { // encode to utf16 (surrogate pair dance) codePoint -= 0x10000 res.push(codePoint >>> 10 & 0x3FF | 0xD800) codePoint = 0xDC00 | codePoint & 0x3FF } res.push(codePoint) i += bytesPerSequence } return decodeCodePointsArray(res) } // Based on http://stackoverflow.com/a/22747272/680742, the browser with // the lowest limit is Chrome, with 0x10000 args. // We go 1 magnitude less, for safety const MAX_ARGUMENTS_LENGTH = 0x1000 function decodeCodePointsArray (codePoints) { const len = codePoints.length if (len <= MAX_ARGUMENTS_LENGTH) { return String.fromCharCode.apply(String, codePoints) // avoid extra slice() } // Decode in chunks to avoid "call stack size exceeded". let res = '' let i = 0 while (i < len) { res += String.fromCharCode.apply( String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) ) } return res } function asciiSlice (buf, start, end) { let ret = '' end = Math.min(buf.length, end) for (let i = start; i < end; ++i) { ret += String.fromCharCode(buf[i] & 0x7F) } return ret } function latin1Slice (buf, start, end) { let ret = '' end = Math.min(buf.length, end) for (let i = start; i < end; ++i) { ret += String.fromCharCode(buf[i]) } return ret } function hexSlice (buf, start, end) { const len = buf.length if (!start || start < 0) start = 0 if (!end || end < 0 || end > len) end = len let out = '' for (let i = start; i < end; ++i) { out += hexSliceLookupTable[buf[i]] } return out } function utf16leSlice (buf, start, end) { const bytes = buf.slice(start, end) let res = '' // If bytes.length is odd, the last 8 bits must be ignored (same as node.js) for (let i = 0; i < bytes.length - 1; i += 2) { res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) } return res } Buffer.prototype.slice = function slice (start, end) { const len = this.length start = ~~start end = end === undefined ? len : ~~end if (start < 0) { start += len if (start < 0) start = 0 } else if (start > len) { start = len } if (end < 0) { end += len if (end < 0) end = 0 } else if (end > len) { end = len } if (end < start) end = start const newBuf = this.subarray(start, end) // Return an augmented `Uint8Array` instance Object.setPrototypeOf(newBuf, Buffer.prototype) return newBuf } /* * Need to make sure that buffer isn't trying to write out of bounds. */ function checkOffset (offset, ext, length) { if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') } Buffer.prototype.readUintLE = Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) checkOffset(offset, byteLength, this.length) let val = this[offset] let mul = 1 let i = 0 while (++i < byteLength && (mul *= 0x100)) { val += this[offset + i] * mul } return val } Buffer.prototype.readUintBE = Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) { checkOffset(offset, byteLength, this.length) } let val = this[offset + --byteLength] let mul = 1 while (byteLength > 0 && (mul *= 0x100)) { val += this[offset + --byteLength] * mul } return val } Buffer.prototype.readUint8 = Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 1, this.length) return this[offset] } Buffer.prototype.readUint16LE = Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 2, this.length) return this[offset] | (this[offset + 1] << 8) } Buffer.prototype.readUint16BE = Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 2, this.length) return (this[offset] << 8) | this[offset + 1] } Buffer.prototype.readUint32LE = Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return ((this[offset]) | (this[offset + 1] << 8) | (this[offset + 2] << 16)) + (this[offset + 3] * 0x1000000) } Buffer.prototype.readUint32BE = Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset] * 0x1000000) + ((this[offset + 1] << 16) | (this[offset + 2] << 8) | this[offset + 3]) } Buffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) { offset = offset >>> 0 validateNumber(offset, 'offset') const first = this[offset] const last = this[offset + 7] if (first === undefined || last === undefined) { boundsError(offset, this.length - 8) } const lo = first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24 const hi = this[++offset] + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + last * 2 ** 24 return BigInt(lo) + (BigInt(hi) << BigInt(32)) }) Buffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) { offset = offset >>> 0 validateNumber(offset, 'offset') const first = this[offset] const last = this[offset + 7] if (first === undefined || last === undefined) { boundsError(offset, this.length - 8) } const hi = first * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset] const lo = this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last return (BigInt(hi) << BigInt(32)) + BigInt(lo) }) Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) checkOffset(offset, byteLength, this.length) let val = this[offset] let mul = 1 let i = 0 while (++i < byteLength && (mul *= 0x100)) { val += this[offset + i] * mul } mul *= 0x80 if (val >= mul) val -= Math.pow(2, 8 * byteLength) return val } Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) checkOffset(offset, byteLength, this.length) let i = byteLength let mul = 1 let val = this[offset + --i] while (i > 0 && (mul *= 0x100)) { val += this[offset + --i] * mul } mul *= 0x80 if (val >= mul) val -= Math.pow(2, 8 * byteLength) return val } Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 1, this.length) if (!(this[offset] & 0x80)) return (this[offset]) return ((0xff - this[offset] + 1) * -1) } Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 2, this.length) const val = this[offset] | (this[offset + 1] << 8) return (val & 0x8000) ? val | 0xFFFF0000 : val } Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 2, this.length) const val = this[offset + 1] | (this[offset] << 8) return (val & 0x8000) ? val | 0xFFFF0000 : val } Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset]) | (this[offset + 1] << 8) | (this[offset + 2] << 16) | (this[offset + 3] << 24) } Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset] << 24) | (this[offset + 1] << 16) | (this[offset + 2] << 8) | (this[offset + 3]) } Buffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) { offset = offset >>> 0 validateNumber(offset, 'offset') const first = this[offset] const last = this[offset + 7] if (first === undefined || last === undefined) { boundsError(offset, this.length - 8) } const val = this[offset + 4] + this[offset + 5] * 2 ** 8 + this[offset + 6] * 2 ** 16 + (last << 24) // Overflow return (BigInt(val) << BigInt(32)) + BigInt(first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24) }) Buffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) { offset = offset >>> 0 validateNumber(offset, 'offset') const first = this[offset] const last = this[offset + 7] if (first === undefined || last === undefined) { boundsError(offset, this.length - 8) } const val = (first << 24) + // Overflow this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset] return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last) }) Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return ieee754.read(this, offset, true, 23, 4) } Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return ieee754.read(this, offset, false, 23, 4) } Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 8, this.length) return ieee754.read(this, offset, true, 52, 8) } Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 8, this.length) return ieee754.read(this, offset, false, 52, 8) } function checkInt (buf, value, offset, ext, max, min) { if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') if (offset + ext > buf.length) throw new RangeError('Index out of range') } Buffer.prototype.writeUintLE = Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { value = +value offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) { const maxBytes = Math.pow(2, 8 * byteLength) - 1 checkInt(this, value, offset, byteLength, maxBytes, 0) } let mul = 1 let i = 0 this[offset] = value & 0xFF while (++i < byteLength && (mul *= 0x100)) { this[offset + i] = (value / mul) & 0xFF } return offset + byteLength } Buffer.prototype.writeUintBE = Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { value = +value offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) { const maxBytes = Math.pow(2, 8 * byteLength) - 1 checkInt(this, value, offset, byteLength, maxBytes, 0) } let i = byteLength - 1 let mul = 1 this[offset + i] = value & 0xFF while (--i >= 0 && (mul *= 0x100)) { this[offset + i] = (value / mul) & 0xFF } return offset + byteLength } Buffer.prototype.writeUint8 = Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) this[offset] = (value & 0xff) return offset + 1 } Buffer.prototype.writeUint16LE = Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) return offset + 2 } Buffer.prototype.writeUint16BE = Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) this[offset] = (value >>> 8) this[offset + 1] = (value & 0xff) return offset + 2 } Buffer.prototype.writeUint32LE = Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) this[offset + 3] = (value >>> 24) this[offset + 2] = (value >>> 16) this[offset + 1] = (value >>> 8) this[offset] = (value & 0xff) return offset + 4 } Buffer.prototype.writeUint32BE = Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) this[offset] = (value >>> 24) this[offset + 1] = (value >>> 16) this[offset + 2] = (value >>> 8) this[offset + 3] = (value & 0xff) return offset + 4 } function wrtBigUInt64LE (buf, value, offset, min, max) { checkIntBI(value, min, max, buf, offset, 7) let lo = Number(value & BigInt(0xffffffff)) buf[offset++] = lo lo = lo >> 8 buf[offset++] = lo lo = lo >> 8 buf[offset++] = lo lo = lo >> 8 buf[offset++] = lo let hi = Number(value >> BigInt(32) & BigInt(0xffffffff)) buf[offset++] = hi hi = hi >> 8 buf[offset++] = hi hi = hi >> 8 buf[offset++] = hi hi = hi >> 8 buf[offset++] = hi return offset } function wrtBigUInt64BE (buf, value, offset, min, max) { checkIntBI(value, min, max, buf, offset, 7) let lo = Number(value & BigInt(0xffffffff)) buf[offset + 7] = lo lo = lo >> 8 buf[offset + 6] = lo lo = lo >> 8 buf[offset + 5] = lo lo = lo >> 8 buf[offset + 4] = lo let hi = Number(value >> BigInt(32) & BigInt(0xffffffff)) buf[offset + 3] = hi hi = hi >> 8 buf[offset + 2] = hi hi = hi >> 8 buf[offset + 1] = hi hi = hi >> 8 buf[offset] = hi return offset + 8 } Buffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) { return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff')) }) Buffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) { return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff')) }) Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) { const limit = Math.pow(2, (8 * byteLength) - 1) checkInt(this, value, offset, byteLength, limit - 1, -limit) } let i = 0 let mul = 1 let sub = 0 this[offset] = value & 0xFF while (++i < byteLength && (mul *= 0x100)) { if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { sub = 1 } this[offset + i] = ((value / mul) >> 0) - sub & 0xFF } return offset + byteLength } Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) { const limit = Math.pow(2, (8 * byteLength) - 1) checkInt(this, value, offset, byteLength, limit - 1, -limit) } let i = byteLength - 1 let mul = 1 let sub = 0 this[offset + i] = value & 0xFF while (--i >= 0 && (mul *= 0x100)) { if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { sub = 1 } this[offset + i] = ((value / mul) >> 0) - sub & 0xFF } return offset + byteLength } Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) if (value < 0) value = 0xff + value + 1 this[offset] = (value & 0xff) return offset + 1 } Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) return offset + 2 } Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) this[offset] = (value >>> 8) this[offset + 1] = (value & 0xff) return offset + 2 } Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) this[offset + 2] = (value >>> 16) this[offset + 3] = (value >>> 24) return offset + 4 } Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) if (value < 0) value = 0xffffffff + value + 1 this[offset] = (value >>> 24) this[offset + 1] = (value >>> 16) this[offset + 2] = (value >>> 8) this[offset + 3] = (value & 0xff) return offset + 4 } Buffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) { return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff')) }) Buffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) { return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff')) }) function checkIEEE754 (buf, value, offset, ext, max, min) { if (offset + ext > buf.length) throw new RangeError('Index out of range') if (offset < 0) throw new RangeError('Index out of range') } function writeFloat (buf, value, offset, littleEndian, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) { checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) } ieee754.write(buf, value, offset, littleEndian, 23, 4) return offset + 4 } Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { return writeFloat(this, value, offset, true, noAssert) } Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { return writeFloat(this, value, offset, false, noAssert) } function writeDouble (buf, value, offset, littleEndian, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) { checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) } ieee754.write(buf, value, offset, littleEndian, 52, 8) return offset + 8 } Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { return writeDouble(this, value, offset, true, noAssert) } Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { return writeDouble(this, value, offset, false, noAssert) } // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) Buffer.prototype.copy = function copy (target, targetStart, start, end) { if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') if (!start) start = 0 if (!end && end !== 0) end = this.length if (targetStart >= target.length) targetStart = target.length if (!targetStart) targetStart = 0 if (end > 0 && end < start) end = start // Copy 0 bytes; we're done if (end === start) return 0 if (target.length === 0 || this.length === 0) return 0 // Fatal error conditions if (targetStart < 0) { throw new RangeError('targetStart out of bounds') } if (start < 0 || start >= this.length) throw new RangeError('Index out of range') if (end < 0) throw new RangeError('sourceEnd out of bounds') // Are we oob? if (end > this.length) end = this.length if (target.length - targetStart < end - start) { end = target.length - targetStart + start } const len = end - start if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { // Use built-in when available, missing from IE11 this.copyWithin(targetStart, start, end) } else { Uint8Array.prototype.set.call( target, this.subarray(start, end), targetStart ) } return len } // Usage: // buffer.fill(number[, offset[, end]]) // buffer.fill(buffer[, offset[, end]]) // buffer.fill(string[, offset[, end]][, encoding]) Buffer.prototype.fill = function fill (val, start, end, encoding) { // Handle string cases: if (typeof val === 'string') { if (typeof start === 'string') { encoding = start start = 0 end = this.length } else if (typeof end === 'string') { encoding = end end = this.length } if (encoding !== undefined && typeof encoding !== 'string') { throw new TypeError('encoding must be a string') } if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { throw new TypeError('Unknown encoding: ' + encoding) } if (val.length === 1) { const code = val.charCodeAt(0) if ((encoding === 'utf8' && code < 128) || encoding === 'latin1') { // Fast path: If `val` fits into a single byte, use that numeric value. val = code } } } else if (typeof val === 'number') { val = val & 255 } else if (typeof val === 'boolean') { val = Number(val) } // Invalid ranges are not set to a default, so can range check early. if (start < 0 || this.length < start || this.length < end) { throw new RangeError('Out of range index') } if (end <= start) { return this } start = start >>> 0 end = end === undefined ? this.length : end >>> 0 if (!val) val = 0 let i if (typeof val === 'number') { for (i = start; i < end; ++i) { this[i] = val } } else { const bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding) const len = bytes.length if (len === 0) { throw new TypeError('The value "' + val + '" is invalid for argument "value"') } for (i = 0; i < end - start; ++i) { this[i + start] = bytes[i % len] } } return this } // CUSTOM ERRORS // ============= // Simplified versions from Node, changed for Buffer-only usage const errors = {} function E (sym, getMessage, Base) { errors[sym] = class NodeError extends Base { constructor () { super() Object.defineProperty(this, 'message', { value: getMessage.apply(this, arguments), writable: true, configurable: true }) // Add the error code to the name to include it in the stack trace. this.name = `${this.name} [${sym}]` // Access the stack to generate the error message including the error code // from the name. this.stack // eslint-disable-line no-unused-expressions // Reset the name to the actual name. delete this.name } get code () { return sym } set code (value) { Object.defineProperty(this, 'code', { configurable: true, enumerable: true, value, writable: true }) } toString () { return `${this.name} [${sym}]: ${this.message}` } } } E('ERR_BUFFER_OUT_OF_BOUNDS', function (name) { if (name) { return `${name} is outside of buffer bounds` } return 'Attempt to access memory outside buffer bounds' }, RangeError) E('ERR_INVALID_ARG_TYPE', function (name, actual) { return `The "${name}" argument must be of type number. Received type ${typeof actual}` }, TypeError) E('ERR_OUT_OF_RANGE', function (str, range, input) { let msg = `The value of "${str}" is out of range.` let received = input if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) { received = addNumericalSeparator(String(input)) } else if (typeof input === 'bigint') { received = String(input) if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) { received = addNumericalSeparator(received) } received += 'n' } msg += ` It must be ${range}. Received ${received}` return msg }, RangeError) function addNumericalSeparator (val) { let res = '' let i = val.length const start = val[0] === '-' ? 1 : 0 for (; i >= start + 4; i -= 3) { res = `_${val.slice(i - 3, i)}${res}` } return `${val.slice(0, i)}${res}` } // CHECK FUNCTIONS // =============== function checkBounds (buf, offset, byteLength) { validateNumber(offset, 'offset') if (buf[offset] === undefined || buf[offset + byteLength] === undefined) { boundsError(offset, buf.length - (byteLength + 1)) } } function checkIntBI (value, min, max, buf, offset, byteLength) { if (value > max || value < min) { const n = typeof min === 'bigint' ? 'n' : '' let range if (byteLength > 3) { if (min === 0 || min === BigInt(0)) { range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}` } else { range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` + `${(byteLength + 1) * 8 - 1}${n}` } } else { range = `>= ${min}${n} and <= ${max}${n}` } throw new errors.ERR_OUT_OF_RANGE('value', range, value) } checkBounds(buf, offset, byteLength) } function validateNumber (value, name) { if (typeof value !== 'number') { throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value) } } function boundsError (value, length, type) { if (Math.floor(value) !== value) { validateNumber(value, type) throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value) } if (length < 0) { throw new errors.ERR_BUFFER_OUT_OF_BOUNDS() } throw new errors.ERR_OUT_OF_RANGE(type || 'offset', `>= ${type ? 1 : 0} and <= ${length}`, value) } // HELPER FUNCTIONS // ================ const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g function base64clean (str) { // Node takes equal signs as end of the Base64 encoding str = str.split('=')[0] // Node strips out invalid characters like \n and \t from the string, base64-js does not str = str.trim().replace(INVALID_BASE64_RE, '') // Node converts strings with length < 2 to '' if (str.length < 2) return '' // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not while (str.length % 4 !== 0) { str = str + '=' } return str } function utf8ToBytes (string, units) { units = units || Infinity let codePoint const length = string.length let leadSurrogate = null const bytes = [] for (let i = 0; i < length; ++i) { codePoint = string.charCodeAt(i) // is surrogate component if (codePoint > 0xD7FF && codePoint < 0xE000) { // last char was a lead if (!leadSurrogate) { // no lead yet if (codePoint > 0xDBFF) { // unexpected trail if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) continue } else if (i + 1 === length) { // unpaired lead if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) continue } // valid lead leadSurrogate = codePoint continue } // 2 leads in a row if (codePoint < 0xDC00) { if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) leadSurrogate = codePoint continue } // valid surrogate pair codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 } else if (leadSurrogate) { // valid bmp char, but last char was a lead if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) } leadSurrogate = null // encode utf8 if (codePoint < 0x80) { if ((units -= 1) < 0) break bytes.push(codePoint) } else if (codePoint < 0x800) { if ((units -= 2) < 0) break bytes.push( codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80 ) } else if (codePoint < 0x10000) { if ((units -= 3) < 0) break bytes.push( codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80 ) } else if (codePoint < 0x110000) { if ((units -= 4) < 0) break bytes.push( codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80 ) } else { throw new Error('Invalid code point') } } return bytes } function asciiToBytes (str) { const byteArray = [] for (let i = 0; i < str.length; ++i) { // Node's code seems to be doing this and not & 0x7F.. byteArray.push(str.charCodeAt(i) & 0xFF) } return byteArray } function utf16leToBytes (str, units) { let c, hi, lo const byteArray = [] for (let i = 0; i < str.length; ++i) { if ((units -= 2) < 0) break c = str.charCodeAt(i) hi = c >> 8 lo = c % 256 byteArray.push(lo) byteArray.push(hi) } return byteArray } function base64ToBytes (str) { return base64.toByteArray(base64clean(str)) } function blitBuffer (src, dst, offset, length) { let i for (i = 0; i < length; ++i) { if ((i + offset >= dst.length) || (i >= src.length)) break dst[i + offset] = src[i] } return i } // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass // the `instanceof` check but they should be treated as of that type. // See: https://github.com/feross/buffer/issues/166 function isInstance (obj, type) { return obj instanceof type || (obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name) } function numberIsNaN (obj) { // For IE11 support return obj !== obj // eslint-disable-line no-self-compare } // Create lookup table for `toString('hex')` // See: https://github.com/feross/buffer/issues/219 const hexSliceLookupTable = (function () { const alphabet = '0123456789abcdef' const table = new Array(256) for (let i = 0; i < 16; ++i) { const i16 = i * 16 for (let j = 0; j < 16; ++j) { table[i16 + j] = alphabet[i] + alphabet[j] } } return table })() // Return not function with Error if BigInt not supported function defineBigIntMethod (fn) { return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn } function BufferBigIntNotDefined () { throw new Error('BigInt not supported') } /***/ }), /***/ "./node_modules/charenc/charenc.js": /*!*****************************************!*\ !*** ./node_modules/charenc/charenc.js ***! \*****************************************/ /***/ ((module) => { var charenc = { // UTF-8 encoding utf8: { // Convert a string to a byte array stringToBytes: function(str) { return charenc.bin.stringToBytes(unescape(encodeURIComponent(str))); }, // Convert a byte array to a string bytesToString: function(bytes) { return decodeURIComponent(escape(charenc.bin.bytesToString(bytes))); } }, // Binary encoding bin: { // Convert a string to a byte array stringToBytes: function(str) { for (var bytes = [], i = 0; i < str.length; i++) bytes.push(str.charCodeAt(i) & 0xFF); return bytes; }, // Convert a byte array to a string bytesToString: function(bytes) { for (var str = [], i = 0; i < bytes.length; i++) str.push(String.fromCharCode(bytes[i])); return str.join(''); } } }; module.exports = charenc; /***/ }), /***/ "./node_modules/color-convert/conversions.js": /*!***************************************************!*\ !*** ./node_modules/color-convert/conversions.js ***! \***************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { /* MIT license */ /* eslint-disable no-mixed-operators */ const cssKeywords = __webpack_require__(/*! color-name */ "./node_modules/color-name/index.js"); // NOTE: conversions should only return primitive values (i.e. arrays, or // values that give correct `typeof` results). // do not use box values types (i.e. Number(), String(), etc.) const reverseKeywords = {}; for (const key of Object.keys(cssKeywords)) { reverseKeywords[cssKeywords[key]] = key; } const convert = { rgb: {channels: 3, labels: 'rgb'}, hsl: {channels: 3, labels: 'hsl'}, hsv: {channels: 3, labels: 'hsv'}, hwb: {channels: 3, labels: 'hwb'}, cmyk: {channels: 4, labels: 'cmyk'}, xyz: {channels: 3, labels: 'xyz'}, lab: {channels: 3, labels: 'lab'}, lch: {channels: 3, labels: 'lch'}, hex: {channels: 1, labels: ['hex']}, keyword: {channels: 1, labels: ['keyword']}, ansi16: {channels: 1, labels: ['ansi16']}, ansi256: {channels: 1, labels: ['ansi256']}, hcg: {channels: 3, labels: ['h', 'c', 'g']}, apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, gray: {channels: 1, labels: ['gray']} }; module.exports = convert; // Hide .channels and .labels properties for (const model of Object.keys(convert)) { if (!('channels' in convert[model])) { throw new Error('missing channels property: ' + model); } if (!('labels' in convert[model])) { throw new Error('missing channel labels property: ' + model); } if (convert[model].labels.length !== convert[model].channels) { throw new Error('channel and label counts mismatch: ' + model); } const {channels, labels} = convert[model]; delete convert[model].channels; delete convert[model].labels; Object.defineProperty(convert[model], 'channels', {value: channels}); Object.defineProperty(convert[model], 'labels', {value: labels}); } convert.rgb.hsl = function (rgb) { const r = rgb[0] / 255; const g = rgb[1] / 255; const b = rgb[2] / 255; const min = Math.min(r, g, b); const max = Math.max(r, g, b); const delta = max - min; let h; let s; if (max === min) { h = 0; } else if (r === max) { h = (g - b) / delta; } else if (g === max) { h = 2 + (b - r) / delta; } else if (b === max) { h = 4 + (r - g) / delta; } h = Math.min(h * 60, 360); if (h < 0) { h += 360; } const l = (min + max) / 2; if (max === min) { s = 0; } else if (l <= 0.5) { s = delta / (max + min); } else { s = delta / (2 - max - min); } return [h, s * 100, l * 100]; }; convert.rgb.hsv = function (rgb) { let rdif; let gdif; let bdif; let h; let s; const r = rgb[0] / 255; const g = rgb[1] / 255; const b = rgb[2] / 255; const v = Math.max(r, g, b); const diff = v - Math.min(r, g, b); const diffc = function (c) { return (v - c) / 6 / diff + 1 / 2; }; if (diff === 0) { h = 0; s = 0; } else { s = diff / v; rdif = diffc(r); gdif = diffc(g); bdif = diffc(b); if (r === v) { h = bdif - gdif; } else if (g === v) { h = (1 / 3) + rdif - bdif; } else if (b === v) { h = (2 / 3) + gdif - rdif; } if (h < 0) { h += 1; } else if (h > 1) { h -= 1; } } return [ h * 360, s * 100, v * 100 ]; }; convert.rgb.hwb = function (rgb) { const r = rgb[0]; const g = rgb[1]; let b = rgb[2]; const h = convert.rgb.hsl(rgb)[0]; const w = 1 / 255 * Math.min(r, Math.min(g, b)); b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); return [h, w * 100, b * 100]; }; convert.rgb.cmyk = function (rgb) { const r = rgb[0] / 255; const g = rgb[1] / 255; const b = rgb[2] / 255; const k = Math.min(1 - r, 1 - g, 1 - b); const c = (1 - r - k) / (1 - k) || 0; const m = (1 - g - k) / (1 - k) || 0; const y = (1 - b - k) / (1 - k) || 0; return [c * 100, m * 100, y * 100, k * 100]; }; function comparativeDistance(x, y) { /* See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance */ return ( ((x[0] - y[0]) ** 2) + ((x[1] - y[1]) ** 2) + ((x[2] - y[2]) ** 2) ); } convert.rgb.keyword = function (rgb) { const reversed = reverseKeywords[rgb]; if (reversed) { return reversed; } let currentClosestDistance = Infinity; let currentClosestKeyword; for (const keyword of Object.keys(cssKeywords)) { const value = cssKeywords[keyword]; // Compute comparative distance const distance = comparativeDistance(rgb, value); // Check if its less, if so set as closest if (distance < currentClosestDistance) { currentClosestDistance = distance; currentClosestKeyword = keyword; } } return currentClosestKeyword; }; convert.keyword.rgb = function (keyword) { return cssKeywords[keyword]; }; convert.rgb.xyz = function (rgb) { let r = rgb[0] / 255; let g = rgb[1] / 255; let b = rgb[2] / 255; // Assume sRGB r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92); g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92); b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92); const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); return [x * 100, y * 100, z * 100]; }; convert.rgb.lab = function (rgb) { const xyz = convert.rgb.xyz(rgb); let x = xyz[0]; let y = xyz[1]; let z = xyz[2]; x /= 95.047; y /= 100; z /= 108.883; x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); const l = (116 * y) - 16; const a = 500 * (x - y); const b = 200 * (y - z); return [l, a, b]; }; convert.hsl.rgb = function (hsl) { const h = hsl[0] / 360; const s = hsl[1] / 100; const l = hsl[2] / 100; let t2; let t3; let val; if (s === 0) { val = l * 255; return [val, val, val]; } if (l < 0.5) { t2 = l * (1 + s); } else { t2 = l + s - l * s; } const t1 = 2 * l - t2; const rgb = [0, 0, 0]; for (let i = 0; i < 3; i++) { t3 = h + 1 / 3 * -(i - 1); if (t3 < 0) { t3++; } if (t3 > 1) { t3--; } if (6 * t3 < 1) { val = t1 + (t2 - t1) * 6 * t3; } else if (2 * t3 < 1) { val = t2; } else if (3 * t3 < 2) { val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; } else { val = t1; } rgb[i] = val * 255; } return rgb; }; convert.hsl.hsv = function (hsl) { const h = hsl[0]; let s = hsl[1] / 100; let l = hsl[2] / 100; let smin = s; const lmin = Math.max(l, 0.01); l *= 2; s *= (l <= 1) ? l : 2 - l; smin *= lmin <= 1 ? lmin : 2 - lmin; const v = (l + s) / 2; const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); return [h, sv * 100, v * 100]; }; convert.hsv.rgb = function (hsv) { const h = hsv[0] / 60; const s = hsv[1] / 100; let v = hsv[2] / 100; const hi = Math.floor(h) % 6; const f = h - Math.floor(h); const p = 255 * v * (1 - s); const q = 255 * v * (1 - (s * f)); const t = 255 * v * (1 - (s * (1 - f))); v *= 255; switch (hi) { case 0: return [v, t, p]; case 1: return [q, v, p]; case 2: return [p, v, t]; case 3: return [p, q, v]; case 4: return [t, p, v]; case 5: return [v, p, q]; } }; convert.hsv.hsl = function (hsv) { const h = hsv[0]; const s = hsv[1] / 100; const v = hsv[2] / 100; const vmin = Math.max(v, 0.01); let sl; let l; l = (2 - s) * v; const lmin = (2 - s) * vmin; sl = s * vmin; sl /= (lmin <= 1) ? lmin : 2 - lmin; sl = sl || 0; l /= 2; return [h, sl * 100, l * 100]; }; // http://dev.w3.org/csswg/css-color/#hwb-to-rgb convert.hwb.rgb = function (hwb) { const h = hwb[0] / 360; let wh = hwb[1] / 100; let bl = hwb[2] / 100; const ratio = wh + bl; let f; // Wh + bl cant be > 1 if (ratio > 1) { wh /= ratio; bl /= ratio; } const i = Math.floor(6 * h); const v = 1 - bl; f = 6 * h - i; if ((i & 0x01) !== 0) { f = 1 - f; } const n = wh + f * (v - wh); // Linear interpolation let r; let g; let b; /* eslint-disable max-statements-per-line,no-multi-spaces */ switch (i) { default: case 6: case 0: r = v; g = n; b = wh; break; case 1: r = n; g = v; b = wh; break; case 2: r = wh; g = v; b = n; break; case 3: r = wh; g = n; b = v; break; case 4: r = n; g = wh; b = v; break; case 5: r = v; g = wh; b = n; break; } /* eslint-enable max-statements-per-line,no-multi-spaces */ return [r * 255, g * 255, b * 255]; }; convert.cmyk.rgb = function (cmyk) { const c = cmyk[0] / 100; const m = cmyk[1] / 100; const y = cmyk[2] / 100; const k = cmyk[3] / 100; const r = 1 - Math.min(1, c * (1 - k) + k); const g = 1 - Math.min(1, m * (1 - k) + k); const b = 1 - Math.min(1, y * (1 - k) + k); return [r * 255, g * 255, b * 255]; }; convert.xyz.rgb = function (xyz) { const x = xyz[0] / 100; const y = xyz[1] / 100; const z = xyz[2] / 100; let r; let g; let b; r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); // Assume sRGB r = r > 0.0031308 ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055) : r * 12.92; g = g > 0.0031308 ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055) : g * 12.92; b = b > 0.0031308 ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055) : b * 12.92; r = Math.min(Math.max(0, r), 1); g = Math.min(Math.max(0, g), 1); b = Math.min(Math.max(0, b), 1); return [r * 255, g * 255, b * 255]; }; convert.xyz.lab = function (xyz) { let x = xyz[0]; let y = xyz[1]; let z = xyz[2]; x /= 95.047; y /= 100; z /= 108.883; x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); const l = (116 * y) - 16; const a = 500 * (x - y); const b = 200 * (y - z); return [l, a, b]; }; convert.lab.xyz = function (lab) { const l = lab[0]; const a = lab[1]; const b = lab[2]; let x; let y; let z; y = (l + 16) / 116; x = a / 500 + y; z = y - b / 200; const y2 = y ** 3; const x2 = x ** 3; const z2 = z ** 3; y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; x *= 95.047; y *= 100; z *= 108.883; return [x, y, z]; }; convert.lab.lch = function (lab) { const l = lab[0]; const a = lab[1]; const b = lab[2]; let h; const hr = Math.atan2(b, a); h = hr * 360 / 2 / Math.PI; if (h < 0) { h += 360; } const c = Math.sqrt(a * a + b * b); return [l, c, h]; }; convert.lch.lab = function (lch) { const l = lch[0]; const c = lch[1]; const h = lch[2]; const hr = h / 360 * 2 * Math.PI; const a = c * Math.cos(hr); const b = c * Math.sin(hr); return [l, a, b]; }; convert.rgb.ansi16 = function (args, saturation = null) { const [r, g, b] = args; let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization value = Math.round(value / 50); if (value === 0) { return 30; } let ansi = 30 + ((Math.round(b / 255) << 2) | (Math.round(g / 255) << 1) | Math.round(r / 255)); if (value === 2) { ansi += 60; } return ansi; }; convert.hsv.ansi16 = function (args) { // Optimization here; we already know the value and don't need to get // it converted for us. return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); }; convert.rgb.ansi256 = function (args) { const r = args[0]; const g = args[1]; const b = args[2]; // We use the extended greyscale palette here, with the exception of // black and white. normal palette only has 4 greyscale shades. if (r === g && g === b) { if (r < 8) { return 16; } if (r > 248) { return 231; } return Math.round(((r - 8) / 247) * 24) + 232; } const ansi = 16 + (36 * Math.round(r / 255 * 5)) + (6 * Math.round(g / 255 * 5)) + Math.round(b / 255 * 5); return ansi; }; convert.ansi16.rgb = function (args) { let color = args % 10; // Handle greyscale if (color === 0 || color === 7) { if (args > 50) { color += 3.5; } color = color / 10.5 * 255; return [color, color, color]; } const mult = (~~(args > 50) + 1) * 0.5; const r = ((color & 1) * mult) * 255; const g = (((color >> 1) & 1) * mult) * 255; const b = (((color >> 2) & 1) * mult) * 255; return [r, g, b]; }; convert.ansi256.rgb = function (args) { // Handle greyscale if (args >= 232) { const c = (args - 232) * 10 + 8; return [c, c, c]; } args -= 16; let rem; const r = Math.floor(args / 36) / 5 * 255; const g = Math.floor((rem = args % 36) / 6) / 5 * 255; const b = (rem % 6) / 5 * 255; return [r, g, b]; }; convert.rgb.hex = function (args) { const integer = ((Math.round(args[0]) & 0xFF) << 16) + ((Math.round(args[1]) & 0xFF) << 8) + (Math.round(args[2]) & 0xFF); const string = integer.toString(16).toUpperCase(); return '000000'.substring(string.length) + string; }; convert.hex.rgb = function (args) { const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); if (!match) { return [0, 0, 0]; } let colorString = match[0]; if (match[0].length === 3) { colorString = colorString.split('').map(char => { return char + char; }).join(''); } const integer = parseInt(colorString, 16); const r = (integer >> 16) & 0xFF; const g = (integer >> 8) & 0xFF; const b = integer & 0xFF; return [r, g, b]; }; convert.rgb.hcg = function (rgb) { const r = rgb[0] / 255; const g = rgb[1] / 255; const b = rgb[2] / 255; const max = Math.max(Math.max(r, g), b); const min = Math.min(Math.min(r, g), b); const chroma = (max - min); let grayscale; let hue; if (chroma < 1) { grayscale = min / (1 - chroma); } else { grayscale = 0; } if (chroma <= 0) { hue = 0; } else if (max === r) { hue = ((g - b) / chroma) % 6; } else if (max === g) { hue = 2 + (b - r) / chroma; } else { hue = 4 + (r - g) / chroma; } hue /= 6; hue %= 1; return [hue * 360, chroma * 100, grayscale * 100]; }; convert.hsl.hcg = function (hsl) { const s = hsl[1] / 100; const l = hsl[2] / 100; const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l)); let f = 0; if (c < 1.0) { f = (l - 0.5 * c) / (1.0 - c); } return [hsl[0], c * 100, f * 100]; }; convert.hsv.hcg = function (hsv) { const s = hsv[1] / 100; const v = hsv[2] / 100; const c = s * v; let f = 0; if (c < 1.0) { f = (v - c) / (1 - c); } return [hsv[0], c * 100, f * 100]; }; convert.hcg.rgb = function (hcg) { const h = hcg[0] / 360; const c = hcg[1] / 100; const g = hcg[2] / 100; if (c === 0.0) { return [g * 255, g * 255, g * 255]; } const pure = [0, 0, 0]; const hi = (h % 1) * 6; const v = hi % 1; const w = 1 - v; let mg = 0; /* eslint-disable max-statements-per-line */ switch (Math.floor(hi)) { case 0: pure[0] = 1; pure[1] = v; pure[2] = 0; break; case 1: pure[0] = w; pure[1] = 1; pure[2] = 0; break; case 2: pure[0] = 0; pure[1] = 1; pure[2] = v; break; case 3: pure[0] = 0; pure[1] = w; pure[2] = 1; break; case 4: pure[0] = v; pure[1] = 0; pure[2] = 1; break; default: pure[0] = 1; pure[1] = 0; pure[2] = w; } /* eslint-enable max-statements-per-line */ mg = (1.0 - c) * g; return [ (c * pure[0] + mg) * 255, (c * pure[1] + mg) * 255, (c * pure[2] + mg) * 255 ]; }; convert.hcg.hsv = function (hcg) { const c = hcg[1] / 100; const g = hcg[2] / 100; const v = c + g * (1.0 - c); let f = 0; if (v > 0.0) { f = c / v; } return [hcg[0], f * 100, v * 100]; }; convert.hcg.hsl = function (hcg) { const c = hcg[1] / 100; const g = hcg[2] / 100; const l = g * (1.0 - c) + 0.5 * c; let s = 0; if (l > 0.0 && l < 0.5) { s = c / (2 * l); } else if (l >= 0.5 && l < 1.0) { s = c / (2 * (1 - l)); } return [hcg[0], s * 100, l * 100]; }; convert.hcg.hwb = function (hcg) { const c = hcg[1] / 100; const g = hcg[2] / 100; const v = c + g * (1.0 - c); return [hcg[0], (v - c) * 100, (1 - v) * 100]; }; convert.hwb.hcg = function (hwb) { const w = hwb[1] / 100; const b = hwb[2] / 100; const v = 1 - b; const c = v - w; let g = 0; if (c < 1) { g = (v - c) / (1 - c); } return [hwb[0], c * 100, g * 100]; }; convert.apple.rgb = function (apple) { return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; }; convert.rgb.apple = function (rgb) { return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; }; convert.gray.rgb = function (args) { return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; }; convert.gray.hsl = function (args) { return [0, 0, args[0]]; }; convert.gray.hsv = convert.gray.hsl; convert.gray.hwb = function (gray) { return [0, 100, gray[0]]; }; convert.gray.cmyk = function (gray) { return [0, 0, 0, gray[0]]; }; convert.gray.lab = function (gray) { return [gray[0], 0, 0]; }; convert.gray.hex = function (gray) { const val = Math.round(gray[0] / 100 * 255) & 0xFF; const integer = (val << 16) + (val << 8) + val; const string = integer.toString(16).toUpperCase(); return '000000'.substring(string.length) + string; }; convert.rgb.gray = function (rgb) { const val = (rgb[0] + rgb[1] + rgb[2]) / 3; return [val / 255 * 100]; }; /***/ }), /***/ "./node_modules/color-convert/index.js": /*!*********************************************!*\ !*** ./node_modules/color-convert/index.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { const conversions = __webpack_require__(/*! ./conversions */ "./node_modules/color-convert/conversions.js"); const route = __webpack_require__(/*! ./route */ "./node_modules/color-convert/route.js"); const convert = {}; const models = Object.keys(conversions); function wrapRaw(fn) { const wrappedFn = function (...args) { const arg0 = args[0]; if (arg0 === undefined || arg0 === null) { return arg0; } if (arg0.length > 1) { args = arg0; } return fn(args); }; // Preserve .conversion property if there is one if ('conversion' in fn) { wrappedFn.conversion = fn.conversion; } return wrappedFn; } function wrapRounded(fn) { const wrappedFn = function (...args) { const arg0 = args[0]; if (arg0 === undefined || arg0 === null) { return arg0; } if (arg0.length > 1) { args = arg0; } const result = fn(args); // We're assuming the result is an array here. // see notice in conversions.js; don't use box types // in conversion functions. if (typeof result === 'object') { for (let len = result.length, i = 0; i < len; i++) { result[i] = Math.round(result[i]); } } return result; }; // Preserve .conversion property if there is one if ('conversion' in fn) { wrappedFn.conversion = fn.conversion; } return wrappedFn; } models.forEach(fromModel => { convert[fromModel] = {}; Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); const routes = route(fromModel); const routeModels = Object.keys(routes); routeModels.forEach(toModel => { const fn = routes[toModel]; convert[fromModel][toModel] = wrapRounded(fn); convert[fromModel][toModel].raw = wrapRaw(fn); }); }); module.exports = convert; /***/ }), /***/ "./node_modules/color-convert/route.js": /*!*********************************************!*\ !*** ./node_modules/color-convert/route.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { const conversions = __webpack_require__(/*! ./conversions */ "./node_modules/color-convert/conversions.js"); /* This function routes a model to all other models. all functions that are routed have a property `.conversion` attached to the returned synthetic function. This property is an array of strings, each with the steps in between the 'from' and 'to' color models (inclusive). conversions that are not possible simply are not included. */ function buildGraph() { const graph = {}; // https://jsperf.com/object-keys-vs-for-in-with-closure/3 const models = Object.keys(conversions); for (let len = models.length, i = 0; i < len; i++) { graph[models[i]] = { // http://jsperf.com/1-vs-infinity // micro-opt, but this is simple. distance: -1, parent: null }; } return graph; } // https://en.wikipedia.org/wiki/Breadth-first_search function deriveBFS(fromModel) { const graph = buildGraph(); const queue = [fromModel]; // Unshift -> queue -> pop graph[fromModel].distance = 0; while (queue.length) { const current = queue.pop(); const adjacents = Object.keys(conversions[current]); for (let len = adjacents.length, i = 0; i < len; i++) { const adjacent = adjacents[i]; const node = graph[adjacent]; if (node.distance === -1) { node.distance = graph[current].distance + 1; node.parent = current; queue.unshift(adjacent); } } } return graph; } function link(from, to) { return function (args) { return to(from(args)); }; } function wrapConversion(toModel, graph) { const path = [graph[toModel].parent, toModel]; let fn = conversions[graph[toModel].parent][toModel]; let cur = graph[toModel].parent; while (graph[cur].parent) { path.unshift(graph[cur].parent); fn = link(conversions[graph[cur].parent][cur], fn); cur = graph[cur].parent; } fn.conversion = path; return fn; } module.exports = function (fromModel) { const graph = deriveBFS(fromModel); const conversion = {}; const models = Object.keys(graph); for (let len = models.length, i = 0; i < len; i++) { const toModel = models[i]; const node = graph[toModel]; if (node.parent === null) { // No possible conversion, or this node is the source model. continue; } conversion[toModel] = wrapConversion(toModel, graph); } return conversion; }; /***/ }), /***/ "./node_modules/color-name/index.js": /*!******************************************!*\ !*** ./node_modules/color-name/index.js ***! \******************************************/ /***/ ((module) => { "use strict"; module.exports = { "aliceblue": [240, 248, 255], "antiquewhite": [250, 235, 215], "aqua": [0, 255, 255], "aquamarine": [127, 255, 212], "azure": [240, 255, 255], "beige": [245, 245, 220], "bisque": [255, 228, 196], "black": [0, 0, 0], "blanchedalmond": [255, 235, 205], "blue": [0, 0, 255], "blueviolet": [138, 43, 226], "brown": [165, 42, 42], "burlywood": [222, 184, 135], "cadetblue": [95, 158, 160], "chartreuse": [127, 255, 0], "chocolate": [210, 105, 30], "coral": [255, 127, 80], "cornflowerblue": [100, 149, 237], "cornsilk": [255, 248, 220], "crimson": [220, 20, 60], "cyan": [0, 255, 255], "darkblue": [0, 0, 139], "darkcyan": [0, 139, 139], "darkgoldenrod": [184, 134, 11], "darkgray": [169, 169, 169], "darkgreen": [0, 100, 0], "darkgrey": [169, 169, 169], "darkkhaki": [189, 183, 107], "darkmagenta": [139, 0, 139], "darkolivegreen": [85, 107, 47], "darkorange": [255, 140, 0], "darkorchid": [153, 50, 204], "darkred": [139, 0, 0], "darksalmon": [233, 150, 122], "darkseagreen": [143, 188, 143], "darkslateblue": [72, 61, 139], "darkslategray": [47, 79, 79], "darkslategrey": [47, 79, 79], "darkturquoise": [0, 206, 209], "darkviolet": [148, 0, 211], "deeppink": [255, 20, 147], "deepskyblue": [0, 191, 255], "dimgray": [105, 105, 105], "dimgrey": [105, 105, 105], "dodgerblue": [30, 144, 255], "firebrick": [178, 34, 34], "floralwhite": [255, 250, 240], "forestgreen": [34, 139, 34], "fuchsia": [255, 0, 255], "gainsboro": [220, 220, 220], "ghostwhite": [248, 248, 255], "gold": [255, 215, 0], "goldenrod": [218, 165, 32], "gray": [128, 128, 128], "green": [0, 128, 0], "greenyellow": [173, 255, 47], "grey": [128, 128, 128], "honeydew": [240, 255, 240], "hotpink": [255, 105, 180], "indianred": [205, 92, 92], "indigo": [75, 0, 130], "ivory": [255, 255, 240], "khaki": [240, 230, 140], "lavender": [230, 230, 250], "lavenderblush": [255, 240, 245], "lawngreen": [124, 252, 0], "lemonchiffon": [255, 250, 205], "lightblue": [173, 216, 230], "lightcoral": [240, 128, 128], "lightcyan": [224, 255, 255], "lightgoldenrodyellow": [250, 250, 210], "lightgray": [211, 211, 211], "lightgreen": [144, 238, 144], "lightgrey": [211, 211, 211], "lightpink": [255, 182, 193], "lightsalmon": [255, 160, 122], "lightseagreen": [32, 178, 170], "lightskyblue": [135, 206, 250], "lightslategray": [119, 136, 153], "lightslategrey": [119, 136, 153], "lightsteelblue": [176, 196, 222], "lightyellow": [255, 255, 224], "lime": [0, 255, 0], "limegreen": [50, 205, 50], "linen": [250, 240, 230], "magenta": [255, 0, 255], "maroon": [128, 0, 0], "mediumaquamarine": [102, 205, 170], "mediumblue": [0, 0, 205], "mediumorchid": [186, 85, 211], "mediumpurple": [147, 112, 219], "mediumseagreen": [60, 179, 113], "mediumslateblue": [123, 104, 238], "mediumspringgreen": [0, 250, 154], "mediumturquoise": [72, 209, 204], "mediumvioletred": [199, 21, 133], "midnightblue": [25, 25, 112], "mintcream": [245, 255, 250], "mistyrose": [255, 228, 225], "moccasin": [255, 228, 181], "navajowhite": [255, 222, 173], "navy": [0, 0, 128], "oldlace": [253, 245, 230], "olive": [128, 128, 0], "olivedrab": [107, 142, 35], "orange": [255, 165, 0], "orangered": [255, 69, 0], "orchid": [218, 112, 214], "palegoldenrod": [238, 232, 170], "palegreen": [152, 251, 152], "paleturquoise": [175, 238, 238], "palevioletred": [219, 112, 147], "papayawhip": [255, 239, 213], "peachpuff": [255, 218, 185], "peru": [205, 133, 63], "pink": [255, 192, 203], "plum": [221, 160, 221], "powderblue": [176, 224, 230], "purple": [128, 0, 128], "rebeccapurple": [102, 51, 153], "red": [255, 0, 0], "rosybrown": [188, 143, 143], "royalblue": [65, 105, 225], "saddlebrown": [139, 69, 19], "salmon": [250, 128, 114], "sandybrown": [244, 164, 96], "seagreen": [46, 139, 87], "seashell": [255, 245, 238], "sienna": [160, 82, 45], "silver": [192, 192, 192], "skyblue": [135, 206, 235], "slateblue": [106, 90, 205], "slategray": [112, 128, 144], "slategrey": [112, 128, 144], "snow": [255, 250, 250], "springgreen": [0, 255, 127], "steelblue": [70, 130, 180], "tan": [210, 180, 140], "teal": [0, 128, 128], "thistle": [216, 191, 216], "tomato": [255, 99, 71], "turquoise": [64, 224, 208], "violet": [238, 130, 238], "wheat": [245, 222, 179], "white": [255, 255, 255], "whitesmoke": [245, 245, 245], "yellow": [255, 255, 0], "yellowgreen": [154, 205, 50] }; /***/ }), /***/ "./node_modules/color-string/index.js": /*!********************************************!*\ !*** ./node_modules/color-string/index.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { /* MIT license */ var colorNames = __webpack_require__(/*! color-name */ "./node_modules/color-name/index.js"); var swizzle = __webpack_require__(/*! simple-swizzle */ "./node_modules/simple-swizzle/index.js"); var hasOwnProperty = Object.hasOwnProperty; var reverseNames = Object.create(null); // create a list of reverse color names for (var name in colorNames) { if (hasOwnProperty.call(colorNames, name)) { reverseNames[colorNames[name]] = name; } } var cs = module.exports = { to: {}, get: {} }; cs.get = function (string) { var prefix = string.substring(0, 3).toLowerCase(); var val; var model; switch (prefix) { case 'hsl': val = cs.get.hsl(string); model = 'hsl'; break; case 'hwb': val = cs.get.hwb(string); model = 'hwb'; break; default: val = cs.get.rgb(string); model = 'rgb'; break; } if (!val) { return null; } return {model: model, value: val}; }; cs.get.rgb = function (string) { if (!string) { return null; } var abbr = /^#([a-f0-9]{3,4})$/i; var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; var rgba = /^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/; var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/; var keyword = /^(\w+)$/; var rgb = [0, 0, 0, 1]; var match; var i; var hexAlpha; if (match = string.match(hex)) { hexAlpha = match[2]; match = match[1]; for (i = 0; i < 3; i++) { // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 var i2 = i * 2; rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); } if (hexAlpha) { rgb[3] = parseInt(hexAlpha, 16) / 255; } } else if (match = string.match(abbr)) { match = match[1]; hexAlpha = match[3]; for (i = 0; i < 3; i++) { rgb[i] = parseInt(match[i] + match[i], 16); } if (hexAlpha) { rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; } } else if (match = string.match(rgba)) { for (i = 0; i < 3; i++) { rgb[i] = parseInt(match[i + 1], 0); } if (match[4]) { if (match[5]) { rgb[3] = parseFloat(match[4]) * 0.01; } else { rgb[3] = parseFloat(match[4]); } } } else if (match = string.match(per)) { for (i = 0; i < 3; i++) { rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); } if (match[4]) { if (match[5]) { rgb[3] = parseFloat(match[4]) * 0.01; } else { rgb[3] = parseFloat(match[4]); } } } else if (match = string.match(keyword)) { if (match[1] === 'transparent') { return [0, 0, 0, 0]; } if (!hasOwnProperty.call(colorNames, match[1])) { return null; } rgb = colorNames[match[1]]; rgb[3] = 1; return rgb; } else { return null; } for (i = 0; i < 3; i++) { rgb[i] = clamp(rgb[i], 0, 255); } rgb[3] = clamp(rgb[3], 0, 1); return rgb; }; cs.get.hsl = function (string) { if (!string) { return null; } var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; var match = string.match(hsl); if (match) { var alpha = parseFloat(match[4]); var h = ((parseFloat(match[1]) % 360) + 360) % 360; var s = clamp(parseFloat(match[2]), 0, 100); var l = clamp(parseFloat(match[3]), 0, 100); var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); return [h, s, l, a]; } return null; }; cs.get.hwb = function (string) { if (!string) { return null; } var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; var match = string.match(hwb); if (match) { var alpha = parseFloat(match[4]); var h = ((parseFloat(match[1]) % 360) + 360) % 360; var w = clamp(parseFloat(match[2]), 0, 100); var b = clamp(parseFloat(match[3]), 0, 100); var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); return [h, w, b, a]; } return null; }; cs.to.hex = function () { var rgba = swizzle(arguments); return ( '#' + hexDouble(rgba[0]) + hexDouble(rgba[1]) + hexDouble(rgba[2]) + (rgba[3] < 1 ? (hexDouble(Math.round(rgba[3] * 255))) : '') ); }; cs.to.rgb = function () { var rgba = swizzle(arguments); return rgba.length < 4 || rgba[3] === 1 ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; }; cs.to.rgb.percent = function () { var rgba = swizzle(arguments); var r = Math.round(rgba[0] / 255 * 100); var g = Math.round(rgba[1] / 255 * 100); var b = Math.round(rgba[2] / 255 * 100); return rgba.length < 4 || rgba[3] === 1 ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; }; cs.to.hsl = function () { var hsla = swizzle(arguments); return hsla.length < 4 || hsla[3] === 1 ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; }; // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax // (hwb have alpha optional & 1 is default value) cs.to.hwb = function () { var hwba = swizzle(arguments); var a = ''; if (hwba.length >= 4 && hwba[3] !== 1) { a = ', ' + hwba[3]; } return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; }; cs.to.keyword = function (rgb) { return reverseNames[rgb.slice(0, 3)]; }; // helpers function clamp(num, min, max) { return Math.min(Math.max(min, num), max); } function hexDouble(num) { var str = Math.round(num).toString(16).toUpperCase(); return (str.length < 2) ? '0' + str : str; } /***/ }), /***/ "./node_modules/crypt/crypt.js": /*!*************************************!*\ !*** ./node_modules/crypt/crypt.js ***! \*************************************/ /***/ ((module) => { (function() { var base64map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', crypt = { // Bit-wise rotation left rotl: function(n, b) { return (n << b) | (n >>> (32 - b)); }, // Bit-wise rotation right rotr: function(n, b) { return (n << (32 - b)) | (n >>> b); }, // Swap big-endian to little-endian and vice versa endian: function(n) { // If number given, swap endian if (n.constructor == Number) { return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00; } // Else, assume array and swap all items for (var i = 0; i < n.length; i++) n[i] = crypt.endian(n[i]); return n; }, // Generate an array of any length of random bytes randomBytes: function(n) { for (var bytes = []; n > 0; n--) bytes.push(Math.floor(Math.random() * 256)); return bytes; }, // Convert a byte array to big-endian 32-bit words bytesToWords: function(bytes) { for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8) words[b >>> 5] |= bytes[i] << (24 - b % 32); return words; }, // Convert big-endian 32-bit words to a byte array wordsToBytes: function(words) { for (var bytes = [], b = 0; b < words.length * 32; b += 8) bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF); return bytes; }, // Convert a byte array to a hex string bytesToHex: function(bytes) { for (var hex = [], i = 0; i < bytes.length; i++) { hex.push((bytes[i] >>> 4).toString(16)); hex.push((bytes[i] & 0xF).toString(16)); } return hex.join(''); }, // Convert a hex string to a byte array hexToBytes: function(hex) { for (var bytes = [], c = 0; c < hex.length; c += 2) bytes.push(parseInt(hex.substr(c, 2), 16)); return bytes; }, // Convert a byte array to a base-64 string bytesToBase64: function(bytes) { for (var base64 = [], i = 0; i < bytes.length; i += 3) { var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]; for (var j = 0; j < 4; j++) if (i * 8 + j * 6 <= bytes.length * 8) base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F)); else base64.push('='); } return base64.join(''); }, // Convert a base-64 string to a byte array base64ToBytes: function(base64) { // Remove non-base-64 characters base64 = base64.replace(/[^A-Z0-9+\/]/ig, ''); for (var bytes = [], i = 0, imod4 = 0; i < base64.length; imod4 = ++i % 4) { if (imod4 == 0) continue; bytes.push(((base64map.indexOf(base64.charAt(i - 1)) & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2)) | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2))); } return bytes; } }; module.exports = crypt; })(); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/calendar-availability-vue/dist/assets/index-1OlNbSWJ.css": /*!********************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/calendar-availability-vue/dist/assets/index-1OlNbSWJ.css ***! \********************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.availability-day[data-v-1b69eb8d] { padding: 0 10px; position: absolute; } .availability-slots[data-v-1b69eb8d] { max-width: 332px; width: 100%; display: flex; justify-content: flex-start; white-space: nowrap; } .availability-slot[data-v-1b69eb8d] { display: flex; flex-direction: row; align-items: center; } .availability-slot-group[data-v-1b69eb8d] { display: flex; flex-direction: column; } .time-zone[data-v-1b69eb8d] { padding: 32px 12px 12px 0; } .week-day-container[data-v-1b69eb8d] { box-sizing: border-box; margin-bottom: 32px; max-width: 500px; width: 100%; display: flex; flex-direction: column; align-items: flex-start; gap: 6px; } .button[data-v-1b69eb8d] { align-self: flex-end; } .label-weekday[data-v-1b69eb8d] { position: relative; display: flex; align-items: flex-start; min-width: 77px; width: 77px; } .label-weekday > span[data-v-1b69eb8d] { height: 50px; display: flex; align-items: center; } .add-another[data-v-1b69eb8d] { background-color: transparent; border: none; opacity: .5; display: inline-flex; padding: 0; margin: 0 0 3px; } .add-another[data-v-1b69eb8d]:hover { opacity: 1; } .to-text[data-v-1b69eb8d] { padding-right: 12px; } .time-zone-text[data-v-1b69eb8d] { padding-left: 22px; } .empty-content[data-v-1b69eb8d] { color: var(--color-text-lighter); display: inline-flex; align-items: center; } .start-date[data-v-1b69eb8d] { padding-right: 12px; } .day-container[data-v-1b69eb8d] { display: flex; max-width: 500px; width: 100%; gap: 24px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/dialogs/dist/style.css": /*!**********************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/dialogs/dist/style.css ***! \**********************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js"); /* harmony import */ var _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); // Imports var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20height=%2716%27%20width=%2716%27%3e%3cpath%20d=%27M14%2012.3L12.3%2014%208%209.7%203.7%2014%202%2012.3%206.3%208%202%203.7%203.7%202%208%206.3%2012.3%202%2014%203.7%209.7%208z%27/%3e%3c/svg%3e */ "data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20height=%2716%27%20width=%2716%27%3e%3cpath%20d=%27M14%2012.3L12.3%2014%208%209.7%203.7%2014%202%2012.3%206.3%208%202%203.7%203.7%202%208%206.3%2012.3%202%2014%203.7%209.7%208z%27/%3e%3c/svg%3e"), __webpack_require__.b); var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20height=%2716%27%20width=%2716%27%3e%3cpath%20d=%27M14%2012.3L12.3%2014%208%209.7%203.7%2014%202%2012.3%206.3%208%202%203.7%203.7%202%208%206.3%2012.3%202%2014%203.7%209.7%208z%27%20style=%27fill-opacity:1;fill:%23ffffff%27/%3e%3c/svg%3e */ "data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20height=%2716%27%20width=%2716%27%3e%3cpath%20d=%27M14%2012.3L12.3%2014%208%209.7%203.7%2014%202%2012.3%206.3%208%202%203.7%203.7%202%208%206.3%2012.3%202%2014%203.7%209.7%208z%27%20style=%27fill-opacity:1;fill:%23ffffff%27/%3e%3c/svg%3e"), __webpack_require__.b); var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); var ___CSS_LOADER_URL_REPLACEMENT_0___ = _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); var ___CSS_LOADER_URL_REPLACEMENT_1___ = _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 Julius Härtl * * @author Julius Härtl * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ .toastify.dialogs { min-width: 200px; background: none; background-color: var(--color-main-background); color: var(--color-main-text); box-shadow: 0 0 6px 0 var(--color-box-shadow); padding: 0 12px; margin-top: 45px; position: fixed; z-index: 10100; border-radius: var(--border-radius); display: flex; align-items: center; } .toastify.dialogs .toast-undo-container { display: flex; align-items: center; } .toastify.dialogs .toast-undo-button, .toastify.dialogs .toast-close { position: static; overflow: hidden; box-sizing: border-box; min-width: 44px; height: 100%; padding: 12px; white-space: nowrap; background-repeat: no-repeat; background-position: center; background-color: transparent; min-height: 0; } .toastify.dialogs .toast-undo-button.toast-close, .toastify.dialogs .toast-close.toast-close { text-indent: 0; opacity: .4; border: none; min-height: 44px; margin-left: 10px; font-size: 0; } .toastify.dialogs .toast-undo-button.toast-close:before, .toastify.dialogs .toast-close.toast-close:before { background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___}); content: " "; filter: var(--background-invert-if-dark); display: inline-block; width: 16px; height: 16px; } .toastify.dialogs .toast-undo-button.toast-undo-button, .toastify.dialogs .toast-close.toast-undo-button { height: calc(100% - 6px); margin: 3px 3px 3px 12px; } .toastify.dialogs .toast-undo-button:hover, .toastify.dialogs .toast-undo-button:focus, .toastify.dialogs .toast-undo-button:active, .toastify.dialogs .toast-close:hover, .toastify.dialogs .toast-close:focus, .toastify.dialogs .toast-close:active { cursor: pointer; opacity: 1; } .toastify.dialogs.toastify-top { right: 10px; } .toastify.dialogs.toast-with-click { cursor: pointer; } .toastify.dialogs.toast-error { border-left: 3px solid var(--color-error); } .toastify.dialogs.toast-info { border-left: 3px solid var(--color-primary); } .toastify.dialogs.toast-warning { border-left: 3px solid var(--color-warning); } .toastify.dialogs.toast-success, .toastify.dialogs.toast-undo { border-left: 3px solid var(--color-success); } .theme--dark .toastify.dialogs .toast-close.toast-close:before { background-image: url(${___CSS_LOADER_URL_REPLACEMENT_1___}); } .dialog[data-v-a37caee5] { height: 100%; width: 100%; display: flex; flex-direction: column; justify-content: space-between; } .dialog__modal[data-v-a37caee5] .modal-container { display: flex !important; flex-direction: column; } .dialog__wrapper[data-v-a37caee5] { margin-inline: 12px; margin-block: 0 12px; display: flex; flex-direction: row; flex: 1; min-height: 0; } .dialog__wrapper--collapsed[data-v-a37caee5] { flex-direction: column; } .dialog__navigation[data-v-a37caee5] { display: flex; flex-shrink: 0; } .dialog__wrapper:not(.dialog__wrapper--collapsed) .dialog__navigation[data-v-a37caee5] { flex-direction: column; overflow: hidden auto; height: 100%; min-width: 200px; margin-inline-end: 20px; } .dialog__wrapper.dialog__wrapper--collapsed .dialog__navigation[data-v-a37caee5] { flex-direction: row; justify-content: space-between; overflow: auto hidden; width: 100%; min-width: 100%; } .dialog__name[data-v-a37caee5] { text-align: center; height: var(--default-clickable-area); min-height: var(--default-clickable-area); line-height: var(--default-clickable-area); margin-block: 4px 12px; } .dialog__content[data-v-a37caee5] { flex: 1; min-height: 0; } .dialog__actions[data-v-a37caee5] { display: flex; gap: 6px; align-content: center; width: fit-content; margin-inline: auto 12px; margin-block: 0 12px; } ._file-picker__file-icon_1vgv4_5 { width: 32px; height: 32px; min-width: 32px; min-height: 32px; background-repeat: no-repeat; background-size: contain; display: flex; justify-content: center; } tr.file-picker__row[data-v-6aded0d9] { height: var(--row-height, 50px); } tr.file-picker__row td[data-v-6aded0d9] { cursor: pointer; overflow: hidden; text-overflow: ellipsis; border-bottom: none; } tr.file-picker__row td[data-v-6aded0d9]:not(.row-checkbox) { padding-inline: 14px 0; } tr.file-picker__row td.row-size[data-v-6aded0d9] { text-align: end; padding-inline: 0 14px; } tr.file-picker__row td.row-name[data-v-6aded0d9] { padding-inline: 2px 0; } @keyframes gradient-6aded0d9 { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } to { background-position: 0% 50%; } } .loading-row .row-checkbox[data-v-6aded0d9] { text-align: center !important; } .loading-row span[data-v-6aded0d9] { display: inline-block; height: 24px; background: linear-gradient(to right, var(--color-background-darker), var(--color-text-maxcontrast), var(--color-background-darker)); background-size: 600px 100%; border-radius: var(--border-radius); animation: gradient-6aded0d9 12s ease infinite; } .loading-row .row-wrapper[data-v-6aded0d9] { display: inline-flex; align-items: center; } .loading-row .row-checkbox span[data-v-6aded0d9] { width: 24px; } .loading-row .row-name span[data-v-6aded0d9]:last-of-type { margin-inline-start: 6px; width: 130px; } .loading-row .row-size span[data-v-6aded0d9] { width: 80px; } .loading-row .row-modified span[data-v-6aded0d9] { width: 90px; } .file-picker__file-icon[data-v-79e0cce3] { width: 32px; height: 32px; min-width: 32px; min-height: 32px; background-repeat: no-repeat; background-size: contain; display: flex; justify-content: center; } tr.file-picker__row[data-v-41f19c11] { height: var(--row-height, 50px); } tr.file-picker__row td[data-v-41f19c11] { cursor: pointer; overflow: hidden; text-overflow: ellipsis; border-bottom: none; } tr.file-picker__row td[data-v-41f19c11]:not(.row-checkbox) { padding-inline: 14px 0; } tr.file-picker__row td.row-size[data-v-41f19c11] { text-align: end; padding-inline: 0 14px; } tr.file-picker__row td.row-name[data-v-41f19c11] { padding-inline: 2px 0; } .file-picker__row--selected[data-v-41f19c11] { background-color: var(--color-background-dark); } .file-picker__row[data-v-41f19c11]:hover { background-color: var(--color-background-hover); } .file-picker__name-container[data-v-41f19c11] { display: flex; justify-content: start; align-items: center; height: 100%; } .file-picker__file-name[data-v-41f19c11] { padding-inline-start: 6px; min-width: 0; overflow: hidden; text-overflow: ellipsis; } .file-picker__file-extension[data-v-41f19c11] { color: var(--color-text-maxcontrast); min-width: fit-content; } .file-picker__header-preview[data-v-83ce6888] { width: 22px; height: 32px; flex: 0 0 auto; } .file-picker__files[data-v-83ce6888] { margin: 2px; margin-inline-start: 12px; overflow: scroll auto; } .file-picker__files table[data-v-83ce6888] { width: 100%; max-height: 100%; table-layout: fixed; } .file-picker__files th[data-v-83ce6888] { position: -webkit-sticky; position: sticky; z-index: 1; top: 0; background-color: var(--color-main-background); padding: 2px; } .file-picker__files th .header-wrapper[data-v-83ce6888] { display: flex; } .file-picker__files th.row-checkbox[data-v-83ce6888] { width: 44px; } .file-picker__files th.row-name[data-v-83ce6888] { width: 230px; } .file-picker__files th.row-size[data-v-83ce6888] { width: 100px; } .file-picker__files th.row-modified[data-v-83ce6888] { width: 120px; } .file-picker__files th[data-v-83ce6888]:not(.row-size) .button-vue__wrapper { justify-content: start; flex-direction: row-reverse; } .file-picker__files th[data-v-83ce6888]:not(.row-size) .button-vue { padding-inline: 16px 4px; } .file-picker__files th.row-size[data-v-83ce6888] .button-vue__wrapper { justify-content: end; } .file-picker__files th[data-v-83ce6888] .button-vue__wrapper { color: var(--color-text-maxcontrast); } .file-picker__files th[data-v-83ce6888] .button-vue__wrapper .button-vue__text { font-weight: 400; } .file-picker__breadcrumbs[data-v-f35f86d4] { flex-grow: 0 !important; } .file-picker__side[data-v-429eb827] { display: flex; flex-direction: column; align-items: start; gap: .5rem; min-width: 200px; padding-block: 2px; overflow: auto; } .file-picker__side[data-v-429eb827] .button-vue__wrapper { justify-content: start; } .file-picker__filter-input[data-v-429eb827] { margin-block: 7px; max-width: 260px; } @media (max-width: 736px) { .file-picker__side[data-v-429eb827] { flex-direction: row; min-width: unset; } } @media (max-width: 512px) { .file-picker__side[data-v-429eb827] { flex-direction: row; min-width: unset; } .file-picker__filter-input[data-v-429eb827] { max-width: unset; } } .file-picker__navigation { padding-inline: 2px; } .file-picker__navigation, .file-picker__navigation * { box-sizing: border-box; } .file-picker__navigation .v-select.select { min-width: 220px; } @media (min-width: 513px) and (max-width: 736px) { .file-picker__navigation { gap: 11px; } } @media (max-width: 512px) { .file-picker__navigation { flex-direction: column-reverse !important; } } .file-picker__view[data-v-f7b6434d] { height: 50px; display: flex; justify-content: start; align-items: center; } .file-picker__view h3[data-v-f7b6434d] { font-weight: 700; height: fit-content; margin: 0; } .file-picker__main[data-v-f7b6434d] { box-sizing: border-box; width: 100%; display: flex; flex-direction: column; min-height: 0; flex: 1; padding-inline: 2px; } .file-picker__main *[data-v-f7b6434d] { box-sizing: border-box; } [data-v-f7b6434d] .dialog.file-picker { height: min(80vh, 800px); } @media (max-width: 512px) { [data-v-f7b6434d] .dialog.file-picker { height: calc(100% - 16px - var(--default-clickable-area)); } } [data-v-f7b6434d] .file-picker__content { display: flex; flex-direction: column; overflow: hidden; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue-select/dist/vue-select.css": /*!******************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue-select/dist/vue-select.css ***! \******************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `:root{--vs-colors--lightest:rgba(60,60,60,0.26);--vs-colors--light:rgba(60,60,60,0.5);--vs-colors--dark:#333;--vs-colors--darkest:rgba(0,0,0,0.15);--vs-search-input-color:inherit;--vs-search-input-bg:#fff;--vs-search-input-placeholder-color:inherit;--vs-font-size:1rem;--vs-line-height:1.4;--vs-state-disabled-bg:#f8f8f8;--vs-state-disabled-color:var(--vs-colors--light);--vs-state-disabled-controls-color:var(--vs-colors--light);--vs-state-disabled-cursor:not-allowed;--vs-border-color:var(--vs-colors--lightest);--vs-border-width:1px;--vs-border-style:solid;--vs-border-radius:4px;--vs-actions-padding:4px 6px 0 3px;--vs-controls-color:var(--vs-colors--light);--vs-controls-size:1;--vs-controls--deselect-text-shadow:0 1px 0 #fff;--vs-selected-bg:#f0f0f0;--vs-selected-color:var(--vs-colors--dark);--vs-selected-border-color:var(--vs-border-color);--vs-selected-border-style:var(--vs-border-style);--vs-selected-border-width:var(--vs-border-width);--vs-dropdown-bg:#fff;--vs-dropdown-color:inherit;--vs-dropdown-z-index:1000;--vs-dropdown-min-width:160px;--vs-dropdown-max-height:350px;--vs-dropdown-box-shadow:0px 3px 6px 0px var(--vs-colors--darkest);--vs-dropdown-option-bg:#000;--vs-dropdown-option-color:var(--vs-dropdown-color);--vs-dropdown-option-padding:3px 20px;--vs-dropdown-option--active-bg:#136cfb;--vs-dropdown-option--active-color:#fff;--vs-dropdown-option--kb-focus-box-shadow:inset 0px 0px 0px 2px #949494;--vs-dropdown-option--deselect-bg:#fb5858;--vs-dropdown-option--deselect-color:#fff;--vs-transition-timing-function:cubic-bezier(1,-0.115,0.975,0.855);--vs-transition-duration:150ms}.v-select{font-family:inherit;position:relative}.v-select,.v-select *{box-sizing:border-box}:root{--vs-transition-timing-function:cubic-bezier(1,0.5,0.8,1);--vs-transition-duration:0.15s}@-webkit-keyframes vSelectSpinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes vSelectSpinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.vs__fade-enter-active,.vs__fade-leave-active{pointer-events:none;transition:opacity var(--vs-transition-duration) var(--vs-transition-timing-function)}.vs__fade-enter,.vs__fade-leave-to{opacity:0}:root{--vs-disabled-bg:var(--vs-state-disabled-bg);--vs-disabled-color:var(--vs-state-disabled-color);--vs-disabled-cursor:var(--vs-state-disabled-cursor)}.vs--disabled .vs__clear,.vs--disabled .vs__dropdown-toggle,.vs--disabled .vs__open-indicator,.vs--disabled .vs__open-indicator-button,.vs--disabled .vs__search,.vs--disabled .vs__selected{background-color:var(--vs-disabled-bg);cursor:var(--vs-disabled-cursor)}.v-select[dir=rtl] .vs__actions{padding:0 3px 0 6px}.v-select[dir=rtl] .vs__clear{margin-left:6px;margin-right:0}.v-select[dir=rtl] .vs__deselect{margin-left:0;margin-right:2px}.v-select[dir=rtl] .vs__dropdown-menu{text-align:right}.vs__dropdown-toggle{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--vs-search-input-bg);border:var(--vs-border-width) var(--vs-border-style) var(--vs-border-color);border-radius:var(--vs-border-radius);display:flex;padding:0 0 4px;white-space:normal}.vs__selected-options{display:flex;flex-basis:100%;flex-grow:1;flex-wrap:wrap;min-width:0;padding:0 2px;position:relative}.vs__actions{align-items:center;display:flex;padding:var(--vs-actions-padding)}.vs--searchable .vs__dropdown-toggle{cursor:text}.vs--unsearchable .vs__dropdown-toggle{cursor:pointer}.vs--open .vs__dropdown-toggle{border-bottom-color:transparent;border-bottom-left-radius:0;border-bottom-right-radius:0}.vs__open-indicator-button{background-color:transparent;border:0;cursor:pointer;padding:0}.vs__open-indicator{fill:var(--vs-controls-color);transform:scale(var(--vs-controls-size));transition:transform var(--vs-transition-duration) var(--vs-transition-timing-function);transition-timing-function:var(--vs-transition-timing-function)}.vs--open .vs__open-indicator{transform:rotate(180deg) scale(var(--vs-controls-size))}.vs--loading .vs__open-indicator{opacity:0}.vs__clear{fill:var(--vs-controls-color);background-color:transparent;border:0;cursor:pointer;margin-right:8px;padding:0}.vs__dropdown-menu{background:var(--vs-dropdown-bg);border:var(--vs-border-width) var(--vs-border-style) var(--vs-border-color);border-radius:0 0 var(--vs-border-radius) var(--vs-border-radius);border-top-style:none;box-shadow:var(--vs-dropdown-box-shadow);box-sizing:border-box;color:var(--vs-dropdown-color);display:block;left:0;list-style:none;margin:0;max-height:var(--vs-dropdown-max-height);min-width:var(--vs-dropdown-min-width);overflow-y:auto;padding:5px 0;position:absolute;text-align:left;top:calc(100% - var(--vs-border-width));width:100%;z-index:var(--vs-dropdown-z-index)}.vs__no-options{text-align:center}.vs__dropdown-option{clear:both;color:var(--vs-dropdown-option-color);cursor:pointer;display:block;line-height:1.42857143;padding:var(--vs-dropdown-option-padding);white-space:nowrap}.vs__dropdown-option--highlight{background:var(--vs-dropdown-option--active-bg);color:var(--vs-dropdown-option--active-color)}.vs__dropdown-option--kb-focus{box-shadow:var(--vs-dropdown-option--kb-focus-box-shadow)}.vs__dropdown-option--deselect{background:var(--vs-dropdown-option--deselect-bg);color:var(--vs-dropdown-option--deselect-color)}.vs__dropdown-option--disabled{background:var(--vs-state-disabled-bg);color:var(--vs-state-disabled-color);cursor:var(--vs-state-disabled-cursor)}.vs__selected{align-items:center;background-color:var(--vs-selected-bg);border:var(--vs-selected-border-width) var(--vs-selected-border-style) var(--vs-selected-border-color);border-radius:var(--vs-border-radius);color:var(--vs-selected-color);display:flex;line-height:var(--vs-line-height);margin:4px 2px 0;min-width:0;padding:0 .25em;z-index:0}.vs__deselect{fill:var(--vs-controls-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;cursor:pointer;display:inline-flex;margin-left:4px;padding:0;text-shadow:var(--vs-controls--deselect-text-shadow)}.vs--single .vs__selected{background-color:transparent;border-color:transparent}.vs--single.vs--loading .vs__selected,.vs--single.vs--open .vs__selected{max-width:100%;opacity:.4;position:absolute}.vs--single.vs--searching .vs__selected{display:none}.vs__search::-webkit-search-cancel-button{display:none}.vs__search::-ms-clear,.vs__search::-webkit-search-decoration,.vs__search::-webkit-search-results-button,.vs__search::-webkit-search-results-decoration{display:none}.vs__search,.vs__search:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:1px solid transparent;border-left:none;box-shadow:none;color:var(--vs-search-input-color);flex-grow:1;font-size:var(--vs-font-size);line-height:var(--vs-line-height);margin:4px 0 0;max-width:100%;outline:none;padding:0 7px;width:0;z-index:1}.vs__search::-moz-placeholder{color:var(--vs-search-input-placeholder-color)}.vs__search:-ms-input-placeholder{color:var(--vs-search-input-placeholder-color)}.vs__search::placeholder{color:var(--vs-search-input-placeholder-color)}.vs--unsearchable .vs__search{opacity:1}.vs--unsearchable:not(.vs--disabled) .vs__search{cursor:pointer}.vs--single.vs--searching:not(.vs--open):not(.vs--loading) .vs__search{opacity:.2}.vs__spinner{align-self:center;-webkit-animation:vSelectSpinner 1.1s linear infinite;animation:vSelectSpinner 1.1s linear infinite;border:.9em solid hsla(0,0%,39%,.1);border-left-color:rgba(60,60,60,.45);font-size:5px;opacity:0;overflow:hidden;text-indent:-9999em;transform:translateZ(0) scale(var(--vs-controls--spinner-size,var(--vs-controls-size)));transition:opacity .1s}.vs__spinner,.vs__spinner:after{border-radius:50%;height:5em;transform:scale(var(--vs-controls--spinner-size,var(--vs-controls-size)));width:5em}.vs--loading .vs__spinner{opacity:1}`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionButton-rOZFVQA8.css": /*!*******************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionButton-rOZFVQA8.css ***! \*******************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-51d9ee64] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * @author Marco Ambrosini * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ li.action.active[data-v-51d9ee64] { background-color: var(--color-background-hover); border-radius: 6px; padding: 0; } .action--disabled[data-v-51d9ee64] { pointer-events: none; opacity: .5; } .action--disabled[data-v-51d9ee64]:hover, .action--disabled[data-v-51d9ee64]:focus { cursor: default; opacity: .5; } .action--disabled *[data-v-51d9ee64] { opacity: 1 !important; } .action-button[data-v-51d9ee64] { display: flex; align-items: flex-start; width: 100%; height: auto; margin: 0; padding: 0 14px 0 0; box-sizing: border-box; cursor: pointer; white-space: nowrap; color: var(--color-main-text); border: 0; border-radius: 0; background-color: transparent; box-shadow: none; font-weight: 400; font-size: var(--default-font-size); line-height: 44px; } .action-button > span[data-v-51d9ee64] { cursor: pointer; white-space: nowrap; } .action-button__icon[data-v-51d9ee64] { width: 44px; height: 44px; opacity: 1; background-position: 14px center; background-size: 16px; background-repeat: no-repeat; } .action-button[data-v-51d9ee64] .material-design-icon { width: 44px; height: 44px; opacity: 1; } .action-button[data-v-51d9ee64] .material-design-icon .material-design-icon__svg { vertical-align: middle; } .action-button__longtext-wrapper[data-v-51d9ee64], .action-button__longtext[data-v-51d9ee64] { max-width: 220px; line-height: 1.6em; padding: 10.8px 0; cursor: pointer; text-align: left; overflow: hidden; text-overflow: ellipsis; } .action-button__longtext[data-v-51d9ee64] { cursor: pointer; white-space: pre-wrap !important; } .action-button__name[data-v-51d9ee64] { font-weight: 700; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; max-width: 100%; display: inline-block; } .action-button__menu-icon[data-v-51d9ee64], .action-button__pressed-icon[data-v-51d9ee64] { margin-left: auto; margin-right: -14px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionButtonGroup-oXobVIqQ.css": /*!************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionButtonGroup-oXobVIqQ.css ***! \************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .nc-button-group-base > div { text-align: center; color: var(--color-text-maxcontrast); } .nc-button-group-base ul.nc-button-group-content { display: flex; gap: 4px; justify-content: space-between; } .nc-button-group-base ul.nc-button-group-content li { flex: 1 1; } .nc-button-group-base ul.nc-button-group-content .action-button { padding: 0 !important; width: 100%; display: flex; justify-content: center; } .nc-button-group-base ul.nc-button-group-content .action-button.action-button--active { background-color: var(--color-primary-element); border-radius: var(--border-radius-large); color: var(--color-primary-element-text); } .nc-button-group-base ul.nc-button-group-content .action-button.action-button--active:hover, .nc-button-group-base ul.nc-button-group-content .action-button.action-button--active:focus, .nc-button-group-base ul.nc-button-group-content .action-button.action-button--active:focus-within { background-color: var(--color-primary-element-hover); } .nc-button-group-base ul.nc-button-group-content .action-button .action-button__pressed-icon { display: none; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionCaption-afJqyJO6.css": /*!********************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionCaption-afJqyJO6.css ***! \********************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-7c8f7463] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-navigation-caption[data-v-7c8f7463] { color: var(--color-text-maxcontrast); line-height: 44px; white-space: nowrap; text-overflow: ellipsis; box-shadow: none !important; -webkit-user-select: none; user-select: none; pointer-events: none; margin-left: 12px; padding-right: 14px; height: 44px; display: flex; align-items: center; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionCheckbox-6Pvlr1E7.css": /*!*********************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionCheckbox-6Pvlr1E7.css ***! \*********************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-24834b9f] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * @author Marco Ambrosini * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ li.action.active[data-v-24834b9f] { background-color: var(--color-background-hover); border-radius: 6px; padding: 0; } .action--disabled[data-v-24834b9f] { pointer-events: none; opacity: .5; } .action--disabled[data-v-24834b9f]:hover, .action--disabled[data-v-24834b9f]:focus { cursor: default; opacity: .5; } .action--disabled *[data-v-24834b9f] { opacity: 1 !important; } .action-checkbox[data-v-24834b9f] { display: flex; align-items: flex-start; width: 100%; height: auto; margin: 0; padding: 0; cursor: pointer; white-space: nowrap; color: var(--color-main-text); border: 0; border-radius: 0; background-color: transparent; box-shadow: none; font-weight: 400; line-height: 44px; } .action-checkbox__checkbox[data-v-24834b9f] { position: absolute; top: auto; left: -10000px; overflow: hidden; width: 1px; height: 1px; } .action-checkbox__label[data-v-24834b9f] { display: flex; align-items: center; width: 100%; padding: 0 14px 0 0 !important; } .action-checkbox__label[data-v-24834b9f]:before { margin: 0 14px !important; } .action-checkbox--disabled[data-v-24834b9f], .action-checkbox--disabled .action-checkbox__label[data-v-24834b9f] { cursor: pointer; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionInput-4zSvDkWm.css": /*!******************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionInput-4zSvDkWm.css ***! \******************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon[data-v-f55526ee] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ button[data-v-f55526ee]:not(.button-vue), input[data-v-f55526ee]:not([type=range]), textarea[data-v-f55526ee] { margin: 0; padding: 7px 6px; cursor: text; color: var(--color-text-lighter); border: 1px solid var(--color-border-dark); border-radius: var(--border-radius); outline: none; background-color: var(--color-main-background); font-size: 13px; } button[data-v-f55526ee]:not(.button-vue):not(:disabled):not(.primary):hover, button[data-v-f55526ee]:not(.button-vue):not(:disabled):not(.primary):focus, button:not(.button-vue):not(:disabled):not(.primary).active[data-v-f55526ee], input[data-v-f55526ee]:not([type=range]):not(:disabled):not(.primary):hover, input[data-v-f55526ee]:not([type=range]):not(:disabled):not(.primary):focus, input:not([type=range]):not(:disabled):not(.primary).active[data-v-f55526ee], textarea[data-v-f55526ee]:not(:disabled):not(.primary):hover, textarea[data-v-f55526ee]:not(:disabled):not(.primary):focus, textarea:not(:disabled):not(.primary).active[data-v-f55526ee] { border-color: var(--color-primary-element); outline: none; } button[data-v-f55526ee]:not(.button-vue):not(:disabled):not(.primary):active, input[data-v-f55526ee]:not([type=range]):not(:disabled):not(.primary):active, textarea[data-v-f55526ee]:not(:disabled):not(.primary):active { color: var(--color-text-light); outline: none; background-color: var(--color-main-background); } button[data-v-f55526ee]:not(.button-vue):disabled, input[data-v-f55526ee]:not([type=range]):disabled, textarea[data-v-f55526ee]:disabled { cursor: default; opacity: .5; color: var(--color-text-maxcontrast); background-color: var(--color-background-dark); } button[data-v-f55526ee]:not(.button-vue):required, input[data-v-f55526ee]:not([type=range]):required, textarea[data-v-f55526ee]:required { box-shadow: none; } button[data-v-f55526ee]:not(.button-vue):invalid, input[data-v-f55526ee]:not([type=range]):invalid, textarea[data-v-f55526ee]:invalid { border-color: var(--color-error); box-shadow: none !important; } button:not(.button-vue).primary[data-v-f55526ee], input:not([type=range]).primary[data-v-f55526ee], textarea.primary[data-v-f55526ee] { cursor: pointer; color: var(--color-primary-element-text); border-color: var(--color-primary-element); background-color: var(--color-primary-element); } button:not(.button-vue).primary[data-v-f55526ee]:not(:disabled):hover, button:not(.button-vue).primary[data-v-f55526ee]:not(:disabled):focus, button:not(.button-vue).primary[data-v-f55526ee]:not(:disabled):active, input:not([type=range]).primary[data-v-f55526ee]:not(:disabled):hover, input:not([type=range]).primary[data-v-f55526ee]:not(:disabled):focus, input:not([type=range]).primary[data-v-f55526ee]:not(:disabled):active, textarea.primary[data-v-f55526ee]:not(:disabled):hover, textarea.primary[data-v-f55526ee]:not(:disabled):focus, textarea.primary[data-v-f55526ee]:not(:disabled):active { border-color: var(--color-primary-element-light); background-color: var(--color-primary-element-light); } button:not(.button-vue).primary[data-v-f55526ee]:not(:disabled):active, input:not([type=range]).primary[data-v-f55526ee]:not(:disabled):active, textarea.primary[data-v-f55526ee]:not(:disabled):active { color: var(--color-primary-element-text-dark); } button:not(.button-vue).primary[data-v-f55526ee]:disabled, input:not([type=range]).primary[data-v-f55526ee]:disabled, textarea.primary[data-v-f55526ee]:disabled { cursor: default; color: var(--color-primary-element-text-dark); background-color: var(--color-primary-element); } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * @author Marco Ambrosini * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ li.action.active[data-v-f55526ee] { background-color: var(--color-background-hover); border-radius: 6px; padding: 0; } .action--disabled[data-v-f55526ee] { pointer-events: none; opacity: .5; } .action--disabled[data-v-f55526ee]:hover, .action--disabled[data-v-f55526ee]:focus { cursor: default; opacity: .5; } .action--disabled *[data-v-f55526ee] { opacity: 1 !important; } .action-input[data-v-f55526ee] { display: flex; align-items: flex-start; width: 100%; height: auto; margin: 0; padding: 0; cursor: pointer; white-space: nowrap; color: var(--color-main-text); border: 0; border-radius: 0; background-color: transparent; box-shadow: none; font-weight: 400; } .action-input__icon-wrapper[data-v-f55526ee] { display: flex; align-self: center; align-items: center; justify-content: center; } .action-input__icon-wrapper[data-v-f55526ee] .material-design-icon { width: 44px; height: 44px; opacity: 1; } .action-input__icon-wrapper[data-v-f55526ee] .material-design-icon .material-design-icon__svg { vertical-align: middle; } .action-input > span[data-v-f55526ee] { cursor: pointer; white-space: nowrap; } .action-input__icon[data-v-f55526ee] { min-width: 0; min-height: 0; padding: 22px 0 22px 44px; background-position: 14px center; background-size: 16px; } .action-input__form[data-v-f55526ee] { display: flex; align-items: center; flex: 1 1 auto; margin: 4px 0; padding-right: 14px; } .action-input__container[data-v-f55526ee] { width: 100%; } .action-input__input-container[data-v-f55526ee] { display: flex; } .action-input__input-container .colorpicker__trigger[data-v-f55526ee], .action-input__input-container .colorpicker__preview[data-v-f55526ee] { width: 100%; } .action-input__input-container .colorpicker__preview[data-v-f55526ee] { width: 100%; height: 36px; border-radius: var(--border-radius-large); border: 2px solid var(--color-border-maxcontrast); box-shadow: none !important; } .action-input__text-label[data-v-f55526ee] { padding: 4px 0; display: block; } .action-input__text-label--hidden[data-v-f55526ee] { position: absolute; left: -10000px; top: auto; width: 1px; height: 1px; overflow: hidden; } .action-input__datetimepicker[data-v-f55526ee] { width: 100%; } .action-input__datetimepicker[data-v-f55526ee] .mx-input { margin: 0; } .action-input__multi[data-v-f55526ee] { width: 100%; } li:last-child > .action-input[data-v-f55526ee] { padding-bottom: 10px; } li:first-child > .action-input[data-v-f55526ee]:not(.action-input--visible-label) { padding-top: 10px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionLink-zdzQgwtH.css": /*!*****************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionLink-zdzQgwtH.css ***! \*****************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-c0bc0588] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * @author Marco Ambrosini * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ li.action.active[data-v-c0bc0588] { background-color: var(--color-background-hover); border-radius: 6px; padding: 0; } .action-link[data-v-c0bc0588] { display: flex; align-items: flex-start; width: 100%; height: auto; margin: 0; padding: 0 14px 0 0; box-sizing: border-box; cursor: pointer; white-space: nowrap; color: var(--color-main-text); border: 0; border-radius: 0; background-color: transparent; box-shadow: none; font-weight: 400; font-size: var(--default-font-size); line-height: 44px; } .action-link > span[data-v-c0bc0588] { cursor: pointer; white-space: nowrap; } .action-link__icon[data-v-c0bc0588] { width: 44px; height: 44px; opacity: 1; background-position: 14px center; background-size: 16px; background-repeat: no-repeat; } .action-link[data-v-c0bc0588] .material-design-icon { width: 44px; height: 44px; opacity: 1; } .action-link[data-v-c0bc0588] .material-design-icon .material-design-icon__svg { vertical-align: middle; } .action-link__longtext-wrapper[data-v-c0bc0588], .action-link__longtext[data-v-c0bc0588] { max-width: 220px; line-height: 1.6em; padding: 10.8px 0; cursor: pointer; text-align: left; overflow: hidden; text-overflow: ellipsis; } .action-link__longtext[data-v-c0bc0588] { cursor: pointer; white-space: pre-wrap !important; } .action-link__name[data-v-c0bc0588] { font-weight: 700; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; max-width: 100%; display: inline-block; } .action-link__menu-icon[data-v-c0bc0588] { margin-left: auto; margin-right: -14px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionRadio-eOr9Sp-D.css": /*!******************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionRadio-eOr9Sp-D.css ***! \******************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-f482d6e9] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * @author Marco Ambrosini * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ li.action.active[data-v-f482d6e9] { background-color: var(--color-background-hover); border-radius: 6px; padding: 0; } .action--disabled[data-v-f482d6e9] { pointer-events: none; opacity: .5; } .action--disabled[data-v-f482d6e9]:hover, .action--disabled[data-v-f482d6e9]:focus { cursor: default; opacity: .5; } .action--disabled *[data-v-f482d6e9] { opacity: 1 !important; } .action-radio[data-v-f482d6e9] { display: flex; align-items: flex-start; width: 100%; height: auto; margin: 0; padding: 0; cursor: pointer; white-space: nowrap; color: var(--color-main-text); border: 0; border-radius: 0; background-color: transparent; box-shadow: none; font-weight: 400; line-height: 44px; } .action-radio__radio[data-v-f482d6e9] { position: absolute; top: auto; left: -10000px; overflow: hidden; width: 1px; height: 1px; } .action-radio__label[data-v-f482d6e9] { display: flex; align-items: center; width: 100%; padding: 0 14px 0 0 !important; } .action-radio__label[data-v-f482d6e9]:before { margin: 0 14px !important; } .action-radio--disabled[data-v-f482d6e9], .action-radio--disabled .action-radio__label[data-v-f482d6e9] { cursor: pointer; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionRouter-MFTD6tYI.css": /*!*******************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionRouter-MFTD6tYI.css ***! \*******************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-fdbe574e] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * @author Marco Ambrosini * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ li.action.active[data-v-fdbe574e] { background-color: var(--color-background-hover); border-radius: 6px; padding: 0; } .action-router[data-v-fdbe574e] { display: flex; align-items: flex-start; width: 100%; height: auto; margin: 0; padding: 0 14px 0 0; box-sizing: border-box; cursor: pointer; white-space: nowrap; color: var(--color-main-text); border: 0; border-radius: 0; background-color: transparent; box-shadow: none; font-weight: 400; font-size: var(--default-font-size); line-height: 44px; } .action-router > span[data-v-fdbe574e] { cursor: pointer; white-space: nowrap; } .action-router__icon[data-v-fdbe574e] { width: 44px; height: 44px; opacity: 1; background-position: 14px center; background-size: 16px; background-repeat: no-repeat; } .action-router[data-v-fdbe574e] .material-design-icon { width: 44px; height: 44px; opacity: 1; } .action-router[data-v-fdbe574e] .material-design-icon .material-design-icon__svg { vertical-align: middle; } .action-router__longtext-wrapper[data-v-fdbe574e], .action-router__longtext[data-v-fdbe574e] { max-width: 220px; line-height: 1.6em; padding: 10.8px 0; cursor: pointer; text-align: left; overflow: hidden; text-overflow: ellipsis; } .action-router__longtext[data-v-fdbe574e] { cursor: pointer; white-space: pre-wrap !important; } .action-router__name[data-v-fdbe574e] { font-weight: 700; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; max-width: 100%; display: inline-block; } .action-router__menu-icon[data-v-fdbe574e] { margin-left: auto; margin-right: -14px; } .action--disabled[data-v-fdbe574e] { pointer-events: none; opacity: .5; } .action--disabled[data-v-fdbe574e]:hover, .action--disabled[data-v-fdbe574e]:focus { cursor: default; opacity: .5; } .action--disabled *[data-v-fdbe574e] { opacity: 1 !important; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionSeparator-l98xWbiL.css": /*!**********************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionSeparator-l98xWbiL.css ***! \**********************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-82b7f2ae] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .action-separator[data-v-82b7f2ae] { height: 0; margin: 5px 10px 5px 15px; border-bottom: 1px solid var(--color-border-dark); cursor: default; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionText-GJYwsw_U.css": /*!*****************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionText-GJYwsw_U.css ***! \*****************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-34d9a49c] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * @author Marco Ambrosini * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ li.action.active[data-v-34d9a49c] { background-color: var(--color-background-hover); border-radius: 6px; padding: 0; } .action-text[data-v-34d9a49c] { display: flex; align-items: flex-start; width: 100%; height: auto; margin: 0; padding: 0 14px 0 0; box-sizing: border-box; cursor: pointer; white-space: nowrap; color: var(--color-main-text); border: 0; border-radius: 0; background-color: transparent; box-shadow: none; font-weight: 400; font-size: var(--default-font-size); line-height: 44px; } .action-text > span[data-v-34d9a49c] { cursor: pointer; white-space: nowrap; } .action-text__icon[data-v-34d9a49c] { width: 44px; height: 44px; opacity: 1; background-position: 14px center; background-size: 16px; background-repeat: no-repeat; } .action-text[data-v-34d9a49c] .material-design-icon { width: 44px; height: 44px; opacity: 1; } .action-text[data-v-34d9a49c] .material-design-icon .material-design-icon__svg { vertical-align: middle; } .action-text__longtext-wrapper[data-v-34d9a49c], .action-text__longtext[data-v-34d9a49c] { max-width: 220px; line-height: 1.6em; padding: 10.8px 0; cursor: pointer; text-align: left; overflow: hidden; text-overflow: ellipsis; } .action-text__longtext[data-v-34d9a49c] { cursor: pointer; white-space: pre-wrap !important; } .action-text__name[data-v-34d9a49c] { font-weight: 700; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; max-width: 100%; display: inline-block; } .action-text__menu-icon[data-v-34d9a49c] { margin-left: auto; margin-right: -14px; } .action--disabled[data-v-34d9a49c] { pointer-events: none; opacity: .5; } .action--disabled[data-v-34d9a49c]:hover, .action--disabled[data-v-34d9a49c]:focus { cursor: default; opacity: .5; } .action--disabled *[data-v-34d9a49c] { opacity: 1 !important; } .action-text[data-v-34d9a49c], .action-text span[data-v-34d9a49c] { cursor: default; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionTextEditable-JrYuWEDd.css": /*!*************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActionTextEditable-JrYuWEDd.css ***! \*************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon[data-v-b0b05af8] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ button[data-v-b0b05af8]:not(.button-vue), input[data-v-b0b05af8]:not([type=range]), textarea[data-v-b0b05af8] { margin: 0; padding: 7px 6px; cursor: text; color: var(--color-text-lighter); border: 1px solid var(--color-border-dark); border-radius: var(--border-radius); outline: none; background-color: var(--color-main-background); font-size: 13px; } button[data-v-b0b05af8]:not(.button-vue):not(:disabled):not(.primary):hover, button[data-v-b0b05af8]:not(.button-vue):not(:disabled):not(.primary):focus, button:not(.button-vue):not(:disabled):not(.primary).active[data-v-b0b05af8], input[data-v-b0b05af8]:not([type=range]):not(:disabled):not(.primary):hover, input[data-v-b0b05af8]:not([type=range]):not(:disabled):not(.primary):focus, input:not([type=range]):not(:disabled):not(.primary).active[data-v-b0b05af8], textarea[data-v-b0b05af8]:not(:disabled):not(.primary):hover, textarea[data-v-b0b05af8]:not(:disabled):not(.primary):focus, textarea:not(:disabled):not(.primary).active[data-v-b0b05af8] { border-color: var(--color-primary-element); outline: none; } button[data-v-b0b05af8]:not(.button-vue):not(:disabled):not(.primary):active, input[data-v-b0b05af8]:not([type=range]):not(:disabled):not(.primary):active, textarea[data-v-b0b05af8]:not(:disabled):not(.primary):active { color: var(--color-text-light); outline: none; background-color: var(--color-main-background); } button[data-v-b0b05af8]:not(.button-vue):disabled, input[data-v-b0b05af8]:not([type=range]):disabled, textarea[data-v-b0b05af8]:disabled { cursor: default; opacity: .5; color: var(--color-text-maxcontrast); background-color: var(--color-background-dark); } button[data-v-b0b05af8]:not(.button-vue):required, input[data-v-b0b05af8]:not([type=range]):required, textarea[data-v-b0b05af8]:required { box-shadow: none; } button[data-v-b0b05af8]:not(.button-vue):invalid, input[data-v-b0b05af8]:not([type=range]):invalid, textarea[data-v-b0b05af8]:invalid { border-color: var(--color-error); box-shadow: none !important; } button:not(.button-vue).primary[data-v-b0b05af8], input:not([type=range]).primary[data-v-b0b05af8], textarea.primary[data-v-b0b05af8] { cursor: pointer; color: var(--color-primary-element-text); border-color: var(--color-primary-element); background-color: var(--color-primary-element); } button:not(.button-vue).primary[data-v-b0b05af8]:not(:disabled):hover, button:not(.button-vue).primary[data-v-b0b05af8]:not(:disabled):focus, button:not(.button-vue).primary[data-v-b0b05af8]:not(:disabled):active, input:not([type=range]).primary[data-v-b0b05af8]:not(:disabled):hover, input:not([type=range]).primary[data-v-b0b05af8]:not(:disabled):focus, input:not([type=range]).primary[data-v-b0b05af8]:not(:disabled):active, textarea.primary[data-v-b0b05af8]:not(:disabled):hover, textarea.primary[data-v-b0b05af8]:not(:disabled):focus, textarea.primary[data-v-b0b05af8]:not(:disabled):active { border-color: var(--color-primary-element-light); background-color: var(--color-primary-element-light); } button:not(.button-vue).primary[data-v-b0b05af8]:not(:disabled):active, input:not([type=range]).primary[data-v-b0b05af8]:not(:disabled):active, textarea.primary[data-v-b0b05af8]:not(:disabled):active { color: var(--color-primary-element-text-dark); } button:not(.button-vue).primary[data-v-b0b05af8]:disabled, input:not([type=range]).primary[data-v-b0b05af8]:disabled, textarea.primary[data-v-b0b05af8]:disabled { cursor: default; color: var(--color-primary-element-text-dark); background-color: var(--color-primary-element); } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * @author Marco Ambrosini * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ li.action.active[data-v-b0b05af8] { background-color: var(--color-background-hover); border-radius: 6px; padding: 0; } .action--disabled[data-v-b0b05af8] { pointer-events: none; opacity: .5; } .action--disabled[data-v-b0b05af8]:hover, .action--disabled[data-v-b0b05af8]:focus { cursor: default; opacity: .5; } .action--disabled *[data-v-b0b05af8] { opacity: 1 !important; } .action-text-editable[data-v-b0b05af8] { display: flex; align-items: flex-start; width: 100%; height: auto; margin: 0; padding: 0; cursor: pointer; white-space: nowrap; color: var(--color-main-text); border: 0; border-radius: 0; background-color: transparent; box-shadow: none; font-weight: 400; line-height: 44px; } .action-text-editable > span[data-v-b0b05af8] { cursor: pointer; white-space: nowrap; } .action-text-editable__icon[data-v-b0b05af8] { min-width: 0; min-height: 0; padding: 22px 0 22px 44px; background-position: 14px center; background-size: 16px; } .action-text-editable[data-v-b0b05af8] .material-design-icon { width: 44px; height: 44px; opacity: 1; } .action-text-editable[data-v-b0b05af8] .material-design-icon .material-design-icon__svg { vertical-align: middle; } .action-text-editable__form[data-v-b0b05af8] { display: flex; flex: 1 1 auto; flex-direction: column; position: relative; margin: 4px 0; padding-right: 14px; } .action-text-editable__submit[data-v-b0b05af8] { position: absolute; left: -10000px; top: auto; width: 1px; height: 1px; overflow: hidden; } .action-text-editable__label[data-v-b0b05af8] { display: flex; align-items: center; justify-content: center; position: absolute; right: 15px; bottom: 1px; width: 36px; height: 36px; box-sizing: border-box; margin: 0; padding: 7px 6px; border: 0; border-radius: 50%; background-color: var(--color-main-background); background-clip: padding-box; } .action-text-editable__label[data-v-b0b05af8], .action-text-editable__label *[data-v-b0b05af8] { cursor: pointer; } .action-text-editable__textarea[data-v-b0b05af8] { flex: 1 1 auto; color: inherit; border-color: var(--color-border-maxcontrast); min-height: 80px; max-height: 124px; min-width: 176px; width: 100% !important; margin: 0; } .action-text-editable__textarea[data-v-b0b05af8]:disabled { cursor: default; } .action-text-editable__textarea:not(:active):not(:hover):not(:focus):invalid + .action-text-editable__label[data-v-b0b05af8] { background-color: var(--color-error); } .action-text-editable__textarea:not(:active):not(:hover):not(:focus):not(:disabled) + .action-text-editable__label[data-v-b0b05af8]:active, .action-text-editable__textarea:not(:active):not(:hover):not(:focus):not(:disabled) + .action-text-editable__label[data-v-b0b05af8]:hover, .action-text-editable__textarea:not(:active):not(:hover):not(:focus):not(:disabled) + .action-text-editable__label[data-v-b0b05af8]:focus { background-color: var(--color-primary-element); color: var(--color-primary-element-text); } .action-text-editable__textarea:active:not(:disabled) + .action-text-editable__label[data-v-b0b05af8], .action-text-editable__textarea:hover:not(:disabled) + .action-text-editable__label[data-v-b0b05af8], .action-text-editable__textarea:focus:not(:disabled) + .action-text-editable__label[data-v-b0b05af8] { z-index: 2; border-color: var(--color-primary-element); border-left-color: transparent; } li:last-child > .action-text-editable[data-v-b0b05af8] { margin-bottom: 10px; } li:first-child > .action-text-editable[data-v-b0b05af8] { margin-top: 10px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActions-4Gq5bZLW.css": /*!**************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcActions-4Gq5bZLW.css ***! \**************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon[data-v-eae4a464] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .action-items[data-v-eae4a464] { display: flex; align-items: center; } .action-items > button[data-v-eae4a464] { margin-right: 7px; } .action-item[data-v-eae4a464] { --open-background-color: var(--color-background-hover, \$action-background-hover); position: relative; display: inline-block; } .action-item.action-item--primary[data-v-eae4a464] { --open-background-color: var(--color-primary-element-hover); } .action-item.action-item--secondary[data-v-eae4a464] { --open-background-color: var(--color-primary-element-light-hover); } .action-item.action-item--error[data-v-eae4a464] { --open-background-color: var(--color-error-hover); } .action-item.action-item--warning[data-v-eae4a464] { --open-background-color: var(--color-warning-hover); } .action-item.action-item--success[data-v-eae4a464] { --open-background-color: var(--color-success-hover); } .action-item.action-item--tertiary-no-background[data-v-eae4a464] { --open-background-color: transparent; } .action-item.action-item--open .action-item__menutoggle[data-v-eae4a464] { background-color: var(--open-background-color); } .action-item__menutoggle__icon[data-v-eae4a464] { width: 20px; height: 20px; object-fit: contain; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .v-popper--theme-dropdown.v-popper__popper.action-item__popper .v-popper__wrapper { border-radius: var(--border-radius-large); overflow: hidden; } .v-popper--theme-dropdown.v-popper__popper.action-item__popper .v-popper__wrapper .v-popper__inner { border-radius: var(--border-radius-large); padding: 4px; max-height: calc(50vh - 16px); overflow: auto; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppContent-SZz3PTd8.css": /*!*****************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppContent-SZz3PTd8.css ***! \*****************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon[data-v-5244e83e] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-details-toggle[data-v-5244e83e] { position: fixed; width: 44px; height: 44px; padding: 14px; cursor: pointer; opacity: .6; transform: rotate(180deg); background-color: var(--color-main-background); z-index: 2000; } .app-details-toggle[data-v-5244e83e]:active, .app-details-toggle[data-v-5244e83e]:hover, .app-details-toggle[data-v-5244e83e]:focus { opacity: 1; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-27fc3f3a] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-content[data-v-27fc3f3a] { position: initial; z-index: 1000; flex-basis: 100vw; height: 100%; margin: 0 !important; background-color: var(--color-main-background); min-width: 0; } .app-content[data-v-27fc3f3a]:not(.app-content--has-list) { overflow: auto; } .app-content-wrapper[data-v-27fc3f3a] { position: relative; width: 100%; height: 100%; } .app-content-wrapper--mobile.app-content-wrapper--show-list[data-v-27fc3f3a] .app-content-list { display: flex; } .app-content-wrapper--mobile.app-content-wrapper--show-list[data-v-27fc3f3a] .app-content-details, .app-content-wrapper--mobile.app-content-wrapper--show-details[data-v-27fc3f3a] .app-content-list { display: none; } .app-content-wrapper--mobile.app-content-wrapper--show-details[data-v-27fc3f3a] .app-content-details { display: block; } [data-v-27fc3f3a] .splitpanes.default-theme .app-content-list { max-width: none; scrollbar-width: auto; } [data-v-27fc3f3a] .splitpanes.default-theme .splitpanes__pane { background-color: transparent; transition: none; } [data-v-27fc3f3a] .splitpanes.default-theme .splitpanes__pane-list { min-width: 300px; position: sticky; top: var(--header-height); } @media only screen and (width < 1024px) { [data-v-27fc3f3a] .splitpanes.default-theme .splitpanes__pane-list { display: none; } } [data-v-27fc3f3a] .splitpanes.default-theme .splitpanes__pane-details { overflow-y: auto; } @media only screen and (width < 1024px) { [data-v-27fc3f3a] .splitpanes.default-theme .splitpanes__pane-details { min-width: 100%; } } [data-v-27fc3f3a] .splitpanes.default-theme .splitpanes__splitter { width: 9px; margin-left: -5px; background-color: transparent; border-left: none; } [data-v-27fc3f3a] .splitpanes.default-theme .splitpanes__splitter:before, [data-v-27fc3f3a] .splitpanes.default-theme .splitpanes__splitter:after { display: none; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigation-vjqOL-kR.css": /*!********************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigation-vjqOL-kR.css ***! \********************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-navigation, .app-content { --app-navigation-padding: calc(var(--default-grid-baseline, 4px) * 2); } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-80612854] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-navigation[data-v-80612854] { --color-text-maxcontrast: var(--color-text-maxcontrast-background-blur, var(--color-text-maxcontrast-default)); transition: transform var(--animation-quick), margin var(--animation-quick); width: 300px; max-width: calc(100vw - (var(--app-navigation-padding) + var(--default-clickable-area) + var(--default-grid-baseline))); position: relative; top: 0; left: 0; padding: 0; z-index: 1800; height: 100%; box-sizing: border-box; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; flex-grow: 0; flex-shrink: 0; background-color: var(--color-main-background-blur, var(--color-main-background)); -webkit-backdrop-filter: var(--filter-background-blur, none); backdrop-filter: var(--filter-background-blur, none); } .app-navigation--close[data-v-80612854] { transform: translate(-100%); position: absolute; } .app-navigation__content > ul[data-v-80612854], .app-navigation__list[data-v-80612854] { position: relative; height: 100%; width: 100%; overflow-x: hidden; overflow-y: auto; box-sizing: border-box; display: flex; flex-direction: column; gap: var(--default-grid-baseline, 4px); padding: var(--app-navigation-padding); } .app-navigation__content[data-v-80612854] { height: 100%; display: flex; flex-direction: column; } [data-themes*=highcontrast] .app-navigation[data-v-80612854] { border-right: 1px solid var(--color-border); } @media only screen and (max-width: 1024px) { .app-navigation[data-v-80612854]:not(.app-navigation--close) { position: absolute; } } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationCaption-l5yRGXZx.css": /*!***************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationCaption-l5yRGXZx.css ***! \***************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-dbde4a28] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-navigation-caption[data-v-dbde4a28] { display: flex; justify-content: space-between; } .app-navigation-caption__name[data-v-dbde4a28] { font-weight: 700; color: var(--color-main-text); font-size: var(--default-font-size); line-height: 44px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; box-shadow: none !important; flex-shrink: 0; padding: 0 calc(var(--default-grid-baseline, 4px) * 2) 0 calc(var(--default-grid-baseline, 4px) * 3); margin-bottom: 12px; } .app-navigation-caption__actions[data-v-dbde4a28] { flex: 0 0 44px; } .app-navigation-caption[data-v-dbde4a28]:not(:first-child) { margin-top: 22px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationIconBullet-Nf3ARMLv.css": /*!******************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationIconBullet-Nf3ARMLv.css ***! \******************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-91580127] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-navigation-entry__icon-bullet[data-v-91580127] { display: block; padding: 15px; } .app-navigation-entry__icon-bullet div[data-v-91580127] { width: 14px; height: 14px; cursor: pointer; transition: background .1s ease-in-out; border: none; border-radius: 50%; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationItem-caMsw_N_.css": /*!************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationItem-caMsw_N_.css ***! \************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon[data-v-07582bf6] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .button-vue.icon-collapse[data-v-07582bf6] { position: relative; z-index: 105; color: var(--color-main-text); right: 0; } .button-vue.icon-collapse--open[data-v-07582bf6] { color: var(--color-main-text); } .button-vue.icon-collapse--open[data-v-07582bf6]:hover { color: var(--color-primary-element); } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-6a7129ac] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-navigation-entry[data-v-6a7129ac] { position: relative; display: flex; flex-shrink: 0; flex-wrap: wrap; box-sizing: border-box; width: 100%; min-height: 44px; transition: background-color var(--animation-quick) ease-in-out; transition: background-color .2s ease-in-out; border-radius: var(--border-radius-pill); } .app-navigation-entry-wrapper[data-v-6a7129ac] { position: relative; display: flex; flex-shrink: 0; flex-wrap: wrap; box-sizing: border-box; width: 100%; } .app-navigation-entry-wrapper.app-navigation-entry--collapsible:not(.app-navigation-entry--opened) > ul[data-v-6a7129ac] { display: none; } .app-navigation-entry.active[data-v-6a7129ac] { background-color: var(--color-primary-element) !important; } .app-navigation-entry.active[data-v-6a7129ac]:hover { background-color: var(--color-primary-element-hover) !important; } .app-navigation-entry.active .app-navigation-entry-link[data-v-6a7129ac], .app-navigation-entry.active .app-navigation-entry-button[data-v-6a7129ac] { color: var(--color-primary-element-text) !important; } .app-navigation-entry[data-v-6a7129ac]:focus-within, .app-navigation-entry[data-v-6a7129ac]:hover { background-color: var(--color-background-hover); } .app-navigation-entry.active .app-navigation-entry__children[data-v-6a7129ac], .app-navigation-entry:focus-within .app-navigation-entry__children[data-v-6a7129ac], .app-navigation-entry:hover .app-navigation-entry__children[data-v-6a7129ac] { background-color: var(--color-main-background); } .app-navigation-entry.active .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6a7129ac], .app-navigation-entry.app-navigation-entry--deleted .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6a7129ac], .app-navigation-entry:focus .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6a7129ac], .app-navigation-entry:focus-within .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6a7129ac], .app-navigation-entry:hover .app-navigation-entry__utils .app-navigation-entry__actions[data-v-6a7129ac] { display: inline-block; } .app-navigation-entry.app-navigation-entry--deleted > ul[data-v-6a7129ac] { display: none; } .app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-6a7129ac], .app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-6a7129ac] { padding-right: 14px; } .app-navigation-entry .app-navigation-entry-link[data-v-6a7129ac], .app-navigation-entry .app-navigation-entry-button[data-v-6a7129ac] { z-index: 100; display: flex; overflow: hidden; flex: 1 1 0; box-sizing: border-box; min-height: 44px; padding: 0; white-space: nowrap; color: var(--color-main-text); background-repeat: no-repeat; background-position: 14px center; background-size: 16px 16px; line-height: 44px; } .app-navigation-entry .app-navigation-entry-link .app-navigation-entry-icon[data-v-6a7129ac], .app-navigation-entry .app-navigation-entry-button .app-navigation-entry-icon[data-v-6a7129ac] { display: flex; align-items: center; flex: 0 0 44px; justify-content: center; width: 44px; height: 44px; background-size: 16px 16px; background-repeat: no-repeat; background-position: 14px center; } .app-navigation-entry .app-navigation-entry-link .app-navigation-entry__name[data-v-6a7129ac], .app-navigation-entry .app-navigation-entry-button .app-navigation-entry__name[data-v-6a7129ac] { overflow: hidden; max-width: 100%; white-space: nowrap; text-overflow: ellipsis; } .app-navigation-entry .app-navigation-entry-link .editingContainer[data-v-6a7129ac], .app-navigation-entry .app-navigation-entry-button .editingContainer[data-v-6a7129ac] { width: calc(100% - 44px); margin: auto; } .app-navigation-entry .app-navigation-entry-link[data-v-6a7129ac]:focus-visible, .app-navigation-entry .app-navigation-entry-button[data-v-6a7129ac]:focus-visible { box-shadow: 0 0 0 4px var(--color-main-background); outline: 2px solid var(--color-main-text); border-radius: var(--border-radius-pill); } .app-navigation-entry__children[data-v-6a7129ac] { position: relative; display: flex; flex: 0 1 auto; flex-direction: column; width: 100%; gap: var(--default-grid-baseline, 4px); } .app-navigation-entry__children .app-navigation-entry[data-v-6a7129ac] { display: inline-flex; flex-wrap: wrap; padding-left: 16px; } .app-navigation-entry__deleted[data-v-6a7129ac] { display: inline-flex; flex: 1 1 0; padding-left: 30px !important; } .app-navigation-entry__deleted .app-navigation-entry__deleted-description[data-v-6a7129ac] { position: relative; overflow: hidden; flex: 1 1 0; white-space: nowrap; text-overflow: ellipsis; line-height: 44px; } .app-navigation-entry__utils[data-v-6a7129ac] { display: flex; min-width: 44px; align-items: center; flex: 0 1 auto; justify-content: flex-end; } .app-navigation-entry__utils.app-navigation-entry__utils--display-actions .action-item.app-navigation-entry__actions[data-v-6a7129ac] { display: inline-block; } .app-navigation-entry__utils .app-navigation-entry__counter-wrapper[data-v-6a7129ac] { margin-right: calc(var(--default-grid-baseline) * 3); display: flex; align-items: center; flex: 0 1 auto; } .app-navigation-entry__utils .action-item.app-navigation-entry__actions[data-v-6a7129ac] { display: none; } .app-navigation-entry--editing .app-navigation-entry-edit[data-v-6a7129ac] { z-index: 250; opacity: 1; } .app-navigation-entry--deleted .app-navigation-entry-deleted[data-v-6a7129ac] { z-index: 250; transform: translate(0); } .app-navigation-entry--pinned[data-v-6a7129ac] { order: 2; margin-top: auto; } .app-navigation-entry--pinned ~ .app-navigation-entry--pinned[data-v-6a7129ac] { margin-top: 0; } [data-themes*=highcontrast] .app-navigation-entry[data-v-6a7129ac]:active { background-color: var(--color-primary-element-light-hover) !important; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationNew-joyd78FM.css": /*!***********************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationNew-joyd78FM.css ***! \***********************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-c47dc611] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-navigation-new[data-v-c47dc611] { display: block; padding: calc(var(--default-grid-baseline, 4px) * 2); } .app-navigation-new button[data-v-c47dc611] { width: 100%; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationNewItem-ue-H4LQY.css": /*!***************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationNewItem-ue-H4LQY.css ***! \***************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-8950be04] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-navigation-entry[data-v-8950be04] { position: relative; display: flex; flex-shrink: 0; flex-wrap: wrap; box-sizing: border-box; width: 100%; min-height: 44px; transition: background-color var(--animation-quick) ease-in-out; transition: background-color .2s ease-in-out; border-radius: var(--border-radius-pill); } .app-navigation-entry-wrapper[data-v-8950be04] { position: relative; display: flex; flex-shrink: 0; flex-wrap: wrap; box-sizing: border-box; width: 100%; } .app-navigation-entry-wrapper.app-navigation-entry--collapsible:not(.app-navigation-entry--opened) > ul[data-v-8950be04] { display: none; } .app-navigation-entry.active[data-v-8950be04] { background-color: var(--color-primary-element) !important; } .app-navigation-entry.active[data-v-8950be04]:hover { background-color: var(--color-primary-element-hover) !important; } .app-navigation-entry.active .app-navigation-entry-link[data-v-8950be04], .app-navigation-entry.active .app-navigation-entry-button[data-v-8950be04] { color: var(--color-primary-element-text) !important; } .app-navigation-entry[data-v-8950be04]:focus-within, .app-navigation-entry[data-v-8950be04]:hover { background-color: var(--color-background-hover); } .app-navigation-entry.active .app-navigation-entry__children[data-v-8950be04], .app-navigation-entry:focus-within .app-navigation-entry__children[data-v-8950be04], .app-navigation-entry:hover .app-navigation-entry__children[data-v-8950be04] { background-color: var(--color-main-background); } .app-navigation-entry.active .app-navigation-entry__utils .app-navigation-entry__actions[data-v-8950be04], .app-navigation-entry.app-navigation-entry--deleted .app-navigation-entry__utils .app-navigation-entry__actions[data-v-8950be04], .app-navigation-entry:focus .app-navigation-entry__utils .app-navigation-entry__actions[data-v-8950be04], .app-navigation-entry:focus-within .app-navigation-entry__utils .app-navigation-entry__actions[data-v-8950be04], .app-navigation-entry:hover .app-navigation-entry__utils .app-navigation-entry__actions[data-v-8950be04] { display: inline-block; } .app-navigation-entry.app-navigation-entry--deleted > ul[data-v-8950be04] { display: none; } .app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-8950be04], .app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-8950be04] { padding-right: 14px; } .app-navigation-entry .app-navigation-entry-link[data-v-8950be04], .app-navigation-entry .app-navigation-entry-button[data-v-8950be04] { z-index: 100; display: flex; overflow: hidden; flex: 1 1 0; box-sizing: border-box; min-height: 44px; padding: 0; white-space: nowrap; color: var(--color-main-text); background-repeat: no-repeat; background-position: 14px center; background-size: 16px 16px; line-height: 44px; } .app-navigation-entry .app-navigation-entry-link .app-navigation-entry-icon[data-v-8950be04], .app-navigation-entry .app-navigation-entry-button .app-navigation-entry-icon[data-v-8950be04] { display: flex; align-items: center; flex: 0 0 44px; justify-content: center; width: 44px; height: 44px; background-size: 16px 16px; background-repeat: no-repeat; background-position: 14px center; } .app-navigation-entry .app-navigation-entry-link .app-navigation-entry__name[data-v-8950be04], .app-navigation-entry .app-navigation-entry-button .app-navigation-entry__name[data-v-8950be04] { overflow: hidden; max-width: 100%; white-space: nowrap; text-overflow: ellipsis; } .app-navigation-entry .app-navigation-entry-link .editingContainer[data-v-8950be04], .app-navigation-entry .app-navigation-entry-button .editingContainer[data-v-8950be04] { width: calc(100% - 44px); margin: auto; } .app-navigation-entry .app-navigation-entry-link[data-v-8950be04]:focus-visible, .app-navigation-entry .app-navigation-entry-button[data-v-8950be04]:focus-visible { box-shadow: 0 0 0 4px var(--color-main-background); outline: 2px solid var(--color-main-text); border-radius: var(--border-radius-pill); } .app-navigation-entry__children[data-v-8950be04] { position: relative; display: flex; flex: 0 1 auto; flex-direction: column; width: 100%; gap: var(--default-grid-baseline, 4px); } .app-navigation-entry__children .app-navigation-entry[data-v-8950be04] { display: inline-flex; flex-wrap: wrap; padding-left: 16px; } .app-navigation-entry__deleted[data-v-8950be04] { display: inline-flex; flex: 1 1 0; padding-left: 30px !important; } .app-navigation-entry__deleted .app-navigation-entry__deleted-description[data-v-8950be04] { position: relative; overflow: hidden; flex: 1 1 0; white-space: nowrap; text-overflow: ellipsis; line-height: 44px; } .app-navigation-entry__utils[data-v-8950be04] { display: flex; min-width: 44px; align-items: center; flex: 0 1 auto; justify-content: flex-end; } .app-navigation-entry__utils.app-navigation-entry__utils--display-actions .action-item.app-navigation-entry__actions[data-v-8950be04] { display: inline-block; } .app-navigation-entry__utils .app-navigation-entry__counter-wrapper[data-v-8950be04] { margin-right: calc(var(--default-grid-baseline) * 3); display: flex; align-items: center; flex: 0 1 auto; } .app-navigation-entry__utils .action-item.app-navigation-entry__actions[data-v-8950be04] { display: none; } .app-navigation-entry--editing .app-navigation-entry-edit[data-v-8950be04] { z-index: 250; opacity: 1; } .app-navigation-entry--deleted .app-navigation-entry-deleted[data-v-8950be04] { z-index: 250; transform: translate(0); } .app-navigation-entry--pinned[data-v-8950be04] { order: 2; margin-top: auto; } .app-navigation-entry--pinned ~ .app-navigation-entry--pinned[data-v-8950be04] { margin-top: 0; } [data-themes*=highcontrast] .app-navigation-entry[data-v-8950be04]:active { background-color: var(--color-primary-element-light-hover) !important; } .app-navigation-new-item__name[data-v-8950be04] { overflow: hidden; max-width: 100%; white-space: nowrap; text-overflow: ellipsis; padding-left: 7px; font-size: 14px; } .newItemContainer[data-v-8950be04] { width: calc(100% - 44px); margin: auto; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationSettings-Jx_6RpSn.css": /*!****************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationSettings-Jx_6RpSn.css ***! \****************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-4bd59bb1] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } #app-settings[data-v-4bd59bb1] { margin-top: auto; padding: 3px; } #app-settings__header[data-v-4bd59bb1] { box-sizing: border-box; margin: 0 3px 3px; } #app-settings__header .settings-button[data-v-4bd59bb1] { display: flex; flex: 1 1 0; height: 44px; width: 100%; padding: 0 14px 0 0; margin: 0; background-color: var(--color-main-background); box-shadow: none; border: 0; border-radius: var(--border-radius-pill); text-align: left; font-weight: 400; font-size: 100%; color: var(--color-main-text); line-height: 44px; } #app-settings__header .settings-button[data-v-4bd59bb1]:hover, #app-settings__header .settings-button[data-v-4bd59bb1]:focus { background-color: var(--color-background-hover); } #app-settings__header .settings-button__icon[data-v-4bd59bb1] { width: 44px; height: 44px; min-width: 44px; } #app-settings__header .settings-button__label[data-v-4bd59bb1] { overflow: hidden; max-width: 100%; white-space: nowrap; text-overflow: ellipsis; } #app-settings__content[data-v-4bd59bb1] { display: block; padding: 10px; margin-bottom: -3px; max-height: 300px; overflow-y: auto; box-sizing: border-box; } .slide-up-leave-active[data-v-4bd59bb1], .slide-up-enter-active[data-v-4bd59bb1] { transition-duration: var(--animation-slow); transition-property: max-height, padding; overflow-y: hidden !important; } .slide-up-enter[data-v-4bd59bb1], .slide-up-leave-to[data-v-4bd59bb1] { max-height: 0 !important; padding: 0 10px !important; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationSpacer-MfL8GeCN.css": /*!**************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationSpacer-MfL8GeCN.css ***! \**************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.app-navigation-spacer[data-v-c8233ec5] { flex-shrink: 0; order: 1; height: 22px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationToggle-3vMKtCQL.css": /*!**************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppNavigationToggle-3vMKtCQL.css ***! \**************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-e1dc2b3e] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-navigation-toggle-wrapper[data-v-e1dc2b3e] { position: absolute; top: var(--app-navigation-padding); right: calc(0px - var(--app-navigation-padding)); margin-right: -44px; } button.app-navigation-toggle[data-v-e1dc2b3e] { background-color: var(--color-main-background); } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppSettingsDialog-0eOo3ERv.css": /*!************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppSettingsDialog-0eOo3ERv.css ***! \************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-3e0025d1] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } [data-v-3e0025d1] .app-settings__navigation { min-width: 200px; margin-right: 20px; overflow-x: hidden; overflow-y: auto; position: relative; } [data-v-3e0025d1] .app-settings__content { box-sizing: border-box; padding-inline: 16px; } .navigation-list[data-v-3e0025d1] { height: 100%; box-sizing: border-box; overflow-y: auto; padding: 12px; } .navigation-list__link[data-v-3e0025d1] { display: flex; align-content: center; font-size: 16px; height: 44px; margin: 4px 0; line-height: 44px; border-radius: var(--border-radius-pill); font-weight: 700; padding: 0 20px; cursor: pointer; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; background-color: transparent; border: none; } .navigation-list__link[data-v-3e0025d1]:hover, .navigation-list__link[data-v-3e0025d1]:focus { background-color: var(--color-background-hover); } .navigation-list__link--active[data-v-3e0025d1] { background-color: var(--color-primary-element-light) !important; } .navigation-list__link--icon[data-v-3e0025d1] { padding-inline-start: 8px; gap: 4px; } .navigation-list__link-icon[data-v-3e0025d1] { display: flex; justify-content: center; align-content: center; width: 36px; max-width: 36px; } @media only screen and (max-width: 512px) { .app-settings[data-v-3e0025d1] .dialog__name { padding-inline-start: 16px; } } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppSettingsSection-ahfdhix_.css": /*!*************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppSettingsSection-ahfdhix_.css ***! \*************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-5162e6df] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-settings-section[data-v-5162e6df] { margin-bottom: 80px; } .app-settings-section__name[data-v-5162e6df] { font-size: 20px; margin: 0; padding: 20px 0; font-weight: 700; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppSidebar-YHd7DpMW.css": /*!*****************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppSidebar-YHd7DpMW.css ***! \*****************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon[data-v-2ae00fba] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-sidebar-tabs[data-v-2ae00fba] { display: flex; flex-direction: column; min-height: 0; flex: 1 1 100%; } .app-sidebar-tabs__nav[data-v-2ae00fba] { display: flex; justify-content: stretch; margin: 10px 8px 0; border-bottom: 1px solid var(--color-border); } .app-sidebar-tabs__nav[data-v-2ae00fba] .checkbox-radio-switch--button-variant { border: unset !important; border-radius: 0 !important; } .app-sidebar-tabs__nav[data-v-2ae00fba] .checkbox-radio-switch--button-variant .checkbox-content { padding: var(--default-grid-baseline); border-radius: var(--default-grid-baseline) var(--default-grid-baseline) 0 0 !important; margin: 0 !important; border-bottom: var(--default-grid-baseline) solid transparent !important; } .app-sidebar-tabs__nav[data-v-2ae00fba] .checkbox-radio-switch--button-variant .checkbox-content .checkbox-content__icon--checked > * { color: var(--color-main-text) !important; } .app-sidebar-tabs__nav[data-v-2ae00fba] .checkbox-radio-switch--button-variant.checkbox-radio-switch--checked .checkbox-radio-switch__content { background: transparent !important; color: var(--color-main-text) !important; border-bottom: var(--default-grid-baseline) solid var(--color-primary-element) !important; } .app-sidebar-tabs__tab[data-v-2ae00fba] { flex: 1 1; } .app-sidebar-tabs__tab.active[data-v-2ae00fba] { color: var(--color-primary-element); } .app-sidebar-tabs__tab-caption[data-v-2ae00fba] { flex: 0 1 100%; width: 100%; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; text-align: center; } .app-sidebar-tabs__tab-icon[data-v-2ae00fba] { display: flex; align-items: center; justify-content: center; background-size: 20px; } .app-sidebar-tabs__tab[data-v-2ae00fba] .checkbox-radio-switch__content { max-width: unset; } .app-sidebar-tabs__content[data-v-2ae00fba] { position: relative; min-height: 256px; height: 100%; } .app-sidebar-tabs__content--multiple[data-v-2ae00fba] > :not(section) { display: none; } .material-design-icon[data-v-2a227066] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-sidebar[data-v-2a227066] { z-index: 1500; top: 0; right: 0; display: flex; overflow-x: hidden; overflow-y: auto; flex-direction: column; flex-shrink: 0; width: 27vw; min-width: 300px; max-width: 500px; height: 100%; border-left: 1px solid var(--color-border); background: var(--color-main-background); } .app-sidebar .app-sidebar-header > .app-sidebar__close[data-v-2a227066] { position: absolute; z-index: 100; top: 6px; right: 6px; width: 44px; height: 44px; opacity: .7; border-radius: 22px; } .app-sidebar .app-sidebar-header > .app-sidebar__close[data-v-2a227066]:hover, .app-sidebar .app-sidebar-header > .app-sidebar__close[data-v-2a227066]:active, .app-sidebar .app-sidebar-header > .app-sidebar__close[data-v-2a227066]:focus { opacity: 1; background-color: #7f7f7f40; } .app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info[data-v-2a227066] { flex-direction: row; } .app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__figure[data-v-2a227066] { z-index: 2; width: 70px; height: 70px; margin: 9px; border-radius: 3px; flex: 0 0 auto; } .app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc[data-v-2a227066] { padding-left: 0; flex: 1 1 auto; min-width: 0; padding-right: 94px; padding-top: 10px; } .app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc.app-sidebar-header__desc--without-actions[data-v-2a227066] { padding-right: 50px; } .app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc .app-sidebar-header__tertiary-actions[data-v-2a227066] { z-index: 3; position: absolute; top: 9px; left: -44px; gap: 0; } .app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc .app-sidebar-header__menu[data-v-2a227066] { top: 6px; right: 50px; background-color: transparent; position: absolute; } .app-sidebar .app-sidebar-header:not(.app-sidebar-header--with-figure) .app-sidebar-header__menu[data-v-2a227066] { position: absolute; top: 6px; right: 50px; } .app-sidebar .app-sidebar-header:not(.app-sidebar-header--with-figure) .app-sidebar-header__desc[data-v-2a227066] { padding-right: 94px; } .app-sidebar .app-sidebar-header:not(.app-sidebar-header--with-figure) .app-sidebar-header__desc.app-sidebar-header__desc--without-actions[data-v-2a227066] { padding-right: 50px; } .app-sidebar .app-sidebar-header .app-sidebar-header__info[data-v-2a227066] { display: flex; flex-direction: column; } .app-sidebar .app-sidebar-header__figure[data-v-2a227066] { width: 100%; height: 250px; max-height: 250px; background-repeat: no-repeat; background-position: center; background-size: contain; } .app-sidebar .app-sidebar-header__figure--with-action[data-v-2a227066] { cursor: pointer; } .app-sidebar .app-sidebar-header__desc[data-v-2a227066] { position: relative; display: flex; flex-direction: row; justify-content: center; align-items: center; padding: 18px 6px 18px 9px; gap: 0 4px; } .app-sidebar .app-sidebar-header__desc--with-tertiary-action[data-v-2a227066] { padding-left: 6px; } .app-sidebar .app-sidebar-header__desc--editable .app-sidebar-header__mainname-form[data-v-2a227066], .app-sidebar .app-sidebar-header__desc--with-subname--editable .app-sidebar-header__mainname-form[data-v-2a227066] { margin-top: -2px; margin-bottom: -2px; } .app-sidebar .app-sidebar-header__desc--with-subname--editable .app-sidebar-header__subname[data-v-2a227066] { margin-top: -2px; } .app-sidebar .app-sidebar-header__desc .app-sidebar-header__tertiary-actions[data-v-2a227066] { display: flex; height: 44px; width: 44px; justify-content: center; flex: 0 0 auto; } .app-sidebar .app-sidebar-header__desc .app-sidebar-header__tertiary-actions .app-sidebar-header__star[data-v-2a227066] { box-shadow: none; } .app-sidebar .app-sidebar-header__desc .app-sidebar-header__tertiary-actions .app-sidebar-header__star[data-v-2a227066]:not([aria-pressed=true]):hover { box-shadow: none; background-color: var(--color-background-hover); } .app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container[data-v-2a227066] { flex: 1 1 auto; display: flex; flex-direction: column; justify-content: center; min-width: 0; } .app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container[data-v-2a227066] { display: flex; align-items: center; min-height: 44px; } .app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname[data-v-2a227066] { padding: 0; min-height: 30px; font-size: 20px; line-height: 30px; } .app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname[data-v-2a227066] .linkified { cursor: pointer; text-decoration: underline; margin: 0; } .app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname-form[data-v-2a227066] { display: flex; flex: 1 1 auto; align-items: center; } .app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname-form input.app-sidebar-header__mainname-input[data-v-2a227066] { flex: 1 1 auto; margin: 0; padding: 7px; font-size: 20px; font-weight: 700; } .app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__menu[data-v-2a227066] { height: 44px; width: 44px; border-radius: 22px; background-color: #7f7f7f40; margin-left: 5px; } .app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname[data-v-2a227066], .app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__subname[data-v-2a227066] { overflow: hidden; width: 100%; margin: 0; white-space: nowrap; text-overflow: ellipsis; } .app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__subname[data-v-2a227066] { padding: 0; opacity: .7; font-size: var(--default-font-size); } .app-sidebar .app-sidebar-header__description[data-v-2a227066] { display: flex; align-items: center; margin: 0 10px; } @media only screen and (max-width: 512px) { .app-sidebar[data-v-2a227066] { width: 100vw; max-width: 100vw; } } .slide-right-leave-active[data-v-2a227066], .slide-right-enter-active[data-v-2a227066] { transition-duration: var(--animation-quick); transition-property: max-width, min-width; } .slide-right-enter-to[data-v-2a227066], .slide-right-leave[data-v-2a227066] { min-width: 300px; max-width: 500px; } .slide-right-enter[data-v-2a227066], .slide-right-leave-to[data-v-2a227066] { min-width: 0 !important; max-width: 0 !important; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-sidebar-header__description button, .app-sidebar-header__description .button, .app-sidebar-header__description input[type=button], .app-sidebar-header__description input[type=submit], .app-sidebar-header__description input[type=reset] { padding: 6px 22px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppSidebarTab-FywbKxqo.css": /*!********************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAppSidebarTab-FywbKxqo.css ***! \********************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-ef10d14f] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-sidebar__tab[data-v-ef10d14f] { display: none; padding: 10px; min-height: 100%; max-height: 100%; height: 100%; overflow: auto; } .app-sidebar__tab[data-v-ef10d14f]:focus { border-color: var(--color-primary-element); box-shadow: 0 0 .2em var(--color-primary-element); outline: 0; } .app-sidebar__tab--active[data-v-ef10d14f] { display: block; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAvatar-5H9cqcD1.css": /*!*************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcAvatar-5H9cqcD1.css ***! \*************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-de3f465f] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .avatardiv[data-v-de3f465f] { position: relative; display: inline-block; width: var(--size); height: var(--size); } .avatardiv--unknown[data-v-de3f465f] { position: relative; background-color: var(--color-main-background); white-space: normal; } .avatardiv[data-v-de3f465f]:not(.avatardiv--unknown) { background-color: var(--color-main-background) !important; box-shadow: 0 0 5px #0000000d inset; } .avatardiv--with-menu[data-v-de3f465f] { cursor: pointer; } .avatardiv--with-menu .action-item[data-v-de3f465f] { position: absolute; top: 0; left: 0; } .avatardiv--with-menu[data-v-de3f465f] .action-item__menutoggle { cursor: pointer; opacity: 0; } .avatardiv--with-menu[data-v-de3f465f]:focus-within .action-item__menutoggle, .avatardiv--with-menu[data-v-de3f465f]:hover .action-item__menutoggle, .avatardiv--with-menu.avatardiv--with-menu-loading[data-v-de3f465f] .action-item__menutoggle { opacity: 1; } .avatardiv--with-menu:focus-within img[data-v-de3f465f], .avatardiv--with-menu:hover img[data-v-de3f465f], .avatardiv--with-menu.avatardiv--with-menu-loading img[data-v-de3f465f] { opacity: .3; } .avatardiv--with-menu[data-v-de3f465f] .action-item__menutoggle, .avatardiv--with-menu img[data-v-de3f465f] { transition: opacity var(--animation-quick); } .avatardiv--with-menu[data-v-de3f465f] .button-vue, .avatardiv--with-menu[data-v-de3f465f] .button-vue__icon { height: var(--size); min-height: var(--size); width: var(--size) !important; min-width: var(--size); } .avatardiv .avatardiv__initials-wrapper[data-v-de3f465f] { display: block; height: var(--size); width: var(--size); background-color: var(--color-main-background); border-radius: 50%; } .avatardiv .avatardiv__initials-wrapper .avatardiv__initials[data-v-de3f465f] { position: absolute; top: 0; left: 0; display: block; width: 100%; text-align: center; font-weight: 400; } .avatardiv img[data-v-de3f465f] { width: 100%; height: 100%; object-fit: cover; } .avatardiv .material-design-icon[data-v-de3f465f] { width: var(--size); height: var(--size); } .avatardiv .avatardiv__user-status[data-v-de3f465f] { box-sizing: border-box; position: absolute; right: -4px; bottom: -4px; min-height: 18px; min-width: 18px; max-height: 18px; max-width: 18px; height: 40%; width: 40%; line-height: 15px; font-size: var(--default-font-size); border: 2px solid var(--color-main-background); background-color: var(--color-main-background); background-repeat: no-repeat; background-size: 16px; background-position: center; border-radius: 50%; } .acli:hover .avatardiv .avatardiv__user-status[data-v-de3f465f] { border-color: var(--color-background-hover); background-color: var(--color-background-hover); } .acli.active .avatardiv .avatardiv__user-status[data-v-de3f465f] { border-color: var(--color-primary-element-light); background-color: var(--color-primary-element-light); } .avatardiv .avatardiv__user-status--icon[data-v-de3f465f] { border: none; background-color: transparent; } .avatardiv .popovermenu-wrapper[data-v-de3f465f] { position: relative; display: inline-block; } .avatar-class-icon[data-v-de3f465f] { display: block; border-radius: 50%; background-color: var(--color-background-darker); height: 100%; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcBreadcrumb-HspaFygg.css": /*!*****************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcBreadcrumb-HspaFygg.css ***! \*****************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-fe4740ac] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .vue-crumb[data-v-fe4740ac] { background-image: none; display: inline-flex; height: 44px; padding: 0; } .vue-crumb[data-v-fe4740ac]:last-child { min-width: 0; } .vue-crumb:last-child .vue-crumb__separator[data-v-fe4740ac] { display: none; } .vue-crumb--hidden[data-v-fe4740ac] { display: none; } .vue-crumb__separator[data-v-fe4740ac] { padding: 0; color: var(--color-text-maxcontrast); } .vue-crumb.vue-crumb--hovered[data-v-fe4740ac] .button-vue { background-color: var(--color-background-dark); color: var(--color-main-text); } .vue-crumb[data-v-fe4740ac]:not(:last-child) .button-vue { color: var(--color-text-maxcontrast); } .vue-crumb[data-v-fe4740ac]:not(:last-child) .button-vue:hover, .vue-crumb[data-v-fe4740ac]:not(:last-child) .button-vue:focus { background-color: var(--color-background-dark); color: var(--color-main-text); } .vue-crumb[data-v-fe4740ac]:not(:last-child) .button-vue__text { font-weight: 400; } .vue-crumb[data-v-fe4740ac] .button-vue__text { margin: 0; } .vue-crumb[data-v-fe4740ac]:not(.dropdown) .action-item { max-width: 100%; } .vue-crumb[data-v-fe4740ac]:not(.dropdown) .action-item .button-vue { padding: 0 4px 0 16px; max-width: 100%; } .vue-crumb[data-v-fe4740ac]:not(.dropdown) .action-item .button-vue__wrapper { flex-direction: row-reverse; } .vue-crumb[data-v-fe4740ac]:not(.dropdown) .action-item.action-item--open .action-item__menutoggle { background-color: var(--color-background-dark); color: var(--color-main-text); } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcBreadcrumbs-KBV0Jccv.css": /*!******************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcBreadcrumbs-KBV0Jccv.css ***! \******************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-7d882912] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .breadcrumb[data-v-7d882912] { width: 100%; flex-grow: 1; display: inline-flex; align-items: center; } .breadcrumb--collapsed[data-v-7d882912] .vue-crumb:last-child { min-width: 100px; } .breadcrumb nav[data-v-7d882912] { flex-shrink: 1; min-width: 0; } .breadcrumb .breadcrumb__crumbs[data-v-7d882912] { max-width: 100%; } .breadcrumb .breadcrumb__crumbs[data-v-7d882912], .breadcrumb .breadcrumb__actions[data-v-7d882912] { display: inline-flex; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcButton-4Wj3KJn8.css": /*!*************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcButton-4Wj3KJn8.css ***! \*************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-fe3b5af5] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .button-vue[data-v-fe3b5af5] { position: relative; width: fit-content; overflow: hidden; border: 0; padding: 0; font-size: var(--default-font-size); font-weight: 700; min-height: 44px; min-width: 44px; display: flex; align-items: center; justify-content: center; cursor: pointer; border-radius: 22px; transition-property: color, border-color, background-color; transition-duration: .1s; transition-timing-function: linear; color: var(--color-primary-element-light-text); background-color: var(--color-primary-element-light); } .button-vue *[data-v-fe3b5af5], .button-vue span[data-v-fe3b5af5] { cursor: pointer; } .button-vue[data-v-fe3b5af5]:focus { outline: none; } .button-vue[data-v-fe3b5af5]:disabled { cursor: default; opacity: .5; filter: saturate(.7); } .button-vue:disabled *[data-v-fe3b5af5] { cursor: default; } .button-vue[data-v-fe3b5af5]:hover:not(:disabled) { background-color: var(--color-primary-element-light-hover); } .button-vue[data-v-fe3b5af5]:active { background-color: var(--color-primary-element-light); } .button-vue__wrapper[data-v-fe3b5af5] { display: inline-flex; align-items: center; justify-content: center; width: 100%; } .button-vue--end .button-vue__wrapper[data-v-fe3b5af5] { justify-content: end; } .button-vue--start .button-vue__wrapper[data-v-fe3b5af5] { justify-content: start; } .button-vue--reverse .button-vue__wrapper[data-v-fe3b5af5] { flex-direction: row-reverse; } .button-vue--reverse.button-vue--icon-and-text[data-v-fe3b5af5] { padding-inline: calc(var(--default-grid-baseline) * 4) var(--default-grid-baseline); } .button-vue__icon[data-v-fe3b5af5] { height: 44px; width: 44px; min-height: 44px; min-width: 44px; display: flex; justify-content: center; align-items: center; } .button-vue__text[data-v-fe3b5af5] { font-weight: 700; margin-bottom: 1px; padding: 2px 0; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .button-vue--icon-only[data-v-fe3b5af5] { width: 44px !important; } .button-vue--text-only[data-v-fe3b5af5] { padding: 0 12px; } .button-vue--text-only .button-vue__text[data-v-fe3b5af5] { margin-left: 4px; margin-right: 4px; } .button-vue--icon-and-text[data-v-fe3b5af5] { padding-block: 0; padding-inline: var(--default-grid-baseline) calc(var(--default-grid-baseline) * 4); } .button-vue--wide[data-v-fe3b5af5] { width: 100%; } .button-vue[data-v-fe3b5af5]:focus-visible { outline: 2px solid var(--color-main-text) !important; box-shadow: 0 0 0 4px var(--color-main-background) !important; } .button-vue:focus-visible.button-vue--vue-tertiary-on-primary[data-v-fe3b5af5] { outline: 2px solid var(--color-primary-element-text); border-radius: var(--border-radius); background-color: transparent; } .button-vue--vue-primary[data-v-fe3b5af5] { background-color: var(--color-primary-element); color: var(--color-primary-element-text); } .button-vue--vue-primary[data-v-fe3b5af5]:hover:not(:disabled) { background-color: var(--color-primary-element-hover); } .button-vue--vue-primary[data-v-fe3b5af5]:active { background-color: var(--color-primary-element); } .button-vue--vue-secondary[data-v-fe3b5af5] { color: var(--color-primary-element-light-text); background-color: var(--color-primary-element-light); } .button-vue--vue-secondary[data-v-fe3b5af5]:hover:not(:disabled) { color: var(--color-primary-element-light-text); background-color: var(--color-primary-element-light-hover); } .button-vue--vue-tertiary[data-v-fe3b5af5] { color: var(--color-main-text); background-color: transparent; } .button-vue--vue-tertiary[data-v-fe3b5af5]:hover:not(:disabled) { background-color: var(--color-background-hover); } .button-vue--vue-tertiary-no-background[data-v-fe3b5af5] { color: var(--color-main-text); background-color: transparent; } .button-vue--vue-tertiary-no-background[data-v-fe3b5af5]:hover:not(:disabled) { background-color: transparent; } .button-vue--vue-tertiary-on-primary[data-v-fe3b5af5] { color: var(--color-primary-element-text); background-color: transparent; } .button-vue--vue-tertiary-on-primary[data-v-fe3b5af5]:hover:not(:disabled) { background-color: transparent; } .button-vue--vue-success[data-v-fe3b5af5] { background-color: var(--color-success); color: #fff; } .button-vue--vue-success[data-v-fe3b5af5]:hover:not(:disabled) { background-color: var(--color-success-hover); } .button-vue--vue-success[data-v-fe3b5af5]:active { background-color: var(--color-success); } .button-vue--vue-warning[data-v-fe3b5af5] { background-color: var(--color-warning); color: #fff; } .button-vue--vue-warning[data-v-fe3b5af5]:hover:not(:disabled) { background-color: var(--color-warning-hover); } .button-vue--vue-warning[data-v-fe3b5af5]:active { background-color: var(--color-warning); } .button-vue--vue-error[data-v-fe3b5af5] { background-color: var(--color-error); color: #fff; } .button-vue--vue-error[data-v-fe3b5af5]:hover:not(:disabled) { background-color: var(--color-error-hover); } .button-vue--vue-error[data-v-fe3b5af5]:active { background-color: var(--color-error); } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcCheckboxRadioSwitch-mgKotCbU.css": /*!**************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcCheckboxRadioSwitch-mgKotCbU.css ***! \**************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon[data-v-2672ad1a] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .checkbox-content[data-v-2672ad1a] { display: flex; align-items: center; flex-direction: row; gap: 4px; -webkit-user-select: none; user-select: none; min-height: 44px; border-radius: 44px; padding: 4px calc((44px - var(--icon-height)) / 2); width: 100%; max-width: fit-content; } .checkbox-content__text[data-v-2672ad1a] { flex: 1 0; display: flex; align-items: center; } .checkbox-content__text[data-v-2672ad1a]:empty { display: none; } .checkbox-content__icon > *[data-v-2672ad1a] { width: var(--icon-size); height: var(--icon-size); } .checkbox-content--button-variant .checkbox-content__icon:not(.checkbox-content__icon--checked) > *[data-v-2672ad1a] { color: var(--color-primary-element); } .checkbox-content--button-variant .checkbox-content__icon--checked > *[data-v-2672ad1a] { color: var(--color-primary-element-text); } .checkbox-content--has-text[data-v-2672ad1a] { padding-right: 14px; } .checkbox-content:not(.checkbox-content--button-variant) .checkbox-content__icon > *[data-v-2672ad1a] { color: var(--color-primary-element); } .checkbox-content[data-v-2672ad1a], .checkbox-content *[data-v-2672ad1a] { cursor: pointer; flex-shrink: 0; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-2603be83] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .checkbox-radio-switch[data-v-2603be83] { display: flex; align-items: center; color: var(--color-main-text); background-color: transparent; font-size: var(--default-font-size); line-height: var(--default-line-height); padding: 0; position: relative; } .checkbox-radio-switch__input[data-v-2603be83] { position: absolute; z-index: -1; opacity: 0 !important; width: var(--icon-size); height: var(--icon-size); margin: 4px 14px; } .checkbox-radio-switch__input:focus-visible + .checkbox-radio-switch__content[data-v-2603be83], .checkbox-radio-switch__input[data-v-2603be83]:focus-visible { outline: 2px solid var(--color-main-text); border-color: var(--color-main-background); outline-offset: -2px; } .checkbox-radio-switch--disabled .checkbox-radio-switch__content[data-v-2603be83] { opacity: .5; } .checkbox-radio-switch--disabled .checkbox-radio-switch__content[data-v-2603be83] .checkbox-radio-switch__icon > * { color: var(--color-main-text); } .checkbox-radio-switch:not(.checkbox-radio-switch--disabled, .checkbox-radio-switch--checked):focus-within .checkbox-radio-switch__content[data-v-2603be83], .checkbox-radio-switch:not(.checkbox-radio-switch--disabled, .checkbox-radio-switch--checked) .checkbox-radio-switch__content[data-v-2603be83]:hover { background-color: var(--color-background-hover); } .checkbox-radio-switch--checked:not(.checkbox-radio-switch--disabled):focus-within .checkbox-radio-switch__content[data-v-2603be83], .checkbox-radio-switch--checked:not(.checkbox-radio-switch--disabled) .checkbox-radio-switch__content[data-v-2603be83]:hover { background-color: var(--color-primary-element-hover); } .checkbox-radio-switch--checked:not(.checkbox-radio-switch--button-variant):not(.checkbox-radio-switch--disabled):focus-within .checkbox-radio-switch__content[data-v-2603be83], .checkbox-radio-switch--checked:not(.checkbox-radio-switch--button-variant):not(.checkbox-radio-switch--disabled) .checkbox-radio-switch__content[data-v-2603be83]:hover { background-color: var(--color-primary-element-light-hover); } .checkbox-radio-switch-switch[data-v-2603be83]:not(.checkbox-radio-switch--checked) .checkbox-radio-switch__icon > * { color: var(--color-text-maxcontrast); } .checkbox-radio-switch-switch.checkbox-radio-switch--disabled.checkbox-radio-switch--checked[data-v-2603be83] .checkbox-radio-switch__icon > * { color: var(--color-primary-element-light); } .checkbox-radio-switch--button-variant.checkbox-radio-switch[data-v-2603be83] { border: 2px solid var(--color-border-maxcontrast); overflow: hidden; } .checkbox-radio-switch--button-variant.checkbox-radio-switch--checked[data-v-2603be83] { font-weight: 700; } .checkbox-radio-switch--button-variant.checkbox-radio-switch--checked .checkbox-radio-switch__content[data-v-2603be83] { background-color: var(--color-primary-element); color: var(--color-primary-element-text); } .checkbox-radio-switch--button-variant[data-v-2603be83] .checkbox-radio-switch__text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: 100%; } .checkbox-radio-switch--button-variant[data-v-2603be83]:not(.checkbox-radio-switch--checked) .checkbox-radio-switch__icon > * { color: var(--color-main-text); } .checkbox-radio-switch--button-variant[data-v-2603be83] .checkbox-radio-switch__icon:empty { display: none; } .checkbox-radio-switch--button-variant[data-v-2603be83]:not(.checkbox-radio-switch--button-variant-v-grouped):not(.checkbox-radio-switch--button-variant-h-grouped), .checkbox-radio-switch--button-variant .checkbox-radio-switch__content[data-v-2603be83] { border-radius: calc(var(--default-clickable-area) / 2); } .checkbox-radio-switch--button-variant-v-grouped .checkbox-radio-switch__content[data-v-2603be83] { flex-basis: 100%; max-width: unset; } .checkbox-radio-switch--button-variant-v-grouped[data-v-2603be83]:first-of-type { border-top-left-radius: calc(var(--default-clickable-area) / 2 + 2px); border-top-right-radius: calc(var(--default-clickable-area) / 2 + 2px); } .checkbox-radio-switch--button-variant-v-grouped[data-v-2603be83]:last-of-type { border-bottom-left-radius: calc(var(--default-clickable-area) / 2 + 2px); border-bottom-right-radius: calc(var(--default-clickable-area) / 2 + 2px); } .checkbox-radio-switch--button-variant-v-grouped[data-v-2603be83]:not(:last-of-type) { border-bottom: 0 !important; } .checkbox-radio-switch--button-variant-v-grouped:not(:last-of-type) .checkbox-radio-switch__content[data-v-2603be83] { margin-bottom: 2px; } .checkbox-radio-switch--button-variant-v-grouped[data-v-2603be83]:not(:first-of-type) { border-top: 0 !important; } .checkbox-radio-switch--button-variant-h-grouped[data-v-2603be83]:first-of-type { border-top-left-radius: calc(var(--default-clickable-area) / 2 + 2px); border-bottom-left-radius: calc(var(--default-clickable-area) / 2 + 2px); } .checkbox-radio-switch--button-variant-h-grouped[data-v-2603be83]:last-of-type { border-top-right-radius: calc(var(--default-clickable-area) / 2 + 2px); border-bottom-right-radius: calc(var(--default-clickable-area) / 2 + 2px); } .checkbox-radio-switch--button-variant-h-grouped[data-v-2603be83]:not(:last-of-type) { border-right: 0 !important; } .checkbox-radio-switch--button-variant-h-grouped:not(:last-of-type) .checkbox-radio-switch__content[data-v-2603be83] { margin-right: 2px; } .checkbox-radio-switch--button-variant-h-grouped[data-v-2603be83]:not(:first-of-type) { border-left: 0 !important; } .checkbox-radio-switch--button-variant-h-grouped[data-v-2603be83] .checkbox-radio-switch__text { text-align: center; } .checkbox-radio-switch--button-variant-h-grouped .checkbox-radio-switch__content[data-v-2603be83] { flex-direction: column; justify-content: center; width: 100%; margin: 0; gap: 0; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcColorPicker-PzIRM1j1.css": /*!******************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcColorPicker-PzIRM1j1.css ***! \******************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-ced724c4] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .color-picker[data-v-ced724c4] { display: flex; overflow: hidden; align-content: flex-end; flex-direction: column; justify-content: space-between; box-sizing: content-box !important; width: 176px; padding: 8px; border-radius: 3px; } .color-picker--advanced-fields[data-v-ced724c4] { width: 264px; } .color-picker__simple[data-v-ced724c4] { display: grid; grid-template-columns: repeat(auto-fit, 44px); grid-auto-rows: 44px; } .color-picker__simple-color-circle[data-v-ced724c4] { display: flex; align-items: center; justify-content: center; width: 34px; height: 34px; min-height: 34px; margin: auto; padding: 0; color: #fff; border: 1px solid rgba(0, 0, 0, .25); border-radius: 50%; font-size: 16px; } .color-picker__simple-color-circle[data-v-ced724c4]:focus-within { outline: 2px solid var(--color-main-text); } .color-picker__simple-color-circle[data-v-ced724c4]:hover { opacity: .6; } .color-picker__simple-color-circle--active[data-v-ced724c4] { width: 38px; height: 38px; min-height: 38px; transition: all .1s ease-in-out; opacity: 1 !important; } .color-picker__advanced[data-v-ced724c4] { box-shadow: none !important; } .color-picker__navigation[data-v-ced724c4] { display: flex; flex-direction: row; justify-content: space-between; margin-top: 10px; } [data-v-ced724c4] .vc-chrome { width: unset; background-color: var(--color-main-background); } [data-v-ced724c4] .vc-chrome-color-wrap { width: 30px; height: 30px; } [data-v-ced724c4] .vc-chrome-active-color { width: 34px; height: 34px; border-radius: 17px; } [data-v-ced724c4] .vc-chrome-body { padding: 14px 0 0; background-color: var(--color-main-background); } [data-v-ced724c4] .vc-chrome-body .vc-input__input { box-shadow: none; } [data-v-ced724c4] .vc-chrome-toggle-btn { filter: var(--background-invert-if-dark); } [data-v-ced724c4] .vc-chrome-saturation-wrap { border-radius: 3px; } [data-v-ced724c4] .vc-chrome-saturation-circle { width: 20px; height: 20px; } .slide-enter[data-v-ced724c4] { transform: translate(-50%); opacity: 0; } .slide-enter-to[data-v-ced724c4], .slide-leave[data-v-ced724c4] { transform: translate(0); opacity: 1; } .slide-leave-to[data-v-ced724c4] { transform: translate(-50%); opacity: 0; } .slide-enter-active[data-v-ced724c4], .slide-leave-active[data-v-ced724c4] { transition: all 50ms ease-in-out; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcContent-LWR23l9i.css": /*!**************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcContent-LWR23l9i.css ***! \**************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } #skip-actions.vue-skip-actions:focus-within { top: 0 !important; left: 0 !important; width: 100vw; height: 100vh; padding: var(--body-container-margin) !important; -webkit-backdrop-filter: brightness(50%); backdrop-filter: brightness(50%); } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-cfc84a6c] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .vue-skip-actions__container[data-v-cfc84a6c] { background-color: var(--color-main-background); border-radius: var(--border-radius-large); padding: 22px; } .vue-skip-actions__headline[data-v-cfc84a6c] { font-weight: 700; font-size: 20px; line-height: 30px; margin-bottom: 12px; } .vue-skip-actions__buttons[data-v-cfc84a6c] { display: flex; flex-wrap: wrap; gap: 12px; } .vue-skip-actions__buttons > *[data-v-cfc84a6c] { flex: 1 0 fit-content; } .vue-skip-actions__image[data-v-cfc84a6c] { margin-top: 12px; } .content[data-v-cfc84a6c] { box-sizing: border-box; margin: var(--body-container-margin); margin-top: 50px; display: flex; width: calc(100% - var(--body-container-margin) * 2); border-radius: var(--body-container-radius); height: var(--body-height); overflow: hidden; padding: 0; } .content[data-v-cfc84a6c]:not(.with-sidebar--full) { position: fixed; } .content[data-v-cfc84a6c] * { box-sizing: border-box; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcCounterBubble-rgkmqN46.css": /*!********************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcCounterBubble-rgkmqN46.css ***! \********************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-b318b0e4] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .counter-bubble__counter[data-v-b318b0e4] { font-size: calc(var(--default-font-size) * .8); overflow: hidden; width: fit-content; max-width: 44px; text-align: center; text-overflow: ellipsis; line-height: 1em; padding: 4px 6px; border-radius: var(--border-radius-pill); background-color: var(--color-primary-element-light); font-weight: 700; color: var(--color-primary-element-light-text); } .counter-bubble__counter .active[data-v-b318b0e4] { color: var(--color-main-background); background-color: var(--color-primary-element-light); } .counter-bubble__counter--highlighted[data-v-b318b0e4] { color: var(--color-primary-element-text); background-color: var(--color-primary-element); } .counter-bubble__counter--highlighted.active[data-v-b318b0e4] { color: var(--color-primary-element); background-color: var(--color-main-background); } .counter-bubble__counter--outlined[data-v-b318b0e4] { color: var(--color-primary-element); background: transparent; box-shadow: inset 0 0 0 2px; } .counter-bubble__counter--outlined.active[data-v-b318b0e4] { color: var(--color-main-background); box-shadow: inset 0 0 0 2px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcDashboardWidget-01deRW9Z.css": /*!**********************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcDashboardWidget-01deRW9Z.css ***! \**********************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-1efcbeee] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .dashboard-widget[data-v-1efcbeee] .empty-content { text-align: center; padding-top: 5vh; } .dashboard-widget[data-v-1efcbeee] .empty-content.half-screen { padding-top: 0; margin-bottom: 1vh; } .more[data-v-1efcbeee] { display: block; text-align: center; color: var(--color-text-maxcontrast); line-height: 60px; cursor: pointer; } .more[data-v-1efcbeee]:hover, .more[data-v-1efcbeee]:focus { background-color: var(--color-background-hover); border-radius: var(--border-radius-large); color: var(--color-main-text); } .item-list__entry[data-v-1efcbeee] { display: flex; align-items: flex-start; padding: 8px; } .item-list__entry .item-avatar[data-v-1efcbeee] { position: relative; margin-top: auto; margin-bottom: auto; background-color: var(--color-background-dark) !important; } .item-list__entry .item__details[data-v-1efcbeee] { padding-left: 8px; max-height: 44px; flex-grow: 1; overflow: hidden; display: flex; flex-direction: column; } .item-list__entry .item__details h3[data-v-1efcbeee], .item-list__entry .item__details .message[data-v-1efcbeee] { white-space: nowrap; background-color: var(--color-background-dark); } .item-list__entry .item__details h3[data-v-1efcbeee] { font-size: 100%; margin: 0; } .item-list__entry .item__details .message[data-v-1efcbeee] { width: 80%; height: 15px; margin-top: 5px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcDashboardWidgetItem-OL--xR_P.css": /*!**************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcDashboardWidgetItem-OL--xR_P.css ***! \**************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-a688e724] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .item-list__entry[data-v-a688e724] { display: flex; align-items: flex-start; position: relative; padding: 8px; } .item-list__entry[data-v-a688e724]:hover, .item-list__entry[data-v-a688e724]:focus { background-color: var(--color-background-hover); border-radius: var(--border-radius-large); } .item-list__entry .item-avatar[data-v-a688e724] { position: relative; margin-top: auto; margin-bottom: auto; } .item-list__entry .item__details[data-v-a688e724] { padding-left: 8px; max-height: 44px; flex-grow: 1; overflow: hidden; display: flex; flex-direction: column; justify-content: center; min-height: 44px; } .item-list__entry .item__details h3[data-v-a688e724], .item-list__entry .item__details .message[data-v-a688e724] { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .item-list__entry .item__details .message span[data-v-a688e724] { width: 10px; display: inline-block; margin-bottom: -3px; } .item-list__entry .item__details h3[data-v-a688e724] { font-size: 100%; margin: 0; } .item-list__entry .item__details .message[data-v-a688e724] { width: 100%; color: var(--color-text-maxcontrast); } .item-list__entry .item-icon[data-v-a688e724] { position: relative; width: 14px; height: 14px; margin: 27px -3px 0 -7px; } .item-list__entry button.primary[data-v-a688e724] { padding: 21px; margin: 0; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcDateTimePicker-TArRbMs-.css": /*!*********************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcDateTimePicker-TArRbMs-.css ***! \*********************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js"); /* harmony import */ var _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); // Imports var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20width=%2724%27%20height=%2724%27%20fill=%27%23222%27%3e%3cpath%20d=%27M18.4%207.4L17%206l-6%206%206%206%201.4-1.4-4.6-4.6%204.6-4.6m-6%200L11%206l-6%206%206%206%201.4-1.4L7.8%2012l4.6-4.6z%27/%3e%3c/svg%3e */ "data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20width=%2724%27%20height=%2724%27%20fill=%27%23222%27%3e%3cpath%20d=%27M18.4%207.4L17%206l-6%206%206%206%201.4-1.4-4.6-4.6%204.6-4.6m-6%200L11%206l-6%206%206%206%201.4-1.4L7.8%2012l4.6-4.6z%27/%3e%3c/svg%3e"), __webpack_require__.b); var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20width=%2724%27%20height=%2724%27%20fill=%27%23222%27%3e%3cpath%20d=%27M15.4%2016.6L10.8%2012l4.6-4.6L14%206l-6%206%206%206%201.4-1.4z%27/%3e%3c/svg%3e */ "data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20width=%2724%27%20height=%2724%27%20fill=%27%23222%27%3e%3cpath%20d=%27M15.4%2016.6L10.8%2012l4.6-4.6L14%206l-6%206%206%206%201.4-1.4z%27/%3e%3c/svg%3e"), __webpack_require__.b); var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20width=%2724%27%20height=%2724%27%20fill=%27%23222%27%3e%3cpath%20d=%27M8.6%2016.6l4.6-4.6-4.6-4.6L10%206l6%206-6%206-1.4-1.4z%27/%3e%3c/svg%3e */ "data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20width=%2724%27%20height=%2724%27%20fill=%27%23222%27%3e%3cpath%20d=%27M8.6%2016.6l4.6-4.6-4.6-4.6L10%206l6%206-6%206-1.4-1.4z%27/%3e%3c/svg%3e"), __webpack_require__.b); var ___CSS_LOADER_URL_IMPORT_3___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20width=%2724%27%20height=%2724%27%20fill=%27%23222%27%3e%3cpath%20d=%27M5.6%207.4L7%206l6%206-6%206-1.4-1.4%204.6-4.6-4.6-4.6m6%200L13%206l6%206-6%206-1.4-1.4%204.6-4.6-4.6-4.6z%27/%3e%3c/svg%3e */ "data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20width=%2724%27%20height=%2724%27%20fill=%27%23222%27%3e%3cpath%20d=%27M5.6%207.4L7%206l6%206-6%206-1.4-1.4%204.6-4.6-4.6-4.6m6%200L13%206l6%206-6%206-1.4-1.4%204.6-4.6-4.6-4.6z%27/%3e%3c/svg%3e"), __webpack_require__.b); var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); var ___CSS_LOADER_URL_REPLACEMENT_0___ = _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); var ___CSS_LOADER_URL_REPLACEMENT_1___ = _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___); var ___CSS_LOADER_URL_REPLACEMENT_2___ = _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___); var ___CSS_LOADER_URL_REPLACEMENT_3___ = _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_3___); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .mx-icon-left:before, .mx-icon-right:before, .mx-icon-double-left:before, .mx-icon-double-right:before, .mx-icon-double-left:after, .mx-icon-double-right:after { content: ""; position: relative; top: -1px; display: inline-block; width: 10px; height: 10px; vertical-align: middle; border-style: solid; border-color: currentColor; border-width: 2px 0 0 2px; border-radius: 1px; box-sizing: border-box; transform-origin: center; transform: rotate(-45deg) scale(.7); } .mx-icon-double-left:after { left: -4px; } .mx-icon-double-right:before { left: 4px; } .mx-icon-right:before, .mx-icon-double-right:before, .mx-icon-double-right:after { transform: rotate(135deg) scale(.7); } .mx-btn { box-sizing: border-box; line-height: 1; font-size: 14px; font-weight: 500; padding: 7px 15px; margin: 0; cursor: pointer; background-color: transparent; outline: none; border: 1px solid rgba(0, 0, 0, .1); border-radius: 4px; color: #73879c; white-space: nowrap; } .mx-btn:hover { border-color: #1284e7; color: #1284e7; } .mx-btn:disabled, .mx-btn.disabled { color: #ccc; cursor: not-allowed; } .mx-btn-text { border: 0; padding: 0 4px; text-align: left; line-height: inherit; } .mx-scrollbar { height: 100%; } .mx-scrollbar:hover .mx-scrollbar-track { opacity: 1; } .mx-scrollbar-wrap { height: 100%; overflow-x: hidden; overflow-y: auto; } .mx-scrollbar-track { position: absolute; top: 2px; right: 2px; bottom: 2px; width: 6px; z-index: 1; border-radius: 4px; opacity: 0; transition: opacity .24s ease-out; } .mx-scrollbar-track .mx-scrollbar-thumb { position: absolute; width: 100%; height: 0; cursor: pointer; border-radius: inherit; background-color: #9093994d; transition: background-color .3s; } .mx-zoom-in-down-enter-active, .mx-zoom-in-down-leave-active { opacity: 1; transform: scaleY(1); transition: transform .3s cubic-bezier(.23, 1, .32, 1), opacity .3s cubic-bezier(.23, 1, .32, 1); transform-origin: center top; } .mx-zoom-in-down-enter, .mx-zoom-in-down-enter-from, .mx-zoom-in-down-leave-to { opacity: 0; transform: scaleY(0); } .mx-datepicker { position: relative; display: inline-block; width: 210px; } .mx-datepicker svg { width: 1em; height: 1em; vertical-align: -.15em; fill: currentColor; overflow: hidden; } .mx-datepicker-range { width: 320px; } .mx-datepicker-inline { width: auto; } .mx-input-wrapper { position: relative; } .mx-input { display: inline-block; box-sizing: border-box; width: 100%; height: 34px; padding: 6px 30px 6px 10px; font-size: 14px; line-height: 1.4; color: #555; background-color: #fff; border: 1px solid #ccc; border-radius: 4px; box-shadow: inset 0 1px 1px #00000013; } .mx-input:hover, .mx-input:focus { border-color: #409aff; } .mx-input:disabled, .mx-input.disabled { color: #ccc; background-color: #f3f3f3; border-color: #ccc; cursor: not-allowed; } .mx-input:focus { outline: none; } .mx-input::-ms-clear { display: none; } .mx-icon-calendar, .mx-icon-clear { position: absolute; top: 50%; right: 8px; transform: translateY(-50%); font-size: 16px; line-height: 1; color: #00000080; vertical-align: middle; } .mx-icon-clear { cursor: pointer; } .mx-icon-clear:hover { color: #000c; } .mx-datepicker-main { font: 14px/1.5 Helvetica Neue, Helvetica, Arial, Microsoft Yahei, sans-serif; color: #73879c; background-color: #fff; border: 1px solid #e8e8e8; } .mx-datepicker-popup { position: absolute; margin-top: 1px; margin-bottom: 1px; box-shadow: 0 6px 12px #0000002d; z-index: 2001; } .mx-datepicker-sidebar { float: left; box-sizing: border-box; width: 100px; padding: 6px; overflow: auto; } .mx-datepicker-sidebar + .mx-datepicker-content { margin-left: 100px; border-left: 1px solid #e8e8e8; } .mx-datepicker-body { position: relative; -webkit-user-select: none; user-select: none; } .mx-btn-shortcut { display: block; padding: 0 6px; line-height: 24px; } .mx-range-wrapper { display: flex; } @media (max-width: 750px) { .mx-range-wrapper { flex-direction: column; } } .mx-datepicker-header { padding: 6px 8px; border-bottom: 1px solid #e8e8e8; } .mx-datepicker-footer { padding: 6px 8px; text-align: right; border-top: 1px solid #e8e8e8; } .mx-calendar { box-sizing: border-box; width: 248px; padding: 6px 12px; } .mx-calendar + .mx-calendar { border-left: 1px solid #e8e8e8; } .mx-calendar-header, .mx-time-header { box-sizing: border-box; height: 34px; line-height: 34px; text-align: center; overflow: hidden; } .mx-btn-icon-left, .mx-btn-icon-double-left { float: left; } .mx-btn-icon-right, .mx-btn-icon-double-right { float: right; } .mx-calendar-header-label { font-size: 14px; } .mx-calendar-decade-separator { margin: 0 2px; } .mx-calendar-decade-separator:after { content: "~"; } .mx-calendar-content { position: relative; height: 224px; box-sizing: border-box; } .mx-calendar-content .cell { cursor: pointer; } .mx-calendar-content .cell:hover { color: #73879c; background-color: #f3f9fe; } .mx-calendar-content .cell.active { color: #fff; background-color: #1284e7; } .mx-calendar-content .cell.in-range, .mx-calendar-content .cell.hover-in-range { color: #73879c; background-color: #dbedfb; } .mx-calendar-content .cell.disabled { cursor: not-allowed; color: #ccc; background-color: #f3f3f3; } .mx-calendar-week-mode .mx-date-row { cursor: pointer; } .mx-calendar-week-mode .mx-date-row:hover { background-color: #f3f9fe; } .mx-calendar-week-mode .mx-date-row.mx-active-week { background-color: #dbedfb; } .mx-calendar-week-mode .mx-date-row .cell:hover, .mx-calendar-week-mode .mx-date-row .cell.active { color: inherit; background-color: transparent; } .mx-week-number { opacity: .5; } .mx-table { table-layout: fixed; border-collapse: separate; border-spacing: 0; width: 100%; height: 100%; box-sizing: border-box; text-align: center; } .mx-table th { padding: 0; font-weight: 500; vertical-align: middle; } .mx-table td { padding: 0; vertical-align: middle; } .mx-table-date td, .mx-table-date th { height: 32px; font-size: 12px; } .mx-table-date .today { color: #2a90e9; } .mx-table-date .cell.not-current-month { color: #ccc; background: none; } .mx-time { flex: 1; width: 224px; background: #fff; } .mx-time + .mx-time { border-left: 1px solid #e8e8e8; } .mx-calendar-time { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .mx-time-header { border-bottom: 1px solid #e8e8e8; } .mx-time-content { height: 224px; box-sizing: border-box; overflow: hidden; } .mx-time-columns { display: flex; width: 100%; height: 100%; overflow: hidden; } .mx-time-column { flex: 1; position: relative; border-left: 1px solid #e8e8e8; text-align: center; } .mx-time-column:first-child { border-left: 0; } .mx-time-column .mx-time-list { margin: 0; padding: 0; list-style: none; } .mx-time-column .mx-time-list:after { content: ""; display: block; height: 192px; } .mx-time-column .mx-time-item { cursor: pointer; font-size: 12px; height: 32px; line-height: 32px; } .mx-time-column .mx-time-item:hover { color: #73879c; background-color: #f3f9fe; } .mx-time-column .mx-time-item.active { color: #1284e7; background-color: transparent; font-weight: 700; } .mx-time-column .mx-time-item.disabled { cursor: not-allowed; color: #ccc; background-color: #f3f3f3; } .mx-time-option { cursor: pointer; padding: 8px 10px; font-size: 14px; line-height: 20px; } .mx-time-option:hover { color: #73879c; background-color: #f3f9fe; } .mx-time-option.active { color: #1284e7; background-color: transparent; font-weight: 700; } .mx-time-option.disabled { cursor: not-allowed; color: #ccc; background-color: #f3f3f3; } .mx-datepicker[data-v-98ecc7d] { -webkit-user-select: none; user-select: none; color: var(--color-main-text); } .mx-datepicker[data-v-98ecc7d] svg { fill: var(--color-main-text); } .mx-datepicker[data-v-98ecc7d] .mx-input-wrapper .mx-input { width: 100%; border: 2px solid var(--color-border-maxcontrast); background-color: var(--color-main-background); background-clip: content-box; } .mx-datepicker[data-v-98ecc7d] .mx-input-wrapper .mx-input:active:not(.disabled), .mx-datepicker[data-v-98ecc7d] .mx-input-wrapper .mx-input:hover:not(.disabled), .mx-datepicker[data-v-98ecc7d] .mx-input-wrapper .mx-input:focus:not(.disabled) { border-color: var(--color-primary-element); } .mx-datepicker[data-v-98ecc7d] .mx-input-wrapper:disabled, .mx-datepicker[data-v-98ecc7d] .mx-input-wrapper.disabled { cursor: not-allowed; opacity: .7; } .mx-datepicker[data-v-98ecc7d] .mx-input-wrapper .mx-icon-calendar, .mx-datepicker[data-v-98ecc7d] .mx-input-wrapper .mx-icon-clear { color: var(--color-text-lighter); } .mx-datepicker-main { color: var(--color-main-text); border: 1px solid var(--color-border); background-color: var(--color-main-background); font-family: var(--font-face) !important; line-height: 1.5; } .mx-datepicker-main svg { fill: var(--color-main-text); } .mx-datepicker-main.mx-datepicker-popup { z-index: 2000; box-shadow: none; } .mx-datepicker-main.mx-datepicker-popup .mx-datepicker-sidebar + .mx-datepicker-content { border-left: 1px solid var(--color-border); } .mx-datepicker-main.show-week-number .mx-calendar { width: 296px; } .mx-datepicker-main .mx-datepicker-header { border-bottom: 1px solid var(--color-border); } .mx-datepicker-main .mx-datepicker-footer { border-top: 1px solid var(--color-border); } .mx-datepicker-main .mx-datepicker-btn-confirm { background-color: var(--color-primary-element); border-color: var(--color-primary-element); color: var(--color-primary-element-text) !important; opacity: 1 !important; } .mx-datepicker-main .mx-datepicker-btn-confirm:hover { background-color: var(--color-primary-element-light) !important; border-color: var(--color-primary-element-light) !important; } .mx-datepicker-main .mx-calendar { width: 264px; padding: 5px; } .mx-datepicker-main .mx-calendar.mx-calendar-week-mode { width: 296px; } .mx-datepicker-main .mx-time + .mx-time, .mx-datepicker-main .mx-calendar + .mx-calendar { border-left: 1px solid var(--color-border); } .mx-datepicker-main .mx-range-wrapper { display: flex; overflow: hidden; } .mx-datepicker-main .mx-range-wrapper .mx-calendar-content .mx-table-date .cell.active { border-radius: var(--border-radius) 0 0 var(--border-radius); } .mx-datepicker-main .mx-range-wrapper .mx-calendar-content .mx-table-date .cell.in-range + .cell.active { border-radius: 0 var(--border-radius) var(--border-radius) 0; } .mx-datepicker-main .mx-table { text-align: center; } .mx-datepicker-main .mx-table thead > tr > th { text-align: center; opacity: .5; color: var(--color-text-lighter); } .mx-datepicker-main .mx-table tr:focus, .mx-datepicker-main .mx-table tr:hover, .mx-datepicker-main .mx-table tr:active { background-color: transparent; } .mx-datepicker-main .mx-table .cell { transition: all .1s ease-in-out; text-align: center; opacity: .7; border-radius: 50px; } .mx-datepicker-main .mx-table .cell > * { cursor: pointer; } .mx-datepicker-main .mx-table .cell.today { opacity: 1; color: var(--color-primary-element); font-weight: 700; } .mx-datepicker-main .mx-table .cell.today:hover, .mx-datepicker-main .mx-table .cell.today:focus { color: var(--color-primary-element-text); } .mx-datepicker-main .mx-table .cell.in-range, .mx-datepicker-main .mx-table .cell.disabled { border-radius: 0; font-weight: 400; } .mx-datepicker-main .mx-table .cell.in-range { opacity: .7; } .mx-datepicker-main .mx-table .cell.not-current-month { opacity: .5; color: var(--color-text-lighter); } .mx-datepicker-main .mx-table .cell.not-current-month:hover, .mx-datepicker-main .mx-table .cell.not-current-month:focus { opacity: 1; } .mx-datepicker-main .mx-table .cell:hover, .mx-datepicker-main .mx-table .cell:focus, .mx-datepicker-main .mx-table .cell.actived, .mx-datepicker-main .mx-table .cell.active, .mx-datepicker-main .mx-table .cell.in-range { opacity: 1; color: var(--color-primary-element-text); background-color: var(--color-primary-element); font-weight: 700; } .mx-datepicker-main .mx-table .cell.disabled { opacity: .5; color: var(--color-text-lighter); border-radius: 0; background-color: var(--color-background-darker); } .mx-datepicker-main .mx-table .mx-week-number { text-align: center; opacity: .7; border-radius: 50px; } .mx-datepicker-main .mx-table span.mx-week-number, .mx-datepicker-main .mx-table li.mx-week-number, .mx-datepicker-main .mx-table span.cell, .mx-datepicker-main .mx-table li.cell { min-height: 32px; } .mx-datepicker-main .mx-table.mx-table-date thead, .mx-datepicker-main .mx-table.mx-table-date tbody, .mx-datepicker-main .mx-table.mx-table-year, .mx-datepicker-main .mx-table.mx-table-month { display: flex; flex-direction: column; justify-content: space-around; } .mx-datepicker-main .mx-table.mx-table-date thead tr, .mx-datepicker-main .mx-table.mx-table-date tbody tr, .mx-datepicker-main .mx-table.mx-table-year tr, .mx-datepicker-main .mx-table.mx-table-month tr { display: inline-flex; align-items: center; flex: 1 1 32px; justify-content: space-around; min-height: 32px; } .mx-datepicker-main .mx-table.mx-table-date thead th, .mx-datepicker-main .mx-table.mx-table-date thead td, .mx-datepicker-main .mx-table.mx-table-date tbody th, .mx-datepicker-main .mx-table.mx-table-date tbody td, .mx-datepicker-main .mx-table.mx-table-year th, .mx-datepicker-main .mx-table.mx-table-year td, .mx-datepicker-main .mx-table.mx-table-month th, .mx-datepicker-main .mx-table.mx-table-month td { display: flex; align-items: center; flex: 0 1 32%; justify-content: center; min-width: 32px; height: 95%; min-height: 32px; transition: background .1s ease-in-out; } .mx-datepicker-main .mx-table.mx-table-year tr th, .mx-datepicker-main .mx-table.mx-table-year tr td { flex-basis: 48%; } .mx-datepicker-main .mx-table.mx-table-date tr th, .mx-datepicker-main .mx-table.mx-table-date tr td { flex-basis: 32px; } .mx-datepicker-main .mx-btn { min-width: 32px; height: 32px; margin: 0 2px !important; padding: 7px 10px; cursor: pointer; text-decoration: none; opacity: .5; color: var(--color-text-lighter); border-radius: 32px; line-height: 20px; } .mx-datepicker-main .mx-btn:hover, .mx-datepicker-main .mx-btn:focus { opacity: 1; color: var(--color-main-text); background-color: var(--color-background-darker); } .mx-datepicker-main .mx-calendar-header, .mx-datepicker-main .mx-time-header { display: inline-flex; align-items: center; justify-content: space-between; width: 100%; height: 44px; margin-bottom: 4px; } .mx-datepicker-main .mx-calendar-header button, .mx-datepicker-main .mx-time-header button { min-width: 32px; min-height: 32px; margin: 0; cursor: pointer; text-align: center; text-decoration: none; opacity: .7; color: var(--color-main-text); border-radius: 32px; line-height: 20px; } .mx-datepicker-main .mx-calendar-header button:hover, .mx-datepicker-main .mx-time-header button:hover, .mx-datepicker-main .mx-calendar-header button:focus, .mx-datepicker-main .mx-time-header button:focus { opacity: 1; color: var(--color-main-text); background-color: var(--color-background-darker); } .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-left, .mx-datepicker-main .mx-time-header button.mx-btn-icon-double-left, .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-left, .mx-datepicker-main .mx-time-header button.mx-btn-icon-left, .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-right, .mx-datepicker-main .mx-time-header button.mx-btn-icon-right, .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-right, .mx-datepicker-main .mx-time-header button.mx-btn-icon-double-right { align-items: center; justify-content: center; width: 32px; padding: 0; } .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-left > i, .mx-datepicker-main .mx-time-header button.mx-btn-icon-double-left > i, .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-left > i, .mx-datepicker-main .mx-time-header button.mx-btn-icon-left > i, .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-right > i, .mx-datepicker-main .mx-time-header button.mx-btn-icon-right > i, .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-right > i, .mx-datepicker-main .mx-time-header button.mx-btn-icon-double-right > i { background-repeat: no-repeat; background-size: 16px; background-position: center; filter: var(--background-invert-if-dark); display: inline-block; width: 32px; height: 32px; } .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-left > i:after, .mx-datepicker-main .mx-time-header button.mx-btn-icon-double-left > i:after, .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-left > i:before, .mx-datepicker-main .mx-time-header button.mx-btn-icon-double-left > i:before, .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-left > i:after, .mx-datepicker-main .mx-time-header button.mx-btn-icon-left > i:after, .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-left > i:before, .mx-datepicker-main .mx-time-header button.mx-btn-icon-left > i:before, .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-right > i:after, .mx-datepicker-main .mx-time-header button.mx-btn-icon-right > i:after, .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-right > i:before, .mx-datepicker-main .mx-time-header button.mx-btn-icon-right > i:before, .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-right > i:after, .mx-datepicker-main .mx-time-header button.mx-btn-icon-double-right > i:after, .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-right > i:before, .mx-datepicker-main .mx-time-header button.mx-btn-icon-double-right > i:before { content: none; } .mx-datepicker-main .mx-calendar-header button.mx-btn-text, .mx-datepicker-main .mx-time-header button.mx-btn-text { line-height: initial; } .mx-datepicker-main .mx-calendar-header .mx-calendar-header-label, .mx-datepicker-main .mx-time-header .mx-calendar-header-label { display: flex; } .mx-datepicker-main .mx-calendar-header .mx-btn-icon-double-left > i, .mx-datepicker-main .mx-time-header .mx-btn-icon-double-left > i { background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___}); } .mx-datepicker-main .mx-calendar-header .mx-btn-icon-left > i, .mx-datepicker-main .mx-time-header .mx-btn-icon-left > i { background-image: url(${___CSS_LOADER_URL_REPLACEMENT_1___}); } .mx-datepicker-main .mx-calendar-header .mx-btn-icon-right > i, .mx-datepicker-main .mx-time-header .mx-btn-icon-right > i { background-image: url(${___CSS_LOADER_URL_REPLACEMENT_2___}); } .mx-datepicker-main .mx-calendar-header .mx-btn-icon-double-right > i, .mx-datepicker-main .mx-time-header .mx-btn-icon-double-right > i { background-image: url(${___CSS_LOADER_URL_REPLACEMENT_3___}); } .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-right, .mx-datepicker-main .mx-time-header button.mx-btn-icon-right { order: 2; } .mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-right, .mx-datepicker-main .mx-time-header button.mx-btn-icon-double-right { order: 3; } .mx-datepicker-main .mx-calendar-week-mode .mx-date-row .mx-week-number { font-weight: 700; } .mx-datepicker-main .mx-calendar-week-mode .mx-date-row:hover, .mx-datepicker-main .mx-calendar-week-mode .mx-date-row.mx-active-week { opacity: 1; border-radius: 50px; background-color: var(--color-background-dark); } .mx-datepicker-main .mx-calendar-week-mode .mx-date-row:hover td, .mx-datepicker-main .mx-calendar-week-mode .mx-date-row.mx-active-week td { background-color: transparent; } .mx-datepicker-main .mx-calendar-week-mode .mx-date-row:hover td, .mx-datepicker-main .mx-calendar-week-mode .mx-date-row:hover td:hover, .mx-datepicker-main .mx-calendar-week-mode .mx-date-row:hover td:focus, .mx-datepicker-main .mx-calendar-week-mode .mx-date-row.mx-active-week td, .mx-datepicker-main .mx-calendar-week-mode .mx-date-row.mx-active-week td:hover, .mx-datepicker-main .mx-calendar-week-mode .mx-date-row.mx-active-week td:focus { color: inherit; } .mx-datepicker-main .mx-calendar-week-mode .mx-date-row.mx-active-week { color: var(--color-primary-element-text); background-color: var(--color-primary-element); } .mx-datepicker-main .mx-calendar-week-mode .mx-date-row.mx-active-week td { opacity: .7; font-weight: 400; } .mx-datepicker-main .mx-time { background-color: var(--color-main-background); } .mx-datepicker-main .mx-time .mx-time-header { justify-content: center; border-bottom: 1px solid var(--color-border); } .mx-datepicker-main .mx-time .mx-time-column { border-left: 1px solid var(--color-border); } .mx-datepicker-main .mx-time .mx-time-option.active, .mx-datepicker-main .mx-time .mx-time-option:hover, .mx-datepicker-main .mx-time .mx-time-item.active, .mx-datepicker-main .mx-time .mx-time-item:hover { color: var(--color-primary-element-text); background-color: var(--color-primary-element); } .mx-datepicker-main .mx-time .mx-time-option.disabled, .mx-datepicker-main .mx-time .mx-time-item.disabled { cursor: not-allowed; opacity: .5; color: var(--color-main-text); background-color: var(--color-main-background); } .material-design-icon[data-v-56b96a48] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .mx-datepicker[data-v-56b96a48] .mx-input-wrapper .mx-input { background-clip: border-box; } .datetime-picker-inline-icon[data-v-56b96a48] { opacity: .3; border: none; background-color: transparent; border-radius: 0; padding: 0 !important; margin: 0; } .datetime-picker-inline-icon--highlighted[data-v-56b96a48] { opacity: .7; } .datetime-picker-inline-icon[data-v-56b96a48]:focus, .datetime-picker-inline-icon[data-v-56b96a48]:hover { opacity: 1; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .v-popper--theme-dropdown.v-popper__popper.timezone-select__popper .v-popper__wrapper { border-radius: var(--border-radius-large); } .v-popper--theme-dropdown.v-popper__popper.timezone-select__popper .v-popper__wrapper .v-popper__inner { padding: 4px; border-radius: var(--border-radius-large); } .v-popper--theme-dropdown.v-popper__popper.timezone-select__popper .v-popper__wrapper .v-popper__inner .timezone-popover-wrapper__label { padding: 4px 0 4px 14px; } .v-popper--theme-dropdown.v-popper__popper.timezone-select__popper .v-popper__wrapper .v-popper__inner .timezone-popover-wrapper__timezone-select.v-select .vs__dropdown-toggle { border-radius: calc(var(--border-radius-large) - 4px); } .v-popper--theme-dropdown.v-popper__popper.timezone-select__popper .v-popper__wrapper .v-popper__inner .timezone-popover-wrapper__timezone-select.v-select.vs--open .vs__dropdown-toggle { border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .v-popper--theme-dropdown.v-popper__popper.timezone-select__popper .v-popper__wrapper .v-popper__inner .timezone-popover-wrapper__timezone-select.v-select.vs--open.select--drop-up .vs__dropdown-toggle { border-radius: 0 0 calc(var(--border-radius-large) - 4px) calc(var(--border-radius-large) - 4px); } .vs__dropdown-menu--floating { z-index: 100001 !important; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcDateTimePickerNative-5yybtvfx.css": /*!***************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcDateTimePickerNative-5yybtvfx.css ***! \***************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-7b246f90] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .native-datetime-picker[data-v-7b246f90] { display: flex; flex-direction: column; } .native-datetime-picker .native-datetime-picker--input[data-v-7b246f90] { width: 100%; flex: 0 0 auto; padding-right: 4px; } [data-theme-light] .native-datetime-picker--input[data-v-7b246f90], [data-themes*=light] .native-datetime-picker--input[data-v-7b246f90] { color-scheme: light; } [data-theme-dark] .native-datetime-picker--input[data-v-7b246f90], [data-themes*=dark] .native-datetime-picker--input[data-v-7b246f90] { color-scheme: dark; } @media (prefers-color-scheme: light) { [data-theme-default] .native-datetime-picker--input[data-v-7b246f90], [data-themes*=default] .native-datetime-picker--input[data-v-7b246f90] { color-scheme: light; } } @media (prefers-color-scheme: dark) { [data-theme-default] .native-datetime-picker--input[data-v-7b246f90], [data-themes*=default] .native-datetime-picker--input[data-v-7b246f90] { color-scheme: dark; } } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcDialog-DN-rY-55.css": /*!*************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcDialog-DN-rY-55.css ***! \*************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } @media only screen and (max-width: 512px) { .dialog__modal .modal-wrapper--small .modal-container { width: fit-content; height: unset; max-height: 90%; position: relative; top: unset; border-radius: var(--border-radius-large); } } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-40a87f52] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .dialog[data-v-40a87f52] { height: 100%; width: 100%; display: flex; flex-direction: column; justify-content: space-between; overflow: hidden; } .dialog__modal[data-v-40a87f52] .modal-wrapper .modal-container { display: flex !important; padding-block: 4px 0; padding-inline: 12px 0; } .dialog__modal[data-v-40a87f52] .modal-wrapper .modal-container__content { display: flex; flex-direction: column; overflow: hidden; } .dialog__wrapper[data-v-40a87f52] { display: flex; flex-direction: row; flex: 1; min-height: 0; overflow: hidden; } .dialog__wrapper--collapsed[data-v-40a87f52] { flex-direction: column; } .dialog__navigation[data-v-40a87f52] { display: flex; flex-shrink: 0; } .dialog__wrapper:not(.dialog__wrapper--collapsed) .dialog__navigation[data-v-40a87f52] { flex-direction: column; overflow: hidden auto; height: 100%; min-width: 200px; margin-inline-end: 20px; } .dialog__wrapper.dialog__wrapper--collapsed .dialog__navigation[data-v-40a87f52] { flex-direction: row; justify-content: space-between; overflow: auto hidden; width: 100%; min-width: 100%; } .dialog__name[data-v-40a87f52] { text-align: center; height: fit-content; min-height: var(--default-clickable-area); line-height: var(--default-clickable-area); overflow-wrap: break-word; margin-block-end: 12px; } .dialog__content[data-v-40a87f52] { flex: 1; min-height: 0; overflow: auto; padding-inline-end: 12px; } .dialog__text[data-v-40a87f52] { padding-block-end: 6px; } .dialog__actions[data-v-40a87f52] { display: flex; gap: 6px; align-content: center; width: fit-content; margin-inline: auto 12px; margin-block: 0; } .dialog__actions[data-v-40a87f52]:not(:empty) { margin-block: 6px 12px; } @media only screen and (max-width: 512px) { .dialog__name[data-v-40a87f52] { text-align: start; margin-inline-end: var(--default-clickable-area); } } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcEllipsisedOption-eoI10kvc.css": /*!***********************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcEllipsisedOption-eoI10kvc.css ***! \***********************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-08c4259e] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .name-parts[data-v-08c4259e] { display: flex; max-width: 100%; cursor: inherit; } .name-parts__first[data-v-08c4259e] { overflow: hidden; text-overflow: ellipsis; } .name-parts__first[data-v-08c4259e], .name-parts__last[data-v-08c4259e] { white-space: pre; cursor: inherit; } .name-parts__first strong[data-v-08c4259e], .name-parts__last strong[data-v-08c4259e] { font-weight: 700; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcEmojiPicker-wTIbvcrG.css": /*!******************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcEmojiPicker-wTIbvcrG.css ***! \******************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .emoji-mart, .emoji-mart * { box-sizing: border-box; line-height: 1.15; } .emoji-mart { font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, sans-serif; font-size: 16px; display: flex; flex-direction: column; height: 420px; color: #222427; border: 1px solid #d9d9d9; border-radius: 5px; background: #fff; } .emoji-mart-emoji { padding: 6px; position: relative; display: inline-block; font-size: 0; border: none; background: none; box-shadow: none; } .emoji-mart-emoji span { display: inline-block; } .emoji-mart-preview-emoji .emoji-mart-emoji span { width: 38px; height: 38px; font-size: 32px; } .emoji-type-native { font-family: "Segoe UI Emoji", Segoe UI Symbol, Segoe UI, "Apple Color Emoji", Twemoji Mozilla, "Noto Color Emoji", EmojiOne Color, "Android Emoji"; word-break: keep-all; } .emoji-type-image { background-size: 6100%; } .emoji-type-image.emoji-set-apple { background-image: url(https://unpkg.com/emoji-datasource-apple@15.0.1/img/apple/sheets-256/64.png); } .emoji-type-image.emoji-set-facebook { background-image: url(https://unpkg.com/emoji-datasource-facebook@15.0.1/img/facebook/sheets-256/64.png); } .emoji-type-image.emoji-set-google { background-image: url(https://unpkg.com/emoji-datasource-google@15.0.1/img/google/sheets-256/64.png); } .emoji-type-image.emoji-set-twitter { background-image: url(https://unpkg.com/emoji-datasource-twitter@15.0.1/img/twitter/sheets-256/64.png); } .emoji-mart-bar { border: 0 solid #d9d9d9; } .emoji-mart-bar:first-child { border-bottom-width: 1px; border-top-left-radius: 5px; border-top-right-radius: 5px; } .emoji-mart-bar:last-child { border-top-width: 1px; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; } .emoji-mart-scroll { position: relative; overflow-y: scroll; flex: 1; padding: 0 6px 6px; z-index: 0; will-change: transform; -webkit-overflow-scrolling: touch; } .emoji-mart-anchors { display: flex; flex-direction: row; justify-content: space-between; padding: 0 6px; color: #858585; line-height: 0; } .emoji-mart-anchor { position: relative; display: block; flex: 1 1 auto; text-align: center; padding: 12px 4px; overflow: hidden; transition: color .1s ease-out; border: none; background: none; box-shadow: none; } .emoji-mart-anchor:hover, .emoji-mart-anchor-selected { color: #464646; } .emoji-mart-anchor-selected .emoji-mart-anchor-bar { bottom: 0; } .emoji-mart-anchor-bar { position: absolute; bottom: -3px; left: 0; width: 100%; height: 3px; background-color: #464646; } .emoji-mart-anchors i { display: inline-block; width: 100%; max-width: 22px; } .emoji-mart-anchors svg { fill: currentColor; max-height: 18px; } .emoji-mart .scroller { height: 250px; position: relative; flex: 1; padding: 0 6px 6px; z-index: 0; will-change: transform; -webkit-overflow-scrolling: touch; } .emoji-mart-search { margin-top: 6px; padding: 0 6px; } .emoji-mart-search input { font-size: 16px; display: block; width: 100%; padding: .2em .6em; border-radius: 25px; border: 1px solid #d9d9d9; outline: 0; } .emoji-mart-search-results { height: 250px; overflow-y: scroll; } .emoji-mart-category { position: relative; } .emoji-mart-category .emoji-mart-emoji span { z-index: 1; position: relative; text-align: center; cursor: default; } .emoji-mart-category .emoji-mart-emoji:hover:before, .emoji-mart-emoji-selected:before { z-index: 0; content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: #f4f4f4; border-radius: 100%; opacity: 0; } .emoji-mart-category .emoji-mart-emoji:hover:before, .emoji-mart-emoji-selected:before { opacity: 1; } .emoji-mart-category-label { position: sticky; top: 0; } .emoji-mart-static .emoji-mart-category-label { z-index: 2; position: relative; } .emoji-mart-category-label h3 { display: block; font-size: 16px; width: 100%; font-weight: 500; padding: 5px 6px; background-color: #fff; background-color: #fffffff2; } .emoji-mart-emoji { position: relative; display: inline-block; font-size: 0; } .emoji-mart-no-results { font-size: 14px; text-align: center; padding-top: 70px; color: #858585; } .emoji-mart-no-results .emoji-mart-category-label { display: none; } .emoji-mart-no-results .emoji-mart-no-results-label { margin-top: .2em; } .emoji-mart-no-results .emoji-mart-emoji:hover:before { content: none; } .emoji-mart-preview { position: relative; height: 70px; } .emoji-mart-preview-emoji, .emoji-mart-preview-data, .emoji-mart-preview-skins { position: absolute; top: 50%; transform: translateY(-50%); } .emoji-mart-preview-emoji { left: 12px; } .emoji-mart-preview-data { left: 68px; right: 12px; word-break: break-all; } .emoji-mart-preview-skins { right: 30px; text-align: right; } .emoji-mart-preview-name { font-size: 14px; } .emoji-mart-preview-shortname { font-size: 12px; color: #888; } .emoji-mart-preview-shortname + .emoji-mart-preview-shortname, .emoji-mart-preview-shortname + .emoji-mart-preview-emoticon, .emoji-mart-preview-emoticon + .emoji-mart-preview-emoticon { margin-left: .5em; } .emoji-mart-preview-emoticon { font-size: 11px; color: #bbb; } .emoji-mart-title span { display: inline-block; vertical-align: middle; } .emoji-mart-title .emoji-mart-emoji { padding: 0; } .emoji-mart-title-label { color: #999a9c; font-size: 21px; font-weight: 300; } .emoji-mart-skin-swatches { font-size: 0; padding: 2px 0; border: 1px solid #d9d9d9; border-radius: 12px; background-color: #fff; } .emoji-mart-skin-swatches-opened .emoji-mart-skin-swatch { width: 16px; padding: 0 2px; } .emoji-mart-skin-swatches-opened .emoji-mart-skin-swatch-selected:after { opacity: .75; } .emoji-mart-skin-swatch { display: inline-block; width: 0; vertical-align: middle; transition-property: width, padding; transition-duration: .125s; transition-timing-function: ease-out; } .emoji-mart-skin-swatch:nth-child(1) { transition-delay: 0s; } .emoji-mart-skin-swatch:nth-child(2) { transition-delay: .03s; } .emoji-mart-skin-swatch:nth-child(3) { transition-delay: .06s; } .emoji-mart-skin-swatch:nth-child(4) { transition-delay: .09s; } .emoji-mart-skin-swatch:nth-child(5) { transition-delay: .12s; } .emoji-mart-skin-swatch:nth-child(6) { transition-delay: .15s; } .emoji-mart-skin-swatch-selected { position: relative; width: 16px; padding: 0 2px; } .emoji-mart-skin-swatch-selected:after { content: ""; position: absolute; top: 50%; left: 50%; width: 4px; height: 4px; margin: -2px 0 0 -2px; background-color: #fff; border-radius: 100%; pointer-events: none; opacity: 0; transition: opacity .2s ease-out; } .emoji-mart-skin { display: inline-block; width: 100%; padding-top: 100%; max-width: 12px; border-radius: 100%; } .emoji-mart-skin-tone-1 { background-color: #ffc93a; } .emoji-mart-skin-tone-2 { background-color: #fadcbc; } .emoji-mart-skin-tone-3 { background-color: #e0bb95; } .emoji-mart-skin-tone-4 { background-color: #bf8f68; } .emoji-mart-skin-tone-5 { background-color: #9b643d; } .emoji-mart-skin-tone-6 { background-color: #594539; } .emoji-mart .vue-recycle-scroller { position: relative; } .emoji-mart .vue-recycle-scroller.direction-vertical:not(.page-mode) { overflow-y: auto; } .emoji-mart .vue-recycle-scroller.direction-horizontal:not(.page-mode) { overflow-x: auto; } .emoji-mart .vue-recycle-scroller.direction-horizontal { display: flex; } .emoji-mart .vue-recycle-scroller__slot { flex: auto 0 0; } .emoji-mart .vue-recycle-scroller__item-wrapper { flex: 1; box-sizing: border-box; overflow: hidden; position: relative; } .emoji-mart .vue-recycle-scroller.ready .vue-recycle-scroller__item-view { position: absolute; top: 0; left: 0; will-change: transform; } .emoji-mart .vue-recycle-scroller.direction-vertical .vue-recycle-scroller__item-wrapper { width: 100%; } .emoji-mart .vue-recycle-scroller.direction-horizontal .vue-recycle-scroller__item-wrapper { height: 100%; } .emoji-mart .vue-recycle-scroller.ready.direction-vertical .vue-recycle-scroller__item-view { width: 100%; } .emoji-mart .vue-recycle-scroller.ready.direction-horizontal .vue-recycle-scroller__item-view { height: 100%; } .emoji-mart .resize-observer[data-v-b329ee4c] { position: absolute; top: 0; left: 0; z-index: -1; width: 100%; height: 100%; border: none; background-color: transparent; pointer-events: none; display: block; overflow: hidden; opacity: 0; } .emoji-mart .resize-observer[data-v-b329ee4c] object { display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; pointer-events: none; z-index: -1; } .emoji-mart-search .hidden { display: none; visibility: hidden; } .material-design-icon { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .emoji-mart { background-color: var(--color-main-background) !important; border: 0; color: var(--color-main-text) !important; } .emoji-mart button { margin: 0; padding: 0; border: none; background: transparent; font-size: inherit; height: 36px; width: auto; } .emoji-mart button * { cursor: pointer !important; } .emoji-mart .emoji-mart-bar, .emoji-mart .emoji-mart-anchors, .emoji-mart .emoji-mart-search, .emoji-mart .emoji-mart-search input, .emoji-mart .emoji-mart-category, .emoji-mart .emoji-mart-category-label, .emoji-mart .emoji-mart-category-label span, .emoji-mart .emoji-mart-skin-swatches { background-color: transparent !important; border-color: var(--color-border) !important; color: inherit !important; } .emoji-mart .emoji-mart-search input:focus-visible { box-shadow: inset 0 0 0 2px var(--color-primary-element); outline: none; } .emoji-mart .emoji-mart-bar:first-child { border-top-left-radius: var(--border-radius) !important; border-top-right-radius: var(--border-radius) !important; } .emoji-mart .emoji-mart-anchors button { border-radius: 0; padding: 12px 4px; height: auto; } .emoji-mart .emoji-mart-anchors button:focus-visible { outline: 2px solid var(--color-primary-element); } .emoji-mart .emoji-mart-category { display: flex; flex-direction: row; flex-wrap: wrap; justify-content: start; } .emoji-mart .emoji-mart-category .emoji-mart-category-label, .emoji-mart .emoji-mart-category .emoji-mart-emoji { -webkit-user-select: none; user-select: none; flex-grow: 0; flex-shrink: 0; } .emoji-mart .emoji-mart-category .emoji-mart-category-label { flex-basis: 100%; margin: 0; } .emoji-mart .emoji-mart-category .emoji-mart-emoji { flex-basis: 12.5%; text-align: center; } .emoji-mart .emoji-mart-category .emoji-mart-emoji:hover:before, .emoji-mart .emoji-mart-category .emoji-mart-emoji.emoji-mart-emoji-selected:before { background-color: var(--color-background-hover) !important; outline: 2px solid var(--color-primary-element); } .emoji-mart .emoji-mart-category button:focus-visible { background-color: var(--color-background-hover); border: 2px solid var(--color-primary-element) !important; border-radius: 50%; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-2075d0ec] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .search__wrapper[data-v-2075d0ec] { display: flex; flex-direction: row; gap: 4px; align-items: end; padding: 4px 8px; } .row-selected button[data-v-2075d0ec], .row-selected span[data-v-2075d0ec] { vertical-align: middle; } .emoji-delete[data-v-2075d0ec] { vertical-align: top; margin-left: -21px; margin-top: -3px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcEmptyContent-pSz7F6Oe.css": /*!*******************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcEmptyContent-pSz7F6Oe.css ***! \*******************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-458108e7] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .empty-content[data-v-458108e7] { display: flex; align-items: center; flex-direction: column; justify-content: center; flex-grow: 1; } .modal-wrapper .empty-content[data-v-458108e7] { margin-top: 5vh; margin-bottom: 5vh; } .empty-content__icon[data-v-458108e7] { display: flex; align-items: center; justify-content: center; width: 64px; height: 64px; margin: 0 auto 15px; opacity: .4; background-repeat: no-repeat; background-position: center; background-size: 64px; } .empty-content__icon[data-v-458108e7] svg { width: 64px !important; height: 64px !important; max-width: 64px !important; max-height: 64px !important; } .empty-content__name[data-v-458108e7] { margin-bottom: 10px; text-align: center; font-weight: 700; font-size: 20px; line-height: 30px; } .empty-content__description[data-v-458108e7] { color: var(--color-text-maxcontrast); } .empty-content__action[data-v-458108e7] { margin-top: 8px; } .modal-wrapper .empty-content__action[data-v-458108e7] { margin-top: 20px; display: flex; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcGuestContent-mGGTzI2_.css": /*!*******************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcGuestContent-mGGTzI2_.css ***! \*******************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon[data-v-36ad47ca] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } #guest-content-vue[data-v-36ad47ca] { color: var(--color-main-text); background-color: var(--color-main-background); min-width: 0; border-radius: var(--border-radius-large); box-shadow: 0 0 10px var(--color-box-shadow); height: fit-content; padding: 15px; margin: 20px auto; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } #content.nc-guest-content { overflow: auto; margin-bottom: 0; height: calc(var(--body-height) + var(--body-container-margin)); } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcHeaderMenu-Srn5iXdL.css": /*!*****************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcHeaderMenu-Srn5iXdL.css ***! \*****************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-7103b917] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .header-menu[data-v-7103b917] { position: relative; width: var(--header-height); height: var(--header-height); } .header-menu .header-menu__trigger[data-v-7103b917] { width: 100% !important; height: var(--header-height); opacity: .85; filter: none !important; color: var(--color-primary-text) !important; } .header-menu--opened .header-menu__trigger[data-v-7103b917], .header-menu__trigger[data-v-7103b917]:hover, .header-menu__trigger[data-v-7103b917]:focus, .header-menu__trigger[data-v-7103b917]:active { opacity: 1; } .header-menu .header-menu__trigger[data-v-7103b917]:focus-visible { outline: none !important; box-shadow: none !important; } .header-menu__wrapper[data-v-7103b917] { position: fixed; z-index: 2000; top: 50px; inset-inline-end: 0; box-sizing: border-box; margin: 0 8px; padding: 8px; border-radius: 0 0 var(--border-radius) var(--border-radius); border-radius: var(--border-radius-large); background-color: var(--color-main-background); filter: drop-shadow(0 1px 5px var(--color-box-shadow)); } .header-menu__carret[data-v-7103b917] { position: absolute; z-index: 2001; bottom: 0; inset-inline-start: calc(50% - 10px); width: 0; height: 0; content: " "; pointer-events: none; border: 10px solid transparent; border-bottom-color: var(--color-main-background); } .header-menu__content[data-v-7103b917] { overflow: auto; width: 350px; max-width: calc(100vw - 16px); min-height: 66px; max-height: calc(100vh - 100px); } .header-menu__content[data-v-7103b917] .empty-content { margin: 12vh 10px; } @media only screen and (max-width: 512px) { .header-menu[data-v-7103b917] { width: 44px; } } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcIconSvgWrapper-arqrq5Bj.css": /*!*********************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcIconSvgWrapper-arqrq5Bj.css ***! \*********************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-ba0d787a] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .icon-vue[data-v-ba0d787a] { display: flex; justify-content: center; align-items: center; min-width: 44px; min-height: 44px; opacity: 1; } .icon-vue[data-v-ba0d787a] svg { fill: currentColor; width: var(--101514ee); height: var(--101514ee); max-width: var(--101514ee); max-height: var(--101514ee); } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcInputConfirmCancel-ks8z8dIn.css": /*!*************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcInputConfirmCancel-ks8z8dIn.css ***! \*************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-dcf0becf] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .app-navigation-input-confirm[data-v-dcf0becf] { flex: 1 0 100%; width: 100%; } .app-navigation-input-confirm form[data-v-dcf0becf] { display: flex; } .app-navigation-input-confirm__input[data-v-dcf0becf] { height: 34px; flex: 1 1 100%; font-size: 100% !important; margin: 5px 5px 5px -8px !important; padding: 7px !important; } .app-navigation-input-confirm__input[data-v-dcf0becf]:active, .app-navigation-input-confirm__input[data-v-dcf0becf]:focus, .app-navigation-input-confirm__input[data-v-dcf0becf]:hover { outline: none; background-color: var(--color-main-background); color: var(--color-main-text); border-color: var(--color-primary-element); } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcInputField-L2Lld_iG.css": /*!*****************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcInputField-L2Lld_iG.css ***! \*****************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-b312d183] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .input-field[data-v-b312d183] { position: relative; width: 100%; border-radius: var(--border-radius-large); margin-block-start: 6px; } .input-field__main-wrapper[data-v-b312d183] { height: var(--default-clickable-area); position: relative; } .input-field--disabled[data-v-b312d183] { opacity: .4; filter: saturate(.4); } .input-field__input[data-v-b312d183] { margin: 0; padding-inline: 12px 6px; height: var(--default-clickable-area) !important; width: 100%; font-size: var(--default-font-size); text-overflow: ellipsis; background-color: var(--color-main-background); color: var(--color-main-text); border: 2px solid var(--color-border-maxcontrast); border-radius: var(--border-radius-large); cursor: pointer; -webkit-appearance: textfield !important; -moz-appearance: textfield !important; } .input-field__input--label-outside[data-v-b312d183] { padding-block: 0; } .input-field__input[data-v-b312d183]:active:not([disabled]), .input-field__input[data-v-b312d183]:hover:not([disabled]), .input-field__input[data-v-b312d183]:focus:not([disabled]) { border-color: 2px solid var(--color-main-text) !important; box-shadow: 0 0 0 2px var(--color-main-background) !important; } .input-field__input:focus + .input-field__label[data-v-b312d183], .input-field__input:hover:not(:placeholder-shown) + .input-field__label[data-v-b312d183] { color: var(--color-main-text); } .input-field__input[data-v-b312d183]:not(:focus, .input-field__input--label-outside)::placeholder { opacity: 0; } .input-field__input[data-v-b312d183]:focus { cursor: text; } .input-field__input[data-v-b312d183]:disabled { cursor: default; } .input-field__input[data-v-b312d183]:focus-visible { box-shadow: unset !important; } .input-field__input--leading-icon[data-v-b312d183] { padding-inline-start: var(--default-clickable-area); } .input-field__input--trailing-icon[data-v-b312d183] { padding-inline-end: var(--default-clickable-area); } .input-field__input--success[data-v-b312d183] { border-color: var(--color-success) !important; } .input-field__input--success[data-v-b312d183]:focus-visible { box-shadow: #f8fafc 0 0 0 2px, var(--color-primary-element) 0 0 0 4px, #0000000d 0 1px 2px; } .input-field__input--error[data-v-b312d183] { border-color: var(--color-error) !important; } .input-field__input--error[data-v-b312d183]:focus-visible { box-shadow: #f8fafc 0 0 0 2px, var(--color-primary-element) 0 0 0 4px, #0000000d 0 1px 2px; } .input-field__input--pill[data-v-b312d183] { border-radius: var(--border-radius-pill); } .input-field__label[data-v-b312d183] { position: absolute; margin-inline: 14px 0; max-width: fit-content; inset-block-start: 11px; inset-inline: 0; color: var(--color-text-maxcontrast); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; pointer-events: none; transition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick), background-color var(--animation-quick) var(--animation-slow); } .input-field__label--leading-icon[data-v-b312d183] { margin-inline-start: var(--default-clickable-area); } .input-field__label--trailing-icon[data-v-b312d183] { margin-inline-end: var(--default-clickable-area); } .input-field__input:focus + .input-field__label[data-v-b312d183], .input-field__input:not(:placeholder-shown) + .input-field__label[data-v-b312d183] { inset-block-start: -10px; line-height: 1.5; font-size: 13px; font-weight: 500; border-radius: var(--default-grid-baseline) var(--default-grid-baseline) 0 0; background-color: var(--color-main-background); padding-inline: 5px; margin-inline-start: 9px; transition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick); } .input-field__input:focus + .input-field__label--leading-icon[data-v-b312d183], .input-field__input:not(:placeholder-shown) + .input-field__label--leading-icon[data-v-b312d183] { margin-inline-start: 41px; } .input-field__icon[data-v-b312d183] { position: absolute; height: var(--default-clickable-area); width: var(--default-clickable-area); display: flex; align-items: center; justify-content: center; opacity: .7; } .input-field__icon--leading[data-v-b312d183] { inset-block-end: 0; inset-inline-start: 2px; } .input-field__icon--trailing[data-v-b312d183] { inset-block-end: 0; inset-inline-end: 2px; } .input-field__trailing-button.button-vue[data-v-b312d183] { position: absolute; top: 0; right: 0; border-radius: var(--border-radius-large); } .input-field__trailing-button--pill.button-vue[data-v-b312d183] { border-radius: var(--border-radius-pill); } .input-field__helper-text-message[data-v-b312d183] { padding-block: 4px; display: flex; align-items: center; } .input-field__helper-text-message__icon[data-v-b312d183] { margin-inline-end: 8px; } .input-field__helper-text-message--error[data-v-b312d183] { color: var(--color-error-text); } .input-field__helper-text-message--success[data-v-b312d183] { color: var(--color-success-text); } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcListItem-L8LeGwpe.css": /*!***************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcListItem-L8LeGwpe.css ***! \***************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-b4e3d453] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .list-item__wrapper[data-v-b4e3d453] { display: flex; position: relative; width: 100%; } .list-item__wrapper--active .list-item[data-v-b4e3d453], .list-item__wrapper.active .list-item[data-v-b4e3d453] { background-color: var(--color-primary-element); } .list-item__wrapper--active .list-item[data-v-b4e3d453]:hover, .list-item__wrapper--active .list-item[data-v-b4e3d453]:focus-within, .list-item__wrapper--active .list-item[data-v-b4e3d453]:has(:focus-visible), .list-item__wrapper--active .list-item[data-v-b4e3d453]:has(:active), .list-item__wrapper.active .list-item[data-v-b4e3d453]:hover, .list-item__wrapper.active .list-item[data-v-b4e3d453]:focus-within, .list-item__wrapper.active .list-item[data-v-b4e3d453]:has(:focus-visible), .list-item__wrapper.active .list-item[data-v-b4e3d453]:has(:active) { background-color: var(--color-primary-element-hover); } .list-item__wrapper--active .line-one__name[data-v-b4e3d453], .list-item__wrapper--active .line-one__details[data-v-b4e3d453], .list-item__wrapper.active .line-one__name[data-v-b4e3d453], .list-item__wrapper.active .line-one__details[data-v-b4e3d453], .list-item__wrapper--active .line-two__subname[data-v-b4e3d453], .list-item__wrapper.active .line-two__subname[data-v-b4e3d453] { color: var(--color-primary-element-text) !important; } .list-item[data-v-b4e3d453] { box-sizing: border-box; display: flex; position: relative; flex: 0 0 auto; justify-content: flex-start; padding: 8px 10px; margin: 4px; width: calc(100% - 8px); border-radius: 32px; cursor: pointer; transition: background-color var(--animation-quick) ease-in-out; list-style: none; } .list-item[data-v-b4e3d453]:hover, .list-item[data-v-b4e3d453]:focus-within, .list-item[data-v-b4e3d453]:has(:active), .list-item[data-v-b4e3d453]:has(:focus-visible) { background-color: var(--color-background-hover); } .list-item[data-v-b4e3d453]:has(.list-item__anchor:focus-visible) { outline: 2px solid var(--color-main-text); box-shadow: 0 0 0 4px var(--color-main-background); } .list-item--compact[data-v-b4e3d453] { padding: 4px 10px; } .list-item--compact .list-item__anchor .line-one[data-v-b4e3d453], .list-item--compact .list-item__anchor .line-two[data-v-b4e3d453] { margin-block: -4px; } .list-item__anchor[data-v-b4e3d453] { display: flex; flex: 1 0 auto; align-items: center; height: var(--default-clickable-area); } .list-item__anchor[data-v-b4e3d453]:focus-visible { outline: none; } .list-item-content[data-v-b4e3d453] { display: flex; flex: 1 1 auto; justify-content: space-between; padding-left: 8px; } .list-item-content__main[data-v-b4e3d453] { flex: 1 1 auto; width: 0; margin: auto 0; } .list-item-content__main--oneline[data-v-b4e3d453] { display: flex; } .list-item-content__actions[data-v-b4e3d453] { flex: 0 0 auto; align-self: center; justify-content: center; margin-left: 4px; } .list-item__extra[data-v-b4e3d453] { margin-top: 4px; } .line-one[data-v-b4e3d453] { display: flex; align-items: center; justify-content: space-between; white-space: nowrap; margin: 0 auto 0 0; overflow: hidden; } .line-one__name[data-v-b4e3d453] { overflow: hidden; flex-grow: 1; cursor: pointer; text-overflow: ellipsis; color: var(--color-main-text); font-weight: 700; } .line-one__details[data-v-b4e3d453] { color: var(--color-text-maxcontrast); margin: 0 9px; font-weight: 400; } .line-two[data-v-b4e3d453] { display: flex; align-items: flex-start; justify-content: space-between; white-space: nowrap; } .line-two--bold[data-v-b4e3d453] { font-weight: 700; } .line-two__subname[data-v-b4e3d453] { overflow: hidden; flex-grow: 1; cursor: pointer; white-space: nowrap; text-overflow: ellipsis; color: var(--color-text-maxcontrast); } .line-two__additional_elements[data-v-b4e3d453] { margin: 2px 4px 0; display: flex; align-items: center; } .line-two__indicator[data-v-b4e3d453] { margin: 0 5px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcListItemIcon-PQ2s6ZqX.css": /*!*******************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcListItemIcon-PQ2s6ZqX.css ***! \*******************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-562c32c6] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .option[data-v-562c32c6] { display: flex; align-items: center; width: 100%; height: var(--height); cursor: inherit; } .option__avatar[data-v-562c32c6] { margin-right: var(--margin); } .option__details[data-v-562c32c6] { display: flex; flex: 1 1; flex-direction: column; justify-content: center; min-width: 0; } .option__lineone[data-v-562c32c6] { color: var(--color-main-text); } .option__linetwo[data-v-562c32c6] { color: var(--color-text-maxcontrast); } .option__lineone[data-v-562c32c6], .option__linetwo[data-v-562c32c6] { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; line-height: 1.1em; } .option__lineone strong[data-v-562c32c6], .option__linetwo strong[data-v-562c32c6] { font-weight: 700; } .option__icon[data-v-562c32c6] { width: 44px; height: 44px; color: var(--color-text-maxcontrast); } .option__icon.icon[data-v-562c32c6] { flex: 0 0 44px; opacity: .7; background-position: center; background-size: 16px; } .option__details[data-v-562c32c6], .option__lineone[data-v-562c32c6], .option__linetwo[data-v-562c32c6], .option__icon[data-v-562c32c6] { cursor: inherit; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcLoadingIcon-hZn7TJM8.css": /*!******************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcLoadingIcon-hZn7TJM8.css ***! \******************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-626664cd] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .loading-icon svg[data-v-626664cd] { animation: rotate var(--animation-duration, .8s) linear infinite; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcMentionBubble-YYl1ib_F.css": /*!********************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcMentionBubble-YYl1ib_F.css ***! \********************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-9c74f2e0] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .mention-bubble--primary .mention-bubble__content[data-v-9c74f2e0] { color: var(--color-primary-element-text); background-color: var(--color-primary-element); } .mention-bubble__wrapper[data-v-9c74f2e0] { max-width: 150px; height: 18px; vertical-align: text-bottom; display: inline-flex; align-items: center; } .mention-bubble__content[data-v-9c74f2e0] { display: inline-flex; overflow: hidden; align-items: center; max-width: 100%; height: 20px; -webkit-user-select: none; user-select: none; padding-right: 6px; padding-left: 2px; border-radius: 10px; background-color: var(--color-background-dark); } .mention-bubble__icon[data-v-9c74f2e0] { position: relative; width: 16px; height: 16px; border-radius: 8px; background-color: var(--color-background-darker); background-repeat: no-repeat; background-position: center; background-size: 12px; } .mention-bubble__icon--with-avatar[data-v-9c74f2e0] { color: inherit; background-size: cover; } .mention-bubble__title[data-v-9c74f2e0] { overflow: hidden; margin-left: 2px; white-space: nowrap; text-overflow: ellipsis; } .mention-bubble__title[data-v-9c74f2e0]:before { content: attr(title); } .mention-bubble__select[data-v-9c74f2e0] { position: absolute; z-index: -1; left: -1000px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcModal-sIK5sUoC.css": /*!************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcModal-sIK5sUoC.css ***! \************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-1ea9d450] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .modal-mask[data-v-1ea9d450] { position: fixed; z-index: 9998; top: 0; left: 0; display: block; width: 100%; height: 100%; background-color: #00000080; } .modal-mask--dark[data-v-1ea9d450] { background-color: #000000eb; } .modal-header[data-v-1ea9d450] { position: absolute; z-index: 10001; top: 0; right: 0; left: 0; display: flex !important; align-items: center; justify-content: center; width: 100%; height: 50px; overflow: hidden; transition: opacity .25s, visibility .25s; } .modal-header .modal-name[data-v-1ea9d450] { overflow-x: hidden; box-sizing: border-box; width: 100%; padding: 0 132px 0 12px; transition: padding ease .1s; white-space: nowrap; text-overflow: ellipsis; color: #fff; font-size: 14px; margin-bottom: 0; } @media only screen and (min-width: 1024px) { .modal-header .modal-name[data-v-1ea9d450] { padding-left: 132px; text-align: center; } } .modal-header .icons-menu[data-v-1ea9d450] { position: absolute; right: 0; display: flex; align-items: center; justify-content: flex-end; } .modal-header .icons-menu .header-close[data-v-1ea9d450] { display: flex; align-items: center; justify-content: center; box-sizing: border-box; margin: 3px; padding: 0; } .modal-header .icons-menu .play-pause-icons[data-v-1ea9d450] { position: relative; width: 50px; height: 50px; margin: 0; padding: 0; cursor: pointer; border: none; background-color: transparent; } .modal-header .icons-menu .play-pause-icons:hover .play-pause-icons__play[data-v-1ea9d450], .modal-header .icons-menu .play-pause-icons:hover .play-pause-icons__pause[data-v-1ea9d450], .modal-header .icons-menu .play-pause-icons:focus .play-pause-icons__play[data-v-1ea9d450], .modal-header .icons-menu .play-pause-icons:focus .play-pause-icons__pause[data-v-1ea9d450] { opacity: 1; border-radius: 22px; background-color: #7f7f7f40; } .modal-header .icons-menu .play-pause-icons__play[data-v-1ea9d450], .modal-header .icons-menu .play-pause-icons__pause[data-v-1ea9d450] { box-sizing: border-box; width: 44px; height: 44px; margin: 3px; cursor: pointer; opacity: .7; } .modal-header .icons-menu .header-actions[data-v-1ea9d450] { color: #fff; } .modal-header .icons-menu[data-v-1ea9d450] .action-item { margin: 3px; } .modal-header .icons-menu[data-v-1ea9d450] .action-item--single { box-sizing: border-box; width: 44px; height: 44px; cursor: pointer; background-position: center; background-size: 22px; } .modal-header .icons-menu[data-v-1ea9d450] button { color: #fff; } .modal-header .icons-menu[data-v-1ea9d450] .action-item__menutoggle { padding: 0; } .modal-header .icons-menu[data-v-1ea9d450] .action-item__menutoggle span, .modal-header .icons-menu[data-v-1ea9d450] .action-item__menutoggle svg { width: var(--icon-size); height: var(--icon-size); } .modal-wrapper[data-v-1ea9d450] { display: flex; align-items: center; justify-content: center; box-sizing: border-box; width: 100%; height: 100%; } .modal-wrapper .prev[data-v-1ea9d450], .modal-wrapper .next[data-v-1ea9d450] { z-index: 10000; height: 35vh; min-height: 300px; position: absolute; transition: opacity .25s; color: #fff; } .modal-wrapper .prev[data-v-1ea9d450]:focus-visible, .modal-wrapper .next[data-v-1ea9d450]:focus-visible { box-shadow: 0 0 0 2px var(--color-primary-element-text); background-color: var(--color-box-shadow); } .modal-wrapper .prev[data-v-1ea9d450] { left: 2px; } .modal-wrapper .next[data-v-1ea9d450] { right: 2px; } .modal-wrapper .modal-container[data-v-1ea9d450] { position: relative; display: flex; padding: 0; transition: transform .3s ease; border-radius: var(--border-radius-large); background-color: var(--color-main-background); color: var(--color-main-text); box-shadow: 0 0 40px #0003; } .modal-wrapper .modal-container__close[data-v-1ea9d450] { z-index: 1; position: absolute; top: 4px; right: 4px; } .modal-wrapper .modal-container__content[data-v-1ea9d450] { width: 100%; min-height: 52px; overflow: auto; } .modal-wrapper--small > .modal-container[data-v-1ea9d450] { width: 400px; max-width: 90%; max-height: min(90%, 100% - 100px); } .modal-wrapper--normal > .modal-container[data-v-1ea9d450] { max-width: 90%; width: 600px; max-height: min(90%, 100% - 100px); } .modal-wrapper--large > .modal-container[data-v-1ea9d450] { max-width: 90%; width: 900px; max-height: min(90%, 100% - 100px); } .modal-wrapper--full > .modal-container[data-v-1ea9d450] { width: 100%; height: calc(100% - var(--header-height)); position: absolute; top: 50px; border-radius: 0; } @media only screen and ((max-width: 512px) or (max-height: 400px)) { .modal-wrapper .modal-container[data-v-1ea9d450] { max-width: initial; width: 100%; max-height: initial; height: calc(100% - var(--header-height)); position: absolute; top: 50px; border-radius: 0; } } .fade-enter-active[data-v-1ea9d450], .fade-leave-active[data-v-1ea9d450] { transition: opacity .25s; } .fade-enter[data-v-1ea9d450], .fade-leave-to[data-v-1ea9d450] { opacity: 0; } .fade-visibility-enter[data-v-1ea9d450], .fade-visibility-leave-to[data-v-1ea9d450] { visibility: hidden; opacity: 0; } .modal-in-enter-active[data-v-1ea9d450], .modal-in-leave-active[data-v-1ea9d450], .modal-out-enter-active[data-v-1ea9d450], .modal-out-leave-active[data-v-1ea9d450] { transition: opacity .25s; } .modal-in-enter[data-v-1ea9d450], .modal-in-leave-to[data-v-1ea9d450], .modal-out-enter[data-v-1ea9d450], .modal-out-leave-to[data-v-1ea9d450] { opacity: 0; } .modal-in-enter .modal-container[data-v-1ea9d450], .modal-in-leave-to .modal-container[data-v-1ea9d450] { transform: scale(.9); } .modal-out-enter .modal-container[data-v-1ea9d450], .modal-out-leave-to .modal-container[data-v-1ea9d450] { transform: scale(1.1); } .modal-mask .play-pause-icons .progress-ring[data-v-1ea9d450] { position: absolute; top: 0; left: 0; transform: rotate(-90deg); } .modal-mask .play-pause-icons .progress-ring .progress-ring__circle[data-v-1ea9d450] { transition: .1s stroke-dashoffset; transform-origin: 50% 50%; animation: progressring-1ea9d450 linear var(--slideshow-duration) infinite; stroke-linecap: round; stroke-dashoffset: 94.2477796077; stroke-dasharray: 94.2477796077; } .modal-mask .play-pause-icons--paused .icon-pause[data-v-1ea9d450] { animation: breath-1ea9d450 2s cubic-bezier(.4, 0, .2, 1) infinite; } .modal-mask .play-pause-icons--paused .progress-ring__circle[data-v-1ea9d450] { animation-play-state: paused !important; } @keyframes progressring-1ea9d450 { 0% { stroke-dashoffset: 94.2477796077; } to { stroke-dashoffset: 0; } } @keyframes breath-1ea9d450 { 0% { opacity: 1; } 50% { opacity: 0; } to { opacity: 1; } } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcNoteCard-f0NZpwjL.css": /*!***************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcNoteCard-f0NZpwjL.css ***! \***************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-722d543a] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .notecard[data-v-722d543a] { color: var(--color-main-text) !important; background-color: var(--note-background) !important; border-inline-start: 4px solid var(--note-theme); border-radius: var(--border-radius); margin: 1rem 0; padding: 1rem; display: flex; flex-direction: row; gap: 1rem; } .notecard__icon--heading[data-v-722d543a] { margin-bottom: auto; margin-top: .3rem; } .notecard--success[data-v-722d543a] { --note-background: rgba(var(--color-success-rgb), .1); --note-theme: var(--color-success); } .notecard--info[data-v-722d543a] { --note-background: rgba(var(--color-info-rgb), .1); --note-theme: var(--color-info); } .notecard--error[data-v-722d543a] { --note-background: rgba(var(--color-error-rgb), .1); --note-theme: var(--color-error); } .notecard--warning[data-v-722d543a] { --note-background: rgba(var(--color-warning-rgb), .1); --note-theme: var(--color-warning); } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcPopover-MK4GcuPY.css": /*!**************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcPopover-MK4GcuPY.css ***! \**************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .resize-observer { position: absolute; top: 0; left: 0; z-index: -1; width: 100%; height: 100%; border: none; background-color: transparent; pointer-events: none; display: block; overflow: hidden; opacity: 0; } .resize-observer object { display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; pointer-events: none; z-index: -1; } .v-popper--theme-dropdown.v-popper__popper { z-index: 100000; top: 0; left: 0; display: block !important; filter: drop-shadow(0 1px 10px var(--color-box-shadow)); } .v-popper--theme-dropdown.v-popper__popper .v-popper__inner { padding: 0; color: var(--color-main-text); border-radius: var(--border-radius-large); overflow: hidden; background: var(--color-main-background); } .v-popper--theme-dropdown.v-popper__popper .v-popper__arrow-container { position: absolute; z-index: 1; width: 0; height: 0; border-style: solid; border-color: transparent; border-width: 10px; } .v-popper--theme-dropdown.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-container { bottom: -10px; border-bottom-width: 0; border-top-color: var(--color-main-background); } .v-popper--theme-dropdown.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-container { top: -10px; border-top-width: 0; border-bottom-color: var(--color-main-background); } .v-popper--theme-dropdown.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-container { left: -10px; border-left-width: 0; border-right-color: var(--color-main-background); } .v-popper--theme-dropdown.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-container { right: -10px; border-right-width: 0; border-left-color: var(--color-main-background); } .v-popper--theme-dropdown.v-popper__popper[aria-hidden=true] { visibility: hidden; transition: opacity var(--animation-quick), visibility var(--animation-quick); opacity: 0; } .v-popper--theme-dropdown.v-popper__popper[aria-hidden=false] { visibility: visible; transition: opacity var(--animation-quick); opacity: 1; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcProgressBar-w4-G5gQR.css": /*!******************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcProgressBar-w4-G5gQR.css ***! \******************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-bfe47e7c] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .progress-bar[data-v-bfe47e7c] { display: block; height: var(--progress-bar-height); --progress-bar-color: var(--0f3d9b00); } .progress-bar--linear[data-v-bfe47e7c] { width: 100%; overflow: hidden; border: 0; padding: 0; background: var(--color-background-dark); border-radius: calc(var(--progress-bar-height) / 2); } .progress-bar--linear[data-v-bfe47e7c]::-webkit-progress-bar { height: var(--progress-bar-height); background-color: transparent; } .progress-bar--linear[data-v-bfe47e7c]::-webkit-progress-value { background: var(--progress-bar-color, var(--gradient-primary-background)); border-radius: calc(var(--progress-bar-height) / 2); } .progress-bar--linear[data-v-bfe47e7c]::-moz-progress-bar { background: var(--progress-bar-color, var(--gradient-primary-background)); border-radius: calc(var(--progress-bar-height) / 2); } .progress-bar--circular[data-v-bfe47e7c] { width: var(--progress-bar-height); color: var(--progress-bar-color, var(--color-primary-element)); } .progress-bar--error[data-v-bfe47e7c] { color: var(--color-error) !important; } .progress-bar--error[data-v-bfe47e7c]::-moz-progress-bar { background: var(--color-error) !important; } .progress-bar--error[data-v-bfe47e7c]::-webkit-progress-value { background: var(--color-error) !important; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcRelatedResourcesPanel-m3uf_nvH.css": /*!****************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcRelatedResourcesPanel-m3uf_nvH.css ***! \****************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon[data-v-1a960bef] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .resource[data-v-1a960bef] { display: flex; align-items: center; height: 44px; } .resource__button[data-v-1a960bef] { width: 100% !important; justify-content: flex-start !important; padding: 0 !important; } .resource__button[data-v-1a960bef] .button-vue__wrapper { justify-content: flex-start !important; } .resource__button[data-v-1a960bef] .button-vue__wrapper .button-vue__text { font-weight: 400 !important; margin-left: 2px !important; } .resource__icon[data-v-1a960bef] { width: 32px; height: 32px; background-color: var(--color-text-maxcontrast); border-radius: 50%; display: flex; align-items: center; justify-content: center; } .resource__icon img[data-v-1a960bef] { width: 16px; height: 16px; filter: var(--background-invert-if-dark); } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-dc5c8227] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .related-resources__header[data-v-dc5c8227] { margin: 0 0 10px 46px; } .related-resources__header h5[data-v-dc5c8227] { font-weight: 700; } .related-resources__header p[data-v-dc5c8227] { color: var(--color-text-maxcontrast); } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcRichContenteditable-CuR1YKTU.css": /*!**************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcRichContenteditable-CuR1YKTU.css ***! \**************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon[data-v-9cff39ed] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .autocomplete-result[data-v-9cff39ed] { display: flex; height: var(--default-clickable-area); padding: var(--default-grid-baseline) 0; } .autocomplete-result__icon[data-v-9cff39ed] { position: relative; flex: 0 0 var(--default-clickable-area); width: var(--default-clickable-area); min-width: var(--default-clickable-area); height: var(--default-clickable-area); border-radius: var(--default-clickable-area); background-color: var(--color-background-darker); background-repeat: no-repeat; background-position: center; background-size: contain; } .autocomplete-result__icon--with-avatar[data-v-9cff39ed] { color: inherit; background-size: cover; } .autocomplete-result__status[data-v-9cff39ed] { box-sizing: border-box; position: absolute; right: -4px; bottom: -4px; min-width: 18px; min-height: 18px; width: 18px; height: 18px; border: 2px solid var(--color-main-background); border-radius: 50%; background-color: var(--color-main-background); font-size: var(--default-font-size); line-height: 15px; background-repeat: no-repeat; background-size: 16px; background-position: center; } .autocomplete-result__status--icon[data-v-9cff39ed] { border: none; background-color: transparent; } .autocomplete-result__content[data-v-9cff39ed] { display: flex; flex: 1 1 100%; flex-direction: column; justify-content: center; min-width: 0; padding-left: calc(var(--default-grid-baseline) * 2); } .autocomplete-result__title[data-v-9cff39ed], .autocomplete-result__subline[data-v-9cff39ed] { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .autocomplete-result__subline[data-v-9cff39ed] { color: var(--color-text-maxcontrast); } .material-design-icon[data-v-b659b434] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .rich-contenteditable[data-v-b659b434] { position: relative; width: auto; } .rich-contenteditable__label[data-v-b659b434] { position: absolute; margin-inline: 14px 0; max-width: fit-content; inset-block-start: 11px; inset-inline: 0; color: var(--color-text-maxcontrast); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; pointer-events: none; transition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick), background-color var(--animation-quick) var(--animation-slow); } .rich-contenteditable__input:focus + .rich-contenteditable__label[data-v-b659b434], .rich-contenteditable__input:not(.rich-contenteditable__input--empty) + .rich-contenteditable__label[data-v-b659b434] { inset-block-start: -10px; line-height: 1.5; font-size: 13px; font-weight: 500; border-radius: var(--default-grid-baseline) var(--default-grid-baseline) 0 0; background-color: var(--color-main-background); padding-inline: 5px; margin-inline-start: 9px; transition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick); } .rich-contenteditable__input[data-v-b659b434] { overflow-y: auto; width: auto; margin: 0; padding: 8px; cursor: text; white-space: pre-wrap; word-break: break-word; color: var(--color-main-text); border: 2px solid var(--color-border-maxcontrast); border-radius: var(--border-radius-large); outline: none; background-color: var(--color-main-background); font-family: var(--font-face); font-size: inherit; min-height: 44px; max-height: 242px; } .rich-contenteditable__input--has-label[data-v-b659b434] { margin-top: 10px; } .rich-contenteditable__input--empty[data-v-b659b434]:focus:before, .rich-contenteditable__input--empty[data-v-b659b434]:not(.rich-contenteditable__input--has-label):before { content: attr(aria-placeholder); color: var(--color-text-maxcontrast); position: absolute; } .rich-contenteditable__input[contenteditable=false][data-v-b659b434]:not(.rich-contenteditable__input--disabled) { cursor: default; background-color: transparent; color: var(--color-main-text); border-color: transparent; opacity: 1; border-radius: 0; } .rich-contenteditable__input--multiline[data-v-b659b434] { min-height: 132px; max-height: none; } .rich-contenteditable__input--disabled[data-v-b659b434] { opacity: .5; color: var(--color-text-maxcontrast); border: 2px solid var(--color-background-darker); border-radius: var(--border-radius); background-color: var(--color-background-dark); } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ ._material-design-icon_pq0s6_26 { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } ._tribute-container_pq0s6_34 { z-index: 9000; overflow: auto; position: absolute; left: -10000px; margin: var(--default-grid-baseline) 0; padding: var(--default-grid-baseline); color: var(--color-text-maxcontrast); border-radius: var(--border-radius); background: var(--color-main-background); box-shadow: 0 1px 5px var(--color-box-shadow); } ._tribute-container_pq0s6_34 ._tribute-container__item_pq0s6_46 { color: var(--color-text-maxcontrast); border-radius: var(--border-radius); padding: var(--default-grid-baseline) calc(2 * var(--default-grid-baseline)); margin-bottom: var(--default-grid-baseline); cursor: pointer; } ._tribute-container_pq0s6_34 ._tribute-container__item_pq0s6_46:last-child { margin-bottom: 0; } ._tribute-container_pq0s6_34 ._tribute-container__item_pq0s6_46.highlight { color: var(--color-main-text); background: var(--color-background-hover); } ._tribute-container_pq0s6_34 ._tribute-container__item_pq0s6_46.highlight, ._tribute-container_pq0s6_34 ._tribute-container__item_pq0s6_46.highlight * { cursor: pointer; } ._tribute-container_pq0s6_34._tribute-container--focus-visible_pq0s6_63 .highlight._tribute-container__item_pq0s6_46 { outline: 2px solid var(--color-main-text) !important; } ._tribute-container-autocomplete_pq0s6_67 { min-width: 250px; max-width: 300px; max-height: calc((var(--default-clickable-area) + 5 * var(--default-grid-baseline)) * 4.5 - 1.5 * var(--default-grid-baseline)); } ._tribute-container-emoji_pq0s6_73, ._tribute-container-link_pq0s6_74 { min-width: 200px; max-width: 200px; max-height: calc((24px + 3 * var(--default-grid-baseline)) * 5.5 - 1.5 * var(--default-grid-baseline)); } ._tribute-container-emoji_pq0s6_73 ._tribute-item_pq0s6_79, ._tribute-container-link_pq0s6_74 ._tribute-item_pq0s6_79 { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } ._tribute-container-emoji_pq0s6_73 ._tribute-item__emoji_pq0s6_85, ._tribute-container-link_pq0s6_74 ._tribute-item__emoji_pq0s6_85 { padding-right: calc(var(--default-grid-baseline) * 2); } ._tribute-container-link_pq0s6_74 { min-width: 200px; max-width: 300px; } ._tribute-container-link_pq0s6_74 ._tribute-item_pq0s6_79 { display: flex; align-items: center; } ._tribute-container-link_pq0s6_74 ._tribute-item__title_pq0s6_98 { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } ._tribute-container-link_pq0s6_74 ._tribute-item__icon_pq0s6_103 { margin: auto 0; width: 20px; height: 20px; object-fit: contain; padding-right: calc(var(--default-grid-baseline) * 2); filter: var(--background-invert-if-dark); } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcRichText-Pw6kTpnR.css": /*!***************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcRichText-Pw6kTpnR.css ***! \***************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon[data-v-ce89eeda] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .widgets--list.icon-loading[data-v-ce89eeda] { min-height: 44px; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-0f33c076] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .rich-text--wrapper[data-v-0f33c076] { word-break: break-word; line-height: 1.5; } .rich-text--wrapper .rich-text--fallback[data-v-0f33c076], .rich-text--wrapper .rich-text-component[data-v-0f33c076] { display: inline; } .rich-text--wrapper .rich-text--external-link[data-v-0f33c076] { text-decoration: underline; } .rich-text--wrapper .rich-text--external-link[data-v-0f33c076]:after { content: " ↗"; } .rich-text--wrapper .rich-text--ordered-list .rich-text--list-item[data-v-0f33c076] { list-style: decimal; } .rich-text--wrapper .rich-text--un-ordered-list .rich-text--list-item[data-v-0f33c076] { list-style: initial; } .rich-text--wrapper .rich-text--list-item[data-v-0f33c076] { white-space: initial; color: var(--color-text-light); padding: initial; margin-left: 20px; } .rich-text--wrapper .rich-text--list-item.task-list-item[data-v-0f33c076] { list-style: none; white-space: initial; color: var(--color-text-light); } .rich-text--wrapper .rich-text--list-item.task-list-item input[data-v-0f33c076] { min-height: initial; } .rich-text--wrapper .rich-text--strong[data-v-0f33c076] { white-space: initial; font-weight: 700; color: var(--color-text-light); } .rich-text--wrapper .rich-text--italic[data-v-0f33c076] { white-space: initial; font-style: italic; color: var(--color-text-light); } .rich-text--wrapper .rich-text--heading[data-v-0f33c076] { white-space: initial; font-size: initial; color: var(--color-text-light); margin-bottom: 5px; margin-top: 5px; font-weight: 700; } .rich-text--wrapper .rich-text--heading.rich-text--heading-1[data-v-0f33c076] { font-size: 20px; } .rich-text--wrapper .rich-text--heading.rich-text--heading-2[data-v-0f33c076] { font-size: 19px; } .rich-text--wrapper .rich-text--heading.rich-text--heading-3[data-v-0f33c076] { font-size: 18px; } .rich-text--wrapper .rich-text--heading.rich-text--heading-4[data-v-0f33c076] { font-size: 17px; } .rich-text--wrapper .rich-text--heading.rich-text--heading-5[data-v-0f33c076] { font-size: 16px; } .rich-text--wrapper .rich-text--heading.rich-text--heading-6[data-v-0f33c076] { font-size: 15px; } .rich-text--wrapper .rich-text--hr[data-v-0f33c076] { border-top: 1px solid var(--color-border-dark); border-bottom: 0; } .rich-text--wrapper .rich-text--pre[data-v-0f33c076] { border: 1px solid var(--color-border-dark); background-color: var(--color-background-dark); padding: 5px; } .rich-text--wrapper .rich-text--code[data-v-0f33c076] { background-color: var(--color-background-dark); } .rich-text--wrapper .rich-text--blockquote[data-v-0f33c076] { border-left: 3px solid var(--color-border-dark); padding-left: 5px; } .rich-text--wrapper .rich-text--table[data-v-0f33c076] { border-collapse: collapse; } .rich-text--wrapper .rich-text--table thead tr th[data-v-0f33c076] { border: 1px solid var(--color-border-dark); font-weight: 700; padding: 6px 13px; } .rich-text--wrapper .rich-text--table tbody tr td[data-v-0f33c076] { border: 1px solid var(--color-border-dark); padding: 6px 13px; } .rich-text--wrapper .rich-text--table tbody tr[data-v-0f33c076]:nth-child(2n) { background-color: var(--color-background-dark); } .rich-text--wrapper-markdown div > *[data-v-0f33c076]:first-child, .rich-text--wrapper-markdown blockquote > *[data-v-0f33c076]:first-child { margin-top: 0 !important; } .rich-text--wrapper-markdown div > *[data-v-0f33c076]:last-child, .rich-text--wrapper-markdown blockquote > *[data-v-0f33c076]:last-child { margin-bottom: 0 !important; } .rich-text--wrapper-markdown h1[data-v-0f33c076], .rich-text--wrapper-markdown h2[data-v-0f33c076], .rich-text--wrapper-markdown h3[data-v-0f33c076], .rich-text--wrapper-markdown h4[data-v-0f33c076], .rich-text--wrapper-markdown h5[data-v-0f33c076], .rich-text--wrapper-markdown h6[data-v-0f33c076], .rich-text--wrapper-markdown p[data-v-0f33c076], .rich-text--wrapper-markdown ul[data-v-0f33c076], .rich-text--wrapper-markdown ol[data-v-0f33c076], .rich-text--wrapper-markdown blockquote[data-v-0f33c076], .rich-text--wrapper-markdown pre[data-v-0f33c076] { margin-top: 0; margin-bottom: 1em; } .rich-text--wrapper-markdown h1[data-v-0f33c076], .rich-text--wrapper-markdown h2[data-v-0f33c076], .rich-text--wrapper-markdown h3[data-v-0f33c076], .rich-text--wrapper-markdown h4[data-v-0f33c076], .rich-text--wrapper-markdown h5[data-v-0f33c076], .rich-text--wrapper-markdown h6[data-v-0f33c076] { font-weight: 700; } .rich-text--wrapper-markdown h1[data-v-0f33c076] { font-size: 30px; } .rich-text--wrapper-markdown ul[data-v-0f33c076], .rich-text--wrapper-markdown ol[data-v-0f33c076] { padding-left: 15px; } .rich-text--wrapper-markdown ul[data-v-0f33c076] { list-style-type: disc; } .rich-text--wrapper-markdown ul.contains-task-list[data-v-0f33c076] { list-style-type: none; padding: 0; } .rich-text--wrapper-markdown table[data-v-0f33c076] { border-collapse: collapse; border: 2px solid var(--color-border-maxcontrast); } .rich-text--wrapper-markdown table th[data-v-0f33c076], .rich-text--wrapper-markdown table td[data-v-0f33c076] { padding: var(--default-grid-baseline); border: 1px solid var(--color-border-maxcontrast); } .rich-text--wrapper-markdown table th[data-v-0f33c076]:first-child, .rich-text--wrapper-markdown table td[data-v-0f33c076]:first-child { border-left: 0; } .rich-text--wrapper-markdown table th[data-v-0f33c076]:last-child, .rich-text--wrapper-markdown table td[data-v-0f33c076]:last-child { border-right: 0; } .rich-text--wrapper-markdown table tr:first-child th[data-v-0f33c076] { border-top: 0; } .rich-text--wrapper-markdown table tr:last-child td[data-v-0f33c076] { border-bottom: 0; } .rich-text--wrapper-markdown blockquote[data-v-0f33c076] { padding-left: 13px; border-left: 2px solid var(--color-border-dark); color: var(--color-text-lighter); } a[data-v-0f33c076]:not(.rich-text--component) { text-decoration: underline; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcSelect-GsLmwj9w.css": /*!*************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcSelect-GsLmwj9w.css ***! \*************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } body { --vs-search-input-color: var(--color-main-text); --vs-search-input-bg: var(--color-main-background); --vs-search-input-placeholder-color: var(--color-text-maxcontrast); --vs-font-size: var(--default-font-size); --vs-line-height: var(--default-line-height); --vs-state-disabled-bg: var(--color-background-hover); --vs-state-disabled-color: var(--color-text-maxcontrast); --vs-state-disabled-controls-color: var(--color-text-maxcontrast); --vs-state-disabled-cursor: not-allowed; --vs-disabled-bg: var(--color-background-hover); --vs-disabled-color: var(--color-text-maxcontrast); --vs-disabled-cursor: not-allowed; --vs-border-color: var(--color-border-maxcontrast); --vs-border-width: 2px; --vs-border-style: solid; --vs-border-radius: var(--border-radius-large); --vs-controls-color: var(--color-main-text); --vs-selected-bg: var(--color-background-hover); --vs-selected-color: var(--color-main-text); --vs-selected-border-color: var(--vs-border-color); --vs-selected-border-style: var(--vs-border-style); --vs-selected-border-width: var(--vs-border-width); --vs-dropdown-bg: var(--color-main-background); --vs-dropdown-color: var(--color-main-text); --vs-dropdown-z-index: 9999; --vs-dropdown-box-shadow: 0px 2px 2px 0px var(--color-box-shadow); --vs-dropdown-option-padding: 8px 20px; --vs-dropdown-option--active-bg: var(--color-background-hover); --vs-dropdown-option--active-color: var(--color-main-text); --vs-dropdown-option--kb-focus-box-shadow: inset 0px 0px 0px 2px var(--vs-border-color); --vs-dropdown-option--deselect-bg: var(--color-error); --vs-dropdown-option--deselect-color: #fff; --vs-transition-duration: 0ms; --vs-actions-padding: 0 8px 0 4px; } .v-select.select { min-height: 44px; min-width: 260px; margin: 0; } .v-select.select .select__label { display: block; margin-bottom: 2px; } .v-select.select .vs__selected { height: 32px; padding: 0 8px 0 12px; border-radius: 18px !important; background: var(--color-primary-element-light); border: none; } .v-select.select .vs__search, .v-select.select .vs__search:focus { margin: 2px 0 0; } .v-select.select .vs__dropdown-toggle { padding: 0; } .v-select.select .vs__clear { margin-right: 2px; } .v-select.select.vs--open .vs__dropdown-toggle { outline: 2px solid var(--color-main-background); border-color: var(--color-main-text); border-bottom-color: transparent; } .v-select.select:not(.vs--disabled, .vs--open) .vs__dropdown-toggle:hover { outline: 2px solid var(--color-main-background); border-color: var(--color-main-text); } .v-select.select.vs--disabled .vs__search, .v-select.select.vs--disabled .vs__selected { color: var(--color-text-maxcontrast); } .v-select.select.vs--disabled .vs__clear, .v-select.select.vs--disabled .vs__deselect { display: none; } .v-select.select--no-wrap .vs__selected-options { flex-wrap: nowrap; overflow: auto; min-width: unset; } .v-select.select--no-wrap .vs__selected-options .vs__selected { min-width: unset; } .v-select.select--drop-up.vs--open .vs__dropdown-toggle { border-radius: 0 0 var(--vs-border-radius) var(--vs-border-radius); border-top-color: transparent; border-bottom-color: var(--color-main-text); } .v-select.select .vs__selected-options { min-height: 40px; } .v-select.select .vs__selected-options .vs__selected ~ .vs__search[readonly] { position: absolute; } .v-select.select.vs--single.vs--loading .vs__selected, .v-select.select.vs--single.vs--open .vs__selected { max-width: 100%; opacity: 1; color: var(--color-text-maxcontrast); } .v-select.select.vs--single .vs__selected-options { flex-wrap: nowrap; } .v-select.select.vs--single .vs__selected { background: unset !important; } .vs__dropdown-menu { border-color: var(--color-main-text) !important; outline: none !important; box-shadow: -2px 0 0 var(--color-main-background), 0 2px 0 var(--color-main-background), 2px 0 0 var(--color-main-background), !important; padding: 4px !important; } .vs__dropdown-menu--floating { width: max-content; position: absolute; top: 0; left: 0; } .vs__dropdown-menu--floating-placement-top { border-radius: var(--vs-border-radius) var(--vs-border-radius) 0 0 !important; border-top-style: var(--vs-border-style) !important; border-bottom-style: none !important; box-shadow: 0 -2px 0 var(--color-main-background), -2px 0 0 var(--color-main-background), 2px 0 0 var(--color-main-background), !important; } .vs__dropdown-menu .vs__dropdown-option { border-radius: 6px !important; } .vs__dropdown-menu .vs__no-options { color: var(--color-text-lighter) !important; } .user-select .vs__selected { padding: 0 2px !important; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcSettingsInputText-MPi6a3Yy.css": /*!************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcSettingsInputText-MPi6a3Yy.css ***! \************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-5b140fb6] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .input-wrapper[data-v-5b140fb6] { display: flex; align-items: center; flex-wrap: wrap; width: 100%; max-width: 400px; } .input-wrapper .action-input__label[data-v-5b140fb6] { margin-right: 12px; } .input-wrapper[data-v-5b140fb6]:disabled { cursor: default; } .input-wrapper .hint[data-v-5b140fb6] { color: var(--color-text-maxcontrast); margin-left: 8px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcSettingsSection-PEWm0eeL.css": /*!**********************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcSettingsSection-PEWm0eeL.css ***! \**********************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-f51cf2d3] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .settings-section[data-v-f51cf2d3] { display: block; margin-bottom: auto; padding: 30px; } .settings-section[data-v-f51cf2d3]:not(:last-child) { border-bottom: 1px solid var(--color-border); } .settings-section--limit-width > *[data-v-f51cf2d3] { max-width: 900px; } .settings-section__name[data-v-f51cf2d3] { display: inline-flex; align-items: center; justify-content: center; font-size: 20px; font-weight: 700; max-width: 900px; } .settings-section__info[data-v-f51cf2d3] { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; margin: -14px -14px -14px 0; color: var(--color-text-maxcontrast); } .settings-section__info[data-v-f51cf2d3]:hover, .settings-section__info[data-v-f51cf2d3]:focus, .settings-section__info[data-v-f51cf2d3]:active { color: var(--color-main-text); } .settings-section__desc[data-v-f51cf2d3] { margin-top: -.2em; margin-bottom: 1em; color: var(--color-text-maxcontrast); max-width: 900px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcSettingsSelectGroup-_Jpb8yE3.css": /*!**************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcSettingsSelectGroup-_Jpb8yE3.css ***! \**************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-6d99b3e0] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .select-group-error[data-v-6d99b3e0] { color: var(--color-error); font-size: 13px; padding-inline-start: var(--border-radius-large); } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcTextArea-4rVwq6GK.css": /*!***************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcTextArea-4rVwq6GK.css ***! \***************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-219a1ffb] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .textarea[data-v-219a1ffb] { position: relative; width: 100%; border-radius: var(--border-radius-large); margin-block-start: 6px; resize: vertical; } .textarea__main-wrapper[data-v-219a1ffb] { position: relative; } .textarea--disabled[data-v-219a1ffb] { opacity: .7; filter: saturate(.7); } .textarea__input[data-v-219a1ffb] { margin: 0; padding-inline: 10px 6px; width: 100%; font-size: var(--default-font-size); text-overflow: ellipsis; background-color: var(--color-main-background); color: var(--color-main-text); border: 2px solid var(--color-border-maxcontrast); border-radius: var(--border-radius-large); cursor: pointer; } .textarea__input[data-v-219a1ffb]:active:not([disabled]), .textarea__input[data-v-219a1ffb]:hover:not([disabled]), .textarea__input[data-v-219a1ffb]:focus:not([disabled]) { border-color: 2px solid var(--color-main-text) !important; box-shadow: 0 0 0 2px var(--color-main-background) !important; } .textarea__input[data-v-219a1ffb]:not(:focus, .textarea__input--label-outside)::placeholder { opacity: 0; } .textarea__input[data-v-219a1ffb]:focus { cursor: text; } .textarea__input[data-v-219a1ffb]:disabled { cursor: default; } .textarea__input[data-v-219a1ffb]:focus-visible { box-shadow: unset !important; } .textarea__input--success[data-v-219a1ffb] { border-color: var(--color-success) !important; } .textarea__input--success[data-v-219a1ffb]:focus-visible { box-shadow: #f8fafc 0 0 0 2px, var(--color-primary-element) 0 0 0 4px, #0000000d 0 1px 2px; } .textarea__input--error[data-v-219a1ffb] { border-color: var(--color-error) !important; } .textarea__input--error[data-v-219a1ffb]:focus-visible { box-shadow: #f8fafc 0 0 0 2px, var(--color-primary-element) 0 0 0 4px, #0000000d 0 1px 2px; } .textarea__label[data-v-219a1ffb] { position: absolute; margin-inline: 12px 0; max-width: fit-content; inset-block-start: 11px; inset-inline: 0; color: var(--color-text-maxcontrast); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; pointer-events: none; transition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick), background-color var(--animation-quick) var(--animation-slow); } .textarea__input:focus + .textarea__label[data-v-219a1ffb], .textarea__input:not(:placeholder-shown) + .textarea__label[data-v-219a1ffb] { inset-block-start: -10px; line-height: 1.5; font-size: 13px; font-weight: 500; color: var(--color-main-text); background-color: var(--color-main-background); padding-inline: 4px; margin-inline-start: 8px; transition: height var(--animation-quick), inset-block-start var(--animation-quick), font-size var(--animation-quick), color var(--animation-quick); } .textarea__helper-text-message[data-v-219a1ffb] { padding-block: 4px; display: flex; align-items: center; } .textarea__helper-text-message__icon[data-v-219a1ffb] { margin-inline-end: 8px; } .textarea__helper-text-message--error[data-v-219a1ffb] { color: var(--color-error-text); } .textarea__helper-text-message--success[data-v-219a1ffb] { color: var(--color-success-text); } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcUserBubble-jjzI5imn.css": /*!*****************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcUserBubble-jjzI5imn.css ***! \*****************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-8f0fbaf1] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .user-bubble__wrapper[data-v-8f0fbaf1] { display: inline-block; vertical-align: middle; min-width: 0; max-width: 100%; } .user-bubble__content[data-v-8f0fbaf1] { display: inline-flex; max-width: 100%; background-color: var(--color-background-dark); } .user-bubble__content--primary[data-v-8f0fbaf1] { color: var(--color-primary-element-text); background-color: var(--color-primary-element); } .user-bubble__content[data-v-8f0fbaf1] > :last-child { padding-right: 8px; } .user-bubble__avatar[data-v-8f0fbaf1] { align-self: center; } .user-bubble__name[data-v-8f0fbaf1] { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .user-bubble__name[data-v-8f0fbaf1], .user-bubble__secondary[data-v-8f0fbaf1] { padding: 0 0 0 4px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcUserStatusIcon-62u43_6P.css": /*!*********************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/NcUserStatusIcon-62u43_6P.css ***! \*********************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-b17810e4] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .user-status-icon[data-v-b17810e4] { display: flex; justify-content: center; align-items: center; min-width: 16px; min-height: 16px; max-width: 20px; max-height: 20px; } .user-status-icon--invisible[data-v-b17810e4] { filter: var(--background-invert-if-dark); } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/Tooltip-wOLIuz0Q.css": /*!************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/Tooltip-wOLIuz0Q.css ***! \************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .v-popper--theme-tooltip.v-popper__popper { position: absolute; z-index: 100000; top: 0; right: auto; left: auto; display: block; margin: 0; padding: 0; text-align: left; text-align: start; opacity: 0; line-height: 1.6; line-break: auto; filter: drop-shadow(0 1px 10px var(--color-box-shadow)); } .v-popper--theme-tooltip.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-container { bottom: -10px; border-bottom-width: 0; border-top-color: var(--color-main-background); } .v-popper--theme-tooltip.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-container { top: -10px; border-top-width: 0; border-bottom-color: var(--color-main-background); } .v-popper--theme-tooltip.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-container { right: 100%; border-left-width: 0; border-right-color: var(--color-main-background); } .v-popper--theme-tooltip.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-container { left: 100%; border-right-width: 0; border-left-color: var(--color-main-background); } .v-popper--theme-tooltip.v-popper__popper[aria-hidden=true] { visibility: hidden; transition: opacity .15s, visibility .15s; opacity: 0; } .v-popper--theme-tooltip.v-popper__popper[aria-hidden=false] { visibility: visible; transition: opacity .15s; opacity: 1; } .v-popper--theme-tooltip .v-popper__inner { max-width: 350px; padding: 5px 8px; text-align: center; color: var(--color-main-text); border-radius: var(--border-radius); background-color: var(--color-main-background); } .v-popper--theme-tooltip .v-popper__arrow-container { position: absolute; z-index: 1; width: 0; height: 0; margin: 0; border-style: solid; border-color: transparent; border-width: 10px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/referencePickerModal-A0PlFUEI.css": /*!*************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@nextcloud/vue/dist/assets/referencePickerModal-A0PlFUEI.css ***! \*************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .material-design-icon[data-v-38b1d56a] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .widget-custom[data-v-38b1d56a] { width: 100%; margin: auto; margin-bottom: calc(var(--default-grid-baseline, 4px) * 3); margin-top: calc(var(--default-grid-baseline, 4px) * 3); overflow: hidden; border: 2px solid var(--color-border); border-radius: var(--border-radius-large); background-color: transparent; display: flex; } .widget-access[data-v-38b1d56a] { width: 100%; margin: auto; margin-bottom: calc(var(--default-grid-baseline, 4px) * 3); margin-top: calc(var(--default-grid-baseline, 4px) * 3); overflow: hidden; border: 2px solid var(--color-border); border-radius: var(--border-radius-large); background-color: transparent; display: flex; padding: calc(var(--default-grid-baseline, 4px) * 3); } .widget-default[data-v-38b1d56a] { width: 100%; margin: auto; margin-bottom: calc(var(--default-grid-baseline, 4px) * 3); margin-top: calc(var(--default-grid-baseline, 4px) * 3); overflow: hidden; border: 2px solid var(--color-border); border-radius: var(--border-radius-large); background-color: transparent; display: flex; } .widget-default--compact[data-v-38b1d56a] { flex-direction: column; } .widget-default--compact .widget-default--image[data-v-38b1d56a] { width: 100%; height: 150px; } .widget-default--compact .widget-default--details[data-v-38b1d56a] { width: 100%; padding-top: calc(var(--default-grid-baseline, 4px) * 2); padding-bottom: calc(var(--default-grid-baseline, 4px) * 2); } .widget-default--compact .widget-default--description[data-v-38b1d56a] { display: none; } .widget-default--image[data-v-38b1d56a] { width: 40%; background-position: center; background-size: cover; background-repeat: no-repeat; } .widget-default--name[data-v-38b1d56a] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 700; } .widget-default--details[data-v-38b1d56a] { padding: calc(var(--default-grid-baseline, 4px) * 3); width: 60%; } .widget-default--details p[data-v-38b1d56a] { margin: 0; padding: 0; } .widget-default--description[data-v-38b1d56a] { overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; line-clamp: 3; -webkit-box-orient: vertical; } .widget-default--link[data-v-38b1d56a] { color: var(--color-text-maxcontrast); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .material-design-icon[data-v-25f1cef8], .material-design-icon[data-v-e880790e] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .provider-list[data-v-e880790e] { width: 100%; min-height: 400px; padding: 0 16px 16px; display: flex; flex-direction: column; } .provider-list--select[data-v-e880790e] { width: 100%; } .provider-list--select .provider[data-v-e880790e] { display: flex; align-items: center; height: 28px; overflow: hidden; } .provider-list--select .provider .link-icon[data-v-e880790e] { margin-right: 8px; } .provider-list--select .provider .provider-icon[data-v-e880790e] { width: 20px; height: 20px; object-fit: contain; margin-right: 8px; filter: var(--background-invert-if-dark); } .provider-list--select .provider .option-text[data-v-e880790e] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .material-design-icon[data-v-d0ba247a] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .raw-link[data-v-d0ba247a] { width: 100%; min-height: 350px; display: flex; flex-direction: column; overflow-y: auto; padding: 0 16px 16px; } .raw-link .input-wrapper[data-v-d0ba247a] { width: 100%; } .raw-link .reference-widget[data-v-d0ba247a] { display: flex; } .raw-link--empty-content .provider-icon[data-v-d0ba247a] { width: 150px; height: 150px; object-fit: contain; filter: var(--background-invert-if-dark); } .raw-link--input[data-v-d0ba247a] { width: 99%; } .material-design-icon[data-v-7a394a58] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .result[data-v-7a394a58] { display: flex; align-items: center; height: 44px; overflow: hidden; } .result--icon-class[data-v-7a394a58], .result--image[data-v-7a394a58] { width: 40px; min-width: 40px; height: 40px; object-fit: contain; } .result--icon-class.rounded[data-v-7a394a58], .result--image.rounded[data-v-7a394a58] { border-radius: 50%; } .result--content[data-v-7a394a58] { display: flex; flex-direction: column; padding-left: 10px; overflow: hidden; } .result--content--name[data-v-7a394a58], .result--content--subline[data-v-7a394a58] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .material-design-icon[data-v-97d196f0] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .smart-picker-search[data-v-97d196f0] { width: 100%; display: flex; flex-direction: column; padding: 0 16px 16px; } .smart-picker-search.with-empty-content[data-v-97d196f0] { min-height: 400px; } .smart-picker-search .provider-icon[data-v-97d196f0] { width: 150px; height: 150px; object-fit: contain; filter: var(--background-invert-if-dark); } .smart-picker-search--select[data-v-97d196f0], .smart-picker-search--select .search-result[data-v-97d196f0] { width: 100%; } .smart-picker-search--select .group-name-icon[data-v-97d196f0], .smart-picker-search--select .option-simple-icon[data-v-97d196f0] { width: 20px; height: 20px; margin: 0 20px 0 10px; } .smart-picker-search--select .custom-option[data-v-97d196f0] { height: 44px; display: flex; align-items: center; overflow: hidden; } .smart-picker-search--select .option-text[data-v-97d196f0] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .material-design-icon[data-v-12c38c93] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .reference-picker[data-v-12c38c93], .reference-picker .custom-element-wrapper[data-v-12c38c93] { display: flex; overflow-y: auto; width: 100%; } .material-design-icon { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .reference-picker-modal .modal-container { display: flex !important; } /** * @copyright Copyright (c) 2019 John Molakvoæ * * @author John Molakvoæ * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ .material-design-icon[data-v-ab09ebaa] { display: flex; align-self: center; justify-self: center; align-items: center; justify-content: center; } .reference-picker-modal--content[data-v-ab09ebaa] { width: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; overflow-y: auto; } .reference-picker-modal--content .close-button[data-v-ab09ebaa], .reference-picker-modal--content .back-button[data-v-ab09ebaa] { position: absolute; top: 4px; } .reference-picker-modal--content .back-button[data-v-ab09ebaa] { left: 4px; } .reference-picker-modal--content .close-button[data-v-ab09ebaa] { right: 4px; } .reference-picker-modal--content > h2[data-v-ab09ebaa] { display: flex; margin: 12px 0 20px; } .reference-picker-modal--content > h2 .icon[data-v-ab09ebaa] { margin-right: 8px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./css/calendar.scss": /*!***************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./css/calendar.scss ***! \***************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; /** * Calendar App * * @copyright 2019 Georg Ehrke * * @author Georg Ehrke * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . * */ /** * Calendar App * * @copyright 2016 Raghu Nayyar * @copyright 2018 Georg Ehrke * @copyright 2017 John Molakvoæ * * @author Raghu Nayyar * @author Georg Ehrke * @author John Molakvoæ * @author Richard Steinmetz * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . * */ .app-calendar .datepicker-button-section, .app-calendar .today-button-section, .app-calendar .view-button-section { display: flex; } .app-calendar .datepicker-button-section .button, .app-calendar .today-button-section .button, .app-calendar .view-button-section .button { border-radius: 0; font-weight: normal; margin: 0 0 var(--default-grid-baseline) 0; flex-grow: 1; } .app-calendar .datepicker-button-section .button:first-child:not(:only-of-type), .app-calendar .today-button-section .button:first-child:not(:only-of-type), .app-calendar .view-button-section .button:first-child:not(:only-of-type) { border-radius: var(--border-radius-pill) 0 0 var(--border-radius-pill); } .app-calendar .datepicker-button-section .button:last-child:not(:only-of-type), .app-calendar .today-button-section .button:last-child:not(:only-of-type), .app-calendar .view-button-section .button:last-child:not(:only-of-type) { border-radius: 0 var(--border-radius-pill) var(--border-radius-pill) 0; } .app-calendar .datepicker-button-section .button:not(:only-of-type):not(:first-child):not(:last-child), .app-calendar .today-button-section .button:not(:only-of-type):not(:first-child):not(:last-child), .app-calendar .view-button-section .button:not(:only-of-type):not(:first-child):not(:last-child) { border-radius: 0; } .app-calendar .datepicker-button-section .button:only-child, .app-calendar .today-button-section .button:only-child, .app-calendar .view-button-section .button:only-child { border-radius: var(--border-radius-pill); } .app-calendar .datepicker-button-section .button:hover, .app-calendar .datepicker-button-section .button:focus, .app-calendar .datepicker-button-section .button.active, .app-calendar .today-button-section .button:hover, .app-calendar .today-button-section .button:focus, .app-calendar .today-button-section .button.active, .app-calendar .view-button-section .button:hover, .app-calendar .view-button-section .button:focus, .app-calendar .view-button-section .button.active { z-index: 50; } .app-calendar .datepicker-button-section__datepicker-label { flex-grow: 4 !important; text-align: center; } .app-calendar .datepicker-button-section__datepicker { margin-left: 26px; margin-top: 48px; position: absolute !important; width: 0 !important; } .app-calendar .datepicker-button-section__datepicker .mx-input-wrapper { display: none !important; } .app-calendar .datepicker-button-section__previous, .app-calendar .datepicker-button-section__next { background-size: 10px; flex-grow: 0 !important; width: 34px; padding: 0 6px !important; } .app-calendar .app-navigation-header { padding: calc(var(--default-grid-baseline, 4px) * 2); } .app-calendar .new-event-today-view-section { display: flex; } .app-calendar .new-event-today-view-section .button { margin: 0 var(--default-grid-baseline) 0 0; } .app-calendar .new-event-today-view-section .new-event { flex-grow: 5; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .app-calendar .new-event-today-view-section .today { flex-grow: 1; font-weight: normal !important; } .app-calendar .app-navigation-toggle { background-color: var(--color-main-background) !important; } .app-calendar .app-navigation button.icon-share { opacity: 0.3 !important; } .app-calendar .app-navigation button.icon-shared, .app-calendar .app-navigation button.icon-public { opacity: 0.7 !important; } .app-calendar .app-navigation button.icon-share:active, .app-calendar .app-navigation button.icon-share:focus, .app-calendar .app-navigation button.icon-share:hover, .app-calendar .app-navigation button.icon-shared:active, .app-calendar .app-navigation button.icon-shared:focus, .app-calendar .app-navigation button.icon-shared:hover, .app-calendar .app-navigation button.icon-public:active, .app-calendar .app-navigation button.icon-public:focus, .app-calendar .app-navigation button.icon-public:hover { opacity: 1 !important; } .app-calendar .app-navigation #calendars-list { display: block !important; } .app-calendar .app-navigation li.app-navigation-loading-placeholder-entry div.icon.icon-loading { min-height: 44px; } .app-calendar .app-navigation .app-navigation-entry-wrapper.deleted .app-navigation-entry__name { text-decoration: line-through; } .app-calendar .app-navigation .app-navigation-entry-wrapper.open-sharing { box-shadow: inset 4px 0 var(--color-primary-element) !important; margin-left: -6px; padding-left: 6px; } .app-calendar .app-navigation .app-navigation-entry-wrapper.disabled .app-navigation-entry__name { color: var(--color-text-lighter) !important; } .app-calendar .app-navigation .app-navigation-entry-wrapper .app-navigation-entry__children .app-navigation-entry { padding-left: 0 !important; } .app-calendar .app-navigation .app-navigation-entry-wrapper .app-navigation-entry__children .app-navigation-entry .avatar { width: 32px; height: 32px; background-color: var(--color-border-dark); background-size: 16px; } .app-calendar .app-navigation .app-navigation-entry-wrapper .app-navigation-entry__children .app-navigation-entry .avatar.published { background-color: var(--color-primary-element); color: white; } .app-calendar .app-navigation .app-navigation-entry__multiselect { padding: 0 8px; } .app-calendar .app-navigation .app-navigation-entry__multiselect .multiselect { width: 100%; border-radius: var(--border-radius-large); } .app-calendar .app-navigation .app-navigation-entry__multiselect .multiselect__content-wrapper { z-index: 200 !important; } .app-calendar .app-navigation .app-navigation-entry__utils .action-checkbox__label { padding-right: 0 !important; } .app-calendar .app-navigation .app-navigation-entry__utils .action-checkbox__label::before { margin: 0 4px 0 !important; } .app-calendar .app-navigation .app-navigation-entry-new-calendar .app-navigation-entry__name { color: var(--color-text-maxcontrast) !important; } .app-calendar .app-navigation .app-navigation-entry-new-calendar:hover .app-navigation-entry__name, .app-calendar .app-navigation .app-navigation-entry-new-calendar--open .app-navigation-entry__name { color: var(--color-text-light) !important; } .app-calendar .app-navigation .app-navigation-entry-new-calendar .action-item:not(.action-item--open) .action-item__menutoggle:not(:hover):not(:focus):not(:active) { opacity: 0.5; } .app-calendar .app-navigation ul > li.app-navigation-entry-wrapper div.sharing-section div.multiselect { width: calc(100% - 14px); max-width: none; z-index: 105; } .app-calendar .app-navigation ul > li.app-navigation-entry-wrapper div.sharing-section .oneline { white-space: nowrap; position: relative; } .app-calendar .app-navigation ul > li.app-navigation-entry-wrapper div.sharing-section .shareWithList { list-style-type: none; display: flex; flex-direction: column; } .app-calendar .app-navigation ul > li.app-navigation-entry-wrapper div.sharing-section .shareWithList > li { height: 44px; white-space: normal; display: inline-flex; align-items: center; position: relative; } .app-calendar .app-navigation ul > li.app-navigation-entry-wrapper div.sharing-section .shareWithList > li .username { padding: 0 8px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .app-calendar .app-navigation ul > li.app-navigation-entry-wrapper div.sharing-section .shareWithList > li > .sharingOptionsGroup { margin-left: auto; display: flex; align-items: center; white-space: nowrap; } .app-calendar .app-navigation ul > li.app-navigation-entry-wrapper div.sharing-section .shareWithList > li > .sharingOptionsGroup > a:hover, .app-calendar .app-navigation ul > li.app-navigation-entry-wrapper div.sharing-section .shareWithList > li > .sharingOptionsGroup > a:focus, .app-calendar .app-navigation ul > li.app-navigation-entry-wrapper div.sharing-section .shareWithList > li > .sharingOptionsGroup > .share-menu > a:hover, .app-calendar .app-navigation ul > li.app-navigation-entry-wrapper div.sharing-section .shareWithList > li > .sharingOptionsGroup > .share-menu > a:focus { box-shadow: none !important; opacity: 1 !important; } .app-calendar .app-navigation ul > li.app-navigation-entry-wrapper div.sharing-section .shareWithList > li > .sharingOptionsGroup > .icon:not(.hidden), .app-calendar .app-navigation ul > li.app-navigation-entry-wrapper div.sharing-section .shareWithList > li > .sharingOptionsGroup > .share-menu .icon:not(.hidden) { padding: 14px; height: 44px; width: 44px; opacity: 0.5; display: block; cursor: pointer; } .app-calendar .app-navigation ul > li.app-navigation-entry-wrapper div.sharing-section .shareWithList > li > .sharingOptionsGroup > .share-menu { position: relative; display: block; } .app-calendar .app-navigation ul .appointment-config-list .app-navigation-caption { margin-top: 22px; } .app-calendar .app-navigation ul .appointment-config-list .app-navigation-entry-link, .app-calendar .app-navigation ul .appointment-config-list .app-navigation-entry-link * { cursor: default; } /** * Calendar App * * @copyright 2019 Georg Ehrke * * @author Georg Ehrke * @author Richard Steinmetz * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . * */ .app-calendar .app-sidebar .editor-invitee-list-empty-message, .app-calendar .app-sidebar .editor-reminders-list-empty-message, .app-calendar .app-sidebar .editor-invitee-list-no-email-configured-message, .event-popover .event-popover__inner .editor-invitee-list-empty-message, .event-popover .event-popover__inner .editor-reminders-list-empty-message, .event-popover .event-popover__inner .editor-invitee-list-no-email-configured-message { margin-top: 20px; } .app-calendar .app-sidebar .editor-invitee-list-empty-message__icon, .app-calendar .app-sidebar .editor-reminders-list-empty-message__icon, .app-calendar .app-sidebar .editor-invitee-list-no-email-configured-message__icon, .event-popover .event-popover__inner .editor-invitee-list-empty-message__icon, .event-popover .event-popover__inner .editor-reminders-list-empty-message__icon, .event-popover .event-popover__inner .editor-invitee-list-no-email-configured-message__icon { background-size: 50px; height: 50px; width: 50px; margin: 0 auto; opacity: 0.5; } .app-calendar .app-sidebar .editor-invitee-list-empty-message__caption, .app-calendar .app-sidebar .editor-reminders-list-empty-message__caption, .app-calendar .app-sidebar .editor-invitee-list-no-email-configured-message__caption, .event-popover .event-popover__inner .editor-invitee-list-empty-message__caption, .event-popover .event-popover__inner .editor-reminders-list-empty-message__caption, .event-popover .event-popover__inner .editor-invitee-list-no-email-configured-message__caption { margin-top: 8px; text-align: center; color: var(--color-text-lighter); } .app-calendar .app-sidebar .editor-invitee-list-no-email-configured-message__icon, .event-popover .event-popover__inner .editor-invitee-list-no-email-configured-message__icon { font-size: 50px; line-height: 1em; user-select: none; } .app-calendar .app-sidebar .editor-reminders-list-new-button, .event-popover .event-popover__inner .editor-reminders-list-new-button { width: 100%; background-position-x: 8px; } .app-calendar .app-sidebar .app-sidebar-tab, .event-popover .event-popover__inner .app-sidebar-tab { overflow: unset !important; max-height: unset !important; height: auto !important; } .app-calendar .app-sidebar .app-sidebar-tab__buttons, .event-popover .event-popover__inner .app-sidebar-tab__buttons { position: fixed; bottom: var(--body-container-margin); z-index: 2; width: calc(27vw - 11px); min-width: 289px; max-width: 489px; background-color: var(--color-main-background); border-radius: 0 0 var(--body-container-radius) 0; padding: 0 8px 6px 0; } .app-calendar .app-sidebar .app-sidebar-tab__buttons button, .event-popover .event-popover__inner .app-sidebar-tab__buttons button { width: 100%; height: 44px; } .app-calendar .app-sidebar .app-sidebar-tab__content, .event-popover .event-popover__inner .app-sidebar-tab__content { margin-bottom: 120px; } .app-calendar .app-sidebar .property-title-time-picker-loading-placeholder, .event-popover .event-popover__inner .property-title-time-picker-loading-placeholder { width: 100%; } .app-calendar .app-sidebar .property-title-time-picker-loading-placeholder__icon, .event-popover .event-popover__inner .property-title-time-picker-loading-placeholder__icon { margin: 0 auto; height: 62px; width: 62px; background-size: 62px; } .app-calendar .app-sidebar .app-sidebar__loading-indicator, .event-popover .event-popover__inner .app-sidebar__loading-indicator { width: 100%; margin-top: 20vh; } .app-calendar .app-sidebar .app-sidebar__loading-indicator__icon, .event-popover .event-popover__inner .app-sidebar__loading-indicator__icon { margin: 0 auto; height: 44px; width: 44px; background-size: 44px; } .app-calendar .app-sidebar .repeat-option-set .repeat-option-set-section:not(:first-of-type), .event-popover .event-popover__inner .repeat-option-set .repeat-option-set-section:not(:first-of-type) { margin-top: 20px; } .app-calendar .app-sidebar .repeat-option-set .repeat-option-set-section--on-the-select, .event-popover .event-popover__inner .repeat-option-set .repeat-option-set-section--on-the-select { display: flex; align-items: center; } .app-calendar .app-sidebar .repeat-option-set .repeat-option-set-section--on-the-select .v-select, .event-popover .event-popover__inner .repeat-option-set .repeat-option-set-section--on-the-select .v-select { width: 100%; min-width: 100px !important; } .app-calendar .app-sidebar .repeat-option-set .repeat-option-set-section__title, .event-popover .event-popover__inner .repeat-option-set .repeat-option-set-section__title { list-style: none; } .app-calendar .app-sidebar .repeat-option-set .repeat-option-set-section__grid, .event-popover .event-popover__inner .repeat-option-set .repeat-option-set-section__grid { display: grid; grid-gap: 0; } .app-calendar .app-sidebar .repeat-option-set .repeat-option-set-section__grid .repeat-option-set-section-grid-item, .event-popover .event-popover__inner .repeat-option-set .repeat-option-set-section__grid .repeat-option-set-section-grid-item { padding: 8px; border: 1px solid var(--color-border-dark); text-align: center; margin: 0; border-radius: 0; } .app-calendar .app-sidebar .repeat-option-set--weekly .repeat-option-set-section__grid, .app-calendar .app-sidebar .repeat-option-set--monthly .repeat-option-set-section__grid, .event-popover .event-popover__inner .repeat-option-set--weekly .repeat-option-set-section__grid, .event-popover .event-popover__inner .repeat-option-set--monthly .repeat-option-set-section__grid { grid-template-columns: repeat(7, auto); } .app-calendar .app-sidebar .repeat-option-set--yearly .repeat-option-set-section__grid, .event-popover .event-popover__inner .repeat-option-set--yearly .repeat-option-set-section__grid { grid-template-columns: repeat(4, auto); } .app-calendar .app-sidebar .repeat-option-set--interval-freq, .event-popover .event-popover__inner .repeat-option-set--interval-freq { display: flex; align-items: center; } .app-calendar .app-sidebar .repeat-option-set--interval-freq .multiselect, .app-calendar .app-sidebar .repeat-option-set--interval-freq input[type=number], .event-popover .event-popover__inner .repeat-option-set--interval-freq .multiselect, .event-popover .event-popover__inner .repeat-option-set--interval-freq input[type=number] { min-width: 100px; width: 25%; } .app-calendar .app-sidebar .repeat-option-set--end, .event-popover .event-popover__inner .repeat-option-set--end { margin-top: 20px; display: flex; align-items: center; } .app-calendar .app-sidebar .repeat-option-set--end .repeat-option-end__label, .app-calendar .app-sidebar .repeat-option-set--end .repeat-option-end__end-type-select, .event-popover .event-popover__inner .repeat-option-set--end .repeat-option-end__label, .event-popover .event-popover__inner .repeat-option-set--end .repeat-option-end__end-type-select { display: block; min-width: 160px; width: 25%; } .app-calendar .app-sidebar .repeat-option-set--end .repeat-option-end__until, .event-popover .event-popover__inner .repeat-option-set--end .repeat-option-end__until { min-width: 75px; width: 50%; } .app-calendar .app-sidebar .repeat-option-set--end .repeat-option-end__count, .event-popover .event-popover__inner .repeat-option-set--end .repeat-option-end__count { min-width: 75px; width: 25%; } .app-calendar .app-sidebar .repeat-option-set__label, .event-popover .event-popover__inner .repeat-option-set__label { margin-right: auto; } .app-calendar .app-sidebar .repeat-option-warning, .event-popover .event-popover__inner .repeat-option-warning { text-align: center; } .app-calendar .app-sidebar .property-title-time-picker, .event-popover .event-popover__inner .property-title-time-picker { width: 100%; } .app-calendar .app-sidebar .property-title-time-picker--readonly, .event-popover .event-popover__inner .property-title-time-picker--readonly { display: flex; align-items: center; } .app-calendar .app-sidebar .property-title-time-picker__icon, .event-popover .event-popover__inner .property-title-time-picker__icon { width: 34px; height: 34px; margin-left: -5px; margin-right: 5px; } .app-calendar .app-sidebar .property-title-time-picker__time-pickers, .app-calendar .app-sidebar .property-title-time-picker__all-day, .event-popover .event-popover__inner .property-title-time-picker__time-pickers, .event-popover .event-popover__inner .property-title-time-picker__all-day { display: flex; align-items: center; } .app-calendar .app-sidebar .property-title-time-picker__time-pickers, .event-popover .event-popover__inner .property-title-time-picker__time-pickers { flex-wrap: wrap; justify-content: space-between; gap: 5px; } .app-calendar .app-sidebar .property-title-time-picker__time-pickers .mx-datepicker, .event-popover .event-popover__inner .property-title-time-picker__time-pickers .mx-datepicker { flex: 1 auto; } .app-calendar .app-sidebar .property-title-time-picker__time-pickers .mx-datepicker .mx-input-append, .event-popover .event-popover__inner .property-title-time-picker__time-pickers .mx-datepicker .mx-input-append { background-color: transparent !important; } .app-calendar .app-sidebar .property-title-time-picker__time-pickers--readonly, .event-popover .event-popover__inner .property-title-time-picker__time-pickers--readonly { justify-content: start; } .app-calendar .app-sidebar .property-title-time-picker__time-pickers--readonly .property-title-time-picker-read-only-wrapper, .event-popover .event-popover__inner .property-title-time-picker__time-pickers--readonly .property-title-time-picker-read-only-wrapper { display: flex; align-items: center; padding: 8px 7px; background-color: var(--color-main-background); color: var(--color-main-text); outline: none; } .app-calendar .app-sidebar .property-title-time-picker__time-pickers--readonly .property-title-time-picker-read-only-wrapper--start-date, .event-popover .event-popover__inner .property-title-time-picker__time-pickers--readonly .property-title-time-picker-read-only-wrapper--start-date { padding-right: 0; } .app-calendar .app-sidebar .property-title-time-picker__time-pickers--readonly .property-title-time-picker-read-only-wrapper--end-date, .event-popover .event-popover__inner .property-title-time-picker__time-pickers--readonly .property-title-time-picker-read-only-wrapper--end-date { padding-left: 0; } .app-calendar .app-sidebar .property-title-time-picker__time-pickers--readonly .property-title-time-picker-read-only-wrapper__icon, .event-popover .event-popover__inner .property-title-time-picker__time-pickers--readonly .property-title-time-picker-read-only-wrapper__icon { margin-left: 8px; height: 16px; width: 16px; opacity: 0.3; } .app-calendar .app-sidebar .property-title-time-picker__time-pickers--readonly .property-title-time-picker-read-only-wrapper__icon--highlighted, .event-popover .event-popover__inner .property-title-time-picker__time-pickers--readonly .property-title-time-picker-read-only-wrapper__icon--highlighted { opacity: 0.7; } .app-calendar .app-sidebar .property-title-time-picker__time-pickers--readonly .property-title-time-picker-read-only-wrapper__icon:focus, .app-calendar .app-sidebar .property-title-time-picker__time-pickers--readonly .property-title-time-picker-read-only-wrapper__icon:hover, .event-popover .event-popover__inner .property-title-time-picker__time-pickers--readonly .property-title-time-picker-read-only-wrapper__icon:focus, .event-popover .event-popover__inner .property-title-time-picker__time-pickers--readonly .property-title-time-picker-read-only-wrapper__icon:hover { opacity: 1; } .app-calendar .app-sidebar .property-title-time-picker__all-day, .event-popover .event-popover__inner .property-title-time-picker__all-day { padding-left: 3px; margin-top: 5px; } .app-calendar .app-sidebar .property-title-time-picker__all-day .checkbox-radio-switch__label, .event-popover .event-popover__inner .property-title-time-picker__all-day .checkbox-radio-switch__label { min-height: 32px; } .app-calendar .app-sidebar .property-title-time-picker .datetime-picker-inline-icon, .event-popover .event-popover__inner .property-title-time-picker .datetime-picker-inline-icon { margin-top: 17px; opacity: 0.3; border: none; background-color: transparent; border-radius: 0; padding: 6px !important; } .app-calendar .app-sidebar .property-title-time-picker .datetime-picker-inline-icon--highlighted, .event-popover .event-popover__inner .property-title-time-picker .datetime-picker-inline-icon--highlighted { opacity: 0.7; } .app-calendar .app-sidebar .property-title-time-picker .datetime-picker-inline-icon:focus, .app-calendar .app-sidebar .property-title-time-picker .datetime-picker-inline-icon:hover, .event-popover .event-popover__inner .property-title-time-picker .datetime-picker-inline-icon:focus, .event-popover .event-popover__inner .property-title-time-picker .datetime-picker-inline-icon:hover { opacity: 1; } .app-calendar .app-sidebar .property-alarm-list, .event-popover .event-popover__inner .property-alarm-list { width: 100%; } .app-calendar .app-sidebar .property-alarm-item, .event-popover .event-popover__inner .property-alarm-item { display: flex; align-items: center; min-height: 44px; } .app-calendar .app-sidebar .property-alarm-item__icon, .event-popover .event-popover__inner .property-alarm-item__icon { align-self: flex-start; } .app-calendar .app-sidebar .property-alarm-item__icon--hidden, .event-popover .event-popover__inner .property-alarm-item__icon--hidden { visibility: hidden; } .app-calendar .app-sidebar .property-alarm-item__icon .icon, .event-popover .event-popover__inner .property-alarm-item__icon .icon { width: 34px; height: 44px; margin-left: -5px; margin-right: 5px; } .app-calendar .app-sidebar .property-alarm-item__label, .event-popover .event-popover__inner .property-alarm-item__label { padding: 0 7px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; align-self: center; } .app-calendar .app-sidebar .property-alarm-item__options, .event-popover .event-popover__inner .property-alarm-item__options { margin-left: auto; display: flex; align-items: center; white-space: nowrap; } .app-calendar .app-sidebar .property-alarm-item__edit, .event-popover .event-popover__inner .property-alarm-item__edit { display: flex; align-items: center; width: 100%; min-width: 0; padding-right: 8px; } .app-calendar .app-sidebar .property-alarm-item__edit input[type=number], .event-popover .event-popover__inner .property-alarm-item__edit input[type=number] { width: 4em; } .app-calendar .app-sidebar .property-alarm-item__edit .multiselect, .event-popover .event-popover__inner .property-alarm-item__edit .multiselect { flex: 1 auto; height: 34px; min-width: 0; } .app-calendar .app-sidebar .property-alarm-item__edit .mx-datepicker, .event-popover .event-popover__inner .property-alarm-item__edit .mx-datepicker { flex: 1 auto; } .app-calendar .app-sidebar .property-alarm-item__edit--all-day, .event-popover .event-popover__inner .property-alarm-item__edit--all-day { flex-wrap: wrap; margin-bottom: 5px; gap: 0 5px; } .app-calendar .app-sidebar .property-alarm-item__edit--all-day__distance, .app-calendar .app-sidebar .property-alarm-item__edit--all-day__time, .event-popover .event-popover__inner .property-alarm-item__edit--all-day__distance, .event-popover .event-popover__inner .property-alarm-item__edit--all-day__time { display: flex; flex: 1; align-items: center; } .app-calendar .app-sidebar .property-alarm-item__edit--all-day__distance .multiselect, .event-popover .event-popover__inner .property-alarm-item__edit--all-day__distance .multiselect { width: 6em; } .app-calendar .app-sidebar .property-alarm-item__edit--all-day__time__before-at-label, .event-popover .event-popover__inner .property-alarm-item__edit--all-day__time__before-at-label { flex: 0 0 auto; margin-right: 5px; } .app-calendar .app-sidebar .property-alarm-item__edit--all-day__time .mx-datepicker, .event-popover .event-popover__inner .property-alarm-item__edit--all-day__time .mx-datepicker { width: 7em; } .app-calendar .app-sidebar .property-alarm-item__edit--absolute .mx-datepicker, .event-popover .event-popover__inner .property-alarm-item__edit--absolute .mx-datepicker { width: unset; } .app-calendar .app-sidebar .property-repeat, .event-popover .event-popover__inner .property-repeat { width: 100%; } .app-calendar .app-sidebar .property-repeat__summary, .event-popover .event-popover__inner .property-repeat__summary { display: flex; align-items: center; } .app-calendar .app-sidebar .property-repeat__summary__icon, .event-popover .event-popover__inner .property-repeat__summary__icon { width: 34px; height: 34px; margin-left: -5px; margin-right: 5px; } .app-calendar .app-sidebar .property-repeat__summary__content, .event-popover .event-popover__inner .property-repeat__summary__content { flex: 1 auto; padding: 8px 7px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .app-calendar .app-sidebar .property-repeat__options, .event-popover .event-popover__inner .property-repeat__options { margin-bottom: 5px; } .app-calendar .app-sidebar .resource-list-item, .app-calendar .app-sidebar .invitees-list-item, .event-popover .event-popover__inner .resource-list-item, .event-popover .event-popover__inner .invitees-list-item { display: flex; align-items: center; min-height: 44px; } .app-calendar .app-sidebar .resource-list-item__displayname, .app-calendar .app-sidebar .invitees-list-item__displayname, .event-popover .event-popover__inner .resource-list-item__displayname, .event-popover .event-popover__inner .invitees-list-item__displayname { margin-left: 8px; } .app-calendar .app-sidebar .resource-list-item__actions, .app-calendar .app-sidebar .invitees-list-item__actions, .event-popover .event-popover__inner .resource-list-item__actions, .event-popover .event-popover__inner .invitees-list-item__actions { margin-left: auto; } .app-calendar .app-sidebar .resource-list-item__organizer-hint, .app-calendar .app-sidebar .invitees-list-item__organizer-hint, .event-popover .event-popover__inner .resource-list-item__organizer-hint, .event-popover .event-popover__inner .invitees-list-item__organizer-hint { color: var(--color-text-maxcontrast); font-weight: 300; margin-left: 5px; } .app-calendar .app-sidebar .resource-search__capacity, .event-popover .event-popover__inner .resource-search__capacity { display: flex; align-items: center; } .app-calendar .app-sidebar .resource-search__capacity__actions, .event-popover .event-popover__inner .resource-search__capacity__actions { margin-left: 5px; } .app-calendar .app-sidebar .avatar-participation-status, .event-popover .event-popover__inner .avatar-participation-status { position: relative; height: 38px; width: 38px; } .app-calendar .app-sidebar .avatar-participation-status__indicator, .event-popover .event-popover__inner .avatar-participation-status__indicator { position: absolute; bottom: 0; right: 0; background-size: 10px; height: 15px; width: 15px; border-radius: 50%; } .app-calendar .app-sidebar .avatar-participation-status__indicator.accepted, .event-popover .event-popover__inner .avatar-participation-status__indicator.accepted { background-color: #2fb130; } .app-calendar .app-sidebar .avatar-participation-status__indicator.declined, .event-popover .event-popover__inner .avatar-participation-status__indicator.declined { background-color: #ff0000; } .app-calendar .app-sidebar .avatar-participation-status__indicator.tentative, .event-popover .event-popover__inner .avatar-participation-status__indicator.tentative { background-color: #ffa704; } .app-calendar .app-sidebar .avatar-participation-status__indicator.delegated, .app-calendar .app-sidebar .avatar-participation-status__indicator.no-response, .event-popover .event-popover__inner .avatar-participation-status__indicator.delegated, .event-popover .event-popover__inner .avatar-participation-status__indicator.no-response { background-color: grey; } .app-calendar .app-sidebar .property-text, .app-calendar .app-sidebar .property-select, .app-calendar .app-sidebar .property-color, .app-calendar .app-sidebar .property-select-multiple, .app-calendar .app-sidebar .property-title, .app-calendar .app-sidebar .resource-capacity, .app-calendar .app-sidebar .resource-room-type, .event-popover .event-popover__inner .property-text, .event-popover .event-popover__inner .property-select, .event-popover .event-popover__inner .property-color, .event-popover .event-popover__inner .property-select-multiple, .event-popover .event-popover__inner .property-title, .event-popover .event-popover__inner .resource-capacity, .event-popover .event-popover__inner .resource-room-type { display: flex; width: 100%; align-items: flex-start; } .app-calendar .app-sidebar .property-text__icon, .app-calendar .app-sidebar .property-text__info, .app-calendar .app-sidebar .property-select__icon, .app-calendar .app-sidebar .property-select__info, .app-calendar .app-sidebar .property-color__icon, .app-calendar .app-sidebar .property-color__info, .app-calendar .app-sidebar .property-select-multiple__icon, .app-calendar .app-sidebar .property-select-multiple__info, .app-calendar .app-sidebar .property-title__icon, .app-calendar .app-sidebar .property-title__info, .app-calendar .app-sidebar .resource-capacity__icon, .app-calendar .app-sidebar .resource-capacity__info, .app-calendar .app-sidebar .resource-room-type__icon, .app-calendar .app-sidebar .resource-room-type__info, .event-popover .event-popover__inner .property-text__icon, .event-popover .event-popover__inner .property-text__info, .event-popover .event-popover__inner .property-select__icon, .event-popover .event-popover__inner .property-select__info, .event-popover .event-popover__inner .property-color__icon, .event-popover .event-popover__inner .property-color__info, .event-popover .event-popover__inner .property-select-multiple__icon, .event-popover .event-popover__inner .property-select-multiple__info, .event-popover .event-popover__inner .property-title__icon, .event-popover .event-popover__inner .property-title__info, .event-popover .event-popover__inner .resource-capacity__icon, .event-popover .event-popover__inner .resource-capacity__info, .event-popover .event-popover__inner .resource-room-type__icon, .event-popover .event-popover__inner .resource-room-type__info { height: 34px; width: 34px; } .app-calendar .app-sidebar .property-text__icon--hidden, .app-calendar .app-sidebar .property-select__icon--hidden, .app-calendar .app-sidebar .property-color__icon--hidden, .app-calendar .app-sidebar .property-select-multiple__icon--hidden, .app-calendar .app-sidebar .property-title__icon--hidden, .app-calendar .app-sidebar .resource-capacity__icon--hidden, .app-calendar .app-sidebar .resource-room-type__icon--hidden, .event-popover .event-popover__inner .property-text__icon--hidden, .event-popover .event-popover__inner .property-select__icon--hidden, .event-popover .event-popover__inner .property-color__icon--hidden, .event-popover .event-popover__inner .property-select-multiple__icon--hidden, .event-popover .event-popover__inner .property-title__icon--hidden, .event-popover .event-popover__inner .resource-capacity__icon--hidden, .event-popover .event-popover__inner .resource-room-type__icon--hidden { visibility: hidden; } .app-calendar .app-sidebar .property-text__info, .app-calendar .app-sidebar .property-select__info, .app-calendar .app-sidebar .property-color__info, .app-calendar .app-sidebar .property-select-multiple__info, .app-calendar .app-sidebar .property-title__info, .app-calendar .app-sidebar .resource-capacity__info, .app-calendar .app-sidebar .resource-room-type__info, .event-popover .event-popover__inner .property-text__info, .event-popover .event-popover__inner .property-select__info, .event-popover .event-popover__inner .property-color__info, .event-popover .event-popover__inner .property-select-multiple__info, .event-popover .event-popover__inner .property-title__info, .event-popover .event-popover__inner .resource-capacity__info, .event-popover .event-popover__inner .resource-room-type__info { display: flex; justify-content: center; flex-shrink: 0; opacity: 0.5; } .app-calendar .app-sidebar .property-text__info:hover, .app-calendar .app-sidebar .property-select__info:hover, .app-calendar .app-sidebar .property-color__info:hover, .app-calendar .app-sidebar .property-select-multiple__info:hover, .app-calendar .app-sidebar .property-title__info:hover, .app-calendar .app-sidebar .resource-capacity__info:hover, .app-calendar .app-sidebar .resource-room-type__info:hover, .event-popover .event-popover__inner .property-text__info:hover, .event-popover .event-popover__inner .property-select__info:hover, .event-popover .event-popover__inner .property-color__info:hover, .event-popover .event-popover__inner .property-select-multiple__info:hover, .event-popover .event-popover__inner .property-title__info:hover, .event-popover .event-popover__inner .resource-capacity__info:hover, .event-popover .event-popover__inner .resource-room-type__info:hover { opacity: 1; } .app-calendar .app-sidebar .property-text__icon, .app-calendar .app-sidebar .property-select__icon, .app-calendar .app-sidebar .property-color__icon, .app-calendar .app-sidebar .property-select-multiple__icon, .app-calendar .app-sidebar .property-title__icon, .app-calendar .app-sidebar .resource-capacity__icon, .app-calendar .app-sidebar .resource-room-type__icon, .event-popover .event-popover__inner .property-text__icon, .event-popover .event-popover__inner .property-select__icon, .event-popover .event-popover__inner .property-color__icon, .event-popover .event-popover__inner .property-select-multiple__icon, .event-popover .event-popover__inner .property-title__icon, .event-popover .event-popover__inner .resource-capacity__icon, .event-popover .event-popover__inner .resource-room-type__icon { flex-shrink: 0; margin-left: -5px; margin-right: 5px; } .app-calendar .app-sidebar .property-text__input, .app-calendar .app-sidebar .property-select__input, .app-calendar .app-sidebar .property-color__input, .app-calendar .app-sidebar .property-select-multiple__input, .app-calendar .app-sidebar .property-title__input, .app-calendar .app-sidebar .resource-capacity__input, .app-calendar .app-sidebar .resource-room-type__input, .event-popover .event-popover__inner .property-text__input, .event-popover .event-popover__inner .property-select__input, .event-popover .event-popover__inner .property-color__input, .event-popover .event-popover__inner .property-select-multiple__input, .event-popover .event-popover__inner .property-title__input, .event-popover .event-popover__inner .resource-capacity__input, .event-popover .event-popover__inner .resource-room-type__input { flex-grow: 2; } .app-calendar .app-sidebar .property-text__input textarea, .app-calendar .app-sidebar .property-text__input input, .app-calendar .app-sidebar .property-text__input div.v-select, .app-calendar .app-sidebar .property-select__input textarea, .app-calendar .app-sidebar .property-select__input input, .app-calendar .app-sidebar .property-select__input div.v-select, .app-calendar .app-sidebar .property-color__input textarea, .app-calendar .app-sidebar .property-color__input input, .app-calendar .app-sidebar .property-color__input div.v-select, .app-calendar .app-sidebar .property-select-multiple__input textarea, .app-calendar .app-sidebar .property-select-multiple__input input, .app-calendar .app-sidebar .property-select-multiple__input div.v-select, .app-calendar .app-sidebar .property-title__input textarea, .app-calendar .app-sidebar .property-title__input input, .app-calendar .app-sidebar .property-title__input div.v-select, .app-calendar .app-sidebar .resource-capacity__input textarea, .app-calendar .app-sidebar .resource-capacity__input input, .app-calendar .app-sidebar .resource-capacity__input div.v-select, .app-calendar .app-sidebar .resource-room-type__input textarea, .app-calendar .app-sidebar .resource-room-type__input input, .app-calendar .app-sidebar .resource-room-type__input div.v-select, .event-popover .event-popover__inner .property-text__input textarea, .event-popover .event-popover__inner .property-text__input input, .event-popover .event-popover__inner .property-text__input div.v-select, .event-popover .event-popover__inner .property-select__input textarea, .event-popover .event-popover__inner .property-select__input input, .event-popover .event-popover__inner .property-select__input div.v-select, .event-popover .event-popover__inner .property-color__input textarea, .event-popover .event-popover__inner .property-color__input input, .event-popover .event-popover__inner .property-color__input div.v-select, .event-popover .event-popover__inner .property-select-multiple__input textarea, .event-popover .event-popover__inner .property-select-multiple__input input, .event-popover .event-popover__inner .property-select-multiple__input div.v-select, .event-popover .event-popover__inner .property-title__input textarea, .event-popover .event-popover__inner .property-title__input input, .event-popover .event-popover__inner .property-title__input div.v-select, .event-popover .event-popover__inner .resource-capacity__input textarea, .event-popover .event-popover__inner .resource-capacity__input input, .event-popover .event-popover__inner .resource-capacity__input div.v-select, .event-popover .event-popover__inner .resource-room-type__input textarea, .event-popover .event-popover__inner .resource-room-type__input input, .event-popover .event-popover__inner .resource-room-type__input div.v-select { width: 100%; } .app-calendar .app-sidebar .property-text__input textarea, .app-calendar .app-sidebar .property-select__input textarea, .app-calendar .app-sidebar .property-color__input textarea, .app-calendar .app-sidebar .property-select-multiple__input textarea, .app-calendar .app-sidebar .property-title__input textarea, .app-calendar .app-sidebar .resource-capacity__input textarea, .app-calendar .app-sidebar .resource-room-type__input textarea, .event-popover .event-popover__inner .property-text__input textarea, .event-popover .event-popover__inner .property-select__input textarea, .event-popover .event-popover__inner .property-color__input textarea, .event-popover .event-popover__inner .property-select-multiple__input textarea, .event-popover .event-popover__inner .property-title__input textarea, .event-popover .event-popover__inner .resource-capacity__input textarea, .event-popover .event-popover__inner .resource-room-type__input textarea { max-height: calc(100vh - 500px); vertical-align: top; margin: 0; } .app-calendar .app-sidebar .property-text__input--readonly div, .app-calendar .app-sidebar .property-select__input--readonly div, .app-calendar .app-sidebar .property-color__input--readonly div, .app-calendar .app-sidebar .property-select-multiple__input--readonly div, .app-calendar .app-sidebar .property-title__input--readonly div, .app-calendar .app-sidebar .resource-capacity__input--readonly div, .app-calendar .app-sidebar .resource-room-type__input--readonly div, .event-popover .event-popover__inner .property-text__input--readonly div, .event-popover .event-popover__inner .property-select__input--readonly div, .event-popover .event-popover__inner .property-color__input--readonly div, .event-popover .event-popover__inner .property-select-multiple__input--readonly div, .event-popover .event-popover__inner .property-title__input--readonly div, .event-popover .event-popover__inner .resource-capacity__input--readonly div, .event-popover .event-popover__inner .resource-room-type__input--readonly div { width: calc(100% - 8px); /* for typical (thin) scrollbar size */ white-space: pre-line; padding: 8px 7px; background-color: var(--color-main-background); color: var(--color-main-text); outline: none; overflow-y: scroll; word-break: break-word; /* allows breaking on long URLs */ max-height: 30vh; } .app-calendar .app-sidebar .property-text__input--readonly-calendar-picker div.calendar-picker-option, .app-calendar .app-sidebar .property-select__input--readonly-calendar-picker div.calendar-picker-option, .app-calendar .app-sidebar .property-color__input--readonly-calendar-picker div.calendar-picker-option, .app-calendar .app-sidebar .property-select-multiple__input--readonly-calendar-picker div.calendar-picker-option, .app-calendar .app-sidebar .property-title__input--readonly-calendar-picker div.calendar-picker-option, .app-calendar .app-sidebar .resource-capacity__input--readonly-calendar-picker div.calendar-picker-option, .app-calendar .app-sidebar .resource-room-type__input--readonly-calendar-picker div.calendar-picker-option, .event-popover .event-popover__inner .property-text__input--readonly-calendar-picker div.calendar-picker-option, .event-popover .event-popover__inner .property-select__input--readonly-calendar-picker div.calendar-picker-option, .event-popover .event-popover__inner .property-color__input--readonly-calendar-picker div.calendar-picker-option, .event-popover .event-popover__inner .property-select-multiple__input--readonly-calendar-picker div.calendar-picker-option, .event-popover .event-popover__inner .property-title__input--readonly-calendar-picker div.calendar-picker-option, .event-popover .event-popover__inner .resource-capacity__input--readonly-calendar-picker div.calendar-picker-option, .event-popover .event-popover__inner .resource-room-type__input--readonly-calendar-picker div.calendar-picker-option { padding: 8px 7px; } .app-calendar .app-sidebar .property-text, .app-calendar .app-sidebar .property-select, .app-calendar .app-sidebar .property-color, .app-calendar .app-sidebar .property-select-multiple, .app-calendar .app-sidebar .property-title, .app-calendar .app-sidebar .property-repeat, .app-calendar .app-sidebar .resource-capacity, .app-calendar .app-sidebar .resource-room-type, .event-popover .event-popover__inner .property-text, .event-popover .event-popover__inner .property-select, .event-popover .event-popover__inner .property-color, .event-popover .event-popover__inner .property-select-multiple, .event-popover .event-popover__inner .property-title, .event-popover .event-popover__inner .property-repeat, .event-popover .event-popover__inner .resource-capacity, .event-popover .event-popover__inner .resource-room-type { margin-bottom: 5px; } .app-calendar .app-sidebar .property-text--readonly, .app-calendar .app-sidebar .property-select--readonly, .app-calendar .app-sidebar .property-color--readonly, .app-calendar .app-sidebar .property-select-multiple--readonly, .app-calendar .app-sidebar .property-title--readonly, .app-calendar .app-sidebar .property-repeat--readonly, .app-calendar .app-sidebar .resource-capacity--readonly, .app-calendar .app-sidebar .resource-room-type--readonly, .event-popover .event-popover__inner .property-text--readonly, .event-popover .event-popover__inner .property-select--readonly, .event-popover .event-popover__inner .property-color--readonly, .event-popover .event-popover__inner .property-select-multiple--readonly, .event-popover .event-popover__inner .property-title--readonly, .event-popover .event-popover__inner .property-repeat--readonly, .event-popover .event-popover__inner .resource-capacity--readonly, .event-popover .event-popover__inner .resource-room-type--readonly { margin-bottom: 0; } .app-calendar .app-sidebar .property-select, .app-calendar .app-sidebar .property-select-multiple, .event-popover .event-popover__inner .property-select, .event-popover .event-popover__inner .property-select-multiple { align-items: center; } .app-calendar .app-sidebar .property-select .v-select, .app-calendar .app-sidebar .property-select-multiple .v-select, .event-popover .event-popover__inner .property-select .v-select, .event-popover .event-popover__inner .property-select-multiple .v-select { min-width: unset !important; } .app-calendar .app-sidebar .property-color__input, .event-popover .event-popover__inner .property-color__input { display: flex; gap: 5px; margin-bottom: 5px; } .app-calendar .app-sidebar .property-color__input--readonly, .event-popover .event-popover__inner .property-color__input--readonly { margin: 3px 0 3px 7px; } .app-calendar .app-sidebar .property-color__color-preview, .event-popover .event-popover__inner .property-color__color-preview { width: 44px !important; height: 44px !important; border-radius: 44px; } .app-calendar .app-sidebar .property-text__icon, .event-popover .event-popover__inner .property-text__icon { height: unset; align-self: flex-start; padding-top: 12px; } .app-calendar .app-sidebar .property-text--readonly .property-text__icon, .event-popover .event-popover__inner .property-text--readonly .property-text__icon { padding-top: 10px; } .app-calendar .app-sidebar .property-text__input--readonly, .event-popover .event-popover__inner .property-text__input--readonly { line-height: 1; padding-top: calc(var(--default-line-height) / 2 - 0.5lh); } .app-calendar .app-sidebar .property-text__input textarea, .event-popover .event-popover__inner .property-text__input textarea { resize: none; } .app-calendar .app-sidebar .property-select-multiple .property-select-multiple__input.property-select-multiple__input--readonly, .event-popover .event-popover__inner .property-select-multiple .property-select-multiple__input.property-select-multiple__input--readonly { width: 100%; } .app-calendar .app-sidebar .property-select-multiple .property-select-multiple__input.property-select-multiple__input--readonly .property-select-multiple-colored-tag-wrapper, .event-popover .event-popover__inner .property-select-multiple .property-select-multiple__input.property-select-multiple__input--readonly .property-select-multiple-colored-tag-wrapper { align-items: center; overflow: hidden; max-width: 100%; position: relative; padding: 3px 5px; } .app-calendar .app-sidebar .property-select-multiple .property-select-multiple__input.property-select-multiple__input--readonly .property-select-multiple-colored-tag-wrapper .multiselect__tag, .event-popover .event-popover__inner .property-select-multiple .property-select-multiple__input.property-select-multiple__input--readonly .property-select-multiple-colored-tag-wrapper .multiselect__tag { line-height: 20px; padding: 1px 5px; background-image: none; display: inline-flex; align-items: center; border-radius: 3px; max-width: fit-content; margin: 3px; } .app-calendar .app-sidebar .property-title__input, .app-calendar .app-sidebar .property-title input, .event-popover .event-popover__inner .property-title__input, .event-popover .event-popover__inner .property-title input { font-weight: bold; } .app-calendar .app-sidebar .property-title__input--readonly, .event-popover .event-popover__inner .property-title__input--readonly { font-size: 18px; } .app-calendar .app-sidebar .property-title input, .app-calendar .app-sidebar .property-title-time-picker input, .event-popover .event-popover__inner .property-title input, .event-popover .event-popover__inner .property-title-time-picker input { margin: 0; } .app-calendar .app-sidebar .resource-room-type, .event-popover .event-popover__inner .resource-room-type { margin-bottom: 5px; } .event-popover .event-popover__inner .event-popover__response-buttons { margin-top: 8px; margin-bottom: 0; } .event-popover .event-popover__inner .property-text__icon, .event-popover .event-popover__inner .property-title-time-picker__icon { margin: 0 !important; } .timezone-popover-wrapper .popover__inner { padding: 20px; } .timezone-popover-wrapper__title { margin-bottom: 8px; } .timezone-popover-wrapper__timezone-select { min-width: 200px; } .event-popover .v-popper__inner { overflow: unset !important; } .event-popover .event-popover__inner { text-align: left; max-width: 480px; width: 480px; padding: 5px 10px 10px 10px; } .event-popover .event-popover__inner .empty-content { margin-top: 0 !important; padding: 50px 0; } .event-popover .event-popover__inner .property-title-time-picker:not(.property-title-time-picker--readonly) { margin-bottom: 12px; } .event-popover .event-popover__inner .event-popover__invitees .avatar-participation-status__text { bottom: 22px; } .event-popover .event-popover__inner .event-popover__buttons { margin-top: 8px; } .event-popover .event-popover__inner .event-popover__top-right-actions { display: flex; gap: var(--default-grid-baseline); position: absolute !important; top: var(--default-grid-baseline) !important; right: var(--default-grid-baseline) !important; z-index: 100 !important; opacity: 0.7 !important; border-radius: 22px !important; } .event-popover .event-popover__inner .event-popover__top-right-actions .action-item.action-item--single { width: 44px !important; height: 44px !important; } .event-popover .event-popover__inner .popover-loading-indicator { width: 100%; } .event-popover .event-popover__inner .popover-loading-indicator__icon { margin: 0 auto; height: 62px; width: 62px; background-size: 62px; } .event-popover[x-out-of-boundaries] { margin-top: 75px; } .event-popover[x-placement^=bottom] .popover__arrow { border-bottom-color: var(--color-background-dark); } .calendar-picker-option { display: flex; align-items: center; overflow: hidden; } .calendar-picker-option__color-indicator { width: 12px; height: 12px; border-radius: 50%; border: none; margin-right: 8px; flex-basis: 12px; flex-shrink: 0; } .calendar-picker-option__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex-grow: 1; } .calendar-picker-option__avatar { flex-basis: 18px; flex-shrink: 0; } .property-select-multiple-colored-tag { width: 100%; display: flex; align-items: center; } .property-select-multiple-colored-tag__color-indicator { width: 12px; height: 12px; border-radius: 50%; border: none; margin-right: 8px; flex-shrink: 0; } .property-select-multiple-colored-tag .icon { margin-left: 4px; scale: 0.8; } .resource-list-button-group, .invitees-list-button-group { width: 100%; display: flex; justify-content: space-between; align-items: center; } .resource-list-button-group:not(:empty), .invitees-list-button-group:not(:empty) { margin-top: 20px; } .vs__dropdown-option span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .resource-search-list-item, .invitees-search-list-item { display: flex; align-items: center; width: 100%; padding-right: 32px; } .resource-search-list-item__label, .invitees-search-list-item__label { width: 100%; padding: 0 8px; } .resource-search-list-item__label__availability, .invitees-search-list-item__label__availability { color: var(--color-text-maxcontrast); } .resource-search-list-item__label div, .invitees-search-list-item__label div { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .resource-search-list-item__label div:nth-child(1), .invitees-search-list-item__label div:nth-child(1) { color: var(--color-main-text); } .resource-search-list-item__label div:nth-child(2), .invitees-search-list-item__label div:nth-child(2) { color: var(--color-text-lighter); line-height: 1; } .resource-search__multiselect, .invitees-search__multiselect { width: 100%; } /** * Calendar App * * @copyright 2019 Georg Ehrke * * @author Georg Ehrke * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . * */ #app-settings .settings-fieldset-interior-item { padding: 5px 0; } #app-settings .settings-fieldset-interior-item .action-checkbox { line-height: unset !important; white-space: unset !important; } #app-settings .settings-fieldset-interior-item .action-checkbox__label::before { margin: 0 6px 3px 3px !important; flex-shrink: 0; } #app-settings .settings-fieldset-interior-item .action-button { min-height: unset !important; } #app-settings .settings-fieldset-interior-item .action-button__icon { margin: 0 6px 3px 3px !important; height: 14px !important; width: 14px !important; background-position: unset !important; } #app-settings .settings-fieldset-interior-item .action-button__longtext { width: unset !important; padding: 0 !important; } #app-settings .settings-fieldset-interior-item__import-button { display: block; text-align: center; background-position-x: 8px; position: relative; } #app-settings .settings-fieldset-interior-item__import-button .material-design-icon { position: absolute; } #app-settings .settings-fieldset-interior-item--slotDuration, #app-settings .settings-fieldset-interior-item--defaultReminder { display: table; } #app-settings .settings-fieldset-interior-item--slotDuration label, #app-settings .settings-fieldset-interior-item--defaultReminder label { display: block; } #app-settings .settings-fieldset-interior-item--slotDuration .multiselect, #app-settings .settings-fieldset-interior-item--defaultReminder .multiselect { display: block; } #app-settings .settings-fieldset-interior-item--timezone, #app-settings .settings-fieldset-interior-item--default-calendar { width: 100%; } #app-settings .settings-fieldset-interior-item--timezone .multiselect, #app-settings .settings-fieldset-interior-item--default-calendar .multiselect { width: 100%; } .shortcut-overview-modal .modal-container { display: flex !important; flex-wrap: wrap; padding: 0 12px 12px 12px !important; } .shortcut-overview-modal .modal-container * { box-sizing: border-box; } .shortcut-overview-modal .modal-container .shortcut-section { width: 50%; flex-grow: 0; flex-shrink: 0; padding: 10px; } .shortcut-overview-modal .modal-container .shortcut-section .shortcut-section-item { width: 100%; display: grid; grid-template-columns: 33% 67%; column-gap: 10px; } .shortcut-overview-modal .modal-container .shortcut-section .shortcut-section-item:not(:first-child) { margin-top: 10px; } .shortcut-overview-modal .modal-container .shortcut-section .shortcut-section-item__keys { display: block; text-align: right; } .shortcut-overview-modal .modal-container .shortcut-section .shortcut-section-item__label { display: block; text-align: left; padding-top: 5px; } .shortcut-overview-modal .modal-container .shortcut-section .shortcut-section-item__spacer { margin: 0 3px; } @media screen and (max-width: 800px) { .shortcut-overview-modal .modal-container .shortcut-section { width: 100%; } } /** * Calendar App * * @copyright 2021 Richard Steinmetz * * @author Richard Steinmetz * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . * */ .appointment-config-modal { padding: 2vw; } .appointment-config-modal__form { display: flex; flex-direction: column; width: 100%; } .appointment-config-modal__form fieldset { padding: 20px 0; } .appointment-config-modal__form fieldset header { font-size: 16px; margin-bottom: 3px; } .appointment-config-modal__form .availability-select, .appointment-config-modal__form .calendar-select { display: flex; flex-direction: column; } .appointment-config-modal__form__row--wrapped { display: flex; flex-wrap: wrap; gap: 10px 50px; } .appointment-config-modal__form__row--wrapped > div { flex: 1 200px; } .appointment-config-modal__form__row--local { display: flex; flex-direction: column; } .appointment-config-modal__form__row + .appointment-config-modal__form__row { margin-top: 10px; } .appointment-config-modal__form .multiselect__tags { height: unset !important; margin: 0 !important; } .appointment-config-modal__submit-button { margin-top: 20px; } .app-config-modal-confirmation .empty-content { margin-top: 0 !important; margin-bottom: 20px; } .app-config-modal-confirmation__buttons { display: flex; justify-content: center; gap: 0 10px; } /** * Calendar App * * @copyright 2019 Georg Ehrke * * @author Georg Ehrke * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . * */ .modal--scheduler { position: relative; } .modal--scheduler .fc-bgevent { opacity: 0.8; } .modal--scheduler .blocking-event-free-busy { border-color: var(--color-primary-element); border-style: solid; border-left-width: 2px; border-right-width: 2px; background-color: transparent !important; opacity: 0.7 !important; z-index: 2; } .modal--scheduler .blocking-event-free-busy.blocking-event-free-busy--first-row { border-radius: var(--border-radius) var(--border-radius) 0 0; border-top-width: 2px; } .modal--scheduler .blocking-event-free-busy.blocking-event-free-busy--last-row { border-radius: 0 0 var(--border-radius) var(--border-radius); border-bottom-width: 2px; } .modal--scheduler .loading-indicator { width: 100%; position: absolute; top: 0; height: 50px; margin-top: 75px; } .freebusy-caption { margin-top: 10px; } .freebusy-caption__calendar-user-types, .freebusy-caption__colors { width: 50%; display: flex; } .freebusy-caption__colors { width: 100%; display: flex; flex-direction: column; padding: 5px; } .freebusy-caption__colors .freebusy-caption-item { display: flex; align-items: center; margin-right: 30px; } .freebusy-caption__colors .freebusy-caption-item__color { height: 1em; width: 2em; display: block; border: 1px solid var(--color-border-dark); opacity: 0.8; } .freebusy-caption__colors .freebusy-caption-item__label { margin-left: 5px; } /** * Calendar App * * @copyright 2020 Georg Ehrke * * @author Georg Ehrke * @author René Gieling * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . * */ /** Override some FullCalendar CSS vars: */ .fc { --fc-small-font-size: 0.875em; --fc-page-bg-color: var(--color-main-background) !important; --fc-neutral-bg-color: var(--color-background-dark) !important; --fc-neutral-text-color: var(--color-text-lighter) !important; --fc-border-color: var(--color-border) !important; --fc-daygrid-event-dot-width: 10px !important; --fc-event-bg-color: var(--color-primary-element); --fc-event-border-color: var(--color-primary-element-text); --fc-event-text-color: var(--color-primary-element-text); --fc-event-selected-overlay-color: var(--color-box-shadow); --fc-event-resizer-thickness: 8px; --fc-event-resizer-dot-total-width: 8px; --fc-event-resizer-dot-border-width: 1px; --fc-non-business-color: var(--color-background-dark); --fc-bg-event-color: var(--color-primary-element); --fc-bg-event-opacity: 0.3; --fc-highlight-color: rgba(188, 232, 241, 0.3); --fc-today-bg-color: var(--color-main-background) !important; --fc-now-indicator-color: red; --fc-list-event-hover-bg-color: var(--color-background-hover) !important; } .fc { font-family: var(--font-face) !important; } .fc-timegrid-axis-frame, .fc-timegrid-slot-label, .fc-col-header-cell a { color: var(--color-text-lighter) !important; } .fc .fc-timegrid-slot-minor { border-top-style: none !important; } .fc-daygrid-day-top { justify-content: center; } .fc-state-highlight.fc-day-number, .fc tbody tr, .fc tbody tr:hover, .fc tbody tr:focus { background: inherit !important; } .fc-day-today.fc-col-header-cell a, .fc-day-today.fc-col-header-cell span { padding: 2px 6px; font-weight: bold; background-color: var(--color-primary-element); color: var(--color-primary-element-text) !important; border-radius: var(--border-radius-pill); } .fc-day-today .fc-event { box-shadow: 0px 0px 0px 1px var(--color-primary-element-light) !important; } .fc-day-today .fc-daygrid-day-top .fc-daygrid-day-number { margin: 4px; width: 24px; height: 24px; text-align: center; font-weight: bold !important; padding: 0 !important; background: var(--color-primary-element); color: var(--color-primary-element-text); border-radius: 50%; } .fc-list-table td { white-space: normal; word-break: break-word; } .fc .fc-list-sticky .fc-list-day > * { z-index: 1; } .fc-list-table .fc-list-day-cushion { padding-left: calc(var(--default-clickable-area) + var(--default-grid-baseline) * 2); } .fc-timeGridWeek-view .fc-col-header-cell.fc-day-today, .fc-timeGridWeek-view .fc-daygrid-day.fc-day-today, .fc-timeGridWeek-view .fc-timegrid-col.fc-day-today, .fc-dayGridMonth-view .fc-col-header-cell.fc-day-today, .fc-dayGridMonth-view .fc-daygrid-day.fc-day-today, .fc-dayGridMonth-view .fc-timegrid-col.fc-day-today { background-color: var(--color-primary-element-light) !important; } .fc-daygrid-day.fc-day.fc-day-other, .fc .fc-daygrid-day.fc-day-today.fc-day-other { background-color: var(--color-background-dark) !important; border: 1px solid var(--color-background-darker); } .fc-daygrid-day.fc-day.fc-day-other .fc-daygrid-day-top, .fc .fc-daygrid-day.fc-day-today.fc-day-other .fc-daygrid-day-top { opacity: 0.6; } .fc-event { padding-left: 3px; } .fc-event.fc-event-nc-task-completed, .fc-event.fc-event-nc-tentative, .fc-event.fc-event-nc-cancelled { opacity: 0.5; } .fc-event.fc-event-nc-task-completed .fc-event-title, .fc-event.fc-event-nc-task-completed .fc-list-event-title, .fc-event.fc-event-nc-cancelled .fc-event-title, .fc-event.fc-event-nc-cancelled .fc-list-event-title { text-decoration: line-through !important; } .fc-event .fc-event-title { text-overflow: ellipsis; } .fc-event .fc-event-nc-alarms .icon-event-reminder { background-color: inherit; background-position: right; position: absolute; top: 0; right: 0; } .fc-event .fc-event-nc-alarms .icon-event-reminder--light { background-image: var(--icon-calendar-reminder-fffffe); } .fc-event .fc-event-nc-alarms .icon-event-reminder--dark { background-image: var(--icon-calendar-reminder-000001); } .fc-event .fc-event-title-container { display: flex; align-content: center; } .fc-event .fc-event-title-container .fc-event-title-checkbox { margin: 4px 4px 0 0; line-height: 1; } .fc-event .fc-list-event-checkbox { margin: 2px 4px 0 -2px; line-height: 1; } .fc-event .fc-daygrid-event-checkbox { margin: 2px 4px 0 4px; line-height: 1; } .fc-event .fc-list-event-location span, .fc-event .fc-list-event-description span { overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; white-space: pre-wrap; max-width: 25vw; } @media only screen and (max-width: 767px) { .fc-event .fc-list-event-location, .fc-event .fc-list-event-description { display: none; } } .fc-list-empty .fc-list-empty-cushion { display: none; } .fc-list-empty .empty-content { margin-top: 0 !important; } .fc-col-header-cell { word-break: break-word; white-space: normal; } .fc-timeGridWeek-view .fc-daygrid-more-link { word-break: break-all; white-space: normal; } .fc-timeGridWeek-view .fc-event-main { flex-wrap: wrap; } .fc-v-event { min-height: 4em; } .fc-v-event.fc-timegrid-event-short { min-height: 2em; } .fc-v-event .fc-event-title { white-space: initial; } .fc-dayGridMonth-view .fc-daygrid-more-link { word-break: break-word; white-space: normal; } .fc-dayGridMonth-view .fc-daygrid-day-frame { min-height: 150px !important; } .fc-daygrid-day-events { position: relative !important; } .fc-col-header-cell { padding-top: 10px !important; } .fc-timegrid-axis-cushion { margin-top: 44px; } .fc-timegrid-axis.fc-scrollgrid-shrink { height: 65px; } /** * Calendar App * * @copyright 2019 Georg Ehrke * * @author Georg Ehrke * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . * */ .toast-calendar-multiline { white-space: pre-wrap; } .content.app-calendar > div.app-content { overflow-x: hidden; } /** * Calendar App * * @copyright 2019 Georg Ehrke * * @author Georg Ehrke * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . * */ .import-modal .modal-container { padding: 24px !important; min-width: 50%; overflow: visible !important; } .import-modal .modal-container .import-modal__title, .import-modal .modal-container .import-modal__subtitle { text-align: center; } .import-modal .modal-container .import-modal__actions { display: flex; gap: 5px; } .import-modal .modal-container .import-modal-file-item { display: flex; padding-top: 10px; } .import-modal .modal-container .import-modal-file-item--header { font-weight: bold; } .import-modal .modal-container .import-modal-file-item__filename { flex: 2 1 0; } .import-modal .modal-container .import-modal-file-item__calendar-select { flex: 1 1 0; } /** * Calendar App * * @copyright 2019 Georg Ehrke * * @author Georg Ehrke * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . * */ @media print { .app-navigation { display: none; } } /** * Calendar App * * @copyright 2019 Georg Ehrke * * @author Georg Ehrke * @author Richard Steinmetz * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . * */ #emptycontent-container #emptycontent { color: #a9a9a9 !important; } .content.app-calendar.app-calendar-public-embedded #embed-header { position: fixed; top: 0; left: 0; height: 50px; width: 100%; box-sizing: border-box; background-color: var(--color-main-background); border-bottom: 1px solid var(--color-border); overflow: visible; z-index: 2000; display: flex; justify-content: space-between; } .content.app-calendar.app-calendar-public-embedded #embed-header .embed-header__date-section, .content.app-calendar.app-calendar-public-embedded #embed-header .embed-header__share-section { display: flex; gap: 5px; } .content.app-calendar.app-calendar-public-embedded #embed-header .view-button-section .button { min-width: 75px; } .content.app-calendar.app-calendar-public-embedded #embed-header .datepicker-button-section__datepicker-label { min-width: 150px; } .content.app-calendar.app-calendar-public-embedded .app-content { margin-top: 44px; } #body-public input#initial-state-calendar-is_embed ~ header#header { display: none; } #body-public .app-calendar-public + footer { border-radius: 0 0 var(--border-radius-large) var(--border-radius-large); } #body-public .app-calendar-public .app-content { height: calc(100% - 65px) !important; } .property-text__input--linkify { flex-basis: min-content; } .linkify-links { border: 2px solid var(--color-border-maxcontrast); border-radius: var(--border-radius-large); cursor: text; width: 100% !important; box-sizing: border-box; padding: 12px; white-space: pre-line; overflow: auto; line-height: normal; word-break: break-word; display: inline-block; vertical-align: top; max-height: 16em; max-height: calc(100vh - 500px); } .linkify-links a.linkified { text-decoration: underline; margin: 0; } .linkify-links a.linkified::after { content: " ↗"; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/splitpanes/dist/splitpanes.css": /*!*******************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/splitpanes/dist/splitpanes.css ***! \*******************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.splitpanes{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;height:100%}.splitpanes--vertical{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.splitpanes--horizontal{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.splitpanes--dragging *{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.splitpanes__pane{width:100%;height:100%;overflow:hidden}.splitpanes--vertical .splitpanes__pane{-webkit-transition:width .2s ease-out;-o-transition:width .2s ease-out;transition:width .2s ease-out}.splitpanes--horizontal .splitpanes__pane{-webkit-transition:height .2s ease-out;-o-transition:height .2s ease-out;transition:height .2s ease-out}.splitpanes--dragging .splitpanes__pane{-webkit-transition:none;-o-transition:none;transition:none}.splitpanes__splitter{-ms-touch-action:none;touch-action:none}.splitpanes--vertical>.splitpanes__splitter{min-width:1px;cursor:col-resize}.splitpanes--horizontal>.splitpanes__splitter{min-height:1px;cursor:row-resize}.splitpanes.default-theme .splitpanes__pane{background-color:#f2f2f2}.splitpanes.default-theme .splitpanes__splitter{background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;-ms-flex-negative:0;flex-shrink:0}.splitpanes.default-theme .splitpanes__splitter:before,.splitpanes.default-theme .splitpanes__splitter:after{content:"";position:absolute;top:50%;left:50%;background-color:#00000026;-webkit-transition:background-color .3s;-o-transition:background-color .3s;transition:background-color .3s}.splitpanes.default-theme .splitpanes__splitter:hover:before,.splitpanes.default-theme .splitpanes__splitter:hover:after{background-color:#00000040}.splitpanes.default-theme .splitpanes__splitter:first-child{cursor:auto}.default-theme.splitpanes .splitpanes .splitpanes__splitter{z-index:1}.default-theme.splitpanes--vertical>.splitpanes__splitter,.default-theme .splitpanes--vertical>.splitpanes__splitter{width:7px;border-left:1px solid #eee;margin-left:-1px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);width:1px;height:30px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:before{margin-left:-2px}.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{margin-left:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter,.default-theme .splitpanes--horizontal>.splitpanes__splitter{height:7px;border-top:1px solid #eee;margin-top:-1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translate(-50%);width:30px;height:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before{margin-top:-2px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{margin-top:1px} `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderDatePicker.vue?vue&type=style&index=0&id=e8250812&lang=scss": /*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderDatePicker.vue?vue&type=style&index=0&id=e8250812&lang=scss ***! \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.datepicker-widget { width: 135px; margin: 2px 5px 5px 5px; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/CalendarListItem.vue?vue&type=style&index=0&id=a7253930&lang=scss&scoped=true": /*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/CalendarListItem.vue?vue&type=style&index=0&id=a7253930&lang=scss&scoped=true ***! \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.actions-icon-avatar[data-v-a7253930] { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; } [data-v-a7253930] .app-navigation-entry:hover .app-navigation-entry__counter-wrapper { display: none; } .app-navigation-entry__counter-wrapper .action-item.sharing .material-design-icon.share[data-v-a7253930] { opacity: 0.3; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/Trashbin.vue?vue&type=style&index=0&id=7cd8fdf0&lang=scss&scoped=true": /*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/CalendarList/Trashbin.vue?vue&type=style&index=0&id=7cd8fdf0&lang=scss&scoped=true ***! \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.modal__content[data-v-7cd8fdf0] { margin: 2vw; } .modal__content__loading[data-v-7cd8fdf0], .modal__content__empty[data-v-7cd8fdf0] { margin-top: 25px !important; } [data-v-7cd8fdf0] .modal-wrapper .modal-container { overflow-y: auto; overflow-x: auto; } table[data-v-7cd8fdf0] { width: 100%; } th[data-v-7cd8fdf0], td[data-v-7cd8fdf0] { padding: 4px; } th[data-v-7cd8fdf0] { color: var(--color-text-maxcontrast); } .item[data-v-7cd8fdf0] { display: flex; } .item .item-name[data-v-7cd8fdf0] { white-space: normal; } .item .item-subline[data-v-7cd8fdf0] { color: var(--color-text-maxcontrast); } .item-actions[data-v-7cd8fdf0] { display: flex; justify-content: flex-end; gap: 5px; } .deletedAt[data-v-7cd8fdf0] { text-align: right; } .footer[data-v-7cd8fdf0] { display: flex; flex-direction: column; align-items: center; color: var(--color-text-lighter); font-size: small; margin-top: 16px; } .footer > p[data-v-7cd8fdf0] { margin-bottom: 12px; } .color-dot[data-v-7cd8fdf0] { display: inline-block; vertical-align: middle; width: 14px; height: 14px; margin-right: 14px; border: none; border-radius: 50%; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal.vue?vue&type=style&index=0&id=5a0e780b&lang=scss&scoped=true": /*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal.vue?vue&type=style&index=0&id=5a0e780b&lang=scss&scoped=true ***! \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.edit-calendar-modal[data-v-5a0e780b] { padding: 20px; display: flex; flex-direction: column; } .edit-calendar-modal__name-and-color[data-v-5a0e780b] { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; } .edit-calendar-modal__name-and-color__color__dot[data-v-5a0e780b] { width: 24px; height: 24px; border-radius: 12px; } .edit-calendar-modal__name-and-color__name[data-v-5a0e780b] { flex: 1 auto; } .edit-calendar-modal__actions[data-v-5a0e780b] { display: flex; gap: 10px; margin-top: 10px; } .edit-calendar-modal__actions button[data-v-5a0e780b]:last-of-type { margin-left: auto; } .edit-calendar-modal__sharing-header[data-v-5a0e780b] { margin-top: 10px; } .edit-calendar-modal__sharing[data-v-5a0e780b] { display: flex; flex-direction: column; gap: 5px; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/InternalLink.vue?vue&type=style&index=0&id=1d0631aa&lang=scss&scoped=true": /*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/InternalLink.vue?vue&type=style&index=0&id=1d0631aa&lang=scss&scoped=true ***! \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.internal-link[data-v-1d0631aa] { display: flex; align-items: center; gap: 10px; } .internal-link__icon[data-v-1d0631aa] { display: flex; width: 32px; height: 32px; border-radius: 16px; color: white; background-color: var(--color-text-maxcontrast); align-items: center; justify-content: center; } .internal-link__label[data-v-1d0631aa] { display: flex; flex-direction: column; flex: 1 auto; line-height: 1.2em; } .internal-link__label__hint[data-v-1d0631aa] { color: var(--color-text-maxcontrast); }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/PublishCalendar.vue?vue&type=style&index=0&id=58de5449&lang=scss&scoped=true": /*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/PublishCalendar.vue?vue&type=style&index=0&id=58de5449&lang=scss&scoped=true ***! \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.publish-calendar[data-v-58de5449] { display: flex; align-items: center; gap: 10px; } .publish-calendar__icon[data-v-58de5449] { display: flex; width: 32px; height: 32px; border-radius: 16px; color: white; background-color: var(--color-primary-element); align-items: center; justify-content: center; } .publish-calendar__label[data-v-58de5449] { flex: 1 auto; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/ShareItem.vue?vue&type=style&index=0&id=5a34d6ee&lang=scss&scoped=true": /*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/ShareItem.vue?vue&type=style&index=0&id=5a34d6ee&lang=scss&scoped=true ***! \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.share-item[data-v-5a34d6ee] { display: flex; align-items: center; gap: 10px; } .share-item__group-icon[data-v-5a34d6ee] { width: 32px; height: 32px; border-radius: 16px; color: white; background-color: var(--color-text-maxcontrast); } .share-item__label[data-v-5a34d6ee] { flex: 1 auto; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/SharingSearch.vue?vue&type=style&index=0&id=2c8ef200&lang=scss&scoped=true": /*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EditCalendarModal/SharingSearch.vue?vue&type=style&index=0&id=2c8ef200&lang=scss&scoped=true ***! \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.sharing-search[data-v-2c8ef200] { display: flex; } .sharing-search__select[data-v-2c8ef200] { flex: 1 auto; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EmbedTopNavigation.vue?vue&type=style&index=0&id=1461310c&lang=scss": /*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/EmbedTopNavigation.vue?vue&type=style&index=0&id=1461310c&lang=scss ***! \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `#widget-header { top: 0; left: 0; height: 50px; width: 100%; box-sizing: border-box; background-color: var(--color-main-background); border-bottom: 1px solid var(--color-border); overflow: visible; z-index: 2000; display: flex; } #widget-header .widget-header__date-section { display: flex; gap: 5px; } #widget-header .view-button-section { display: flex; } #widget-header .datepicker-button-section { display: flex; } #widget-header .datepicker-button-section__datepicker-label { min-width: 150px; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal.vue?vue&type=style&index=0&id=37b978c8&lang=scss&scoped=true": /*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal.vue?vue&type=style&index=0&id=37b978c8&lang=scss&scoped=true ***! \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.appointment-config-modal__talk-room-description[data-v-37b978c8] { color: var(--color-text-maxcontrast); }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/CheckedDurationSelect.vue?vue&type=style&index=0&id=107bb2e4&lang=scss&scoped=true": /*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/CheckedDurationSelect.vue?vue&type=style&index=0&id=107bb2e4&lang=scss&scoped=true ***! \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.checked-duration-select__checkbox-row[data-v-107bb2e4] { display: flex; align-items: center; } .checked-duration-select__checkbox-row__input-wrapper[data-v-107bb2e4] { flex: 0 0 20px; } .checked-duration-select__checkbox-row__input-wrapper input[type=checkbox][data-v-107bb2e4] { margin: 0; min-height: unset; cursor: pointer; } .checked-duration-select__checkbox-row input[data-v-107bb2e4], .checked-duration-select__checkbox-row label[data-v-107bb2e4] { display: block; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/DurationInput.vue?vue&type=style&index=0&id=610c2bc3&lang=scss&scoped=true": /*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/DurationInput.vue?vue&type=style&index=0&id=610c2bc3&lang=scss&scoped=true ***! \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.duration-input .input[data-v-610c2bc3] { display: flex; align-items: center; } .duration-input .input input[data-v-610c2bc3] { flex: 1 auto; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/NoEmailAddressWarning.vue?vue&type=style&index=0&id=df46dc20&lang=scss&scoped=true": /*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/NoEmailAddressWarning.vue?vue&type=style&index=0&id=df46dc20&lang=scss&scoped=true ***! \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `[data-v-df46dc20] .app-navigation-entry-link { align-items: center; line-height: unset !important; white-space: unset !important; } [data-v-df46dc20] .app-navigation-entry__name { overflow: unset !important; white-space: unset !important; text-overflow: unset !important; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/NumberInput.vue?vue&type=style&index=0&id=0b9f9aee&lang=scss&scoped=true": /*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/NumberInput.vue?vue&type=style&index=0&id=0b9f9aee&lang=scss&scoped=true ***! \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.number-input input[data-v-0b9f9aee] { width: 100%; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/SelectWrapper.vue?vue&type=style&index=0&id=629bb0a4&lang=scss&scoped=true": /*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/SelectWrapper.vue?vue&type=style&index=0&id=629bb0a4&lang=scss&scoped=true ***! \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `select[data-v-629bb0a4] { width: 100%; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/TextArea.vue?vue&type=style&index=0&id=97af0b86&lang=scss&scoped=true": /*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/TextArea.vue?vue&type=style&index=0&id=97af0b86&lang=scss&scoped=true ***! \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.text-area textarea[data-v-97af0b86] { display: block; width: 100%; resize: none; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/TextInput.vue?vue&type=style&index=0&id=3f44c2ca&lang=scss&scoped=true": /*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppointmentConfigModal/TextInput.vue?vue&type=style&index=0&id=3f44c2ca&lang=scss&scoped=true ***! \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.text-input input[data-v-3f44c2ca] { width: 100%; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/CalendarGrid.vue?vue&type=style&index=0&id=27464dd4&scoped=true&lang=scss": /*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/CalendarGrid.vue?vue&type=style&index=0&id=27464dd4&scoped=true&lang=scss ***! \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.calendar-grid-checkbox[data-v-27464dd4] { border-style: solid; border-width: 2px; border-radius: 4px; height: 16px; width: 16px; } .calendar-grid-checkbox-checked[data-v-27464dd4] { border-style: solid; border-width: 8px; border-radius: 4px; height: 16px; width: 16px; } .fullcalendar-widget[data-v-27464dd4] { min-height: 500px; } .fullcalendar-widget[data-v-27464dd4] .fc-col-header-cell-cushion { font-size: 9px; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Attachments/AttachmentsList.vue?vue&type=style&index=0&id=5efccc46&lang=scss&scoped=true": /*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Attachments/AttachmentsList.vue?vue&type=style&index=0&id=5efccc46&lang=scss&scoped=true ***! \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `@charset "UTF-8"; .attachments-input[data-v-5efccc46] { display: none; } .attachments-summary[data-v-5efccc46] { display: flex; align-items: center; justify-content: space-between; padding-left: 6px; } .attachments-summary .attachments-summary-inner[data-v-5efccc46] { display: flex; align-items: center; } .attachments-summary .attachments-summary-inner span[data-v-5efccc46] { width: 34px; height: 34px; margin-left: -10px; margin-right: 5px; } .attachments-summary .attachments-summary-inner .attachments-summary-inner-label[data-v-5efccc46] { padding: 0 7px; font-weight: bold; } .attachments-list[data-v-5efccc46] { margin: 0 -8px; } .attachments-list .attachments-list-item[data-v-5efccc46] .list-item { padding: 0 8px; } .attachments-list .attachments-list-item[data-v-5efccc46] .list-item-content__wrapper { height: 44px; } .attachments-list .attachments-list-item[data-v-5efccc46] .list-item-content { padding-left: 18px; } .attachments-list .attachments-list-item[data-v-5efccc46] .line-one__title { font-weight: unset; } #attachments .empty-content[data-v-5efccc46] { margin-top: 1rem; text-align: center; } .button-group[data-v-5efccc46] { display: flex; align-content: center; justify-content: center; } .button-group button[data-v-5efccc46]:first-child { margin-right: 6px; } .attachment-icon[data-v-5efccc46] { width: 24px; height: 24px; border-radius: var(--border-radius); } .external-link-message[data-v-5efccc46] { overflow-wrap: break-word; } .modal__content[data-v-5efccc46] { margin: 10px; } .modal__content__attachments[data-v-5efccc46] { margin: 10px; text-align: center; } .attachments-list[data-v-5efccc46] { margin-top: 20px; } .image-list-attachement[data-v-5efccc46] { display: flex; flex-direction: column; align-items: flex-start; padding: 10px; } .image-item-attachement[data-v-5efccc46] { display: flex; align-items: center; margin: 10px 0; } .image-item-attachement img[data-v-5efccc46] { width: 100px; /* Largeur de l'image */ height: auto; /* Hauteur automatique pour garder le ratio */ margin-right: 10px; /* Espace entre l'image et la légende */ } label[data-v-5efccc46] { font-size: 16px; /* Taille de police pour la légende */ } .mailHeader[data-v-5efccc46] { text-align: left; display: flex; flex-direction: column; align-items: flex-start; padding: 10px; font-weight: bold; } .mailContent[data-v-5efccc46] { text-align: left; display: flex; flex-direction: column; align-items: flex-start; padding: 10px; max-height: 400px; overflow: scroll; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/AvatarParticipationStatus.vue?vue&type=style&index=0&id=7117b730&lang=scss&scoped=true": /*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/AvatarParticipationStatus.vue?vue&type=style&index=0&id=7117b730&lang=scss&scoped=true ***! \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `[data-v-7117b730] .avatar-participation-status__indicator { bottom: 20px; left: 43px; position: relative; opacity: 0.8; } .avatar-participation-status__text[data-v-7117b730] { opacity: 0.45; left: 63px; bottom: 21px; white-space: nowrap; position: relative; min-width: 220px; text-overflow: ellipsis; overflow: hidden; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/CalendarPickerHeader.vue?vue&type=style&index=0&id=e5da09ca&lang=scss": /*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/CalendarPickerHeader.vue?vue&type=style&index=0&id=e5da09ca&lang=scss ***! \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.event-popover .calendar-picker-header button { margin-left: -9px; } .event-popover .calendar-picker-header button .button-vue__text { margin-left: 0; } .event-popover .calendar-picker-header--readonly button .button-vue__text { margin-left: 2px; } .app-sidebar .calendar-picker-header button { margin-left: -14px; } .app-sidebar .calendar-picker-header button .button-vue__text { margin-left: 0; } .app-sidebar .calendar-picker-header--readonly button .button-vue__text { margin-left: 6px; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/CalendarPickerHeader.vue?vue&type=style&index=1&id=e5da09ca&lang=scss&scoped=true": /*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/CalendarPickerHeader.vue?vue&type=style&index=1&id=e5da09ca&lang=scss&scoped=true ***! \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.calendar-picker-header[data-v-e5da09ca] { display: flex; align-self: flex-start; margin-bottom: 5px; max-width: calc(100% - 79px); } .calendar-picker-header__picker[data-v-e5da09ca] { display: flex; min-width: 0; } .calendar-picker-header__picker[data-v-e5da09ca] .v-popper { display: flex; min-width: 0; } .calendar-picker-header__picker[data-v-e5da09ca]:disabled, .calendar-picker-header__picker[data-v-e5da09ca] :disabled { opacity: 1 !important; filter: unset !important; } .calendar-picker-header__icon[data-v-e5da09ca] { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; } .calendar-picker-header__icon__dot[data-v-e5da09ca] { width: 16px; height: 16px; border-radius: 16px; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/FreeBusy/FreeBusy.vue?vue&type=style&index=0&id=a60f3f46&lang=scss&scoped=true": /*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/FreeBusy/FreeBusy.vue?vue&type=style&index=0&id=a60f3f46&lang=scss&scoped=true ***! \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.icon-close[data-v-a60f3f46] { display: block; height: 100%; } .modal__content[data-v-a60f3f46] { padding: 50px; margin-bottom: 95px; } .modal__content__actions[data-v-a60f3f46] { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .modal__content__actions__select[data-v-a60f3f46] { width: 260px; } .modal__content__actions__date[data-v-a60f3f46] { display: flex; justify-content: space-between; align-items: center; } .modal__content__actions__date > *[data-v-a60f3f46] { margin-left: 5px; } .modal__content__header[data-v-a60f3f46] { margin-bottom: 20px; } .modal__content__header h3[data-v-a60f3f46] { font-weight: 500; } .modal__content__header__attendees__user-bubble[data-v-a60f3f46] { margin-right: 5px; } .modal__content__footer[data-v-a60f3f46] { display: flex; justify-content: space-between; align-items: center; margin-top: 20px; } .modal__content__footer__title h3[data-v-a60f3f46] { font-weight: 500; } .modal__content__footer__title__timezone[data-v-a60f3f46] { color: var(--color-text-lighter); } [data-v-a60f3f46] .vs__search { text-overflow: ellipsis; } [data-v-a60f3f46] .mx-input { height: 38px !important; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/FreeBusy/FreeBusy.vue?vue&type=style&index=1&id=a60f3f46&lang=scss": /*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/FreeBusy/FreeBusy.vue?vue&type=style&index=1&id=a60f3f46&lang=scss ***! \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.blocking-event-free-busy { z-index: 3 !important; } .free-busy-block { opacity: 0.7 !important; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/InvitationResponseButtons.vue?vue&type=style&index=0&id=bc1cb2d6&lang=scss&scoped=true": /*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/InvitationResponseButtons.vue?vue&type=style&index=0&id=bc1cb2d6&lang=scss&scoped=true ***! \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.invitation-response-buttons[data-v-bc1cb2d6] { display: flex; justify-content: flex-end; gap: 5px; margin-bottom: 8px; } .invitation-response-buttons--grow[data-v-bc1cb2d6] { width: 100%; } .invitation-response-buttons--grow .invitation-response-buttons__button[data-v-bc1cb2d6] { flex: 1 auto; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesList.vue?vue&type=style&index=0&id=51e2fbdb&lang=scss&scoped=true": /*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesList.vue?vue&type=style&index=0&id=51e2fbdb&lang=scss&scoped=true ***! \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.invitees-list[data-v-51e2fbdb] { margin-top: 12px; } .invitees-list__header[data-v-51e2fbdb] { display: flex; gap: 5px; padding: 5px 5px 5px 6px; } .invitees-list__more[data-v-51e2fbdb] { padding: 15px 0 0 46px; font-weight: bold; opacity: 0.75; } .invitees-list .invitees-list-button-group[data-v-51e2fbdb] { display: flex; flex-wrap: wrap; gap: 5px; } .invitees-list .invitees-list-button-group__button[data-v-51e2fbdb] { flex: 1 0 200px; } .invitees-list .invitees-list-button-group__button[data-v-51e2fbdb] .button-vue__text { white-space: unset !important; overflow: unset !important; text-overflow: unset !important; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesListItem.vue?vue&type=style&index=0&id=43ae7fe4&lang=scss&scoped=true": /*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/InviteesListItem.vue?vue&type=style&index=0&id=43ae7fe4&lang=scss&scoped=true ***! \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.invitees-list-item[data-v-43ae7fe4] { flex-wrap: wrap; } .invitees-list-item__actions[data-v-43ae7fe4] { display: flex; } .invitees-list-item__displayname[data-v-43ae7fe4] { margin-bottom: 17px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } .invitees-list-item__groupname[data-v-43ae7fe4] { margin-bottom: 0px; } .avatar-participation-status[data-v-43ae7fe4] { margin-top: 5px; } .invitees-list-item__member-count[data-v-43ae7fe4] { color: var(--color-text-maxcontrast); font-weight: 300; } .member-list[data-v-43ae7fe4] { height: auto; max-height: 0; flex-basis: 100%; overflow: hidden; transition: all 0.3s ease; padding: 0; opacity: 0; } .member-list--open[data-v-43ae7fe4] { max-height: 1000px; transition: all 0.3s ease; padding: 0 0 10px 15px; opacity: 1; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/OrganizerListItem.vue?vue&type=style&index=0&id=e4bd912c&lang=scss&scoped=true": /*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Invitees/OrganizerListItem.vue?vue&type=style&index=0&id=e4bd912c&lang=scss&scoped=true ***! \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.invitees-list-item__displayname[data-v-e4bd912c] { margin-bottom: 13px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } .invitees-list-item__organizer-hint[data-v-e4bd912c] { margin-bottom: 14px; } .avatar-participation-status[data-v-e4bd912c] { margin-top: 10px; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelect.vue?vue&type=style&index=0&id=04aa9fca&lang=scss&scoped=true": /*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelect.vue?vue&type=style&index=0&id=04aa9fca&lang=scss&scoped=true ***! \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.property-select__input[data-v-04aa9fca] { width: calc(100% - 34px - 34px); }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAbsenceType.vue?vue&type=style&index=0&id=c8d0aea8&lang=scss&scoped=true": /*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAbsenceType.vue?vue&type=style&index=0&id=c8d0aea8&lang=scss&scoped=true ***! \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.property-select__input[data-v-c8d0aea8] { width: calc(100% - 34px - 34px); }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAjax.vue?vue&type=style&index=0&id=3787864a&lang=scss&scoped=true": /*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectAjax.vue?vue&type=style&index=0&id=3787864a&lang=scss&scoped=true ***! \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.property-select__input[data-v-3787864a] { width: calc(100% - 34px - 34px); }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectClient.vue?vue&type=style&index=0&id=d3ad9774&lang=scss&scoped=true": /*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectClient.vue?vue&type=style&index=0&id=d3ad9774&lang=scss&scoped=true ***! \************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.property-select__input[data-v-d3ad9774] { width: calc(100% - 34px - 34px); }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectLieu.vue?vue&type=style&index=0&id=2cac0b28&lang=scss&scoped=true": /*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelectLieu.vue?vue&type=style&index=0&id=2cac0b28&lang=scss&scoped=true ***! \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.property-select__input[data-v-2cac0b28] { width: calc(100% - 34px - 34px); }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceListItem.vue?vue&type=style&index=0&id=1372f36a&lang=scss&scoped=true": /*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceListItem.vue?vue&type=style&index=0&id=1372f36a&lang=scss&scoped=true ***! \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.resource-list-item__displayname[data-v-1372f36a] { margin-bottom: 17px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } .avatar-participation-status[data-v-1372f36a] { margin-top: 5px; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceListSearch.vue?vue&type=style&index=0&id=1c201660&lang=scss&scoped=true": /*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceListSearch.vue?vue&type=style&index=0&id=1c201660&lang=scss&scoped=true ***! \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.resource-search__multiselect[data-v-1c201660] { padding-bottom: 5px !important; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/SaveButtons.vue?vue&type=style&index=0&id=8f0b8a9c&lang=scss&scoped=true": /*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/SaveButtons.vue?vue&type=style&index=0&id=8f0b8a9c&lang=scss&scoped=true ***! \****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.save-buttons[data-v-8f0b8a9c] { display: flex; justify-content: end; gap: 5px; } .save-buttons--grow[data-v-8f0b8a9c] { flex-wrap: wrap; } .save-buttons--grow button[data-v-8f0b8a9c] { flex: 1 fit-content; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/CalendarPicker.vue?vue&type=style&index=0&id=271fa576&lang=scss&scoped=true": /*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/CalendarPicker.vue?vue&type=style&index=0&id=271fa576&lang=scss&scoped=true ***! \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `[data-v-271fa576] .multiselect__tags { margin: 3px 0; } .calendar-picker__tag[data-v-271fa576] { border: 1px solid var(--color-border); border-radius: var(--border-radius); padding: 0 5px; } .calendar-picker__tag + .calendar-picker__tag[data-v-271fa576] { margin-left: 5px; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/CalendarPicker.vue?vue&type=style&index=1&id=271fa576&lang=scss": /*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/CalendarPicker.vue?vue&type=style&index=1&id=271fa576&lang=scss ***! \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.vs__search { flex-basis: 0; } .vs__dropdown-menu { z-index: 10000010 !important; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/DatePicker.vue?vue&type=style&index=0&id=4ccb5234&lang=scss&scoped=true": /*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Shared/DatePicker.vue?vue&type=style&index=0&id=4ccb5234&lang=scss&scoped=true ***! \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.highlighted-timezone-icon[data-v-4ccb5234] { opacity: 0.7; } [data-v-4ccb5234] .mx-icon-calendar { right: 0; } [data-v-4ccb5234] .multiselect__content-wrapper { border: none !important; position: relative !important; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Calendar.vue?vue&type=style&index=0&id=1eedbe78&lang=scss": /*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Calendar.vue?vue&type=style&index=0&id=1eedbe78&lang=scss ***! \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.calendar-Widget { width: 100%; background-color: red; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/EditSidebar.vue?vue&type=style&index=0&id=581304a8&lang=scss&scoped=true": /*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/resolve-url-loader/index.js!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/EditSidebar.vue?vue&type=style&index=0&id=581304a8&lang=scss&scoped=true ***! \****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `.modal-content[data-v-581304a8] { padding: 16px; position: relative; } .modal-content .modal-content-preloader[data-v-581304a8] { position: absolute; top: 0; left: 0; right: 0; height: 6px; } .modal-content .modal-content-preloader div[data-v-581304a8] { position: absolute; top: 0; left: 0; background: var(--color-primary-element); height: 6px; transition: width 0.3s linear; } .modal-subtitle[data-v-581304a8] { font-weight: bold; font-size: 16px; margin-top: 16px; } .modal-h[data-v-581304a8] { font-size: 24px; font-weight: bold; margin: 10px 0; } .modal-footer[data-v-581304a8] { display: flex; align-items: center; justify-content: space-between; } .modal-footer .modal-footer-buttons[data-v-581304a8] { display: flex; } .modal-footer .modal-footer-buttons[data-v-581304a8] :first-child { margin-right: 6px; } .attachments[data-v-581304a8], .users[data-v-581304a8] { display: flex; flex-wrap: wrap; } .attachment-list-item[data-v-581304a8], .user-list-item[data-v-581304a8] { width: 50%; } .attachment-icon[data-v-581304a8] { width: 40px; height: auto; border-radius: var(--border-radius); } .property-location[data-v-581304a8] { margin-top: 10px; } .property-description[data-v-581304a8] { margin-bottom: 10px; } [data-v-581304a8] .app-sidebar-header__action { margin-top: 0 !important; max-height: none !important; flex-wrap: wrap; } [data-v-581304a8] .app-sidebar-header__action div { flex-shrink: 0; } [data-v-581304a8] .app-sidebar-header__desc { height: 0 !important; padding: 0 !important; margin: 0 !important; } [data-v-581304a8] .app-sidebar-header__desc .app-sidebar-header__menu { z-index: 1; } [data-v-581304a8] .app-sidebar-header__description { flex-direction: column; padding-top: 5px; } [data-v-581304a8] .app-sidebar-header__description .vs__open-indicator-button { padding: 0; } [data-v-581304a8] .app-sidebar-header__description .vs__clear { padding: 0; } [data-v-581304a8] .empty-content { height: 100vh; padding: 0 20px; }`, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderNewEvent.vue?vue&type=style&index=0&id=673844b5&scoped=true&lang=css": /*!************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderNewEvent.vue?vue&type=style&index=0&id=673844b5&scoped=true&lang=css ***! \************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, ` .button.primary.new-event[data-v-673844b5] { display: flex; align-items: center; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsPrivate.vue?vue&type=style&index=0&id=fb6819ac&scoped=true&lang=css": /*!**********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsPrivate.vue?vue&type=style&index=0&id=fb6819ac&scoped=true&lang=css ***! \**********************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, ` .checkbox-container[data-v-fb6819ac] { display: flex; align-items: center; gap: 8px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyReturnToSiege.vue?vue&type=style&index=0&id=48dd8213&scoped=true&lang=css": /*!**************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyReturnToSiege.vue?vue&type=style&index=0&id=48dd8213&scoped=true&lang=css ***! \**************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, ` .checkbox-container[data-v-48dd8213] { display: flex; align-items: center; gap: 8px; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceRoomType.vue?vue&type=style&index=0&id=5448722f&scoped=true&lang=css": /*!********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Resources/ResourceRoomType.vue?vue&type=style&index=0&id=5448722f&scoped=true&lang=css ***! \********************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, ` [data-v-5448722f] #value { width: 0; } `, ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ "./node_modules/css-loader/dist/runtime/api.js": /*!*****************************************************!*\ !*** ./node_modules/css-loader/dist/runtime/api.js ***! \*****************************************************/ /***/ ((module) => { "use strict"; /* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ module.exports = function (cssWithMappingToString) { var list = []; // return the list of modules as css string list.toString = function toString() { return this.map(function (item) { var content = ""; var needLayer = typeof item[5] !== "undefined"; if (item[4]) { content += "@supports (".concat(item[4], ") {"); } if (item[2]) { content += "@media ".concat(item[2], " {"); } if (needLayer) { content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {"); } content += cssWithMappingToString(item); if (needLayer) { content += "}"; } if (item[2]) { content += "}"; } if (item[4]) { content += "}"; } return content; }).join(""); }; // import a list of modules into the list list.i = function i(modules, media, dedupe, supports, layer) { if (typeof modules === "string") { modules = [[null, modules, undefined]]; } var alreadyImportedModules = {}; if (dedupe) { for (var k = 0; k < this.length; k++) { var id = this[k][0]; if (id != null) { alreadyImportedModules[id] = true; } } } for (var _k = 0; _k < modules.length; _k++) { var item = [].concat(modules[_k]); if (dedupe && alreadyImportedModules[item[0]]) { continue; } if (typeof layer !== "undefined") { if (typeof item[5] === "undefined") { item[5] = layer; } else { item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}"); item[5] = layer; } } if (media) { if (!item[2]) { item[2] = media; } else { item[1] = "@media ".concat(item[2], " {").concat(item[1], "}"); item[2] = media; } } if (supports) { if (!item[4]) { item[4] = "".concat(supports); } else { item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}"); item[4] = supports; } } list.push(item); } }; return list; }; /***/ }), /***/ "./node_modules/css-loader/dist/runtime/getUrl.js": /*!********************************************************!*\ !*** ./node_modules/css-loader/dist/runtime/getUrl.js ***! \********************************************************/ /***/ ((module) => { "use strict"; module.exports = function (url, options) { if (!options) { options = {}; } if (!url) { return url; } url = String(url.__esModule ? url.default : url); // If url is already wrapped in quotes, remove them if (/^['"].*['"]$/.test(url)) { url = url.slice(1, -1); } if (options.hash) { url += options.hash; } // Should url be wrapped? // See https://drafts.csswg.org/css-values-3/#urls if (/["'() \t\n]|(%20)/.test(url) || options.needQuotes) { return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, "\\n"), "\""); } return url; }; /***/ }), /***/ "./node_modules/css-loader/dist/runtime/noSourceMaps.js": /*!**************************************************************!*\ !*** ./node_modules/css-loader/dist/runtime/noSourceMaps.js ***! \**************************************************************/ /***/ ((module) => { "use strict"; module.exports = function (i) { return i[1]; }; /***/ }), /***/ "./node_modules/date-format-parse/es/format.js": /*!*****************************************************!*\ !*** ./node_modules/date-format-parse/es/format.js ***! \*****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ format: () => (/* binding */ format) /* harmony export */ }); /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./node_modules/date-format-parse/es/util.js"); /* harmony import */ var _locale_en__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./locale/en */ "./node_modules/date-format-parse/es/locale/en.js"); var REGEX_FORMAT = /\[([^\]]+)]|YYYY|YY?|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|m{1,2}|s{1,2}|Z{1,2}|S{1,3}|w{1,2}|x|X|a|A/g; function pad(val) { var len = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2; var output = "".concat(Math.abs(val)); var sign = val < 0 ? '-' : ''; while (output.length < len) { output = "0".concat(output); } return sign + output; } function getOffset(date) { return Math.round(date.getTimezoneOffset() / 15) * 15; } function formatTimezone(offset) { var delimeter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; var sign = offset > 0 ? '-' : '+'; var absOffset = Math.abs(offset); var hours = Math.floor(absOffset / 60); var minutes = absOffset % 60; return sign + pad(hours, 2) + delimeter + pad(minutes, 2); } var meridiem = function meridiem(h, _, isLowercase) { var word = h < 12 ? 'AM' : 'PM'; return isLowercase ? word.toLocaleLowerCase() : word; }; var formatFlags = { Y: function Y(date) { var y = date.getFullYear(); return y <= 9999 ? "".concat(y) : "+".concat(y); }, // Year: 00, 01, ..., 99 YY: function YY(date) { return pad(date.getFullYear(), 4).substr(2); }, // Year: 1900, 1901, ..., 2099 YYYY: function YYYY(date) { return pad(date.getFullYear(), 4); }, // Month: 1, 2, ..., 12 M: function M(date) { return date.getMonth() + 1; }, // Month: 01, 02, ..., 12 MM: function MM(date) { return pad(date.getMonth() + 1, 2); }, MMM: function MMM(date, locale) { return locale.monthsShort[date.getMonth()]; }, MMMM: function MMMM(date, locale) { return locale.months[date.getMonth()]; }, // Day of month: 1, 2, ..., 31 D: function D(date) { return date.getDate(); }, // Day of month: 01, 02, ..., 31 DD: function DD(date) { return pad(date.getDate(), 2); }, // Hour: 0, 1, ... 23 H: function H(date) { return date.getHours(); }, // Hour: 00, 01, ..., 23 HH: function HH(date) { return pad(date.getHours(), 2); }, // Hour: 1, 2, ..., 12 h: function h(date) { var hours = date.getHours(); if (hours === 0) { return 12; } if (hours > 12) { return hours % 12; } return hours; }, // Hour: 01, 02, ..., 12 hh: function hh() { var hours = formatFlags.h.apply(formatFlags, arguments); return pad(hours, 2); }, // Minute: 0, 1, ..., 59 m: function m(date) { return date.getMinutes(); }, // Minute: 00, 01, ..., 59 mm: function mm(date) { return pad(date.getMinutes(), 2); }, // Second: 0, 1, ..., 59 s: function s(date) { return date.getSeconds(); }, // Second: 00, 01, ..., 59 ss: function ss(date) { return pad(date.getSeconds(), 2); }, // 1/10 of second: 0, 1, ..., 9 S: function S(date) { return Math.floor(date.getMilliseconds() / 100); }, // 1/100 of second: 00, 01, ..., 99 SS: function SS(date) { return pad(Math.floor(date.getMilliseconds() / 10), 2); }, // Millisecond: 000, 001, ..., 999 SSS: function SSS(date) { return pad(date.getMilliseconds(), 3); }, // Day of week: 0, 1, ..., 6 d: function d(date) { return date.getDay(); }, // Day of week: 'Su', 'Mo', ..., 'Sa' dd: function dd(date, locale) { return locale.weekdaysMin[date.getDay()]; }, // Day of week: 'Sun', 'Mon',..., 'Sat' ddd: function ddd(date, locale) { return locale.weekdaysShort[date.getDay()]; }, // Day of week: 'Sunday', 'Monday', ...,'Saturday' dddd: function dddd(date, locale) { return locale.weekdays[date.getDay()]; }, // AM, PM A: function A(date, locale) { var meridiemFunc = locale.meridiem || meridiem; return meridiemFunc(date.getHours(), date.getMinutes(), false); }, // am, pm a: function a(date, locale) { var meridiemFunc = locale.meridiem || meridiem; return meridiemFunc(date.getHours(), date.getMinutes(), true); }, // Timezone: -01:00, +00:00, ... +12:00 Z: function Z(date) { return formatTimezone(getOffset(date), ':'); }, // Timezone: -0100, +0000, ... +1200 ZZ: function ZZ(date) { return formatTimezone(getOffset(date)); }, // Seconds timestamp: 512969520 X: function X(date) { return Math.floor(date.getTime() / 1000); }, // Milliseconds timestamp: 512969520900 x: function x(date) { return date.getTime(); }, w: function w(date, locale) { return (0,_util__WEBPACK_IMPORTED_MODULE_0__.getWeek)(date, { firstDayOfWeek: locale.firstDayOfWeek, firstWeekContainsDate: locale.firstWeekContainsDate }); }, ww: function ww(date, locale) { return pad(formatFlags.w(date, locale), 2); } }; function format(val, str) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var formatStr = str ? String(str) : 'YYYY-MM-DDTHH:mm:ss.SSSZ'; var date = (0,_util__WEBPACK_IMPORTED_MODULE_0__.toDate)(val); if (!(0,_util__WEBPACK_IMPORTED_MODULE_0__.isValidDate)(date)) { return 'Invalid Date'; } var locale = options.locale || _locale_en__WEBPACK_IMPORTED_MODULE_1__["default"]; return formatStr.replace(REGEX_FORMAT, function (match, p1) { if (p1) { return p1; } if (typeof formatFlags[match] === 'function') { return "".concat(formatFlags[match](date, locale)); } return match; }); } /***/ }), /***/ "./node_modules/date-format-parse/es/index.js": /*!****************************************************!*\ !*** ./node_modules/date-format-parse/es/index.js ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ format: () => (/* reexport safe */ _format__WEBPACK_IMPORTED_MODULE_0__.format), /* harmony export */ getWeek: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_2__.getWeek), /* harmony export */ isDate: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_2__.isDate), /* harmony export */ isValidDate: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_2__.isValidDate), /* harmony export */ parse: () => (/* reexport safe */ _parse__WEBPACK_IMPORTED_MODULE_1__.parse), /* harmony export */ toDate: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_2__.toDate) /* harmony export */ }); /* harmony import */ var _format__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./format */ "./node_modules/date-format-parse/es/format.js"); /* harmony import */ var _parse__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parse */ "./node_modules/date-format-parse/es/parse.js"); /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./node_modules/date-format-parse/es/util.js"); /***/ }), /***/ "./node_modules/date-format-parse/es/locale/en.js": /*!********************************************************!*\ !*** ./node_modules/date-format-parse/es/locale/en.js ***! \********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); var locale = { months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], weekdaysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], firstDayOfWeek: 0, firstWeekContainsDate: 1 }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (locale); /***/ }), /***/ "./node_modules/date-format-parse/es/parse.js": /*!****************************************************!*\ !*** ./node_modules/date-format-parse/es/parse.js ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ parse: () => (/* binding */ parse) /* harmony export */ }); /* harmony import */ var _locale_en__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./locale/en */ "./node_modules/date-format-parse/es/locale/en.js"); /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./node_modules/date-format-parse/es/util.js"); function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var formattingTokens = /(\[[^\[]*\])|(MM?M?M?|Do|DD?|ddd?d?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|S{1,3}|x|X|ZZ?|.)/g; var match1 = /\d/; // 0 - 9 var match2 = /\d\d/; // 00 - 99 var match3 = /\d{3}/; // 000 - 999 var match4 = /\d{4}/; // 0000 - 9999 var match1to2 = /\d\d?/; // 0 - 99 var matchShortOffset = /[+-]\d\d:?\d\d/; // +00:00 -00:00 +0000 or -0000 var matchSigned = /[+-]?\d+/; // -inf - inf var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 // const matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i; // Word var YEAR = 'year'; var MONTH = 'month'; var DAY = 'day'; var HOUR = 'hour'; var MINUTE = 'minute'; var SECOND = 'second'; var MILLISECOND = 'millisecond'; var parseFlags = {}; var addParseFlag = function addParseFlag(token, regex, callback) { var tokens = Array.isArray(token) ? token : [token]; var func; if (typeof callback === 'string') { func = function func(input) { var value = parseInt(input, 10); return _defineProperty({}, callback, value); }; } else { func = callback; } tokens.forEach(function (key) { parseFlags[key] = [regex, func]; }); }; var escapeStringRegExp = function escapeStringRegExp(str) { return str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'); }; var matchWordRegExp = function matchWordRegExp(localeKey) { return function (locale) { var array = locale[localeKey]; if (!Array.isArray(array)) { throw new Error("Locale[".concat(localeKey, "] need an array")); } return new RegExp(array.map(escapeStringRegExp).join('|')); }; }; var matchWordCallback = function matchWordCallback(localeKey, key) { return function (input, locale) { var array = locale[localeKey]; if (!Array.isArray(array)) { throw new Error("Locale[".concat(localeKey, "] need an array")); } var index = array.indexOf(input); if (index < 0) { throw new Error('Invalid Word'); } return _defineProperty({}, key, index); }; }; addParseFlag('Y', matchSigned, YEAR); addParseFlag('YY', match2, function (input) { var year = new Date().getFullYear(); var cent = Math.floor(year / 100); var value = parseInt(input, 10); value = (value > 68 ? cent - 1 : cent) * 100 + value; return _defineProperty({}, YEAR, value); }); addParseFlag('YYYY', match4, YEAR); addParseFlag('M', match1to2, function (input) { return _defineProperty({}, MONTH, parseInt(input, 10) - 1); }); addParseFlag('MM', match2, function (input) { return _defineProperty({}, MONTH, parseInt(input, 10) - 1); }); addParseFlag('MMM', matchWordRegExp('monthsShort'), matchWordCallback('monthsShort', MONTH)); addParseFlag('MMMM', matchWordRegExp('months'), matchWordCallback('months', MONTH)); addParseFlag('D', match1to2, DAY); addParseFlag('DD', match2, DAY); addParseFlag(['H', 'h'], match1to2, HOUR); addParseFlag(['HH', 'hh'], match2, HOUR); addParseFlag('m', match1to2, MINUTE); addParseFlag('mm', match2, MINUTE); addParseFlag('s', match1to2, SECOND); addParseFlag('ss', match2, SECOND); addParseFlag('S', match1, function (input) { return _defineProperty({}, MILLISECOND, parseInt(input, 10) * 100); }); addParseFlag('SS', match2, function (input) { return _defineProperty({}, MILLISECOND, parseInt(input, 10) * 10); }); addParseFlag('SSS', match3, MILLISECOND); function matchMeridiem(locale) { return locale.meridiemParse || /[ap]\.?m?\.?/i; } function defaultIsPM(input) { return "".concat(input).toLowerCase().charAt(0) === 'p'; } addParseFlag(['A', 'a'], matchMeridiem, function (input, locale) { var isPM = typeof locale.isPM === 'function' ? locale.isPM(input) : defaultIsPM(input); return { isPM: isPM }; }); function offsetFromString(str) { var _ref8 = str.match(/([+-]|\d\d)/g) || ['-', '0', '0'], _ref9 = _slicedToArray(_ref8, 3), symbol = _ref9[0], hour = _ref9[1], minute = _ref9[2]; var minutes = parseInt(hour, 10) * 60 + parseInt(minute, 10); if (minutes === 0) { return 0; } return symbol === '+' ? -minutes : +minutes; } addParseFlag(['Z', 'ZZ'], matchShortOffset, function (input) { return { offset: offsetFromString(input) }; }); addParseFlag('x', matchSigned, function (input) { return { date: new Date(parseInt(input, 10)) }; }); addParseFlag('X', matchTimestamp, function (input) { return { date: new Date(parseFloat(input) * 1000) }; }); addParseFlag('d', match1, 'weekday'); addParseFlag('dd', matchWordRegExp('weekdaysMin'), matchWordCallback('weekdaysMin', 'weekday')); addParseFlag('ddd', matchWordRegExp('weekdaysShort'), matchWordCallback('weekdaysShort', 'weekday')); addParseFlag('dddd', matchWordRegExp('weekdays'), matchWordCallback('weekdays', 'weekday')); addParseFlag('w', match1to2, 'week'); addParseFlag('ww', match2, 'week'); function to24hour(hour, isPM) { if (hour !== undefined && isPM !== undefined) { if (isPM) { if (hour < 12) { return hour + 12; } } else if (hour === 12) { return 0; } } return hour; } function getFullInputArray(input) { var backupDate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date(); var result = [0, 0, 1, 0, 0, 0, 0]; var backupArr = [backupDate.getFullYear(), backupDate.getMonth(), backupDate.getDate(), backupDate.getHours(), backupDate.getMinutes(), backupDate.getSeconds(), backupDate.getMilliseconds()]; var useBackup = true; for (var i = 0; i < 7; i++) { if (input[i] === undefined) { result[i] = useBackup ? backupArr[i] : result[i]; } else { result[i] = input[i]; useBackup = false; } } return result; } function createDate(y, m, d, h, M, s, ms) { var date; if (y < 100 && y >= 0) { date = new Date(y + 400, m, d, h, M, s, ms); if (isFinite(date.getFullYear())) { date.setFullYear(y); } } else { date = new Date(y, m, d, h, M, s, ms); } return date; } function createUTCDate() { var date; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var y = args[0]; if (y < 100 && y >= 0) { args[0] += 400; date = new Date(Date.UTC.apply(Date, args)); // eslint-disable-next-line no-restricted-globals if (isFinite(date.getUTCFullYear())) { date.setUTCFullYear(y); } } else { date = new Date(Date.UTC.apply(Date, args)); } return date; } function makeParser(dateString, format, locale) { var tokens = format.match(formattingTokens); if (!tokens) { throw new Error(); } var length = tokens.length; var mark = {}; for (var i = 0; i < length; i += 1) { var token = tokens[i]; var parseTo = parseFlags[token]; if (!parseTo) { var word = token.replace(/^\[|\]$/g, ''); if (dateString.indexOf(word) === 0) { dateString = dateString.substr(word.length); } else { throw new Error('not match'); } } else { var regex = typeof parseTo[0] === 'function' ? parseTo[0](locale) : parseTo[0]; var parser = parseTo[1]; var value = (regex.exec(dateString) || [])[0]; var obj = parser(value, locale); mark = _objectSpread({}, mark, {}, obj); dateString = dateString.replace(value, ''); } } return mark; } function parse(str, format) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; try { var _options$locale = options.locale, _locale = _options$locale === void 0 ? _locale_en__WEBPACK_IMPORTED_MODULE_0__["default"] : _options$locale, _options$backupDate = options.backupDate, backupDate = _options$backupDate === void 0 ? new Date() : _options$backupDate; var parseResult = makeParser(str, format, _locale); var year = parseResult.year, month = parseResult.month, day = parseResult.day, hour = parseResult.hour, minute = parseResult.minute, second = parseResult.second, millisecond = parseResult.millisecond, isPM = parseResult.isPM, date = parseResult.date, offset = parseResult.offset, weekday = parseResult.weekday, week = parseResult.week; if (date) { return date; } var inputArray = [year, month, day, hour, minute, second, millisecond]; inputArray[3] = to24hour(inputArray[3], isPM); // check week if (week !== undefined && month === undefined && day === undefined) { // new Date(year, 3) make sure in current year var firstDate = (0,_util__WEBPACK_IMPORTED_MODULE_1__.startOfWeekYear)(year === undefined ? backupDate : new Date(year, 3), { firstDayOfWeek: _locale.firstDayOfWeek, firstWeekContainsDate: _locale.firstWeekContainsDate }); return new Date(firstDate.getTime() + (week - 1) * 7 * 24 * 3600 * 1000); } var parsedDate; var result = getFullInputArray(inputArray, backupDate); if (offset !== undefined) { result[6] += offset * 60 * 1000; parsedDate = createUTCDate.apply(void 0, _toConsumableArray(result)); } else { parsedDate = createDate.apply(void 0, _toConsumableArray(result)); } // check weekday if (weekday !== undefined && parsedDate.getDay() !== weekday) { return new Date(NaN); } return parsedDate; } catch (e) { return new Date(NaN); } } /***/ }), /***/ "./node_modules/date-format-parse/es/util.js": /*!***************************************************!*\ !*** ./node_modules/date-format-parse/es/util.js ***! \***************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getWeek: () => (/* binding */ getWeek), /* harmony export */ isDate: () => (/* binding */ isDate), /* harmony export */ isValidDate: () => (/* binding */ isValidDate), /* harmony export */ startOfWeek: () => (/* binding */ startOfWeek), /* harmony export */ startOfWeekYear: () => (/* binding */ startOfWeekYear), /* harmony export */ toDate: () => (/* binding */ toDate) /* harmony export */ }); function isDate(value) { return value instanceof Date || Object.prototype.toString.call(value) === '[object Date]'; } function toDate(value) { if (isDate(value)) { return new Date(value.getTime()); } if (value == null) { return new Date(NaN); } return new Date(value); } function isValidDate(value) { return isDate(value) && !isNaN(value.getTime()); } function startOfWeek(value) { var firstDayOfWeek = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; if (!(firstDayOfWeek >= 0 && firstDayOfWeek <= 6)) { throw new RangeError('weekStartsOn must be between 0 and 6'); } var date = toDate(value); var day = date.getDay(); var diff = (day + 7 - firstDayOfWeek) % 7; date.setDate(date.getDate() - diff); date.setHours(0, 0, 0, 0); return date; } function startOfWeekYear(value) { var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref$firstDayOfWeek = _ref.firstDayOfWeek, firstDayOfWeek = _ref$firstDayOfWeek === void 0 ? 0 : _ref$firstDayOfWeek, _ref$firstWeekContain = _ref.firstWeekContainsDate, firstWeekContainsDate = _ref$firstWeekContain === void 0 ? 1 : _ref$firstWeekContain; if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { throw new RangeError('firstWeekContainsDate must be between 1 and 7'); } var date = toDate(value); var year = date.getFullYear(); var firstDateOfFirstWeek = new Date(0); for (var i = year + 1; i >= year - 1; i--) { firstDateOfFirstWeek.setFullYear(i, 0, firstWeekContainsDate); firstDateOfFirstWeek.setHours(0, 0, 0, 0); firstDateOfFirstWeek = startOfWeek(firstDateOfFirstWeek, firstDayOfWeek); if (date.getTime() >= firstDateOfFirstWeek.getTime()) { break; } } return firstDateOfFirstWeek; } function getWeek(value) { var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref2$firstDayOfWeek = _ref2.firstDayOfWeek, firstDayOfWeek = _ref2$firstDayOfWeek === void 0 ? 0 : _ref2$firstDayOfWeek, _ref2$firstWeekContai = _ref2.firstWeekContainsDate, firstWeekContainsDate = _ref2$firstWeekContai === void 0 ? 1 : _ref2$firstWeekContai; var date = toDate(value); var firstDateOfThisWeek = startOfWeek(date, firstDayOfWeek); var firstDateOfFirstWeek = startOfWeekYear(date, { firstDayOfWeek: firstDayOfWeek, firstWeekContainsDate: firstWeekContainsDate }); var diff = firstDateOfThisWeek.getTime() - firstDateOfFirstWeek.getTime(); return Math.round(diff / (7 * 24 * 3600 * 1000)) + 1; } /***/ }), /***/ "./node_modules/debounce/index.js": /*!****************************************!*\ !*** ./node_modules/debounce/index.js ***! \****************************************/ /***/ ((module) => { function debounce(function_, wait = 100, options = {}) { if (typeof function_ !== 'function') { throw new TypeError(`Expected the first parameter to be a function, got \`${typeof function_}\`.`); } if (wait < 0) { throw new RangeError('`wait` must not be negative.'); } // TODO: Deprecate the boolean parameter at some point. const {immediate} = typeof options === 'boolean' ? {immediate: options} : options; let storedContext; let storedArguments; let timeoutId; let timestamp; let result; function later() { const last = Date.now() - timestamp; if (last < wait && last >= 0) { timeoutId = setTimeout(later, wait - last); } else { timeoutId = undefined; if (!immediate) { const callContext = storedContext; const callArguments = storedArguments; storedContext = undefined; storedArguments = undefined; result = function_.apply(callContext, callArguments); } } } const debounced = function (...arguments_) { if (storedContext && this !== storedContext) { throw new Error('Debounced method called with different contexts.'); } storedContext = this; // eslint-disable-line unicorn/no-this-assignment storedArguments = arguments_; timestamp = Date.now(); const callNow = immediate && !timeoutId; if (!timeoutId) { timeoutId = setTimeout(later, wait); } if (callNow) { const callContext = storedContext; const callArguments = storedArguments; storedContext = undefined; storedArguments = undefined; result = function_.apply(callContext, callArguments); } return result; }; debounced.clear = () => { if (!timeoutId) { return; } clearTimeout(timeoutId); timeoutId = undefined; }; debounced.flush = () => { if (!timeoutId) { return; } const callContext = storedContext; const callArguments = storedArguments; storedContext = undefined; storedArguments = undefined; result = function_.apply(callContext, callArguments); clearTimeout(timeoutId); timeoutId = undefined; }; return debounced; } // Adds compatibility for ES modules module.exports.debounce = debounce; module.exports = debounce; /***/ }), /***/ "./node_modules/debug/src/browser.js": /*!*******************************************!*\ !*** ./node_modules/debug/src/browser.js ***! \*******************************************/ /***/ ((module, exports, __webpack_require__) => { /* provided dependency */ var process = __webpack_require__(/*! ./node_modules/process/browser.js */ "./node_modules/process/browser.js"); /* eslint-env browser */ /** * This is the web browser implementation of `debug()`. */ exports.formatArgs = formatArgs; exports.save = save; exports.load = load; exports.useColors = useColors; exports.storage = localstorage(); exports.destroy = (() => { let warned = false; return () => { if (!warned) { warned = true; console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); } }; })(); /** * Colors. */ exports.colors = [ '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33' ]; /** * Currently only WebKit-based Web Inspectors, Firefox >= v31, * and the Firebug extension (any Firefox version) are known * to support "%c" CSS customizations. * * TODO: add a `localStorage` variable to explicitly enable/disable colors */ // eslint-disable-next-line complexity function useColors() { // NB: In an Electron preload script, document will be defined but not fully // initialized. Since we know we're in Chrome, we'll just detect this case // explicitly if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { return true; } // Internet Explorer and Edge do not support colors. if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { return false; } // Is webkit? http://stackoverflow.com/a/16459606/376773 // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || // Is firebug? http://stackoverflow.com/a/398120/376773 (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || // Is firefox >= v31? // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || // Double check webkit in userAgent just in case we are in a worker (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); } /** * Colorize log arguments if enabled. * * @api public */ function formatArgs(args) { args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff); if (!this.useColors) { return; } const c = 'color: ' + this.color; args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other // arguments passed either before or after the %c, so we need to // figure out the correct index to insert the CSS into let index = 0; let lastC = 0; args[0].replace(/%[a-zA-Z%]/g, match => { if (match === '%%') { return; } index++; if (match === '%c') { // We only are interested in the *last* %c // (the user may have provided their own) lastC = index; } }); args.splice(lastC, 0, c); } /** * Invokes `console.debug()` when available. * No-op when `console.debug` is not a "function". * If `console.debug` is not available, falls back * to `console.log`. * * @api public */ exports.log = console.debug || console.log || (() => {}); /** * Save `namespaces`. * * @param {String} namespaces * @api private */ function save(namespaces) { try { if (namespaces) { exports.storage.setItem('debug', namespaces); } else { exports.storage.removeItem('debug'); } } catch (error) { // Swallow // XXX (@Qix-) should we be logging these? } } /** * Load `namespaces`. * * @return {String} returns the previously persisted debug modes * @api private */ function load() { let r; try { r = exports.storage.getItem('debug'); } catch (error) { // Swallow // XXX (@Qix-) should we be logging these? } // If debug isn't set in LS, and we're in Electron, try to load $DEBUG if (!r && typeof process !== 'undefined' && 'env' in process) { r = process.env.DEBUG; } return r; } /** * Localstorage attempts to return the localstorage. * * This is necessary because safari throws * when a user disables cookies/localstorage * and you attempt to access it. * * @return {LocalStorage} * @api private */ function localstorage() { try { // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context // The Browser also has localStorage in the global context. return localStorage; } catch (error) { // Swallow // XXX (@Qix-) should we be logging these? } } module.exports = __webpack_require__(/*! ./common */ "./node_modules/debug/src/common.js")(exports); const {formatters} = module.exports; /** * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. */ formatters.j = function (v) { try { return JSON.stringify(v); } catch (error) { return '[UnexpectedJSONParseError]: ' + error.message; } }; /***/ }), /***/ "./node_modules/debug/src/common.js": /*!******************************************!*\ !*** ./node_modules/debug/src/common.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { /** * This is the common logic for both the Node.js and web browser * implementations of `debug()`. */ function setup(env) { createDebug.debug = createDebug; createDebug.default = createDebug; createDebug.coerce = coerce; createDebug.disable = disable; createDebug.enable = enable; createDebug.enabled = enabled; createDebug.humanize = __webpack_require__(/*! ms */ "./node_modules/ms/index.js"); createDebug.destroy = destroy; Object.keys(env).forEach(key => { createDebug[key] = env[key]; }); /** * The currently active debug mode names, and names to skip. */ createDebug.names = []; createDebug.skips = []; /** * Map of special "%n" handling functions, for the debug "format" argument. * * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". */ createDebug.formatters = {}; /** * Selects a color for a debug namespace * @param {String} namespace The namespace string for the debug instance to be colored * @return {Number|String} An ANSI color code for the given namespace * @api private */ function selectColor(namespace) { let hash = 0; for (let i = 0; i < namespace.length; i++) { hash = ((hash << 5) - hash) + namespace.charCodeAt(i); hash |= 0; // Convert to 32bit integer } return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; } createDebug.selectColor = selectColor; /** * Create a debugger with the given `namespace`. * * @param {String} namespace * @return {Function} * @api public */ function createDebug(namespace) { let prevTime; let enableOverride = null; let namespacesCache; let enabledCache; function debug(...args) { // Disabled? if (!debug.enabled) { return; } const self = debug; // Set `diff` timestamp const curr = Number(new Date()); const ms = curr - (prevTime || curr); self.diff = ms; self.prev = prevTime; self.curr = curr; prevTime = curr; args[0] = createDebug.coerce(args[0]); if (typeof args[0] !== 'string') { // Anything else let's inspect with %O args.unshift('%O'); } // Apply any `formatters` transformations let index = 0; args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { // If we encounter an escaped % then don't increase the array index if (match === '%%') { return '%'; } index++; const formatter = createDebug.formatters[format]; if (typeof formatter === 'function') { const val = args[index]; match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format` args.splice(index, 1); index--; } return match; }); // Apply env-specific formatting (colors, etc.) createDebug.formatArgs.call(self, args); const logFn = self.log || createDebug.log; logFn.apply(self, args); } debug.namespace = namespace; debug.useColors = createDebug.useColors(); debug.color = createDebug.selectColor(namespace); debug.extend = extend; debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. Object.defineProperty(debug, 'enabled', { enumerable: true, configurable: false, get: () => { if (enableOverride !== null) { return enableOverride; } if (namespacesCache !== createDebug.namespaces) { namespacesCache = createDebug.namespaces; enabledCache = createDebug.enabled(namespace); } return enabledCache; }, set: v => { enableOverride = v; } }); // Env-specific initialization logic for debug instances if (typeof createDebug.init === 'function') { createDebug.init(debug); } return debug; } function extend(namespace, delimiter) { const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); newDebug.log = this.log; return newDebug; } /** * Enables a debug mode by namespaces. This can include modes * separated by a colon and wildcards. * * @param {String} namespaces * @api public */ function enable(namespaces) { createDebug.save(namespaces); createDebug.namespaces = namespaces; createDebug.names = []; createDebug.skips = []; let i; const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); const len = split.length; for (i = 0; i < len; i++) { if (!split[i]) { // ignore empty strings continue; } namespaces = split[i].replace(/\*/g, '.*?'); if (namespaces[0] === '-') { createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$')); } else { createDebug.names.push(new RegExp('^' + namespaces + '$')); } } } /** * Disable debug output. * * @return {String} namespaces * @api public */ function disable() { const namespaces = [ ...createDebug.names.map(toNamespace), ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) ].join(','); createDebug.enable(''); return namespaces; } /** * Returns true if the given mode name is enabled, false otherwise. * * @param {String} name * @return {Boolean} * @api public */ function enabled(name) { if (name[name.length - 1] === '*') { return true; } let i; let len; for (i = 0, len = createDebug.skips.length; i < len; i++) { if (createDebug.skips[i].test(name)) { return false; } } for (i = 0, len = createDebug.names.length; i < len; i++) { if (createDebug.names[i].test(name)) { return true; } } return false; } /** * Convert regexp to namespace * * @param {RegExp} regxep * @return {String} namespace * @api private */ function toNamespace(regexp) { return regexp.toString() .substring(2, regexp.toString().length - 2) .replace(/\.\*\?$/, '*'); } /** * Coerce `val`. * * @param {Mixed} val * @return {Mixed} * @api private */ function coerce(val) { if (val instanceof Error) { return val.stack || val.message; } return val; } /** * XXX DO NOT USE. This is a temporary stub function. * XXX It WILL be removed in the next major release. */ function destroy() { console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); } createDebug.enable(createDebug.load()); return createDebug; } module.exports = setup; /***/ }), /***/ "./node_modules/dompurify/dist/purify.js": /*!***********************************************!*\ !*** ./node_modules/dompurify/dist/purify.js ***! \***********************************************/ /***/ (function(module) { /*! @license DOMPurify 3.0.8 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.8/LICENSE */ (function (global, factory) { true ? module.exports = factory() : 0; })(this, (function () { 'use strict'; const { entries, setPrototypeOf, isFrozen, getPrototypeOf, getOwnPropertyDescriptor } = Object; let { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports let { apply, construct } = typeof Reflect !== 'undefined' && Reflect; if (!freeze) { freeze = function freeze(x) { return x; }; } if (!seal) { seal = function seal(x) { return x; }; } if (!apply) { apply = function apply(fun, thisValue, args) { return fun.apply(thisValue, args); }; } if (!construct) { construct = function construct(Func, args) { return new Func(...args); }; } const arrayForEach = unapply(Array.prototype.forEach); const arrayPop = unapply(Array.prototype.pop); const arrayPush = unapply(Array.prototype.push); const stringToLowerCase = unapply(String.prototype.toLowerCase); const stringToString = unapply(String.prototype.toString); const stringMatch = unapply(String.prototype.match); const stringReplace = unapply(String.prototype.replace); const stringIndexOf = unapply(String.prototype.indexOf); const stringTrim = unapply(String.prototype.trim); const regExpTest = unapply(RegExp.prototype.test); const typeErrorCreate = unconstruct(TypeError); /** * Creates a new function that calls the given function with a specified thisArg and arguments. * * @param {Function} func - The function to be wrapped and called. * @returns {Function} A new function that calls the given function with a specified thisArg and arguments. */ function unapply(func) { return function (thisArg) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } return apply(func, thisArg, args); }; } /** * Creates a new function that constructs an instance of the given constructor function with the provided arguments. * * @param {Function} func - The constructor function to be wrapped and called. * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments. */ function unconstruct(func) { return function () { for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } return construct(func, args); }; } /** * Add properties to a lookup table * * @param {Object} set - The set to which elements will be added. * @param {Array} array - The array containing elements to be added to the set. * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set. * @returns {Object} The modified set with added elements. */ function addToSet(set, array) { let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase; if (setPrototypeOf) { // Make 'in' and truthy checks like Boolean(set.constructor) // independent of any properties defined on Object.prototype. // Prevent prototype setters from intercepting set as a this value. setPrototypeOf(set, null); } let l = array.length; while (l--) { let element = array[l]; if (typeof element === 'string') { const lcElement = transformCaseFunc(element); if (lcElement !== element) { // Config presets (e.g. tags.js, attrs.js) are immutable. if (!isFrozen(array)) { array[l] = lcElement; } element = lcElement; } } set[element] = true; } return set; } /** * Clean up an array to harden against CSPP * * @param {Array} array - The array to be cleaned. * @returns {Array} The cleaned version of the array */ function cleanArray(array) { for (let index = 0; index < array.length; index++) { if (getOwnPropertyDescriptor(array, index) === undefined) { array[index] = null; } } return array; } /** * Shallow clone an object * * @param {Object} object - The object to be cloned. * @returns {Object} A new object that copies the original. */ function clone(object) { const newObject = create(null); for (const [property, value] of entries(object)) { if (getOwnPropertyDescriptor(object, property) !== undefined) { if (Array.isArray(value)) { newObject[property] = cleanArray(value); } else if (value && typeof value === 'object' && value.constructor === Object) { newObject[property] = clone(value); } else { newObject[property] = value; } } } return newObject; } /** * This method automatically checks if the prop is function or getter and behaves accordingly. * * @param {Object} object - The object to look up the getter function in its prototype chain. * @param {String} prop - The property name for which to find the getter function. * @returns {Function} The getter function found in the prototype chain or a fallback function. */ function lookupGetter(object, prop) { while (object !== null) { const desc = getOwnPropertyDescriptor(object, prop); if (desc) { if (desc.get) { return unapply(desc.get); } if (typeof desc.value === 'function') { return unapply(desc.value); } } object = getPrototypeOf(object); } function fallbackValue(element) { console.warn('fallback value for', element); return null; } return fallbackValue; } const html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']); // SVG const svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']); const svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']); // List of SVG elements that are disallowed by default. // We still need to know them so that we can do namespace // checks properly in case one wants to add them to // allow-list. const svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']); const mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']); // Similarly to SVG, we want to know all MathML elements, // even those that we disallow by default. const mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']); const text = freeze(['#text']); const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns', 'slot']); const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']); const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']); const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']); // eslint-disable-next-line unicorn/better-regex const MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode const ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm); const TMPLIT_EXPR = seal(/\${[\w\W]*}/gm); const DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/); // eslint-disable-line no-useless-escape const ARIA_ATTR = seal(/^aria-[\-\w]+$/); // eslint-disable-line no-useless-escape const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i // eslint-disable-line no-useless-escape ); const IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i); const ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g // eslint-disable-line no-control-regex ); const DOCTYPE_NAME = seal(/^html$/i); var EXPRESSIONS = /*#__PURE__*/Object.freeze({ __proto__: null, MUSTACHE_EXPR: MUSTACHE_EXPR, ERB_EXPR: ERB_EXPR, TMPLIT_EXPR: TMPLIT_EXPR, DATA_ATTR: DATA_ATTR, ARIA_ATTR: ARIA_ATTR, IS_ALLOWED_URI: IS_ALLOWED_URI, IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA, ATTR_WHITESPACE: ATTR_WHITESPACE, DOCTYPE_NAME: DOCTYPE_NAME }); const getGlobal = function getGlobal() { return typeof window === 'undefined' ? null : window; }; /** * Creates a no-op policy for internal use only. * Don't export this function outside this module! * @param {TrustedTypePolicyFactory} trustedTypes The policy factory. * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix). * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types * are not supported or creating the policy failed). */ const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) { if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') { return null; } // Allow the callers to control the unique policy name // by adding a data-tt-policy-suffix to the script element with the DOMPurify. // Policy creation with duplicate names throws in Trusted Types. let suffix = null; const ATTR_NAME = 'data-tt-policy-suffix'; if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) { suffix = purifyHostElement.getAttribute(ATTR_NAME); } const policyName = 'dompurify' + (suffix ? '#' + suffix : ''); try { return trustedTypes.createPolicy(policyName, { createHTML(html) { return html; }, createScriptURL(scriptUrl) { return scriptUrl; } }); } catch (_) { // Policy creation failed (most likely another DOMPurify script has // already run). Skip creating the policy, as this will only cause errors // if TT are enforced. console.warn('TrustedTypes policy ' + policyName + ' could not be created.'); return null; } }; function createDOMPurify() { let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal(); const DOMPurify = root => createDOMPurify(root); /** * Version label, exposed for easier checks * if DOMPurify is up to date or not */ DOMPurify.version = '3.0.8'; /** * Array of elements that DOMPurify removed during sanitation. * Empty if nothing was removed. */ DOMPurify.removed = []; if (!window || !window.document || window.document.nodeType !== 9) { // Not running in a browser, provide a factory function // so that you can pass your own Window DOMPurify.isSupported = false; return DOMPurify; } let { document } = window; const originalDocument = document; const currentScript = originalDocument.currentScript; const { DocumentFragment, HTMLTemplateElement, Node, Element, NodeFilter, NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap, HTMLFormElement, DOMParser, trustedTypes } = window; const ElementPrototype = Element.prototype; const cloneNode = lookupGetter(ElementPrototype, 'cloneNode'); const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling'); const getChildNodes = lookupGetter(ElementPrototype, 'childNodes'); const getParentNode = lookupGetter(ElementPrototype, 'parentNode'); // As per issue #47, the web-components registry is inherited by a // new document created via createHTMLDocument. As per the spec // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries) // a new empty registry is used when creating a template contents owner // document, so we use that as our parent document to ensure nothing // is inherited. if (typeof HTMLTemplateElement === 'function') { const template = document.createElement('template'); if (template.content && template.content.ownerDocument) { document = template.content.ownerDocument; } } let trustedTypesPolicy; let emptyHTML = ''; const { implementation, createNodeIterator, createDocumentFragment, getElementsByTagName } = document; const { importNode } = originalDocument; let hooks = {}; /** * Expose whether this browser supports running the full DOMPurify. */ DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined; const { MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR, DATA_ATTR, ARIA_ATTR, IS_SCRIPT_OR_DATA, ATTR_WHITESPACE } = EXPRESSIONS; let { IS_ALLOWED_URI: IS_ALLOWED_URI$1 } = EXPRESSIONS; /** * We consider the elements and attributes below to be safe. Ideally * don't add any new ones but feel free to remove unwanted ones. */ /* allowed element names */ let ALLOWED_TAGS = null; const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]); /* Allowed attribute names */ let ALLOWED_ATTR = null; const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]); /* * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements. * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements) * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list) * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`. */ let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, { tagNameCheck: { writable: true, configurable: false, enumerable: true, value: null }, attributeNameCheck: { writable: true, configurable: false, enumerable: true, value: null }, allowCustomizedBuiltInElements: { writable: true, configurable: false, enumerable: true, value: false } })); /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */ let FORBID_TAGS = null; /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */ let FORBID_ATTR = null; /* Decide if ARIA attributes are okay */ let ALLOW_ARIA_ATTR = true; /* Decide if custom data attributes are okay */ let ALLOW_DATA_ATTR = true; /* Decide if unknown protocols are okay */ let ALLOW_UNKNOWN_PROTOCOLS = false; /* Decide if self-closing tags in attributes are allowed. * Usually removed due to a mXSS issue in jQuery 3.0 */ let ALLOW_SELF_CLOSE_IN_ATTR = true; /* Output should be safe for common template engines. * This means, DOMPurify removes data attributes, mustaches and ERB */ let SAFE_FOR_TEMPLATES = false; /* Decide if document with ... should be returned */ let WHOLE_DOCUMENT = false; /* Track whether config is already set on this instance of DOMPurify. */ let SET_CONFIG = false; /* Decide if all elements (e.g. style, script) must be children of * document.body. By default, browsers might move them to document.head */ let FORCE_BODY = false; /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html * string (or a TrustedHTML object if Trusted Types are supported). * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead */ let RETURN_DOM = false; /* Decide if a DOM `DocumentFragment` should be returned, instead of a html * string (or a TrustedHTML object if Trusted Types are supported) */ let RETURN_DOM_FRAGMENT = false; /* Try to return a Trusted Type object instead of a string, return a string in * case Trusted Types are not supported */ let RETURN_TRUSTED_TYPE = false; /* Output should be free from DOM clobbering attacks? * This sanitizes markups named with colliding, clobberable built-in DOM APIs. */ let SANITIZE_DOM = true; /* Achieve full DOM Clobbering protection by isolating the namespace of named * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules. * * HTML/DOM spec rules that enable DOM Clobbering: * - Named Access on Window (§7.3.3) * - DOM Tree Accessors (§3.1.5) * - Form Element Parent-Child Relations (§4.10.3) * - Iframe srcdoc / Nested WindowProxies (§4.8.5) * - HTMLCollection (§4.2.10.2) * * Namespace isolation is implemented by prefixing `id` and `name` attributes * with a constant string, i.e., `user-content-` */ let SANITIZE_NAMED_PROPS = false; const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-'; /* Keep element content when removing element? */ let KEEP_CONTENT = true; /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead * of importing it into a new Document and returning a sanitized copy */ let IN_PLACE = false; /* Allow usage of profiles like html, svg and mathMl */ let USE_PROFILES = {}; /* Tags to ignore content of when KEEP_CONTENT is true */ let FORBID_CONTENTS = null; const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']); /* Tags that are safe for data: URIs */ let DATA_URI_TAGS = null; const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']); /* Attributes safe for values like "javascript:" */ let URI_SAFE_ATTRIBUTES = null; const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']); const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML'; const SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml'; /* Document namespace */ let NAMESPACE = HTML_NAMESPACE; let IS_EMPTY_INPUT = false; /* Allowed XHTML+XML namespaces */ let ALLOWED_NAMESPACES = null; const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString); /* Parsing of strict XHTML documents */ let PARSER_MEDIA_TYPE = null; const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html']; const DEFAULT_PARSER_MEDIA_TYPE = 'text/html'; let transformCaseFunc = null; /* Keep a reference to config to pass to hooks */ let CONFIG = null; /* Ideally, do not touch anything below this line */ /* ______________________________________________ */ const formElement = document.createElement('form'); const isRegexOrFunction = function isRegexOrFunction(testValue) { return testValue instanceof RegExp || testValue instanceof Function; }; /** * _parseConfig * * @param {Object} cfg optional config literal */ // eslint-disable-next-line complexity const _parseConfig = function _parseConfig() { let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; if (CONFIG && CONFIG === cfg) { return; } /* Shield configuration object from tampering */ if (!cfg || typeof cfg !== 'object') { cfg = {}; } /* Shield configuration object from prototype pollution */ cfg = clone(cfg); PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE; // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is. transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase; /* Set configuration parameters */ ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS; ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR; ALLOWED_NAMESPACES = 'ALLOWED_NAMESPACES' in cfg ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES; URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent transformCaseFunc // eslint-disable-line indent ) // eslint-disable-line indent : DEFAULT_URI_SAFE_ATTRIBUTES; DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent transformCaseFunc // eslint-disable-line indent ) // eslint-disable-line indent : DEFAULT_DATA_URI_TAGS; FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS; FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {}; FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {}; USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false; ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false RETURN_DOM = cfg.RETURN_DOM || false; // Default false RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false FORCE_BODY = cfg.FORCE_BODY || false; // Default false SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true IN_PLACE = cfg.IN_PLACE || false; // Default false IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI; NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE; CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {}; if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) { CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck; } if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) { CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck; } if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') { CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements; } if (SAFE_FOR_TEMPLATES) { ALLOW_DATA_ATTR = false; } if (RETURN_DOM_FRAGMENT) { RETURN_DOM = true; } /* Parse profile info */ if (USE_PROFILES) { ALLOWED_TAGS = addToSet({}, text); ALLOWED_ATTR = []; if (USE_PROFILES.html === true) { addToSet(ALLOWED_TAGS, html$1); addToSet(ALLOWED_ATTR, html); } if (USE_PROFILES.svg === true) { addToSet(ALLOWED_TAGS, svg$1); addToSet(ALLOWED_ATTR, svg); addToSet(ALLOWED_ATTR, xml); } if (USE_PROFILES.svgFilters === true) { addToSet(ALLOWED_TAGS, svgFilters); addToSet(ALLOWED_ATTR, svg); addToSet(ALLOWED_ATTR, xml); } if (USE_PROFILES.mathMl === true) { addToSet(ALLOWED_TAGS, mathMl$1); addToSet(ALLOWED_ATTR, mathMl); addToSet(ALLOWED_ATTR, xml); } } /* Merge configuration parameters */ if (cfg.ADD_TAGS) { if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) { ALLOWED_TAGS = clone(ALLOWED_TAGS); } addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc); } if (cfg.ADD_ATTR) { if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) { ALLOWED_ATTR = clone(ALLOWED_ATTR); } addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc); } if (cfg.ADD_URI_SAFE_ATTR) { addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc); } if (cfg.FORBID_CONTENTS) { if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) { FORBID_CONTENTS = clone(FORBID_CONTENTS); } addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc); } /* Add #text in case KEEP_CONTENT is set to true */ if (KEEP_CONTENT) { ALLOWED_TAGS['#text'] = true; } /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */ if (WHOLE_DOCUMENT) { addToSet(ALLOWED_TAGS, ['html', 'head', 'body']); } /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */ if (ALLOWED_TAGS.table) { addToSet(ALLOWED_TAGS, ['tbody']); delete FORBID_TAGS.tbody; } if (cfg.TRUSTED_TYPES_POLICY) { if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') { throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.'); } if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') { throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.'); } // Overwrite existing TrustedTypes policy. trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY; // Sign local variables required by `sanitize`. emptyHTML = trustedTypesPolicy.createHTML(''); } else { // Uninitialized policy, attempt to initialize the internal dompurify policy. if (trustedTypesPolicy === undefined) { trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript); } // If creating the internal policy succeeded sign internal variables. if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') { emptyHTML = trustedTypesPolicy.createHTML(''); } } // Prevent further manipulation of configuration. // Not available in IE8, Safari 5, etc. if (freeze) { freeze(cfg); } CONFIG = cfg; }; const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']); const HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'desc', 'title', 'annotation-xml']); // Certain elements are allowed in both SVG and HTML // namespace. We need to specify them explicitly // so that they don't get erroneously deleted from // HTML namespace. const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']); /* Keep track of all possible SVG and MathML tags * so that we can perform the namespace checks * correctly. */ const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]); const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]); /** * @param {Element} element a DOM element whose namespace is being checked * @returns {boolean} Return false if the element has a * namespace that a spec-compliant parser would never * return. Return true otherwise. */ const _checkValidNamespace = function _checkValidNamespace(element) { let parent = getParentNode(element); // In JSDOM, if we're inside shadow DOM, then parentNode // can be null. We just simulate parent in this case. if (!parent || !parent.tagName) { parent = { namespaceURI: NAMESPACE, tagName: 'template' }; } const tagName = stringToLowerCase(element.tagName); const parentTagName = stringToLowerCase(parent.tagName); if (!ALLOWED_NAMESPACES[element.namespaceURI]) { return false; } if (element.namespaceURI === SVG_NAMESPACE) { // The only way to switch from HTML namespace to SVG // is via . If it happens via any other tag, then // it should be killed. if (parent.namespaceURI === HTML_NAMESPACE) { return tagName === 'svg'; } // The only way to switch from MathML to SVG is via` // svg if parent is either or MathML // text integration points. if (parent.namespaceURI === MATHML_NAMESPACE) { return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]); } // We only allow elements that are defined in SVG // spec. All others are disallowed in SVG namespace. return Boolean(ALL_SVG_TAGS[tagName]); } if (element.namespaceURI === MATHML_NAMESPACE) { // The only way to switch from HTML namespace to MathML // is via . If it happens via any other tag, then // it should be killed. if (parent.namespaceURI === HTML_NAMESPACE) { return tagName === 'math'; } // The only way to switch from SVG to MathML is via // and HTML integration points if (parent.namespaceURI === SVG_NAMESPACE) { return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName]; } // We only allow elements that are defined in MathML // spec. All others are disallowed in MathML namespace. return Boolean(ALL_MATHML_TAGS[tagName]); } if (element.namespaceURI === HTML_NAMESPACE) { // The only way to switch from SVG to HTML is via // HTML integration points, and from MathML to HTML // is via MathML text integration points if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) { return false; } if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) { return false; } // We disallow tags that are specific for MathML // or SVG and should never appear in HTML namespace return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]); } // For XHTML and XML documents that support custom namespaces if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) { return true; } // The code should never reach this place (this means // that the element somehow got namespace that is not // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES). // Return false just in case. return false; }; /** * _forceRemove * * @param {Node} node a DOM node */ const _forceRemove = function _forceRemove(node) { arrayPush(DOMPurify.removed, { element: node }); try { // eslint-disable-next-line unicorn/prefer-dom-node-remove node.parentNode.removeChild(node); } catch (_) { node.remove(); } }; /** * _removeAttribute * * @param {String} name an Attribute name * @param {Node} node a DOM node */ const _removeAttribute = function _removeAttribute(name, node) { try { arrayPush(DOMPurify.removed, { attribute: node.getAttributeNode(name), from: node }); } catch (_) { arrayPush(DOMPurify.removed, { attribute: null, from: node }); } node.removeAttribute(name); // We void attribute values for unremovable "is"" attributes if (name === 'is' && !ALLOWED_ATTR[name]) { if (RETURN_DOM || RETURN_DOM_FRAGMENT) { try { _forceRemove(node); } catch (_) {} } else { try { node.setAttribute(name, ''); } catch (_) {} } } }; /** * _initDocument * * @param {String} dirty a string of dirty markup * @return {Document} a DOM, filled with the dirty markup */ const _initDocument = function _initDocument(dirty) { /* Create a HTML document */ let doc = null; let leadingWhitespace = null; if (FORCE_BODY) { dirty = '' + dirty; } else { /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */ const matches = stringMatch(dirty, /^[\r\n\t ]+/); leadingWhitespace = matches && matches[0]; } if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) { // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict) dirty = '' + dirty + ''; } const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty; /* * Use the DOMParser API by default, fallback later if needs be * DOMParser not work for svg when has multiple root element. */ if (NAMESPACE === HTML_NAMESPACE) { try { doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE); } catch (_) {} } /* Use createHTMLDocument in case DOMParser is not available */ if (!doc || !doc.documentElement) { doc = implementation.createDocument(NAMESPACE, 'template', null); try { doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload; } catch (_) { // Syntax error if dirtyPayload is invalid xml } } const body = doc.body || doc.documentElement; if (dirty && leadingWhitespace) { body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null); } /* Work on whole document or just its body */ if (NAMESPACE === HTML_NAMESPACE) { return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0]; } return WHOLE_DOCUMENT ? doc.documentElement : body; }; /** * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document. * * @param {Node} root The root element or node to start traversing on. * @return {NodeIterator} The created NodeIterator */ const _createNodeIterator = function _createNodeIterator(root) { return createNodeIterator.call(root.ownerDocument || root, root, // eslint-disable-next-line no-bitwise NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null); }; /** * _isClobbered * * @param {Node} elm element to check for clobbering attacks * @return {Boolean} true if clobbered, false if safe */ const _isClobbered = function _isClobbered(elm) { return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function'); }; /** * Checks whether the given object is a DOM node. * * @param {Node} object object to check whether it's a DOM node * @return {Boolean} true is object is a DOM node */ const _isNode = function _isNode(object) { return typeof Node === 'function' && object instanceof Node; }; /** * _executeHook * Execute user configurable hooks * * @param {String} entryPoint Name of the hook's entry point * @param {Node} currentNode node to work on with the hook * @param {Object} data additional hook parameters */ const _executeHook = function _executeHook(entryPoint, currentNode, data) { if (!hooks[entryPoint]) { return; } arrayForEach(hooks[entryPoint], hook => { hook.call(DOMPurify, currentNode, data, CONFIG); }); }; /** * _sanitizeElements * * @protect nodeName * @protect textContent * @protect removeChild * * @param {Node} currentNode to check for permission to exist * @return {Boolean} true if node was killed, false if left alive */ const _sanitizeElements = function _sanitizeElements(currentNode) { let content = null; /* Execute a hook if present */ _executeHook('beforeSanitizeElements', currentNode, null); /* Check if element is clobbered or can clobber */ if (_isClobbered(currentNode)) { _forceRemove(currentNode); return true; } /* Now let's check the element's type and name */ const tagName = transformCaseFunc(currentNode.nodeName); /* Execute a hook if present */ _executeHook('uponSanitizeElement', currentNode, { tagName, allowedTags: ALLOWED_TAGS }); /* Detect mXSS attempts abusing namespace confusion */ if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) { _forceRemove(currentNode); return true; } /* Remove element if anything forbids its presence */ if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) { /* Check if we have a custom element to handle */ if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) { if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) { return false; } if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) { return false; } } /* Keep content except for bad-listed elements */ if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) { const parentNode = getParentNode(currentNode) || currentNode.parentNode; const childNodes = getChildNodes(currentNode) || currentNode.childNodes; if (childNodes && parentNode) { const childCount = childNodes.length; for (let i = childCount - 1; i >= 0; --i) { parentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode)); } } } _forceRemove(currentNode); return true; } /* Check whether element has a valid namespace */ if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) { _forceRemove(currentNode); return true; } /* Make sure that older browsers don't get fallback-tag mXSS */ if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML)) { _forceRemove(currentNode); return true; } /* Sanitize element content to be template-safe */ if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) { /* Get the element's text content */ content = currentNode.textContent; arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => { content = stringReplace(content, expr, ' '); }); if (currentNode.textContent !== content) { arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() }); currentNode.textContent = content; } } /* Execute a hook if present */ _executeHook('afterSanitizeElements', currentNode, null); return false; }; /** * _isValidAttribute * * @param {string} lcTag Lowercase tag name of containing element. * @param {string} lcName Lowercase attribute name. * @param {string} value Attribute value. * @return {Boolean} Returns true if `value` is valid, otherwise false. */ // eslint-disable-next-line complexity const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) { /* Make sure attribute cannot clobber */ if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) { return false; } /* Allow valid data-* attributes: At least one character after "-" (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes) XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804) We don't need to check the value; it's always URI safe. */ if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) { if ( // First condition does a very basic check if a) it's basically a valid custom element tagname AND // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || // Alternative, second condition checks if it's an `is`-attribute, AND // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else { return false; } /* Check value is safe. First, is attr inert? If so, is safe */ } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) { return false; } else ; return true; }; /** * _isBasicCustomElement * checks if at least one dash is included in tagName, and it's not the first char * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name * * @param {string} tagName name of the tag of the node to sanitize * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false. */ const _isBasicCustomElement = function _isBasicCustomElement(tagName) { return tagName.indexOf('-') > 0; }; /** * _sanitizeAttributes * * @protect attributes * @protect nodeName * @protect removeAttribute * @protect setAttribute * * @param {Node} currentNode to sanitize */ const _sanitizeAttributes = function _sanitizeAttributes(currentNode) { /* Execute a hook if present */ _executeHook('beforeSanitizeAttributes', currentNode, null); const { attributes } = currentNode; /* Check if we have attributes; if not we might have a text node */ if (!attributes) { return; } const hookEvent = { attrName: '', attrValue: '', keepAttr: true, allowedAttributes: ALLOWED_ATTR }; let l = attributes.length; /* Go backwards over all attributes; safely remove bad ones */ while (l--) { const attr = attributes[l]; const { name, namespaceURI, value: attrValue } = attr; const lcName = transformCaseFunc(name); let value = name === 'value' ? attrValue : stringTrim(attrValue); /* Execute a hook if present */ hookEvent.attrName = lcName; hookEvent.attrValue = value; hookEvent.keepAttr = true; hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set _executeHook('uponSanitizeAttribute', currentNode, hookEvent); value = hookEvent.attrValue; /* Did the hooks approve of the attribute? */ if (hookEvent.forceKeepAttr) { continue; } /* Remove attribute */ _removeAttribute(name, currentNode); /* Did the hooks approve of the attribute? */ if (!hookEvent.keepAttr) { continue; } /* Work around a security issue in jQuery 3.0 */ if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\/>/i, value)) { _removeAttribute(name, currentNode); continue; } /* Sanitize attribute content to be template-safe */ if (SAFE_FOR_TEMPLATES) { arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => { value = stringReplace(value, expr, ' '); }); } /* Is `value` valid for this attribute? */ const lcTag = transformCaseFunc(currentNode.nodeName); if (!_isValidAttribute(lcTag, lcName, value)) { continue; } /* Full DOM Clobbering protection via namespace isolation, * Prefix id and name attributes with `user-content-` */ if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) { // Remove the attribute with this value _removeAttribute(name, currentNode); // Prefix the value and later re-create the attribute with the sanitized value value = SANITIZE_NAMED_PROPS_PREFIX + value; } /* Handle attributes that require Trusted Types */ if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') { if (namespaceURI) ; else { switch (trustedTypes.getAttributeType(lcTag, lcName)) { case 'TrustedHTML': { value = trustedTypesPolicy.createHTML(value); break; } case 'TrustedScriptURL': { value = trustedTypesPolicy.createScriptURL(value); break; } } } } /* Handle invalid data-* attribute set by try-catching it */ try { if (namespaceURI) { currentNode.setAttributeNS(namespaceURI, name, value); } else { /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. "x-schema". */ currentNode.setAttribute(name, value); } arrayPop(DOMPurify.removed); } catch (_) {} } /* Execute a hook if present */ _executeHook('afterSanitizeAttributes', currentNode, null); }; /** * _sanitizeShadowDOM * * @param {DocumentFragment} fragment to iterate over recursively */ const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) { let shadowNode = null; const shadowIterator = _createNodeIterator(fragment); /* Execute a hook if present */ _executeHook('beforeSanitizeShadowDOM', fragment, null); while (shadowNode = shadowIterator.nextNode()) { /* Execute a hook if present */ _executeHook('uponSanitizeShadowNode', shadowNode, null); /* Sanitize tags and elements */ if (_sanitizeElements(shadowNode)) { continue; } /* Deep shadow DOM detected */ if (shadowNode.content instanceof DocumentFragment) { _sanitizeShadowDOM(shadowNode.content); } /* Check attributes, sanitize if necessary */ _sanitizeAttributes(shadowNode); } /* Execute a hook if present */ _executeHook('afterSanitizeShadowDOM', fragment, null); }; /** * Sanitize * Public method providing core sanitation functionality * * @param {String|Node} dirty string or DOM node * @param {Object} cfg object */ // eslint-disable-next-line complexity DOMPurify.sanitize = function (dirty) { let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; let body = null; let importedNode = null; let currentNode = null; let returnNode = null; /* Make sure we have a string to sanitize. DO NOT return early, as this will return the wrong type if the user has requested a DOM object rather than a string */ IS_EMPTY_INPUT = !dirty; if (IS_EMPTY_INPUT) { dirty = ''; } /* Stringify, in case dirty is an object */ if (typeof dirty !== 'string' && !_isNode(dirty)) { if (typeof dirty.toString === 'function') { dirty = dirty.toString(); if (typeof dirty !== 'string') { throw typeErrorCreate('dirty is not a string, aborting'); } } else { throw typeErrorCreate('toString is not a function'); } } /* Return dirty HTML if DOMPurify cannot run */ if (!DOMPurify.isSupported) { return dirty; } /* Assign config vars */ if (!SET_CONFIG) { _parseConfig(cfg); } /* Clean up removed elements */ DOMPurify.removed = []; /* Check if dirty is correctly typed for IN_PLACE */ if (typeof dirty === 'string') { IN_PLACE = false; } if (IN_PLACE) { /* Do some early pre-sanitization to avoid unsafe root nodes */ if (dirty.nodeName) { const tagName = transformCaseFunc(dirty.nodeName); if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) { throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place'); } } } else if (dirty instanceof Node) { /* If dirty is a DOM element, append to an empty document to avoid elements being stripped by the parser */ body = _initDocument(''); importedNode = body.ownerDocument.importNode(dirty, true); if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') { /* Node is already a body, use as is */ body = importedNode; } else if (importedNode.nodeName === 'HTML') { body = importedNode; } else { // eslint-disable-next-line unicorn/prefer-dom-node-append body.appendChild(importedNode); } } else { /* Exit directly if we have nothing to do */ if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes dirty.indexOf('<') === -1) { return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty; } /* Initialize the document to work on */ body = _initDocument(dirty); /* Check we have a DOM node from the data */ if (!body) { return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : ''; } } /* Remove first element node (ours) if FORCE_BODY is set */ if (body && FORCE_BODY) { _forceRemove(body.firstChild); } /* Get node iterator */ const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body); /* Now start iterating over the created document */ while (currentNode = nodeIterator.nextNode()) { /* Sanitize tags and elements */ if (_sanitizeElements(currentNode)) { continue; } /* Shadow DOM detected, sanitize it */ if (currentNode.content instanceof DocumentFragment) { _sanitizeShadowDOM(currentNode.content); } /* Check attributes, sanitize if necessary */ _sanitizeAttributes(currentNode); } /* If we sanitized `dirty` in-place, return it. */ if (IN_PLACE) { return dirty; } /* Return sanitized string or DOM */ if (RETURN_DOM) { if (RETURN_DOM_FRAGMENT) { returnNode = createDocumentFragment.call(body.ownerDocument); while (body.firstChild) { // eslint-disable-next-line unicorn/prefer-dom-node-append returnNode.appendChild(body.firstChild); } } else { returnNode = body; } if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) { /* AdoptNode() is not used because internal state is not reset (e.g. the past names map of a HTMLFormElement), this is safe in theory but we would rather not risk another attack vector. The state that is cloned by importNode() is explicitly defined by the specs. */ returnNode = importNode.call(originalDocument, returnNode, true); } return returnNode; } let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML; /* Serialize doctype if allowed */ if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) { serializedHTML = '\n' + serializedHTML; } /* Sanitize final string template-safe */ if (SAFE_FOR_TEMPLATES) { arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => { serializedHTML = stringReplace(serializedHTML, expr, ' '); }); } return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML; }; /** * Public method to set the configuration once * setConfig * * @param {Object} cfg configuration object */ DOMPurify.setConfig = function () { let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _parseConfig(cfg); SET_CONFIG = true; }; /** * Public method to remove the configuration * clearConfig * */ DOMPurify.clearConfig = function () { CONFIG = null; SET_CONFIG = false; }; /** * Public method to check if an attribute value is valid. * Uses last set config, if any. Otherwise, uses config defaults. * isValidAttribute * * @param {String} tag Tag name of containing element. * @param {String} attr Attribute name. * @param {String} value Attribute value. * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false. */ DOMPurify.isValidAttribute = function (tag, attr, value) { /* Initialize shared config vars if necessary. */ if (!CONFIG) { _parseConfig({}); } const lcTag = transformCaseFunc(tag); const lcName = transformCaseFunc(attr); return _isValidAttribute(lcTag, lcName, value); }; /** * AddHook * Public method to add DOMPurify hooks * * @param {String} entryPoint entry point for the hook to add * @param {Function} hookFunction function to execute */ DOMPurify.addHook = function (entryPoint, hookFunction) { if (typeof hookFunction !== 'function') { return; } hooks[entryPoint] = hooks[entryPoint] || []; arrayPush(hooks[entryPoint], hookFunction); }; /** * RemoveHook * Public method to remove a DOMPurify hook at a given entryPoint * (pops it from the stack of hooks if more are present) * * @param {String} entryPoint entry point for the hook to remove * @return {Function} removed(popped) hook */ DOMPurify.removeHook = function (entryPoint) { if (hooks[entryPoint]) { return arrayPop(hooks[entryPoint]); } }; /** * RemoveHooks * Public method to remove all DOMPurify hooks at a given entryPoint * * @param {String} entryPoint entry point for the hooks to remove */ DOMPurify.removeHooks = function (entryPoint) { if (hooks[entryPoint]) { hooks[entryPoint] = []; } }; /** * RemoveAllHooks * Public method to remove all DOMPurify hooks */ DOMPurify.removeAllHooks = function () { hooks = {}; }; return DOMPurify; } var purify = createDOMPurify(); return purify; })); //# sourceMappingURL=purify.js.map /***/ }), /***/ "./node_modules/emoji-mart-vue-fast/dist/emoji-mart.js": /*!*************************************************************!*\ !*** ./node_modules/emoji-mart-vue-fast/dist/emoji-mart.js ***! \*************************************************************/ /***/ (function(module) { !function(e,t){ true?module.exports=t():0}("undefined"!=typeof self?self:this,(function(){return function(){var e={661:function(){"undefined"!=typeof window&&function(){for(var e=0,t=["ms","moz","webkit","o"],i=0;ie.length)&&(t=e.length);for(var i=0,n=new Array(t);i=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return s=e.done,e},e:function(e){a=!0,r=e},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}(Object.getOwnPropertyNames(e));try{for(i.s();!(t=i.n()).done;){var n=t.value,o=e[n];e[n]=o&&"object"===u(o)?d(o):o}}catch(e){i.e(e)}finally{i.f()}return Object.freeze(e)}var f,p,v=function(e){if(!e.compressed)return e;for(var t in e.compressed=!1,e.emojis){var i=e.emojis[t];for(var n in h)i[n]=i[h[n]],delete i[h[n]];i.short_names||(i.short_names=[]),i.short_names.unshift(t),i.sheet_x=i.sheet[0],i.sheet_y=i.sheet[1],delete i.sheet,i.text||(i.text=""),i.added_in||(i.added_in=6),i.added_in=i.added_in.toFixed(1),i.search=m(i)}return d(e)},j=["+1","grinning","kissing_heart","heart_eyes","laughing","stuck_out_tongue_winking_eye","sweat_smile","joy","scream","disappointed","unamused","weary","sob","sunglasses","heart","hankey"],y={};function g(){p=!0,f=c.get("frequently")}var w={add:function(e){p||g();var t=e.id;f||(f=y),f[t]||(f[t]=0),f[t]+=1,c.set("last",t),c.set("frequently",f)},get:function(e){if(p||g(),!f){y={};for(var t=[],i=Math.min(e,j.length),n=0;n',custom:'',flags:'',foods:'',nature:'',objects:'',smileys:'',people:' ',places:'',recent:'',symbols:''};function C(e,t,i,n,o,r,s,a){var c,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=i,u._compiled=!0),n&&(u.functional=!0),r&&(u._scopeId="data-v-"+r),s?(c=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(s)},u._ssrRegister=c):o&&(c=a?function(){o.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:o),c)if(u.functional){u._injectStyles=c;var l=u.render;u.render=function(e,t){return c.call(t),l(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,c):[c]}return{exports:e,options:u}}var b=C({props:{i18n:{type:Object,required:!0},color:{type:String},categories:{type:Array,required:!0},activeCategory:{type:Object,default:function(){return{}}}},created:function(){this.svgs=_}},(function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-anchors",attrs:{role:"tablist"}},e._l(e.categories,(function(t){return i("button",{key:t.id,class:{"emoji-mart-anchor":!0,"emoji-mart-anchor-selected":t.id==e.activeCategory.id},style:{color:t.id==e.activeCategory.id?e.color:""},attrs:{role:"tab",type:"button","aria-label":t.name,"aria-selected":t.id==e.activeCategory.id,"data-title":e.i18n.categories[t.id]},on:{click:function(i){return e.$emit("click",t)}}},[i("div",{attrs:{"aria-hidden":"true"},domProps:{innerHTML:e._s(e.svgs[t.id])}}),e._v(" "),i("span",{staticClass:"emoji-mart-anchor-bar",style:{backgroundColor:e.color},attrs:{"aria-hidden":"true"}})])})),0)}),[],!1,null,null,null),k=b.exports;function E(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function S(e,t){for(var i=0;i1114111||Math.floor(s)!=s)throw RangeError("Invalid code point: "+s);s<=65535?i.push(s):(e=55296+((s-=65536)>>10),t=s%1024+56320,i.push(e,t)),(n+1===o||i.length>16384)&&(r+=String.fromCharCode.apply(null,i),i.length=0)}return r};function P(e){var t=e.split("-").map((function(e){return"0x".concat(e)}));return O.apply(null,t)}function A(e){return e.reduce((function(e,t){return-1===e.indexOf(t)&&e.push(t),e}),[])}function M(e,t){var i=A(e),n=A(t);return i.filter((function(e){return n.indexOf(e)>=0}))}function I(e,t){var i={};for(var n in e){var o=e[n],r=o;t.hasOwnProperty(n)&&(r=t[n]),"object"===u(r)&&(r=I(o,r)),i[n]=r}return i}function F(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!i){if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return z(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?z(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){i&&(e=i);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return s=e.done,e},e:function(e){a=!0,r=e},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function z(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i1&&void 0!==arguments[1]?arguments[1]:{},n=i.emojisToShowFilter,o=i.include,r=i.exclude,s=i.custom,a=i.recent,c=i.recentLength,u=void 0===c?20:c;E(this,e),this._data=v(t),this._emojisFilter=n||null,this._include=o||null,this._exclude=r||null,this._custom=s||[],this._recent=a||w.get(u),this._emojis={},this._nativeEmojis={},this._emoticons={},this._categories=[],this._recentCategory={id:"recent",name:"Recent",emojis:[]},this._customCategory={id:"custom",name:"Custom",emojis:[]},this._searchIndex={},this.buildIndex(),Object.freeze(this)}return x(e,[{key:"buildIndex",value:function(){var e=this,t=this._data.categories;if(this._include&&(t=(t=t.filter((function(t){return e._include.includes(t.id)}))).sort((function(t,i){var n=e._include.indexOf(t.id),o=e._include.indexOf(i.id);return no?1:0}))),t.forEach((function(t){if(e.isCategoryNeeded(t.id)){var i={id:t.id,name:t.name,emojis:[]};t.emojis.forEach((function(t){var n=e.addEmoji(t);n&&i.emojis.push(n)})),i.emojis.length&&e._categories.push(i)}})),this.isCategoryNeeded("custom")){if(this._custom.length>0){var i,n=F(this._custom);try{for(n.s();!(i=n.n()).done;){var o=i.value;this.addCustomEmoji(o)}}catch(e){n.e(e)}finally{n.f()}}this._customCategory.emojis.length&&this._categories.push(this._customCategory)}this.isCategoryNeeded("recent")&&(this._recent.length&&this._recent.map((function(t){var i,n=F(e._customCategory.emojis);try{for(n.s();!(i=n.n()).done;){var o=i.value;if(o.id===t)return void e._recentCategory.emojis.push(o)}}catch(e){n.e(e)}finally{n.f()}e.hasEmoji(t)&&e._recentCategory.emojis.push(e.emoji(t))})),this._recentCategory.emojis.length&&this._categories.unshift(this._recentCategory))}},{key:"findEmoji",value:function(e,t){var i=e.match(L);if(i&&(e=i[1],i[2]&&(t=parseInt(i[2],10))),this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),this._emojis.hasOwnProperty(e)){var n=this._emojis[e];return t?n.getSkin(t):n}return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:"categories",value:function(){return this._categories}},{key:"emoji",value:function(e){this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]);var t=this._emojis[e];if(!t)throw new Error("Can not find emoji by id: "+e);return t}},{key:"firstEmoji",value:function(){var e=this._emojis[Object.keys(this._emojis)[0]];if(!e)throw new Error("Can not get first emoji");return e}},{key:"hasEmoji",value:function(e){return this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),!!this._emojis[e]}},{key:"nativeEmoji",value:function(e){return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:"search",value:function(e,t){var i=this;if(t||(t=75),!e.length)return null;if("-"==e||"-1"==e)return[this.emoji("-1")];var n,o=e.toLowerCase().split(/[\s|,|\-|_]+/);o.length>2&&(o=[o[0],o[1]]),n=o.map((function(e){for(var t=i._emojis,n=i._searchIndex,o=0,r=0;r1?M.apply(null,n):n.length?n[0]:[])&&r.length>t&&(r=r.slice(0,t)),r}},{key:"addCustomEmoji",value:function(e){var t=Object.assign({},e,{id:e.short_names[0],custom:!0});t.search||(t.search=m(t));var i=new $(t);return this._emojis[i.id]=i,this._customCategory.emojis.push(i),i}},{key:"addEmoji",value:function(e){var t=this,i=this._data.emojis[e];if(!this.isEmojiNeeded(i))return!1;var n=new $(i);if(this._emojis[e]=n,n.native&&(this._nativeEmojis[n.native]=n),n._skins)for(var o in n._skins){var r=n._skins[o];r.native&&(this._nativeEmojis[r.native]=r)}return n.emoticons&&n.emoticons.forEach((function(i){t._emoticons[i]||(t._emoticons[i]=e)})),n}},{key:"isCategoryNeeded",value:function(e){var t=!this._include||!this._include.length||this._include.indexOf(e)>-1,i=!(!this._exclude||!this._exclude.length)&&this._exclude.indexOf(e)>-1;return!(!t||i)}},{key:"isEmojiNeeded",value:function(e){return!this._emojisFilter||this._emojisFilter(e)}}]),e}(),$=function(){function e(t){if(E(this,e),this._data=Object.assign({},t),this._skins=null,this._data.skin_variations)for(var i in this._skins=[],T){var n=T[i],o=this._data.skin_variations[n],r=Object.assign({},t);for(var s in o)r[s]=o[s];delete r.skin_variations,r.skin_tone=parseInt(i)+1,this._skins.push(new e(r))}for(var a in this._sanitized=N(this._data),this._sanitized)this[a]=this._sanitized[a];this.short_names=this._data.short_names,this.short_name=this._data.short_names[0],Object.freeze(this)}return x(e,[{key:"getSkin",value:function(e){return e&&"native"!=e&&this._skins?this._skins[e-1]:this}},{key:"getPosition",value:function(){var e=+(100/60*this._data.sheet_x).toFixed(2),t=+(100/60*this._data.sheet_y).toFixed(2);return"".concat(e,"% ").concat(t,"%")}},{key:"ariaLabel",value:function(){return[this.native].concat(this.short_names).filter(Boolean).join(", ")}}]),e}(),R=function(){function e(t,i,n,o,r,s,a){E(this,e),this._emoji=t,this._native=o,this._skin=i,this._set=n,this._fallback=r,this.canRender=this._canRender(),this.cssClass=this._cssClass(),this.cssStyle=this._cssStyle(a),this.content=this._content(),this.title=!0===s?t.short_name:null,this.ariaLabel=t.ariaLabel(),Object.freeze(this)}return x(e,[{key:"getEmoji",value:function(){return this._emoji.getSkin(this._skin)}},{key:"_canRender",value:function(){return this._isCustom()||this._isNative()||this._hasEmoji()||this._fallback}},{key:"_cssClass",value:function(){return["emoji-set-"+this._set,"emoji-type-"+this._emojiType()]}},{key:"_cssStyle",value:function(e){var t={};return this._isCustom()?t={backgroundImage:"url("+this.getEmoji()._data.imageUrl+")",backgroundSize:"100%",width:e+"px",height:e+"px"}:this._hasEmoji()&&!this._isNative()&&(t={backgroundPosition:this.getEmoji().getPosition()}),e&&(t=this._isNative()?Object.assign(t,{fontSize:Math.round(.95*e*10)/10+"px"}):Object.assign(t,{width:e+"px",height:e+"px"})),t}},{key:"_content",value:function(){return this._isCustom()?"":this._isNative()?this.getEmoji().native:this._hasEmoji()?"":this._fallback?this._fallback(this.getEmoji()):null}},{key:"_isNative",value:function(){return this._native}},{key:"_isCustom",value:function(){return this.getEmoji().custom}},{key:"_hasEmoji",value:function(){if(!this.getEmoji()._data)return!1;var e=this.getEmoji()._data["has_img_"+this._set];return void 0===e||e}},{key:"_emojiType",value:function(){return this._isCustom()?"custom":this._isNative()?"native":this._hasEmoji()?"image":"fallback"}}]),e}();function N(e){var t=e.name,i=e.short_names,n=e.skin_tone,o=e.skin_variations,r=e.emoticons,s=e.unified,a=e.custom,c=e.imageUrl,u=e.id||i[0],l=":".concat(u,":");return a?{id:u,name:t,colons:l,emoticons:r,custom:a,imageUrl:c}:(n&&(l+=":skin-tone-".concat(n,":")),{id:u,name:t,colons:l,emoticons:r,unified:s.toLowerCase(),skin:n||(o?1:null),native:P(s)})}function D(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}var B={native:{type:Boolean,default:!1},tooltip:{type:Boolean,default:!1},fallback:{type:Function},skin:{type:Number,default:1},set:{type:String,default:"apple"},emoji:{type:[String,Object],required:!0},size:{type:Number,default:null},tag:{type:String,default:"span"}},H={perLine:{type:Number,default:9},maxSearchResults:{type:Number,default:75},emojiSize:{type:Number,default:24},title:{type:String,default:"Emoji Mart™"},emoji:{type:String,default:"department_store"},color:{type:String,default:"#ae65c5"},set:{type:String,default:"apple"},skin:{type:Number,default:null},defaultSkin:{type:Number,default:1},native:{type:Boolean,default:!1},emojiTooltip:{type:Boolean,default:!1},autoFocus:{type:Boolean,default:!1},i18n:{type:Object,default:function(){return{}}},showPreview:{type:Boolean,default:!0},showSearch:{type:Boolean,default:!0},showCategories:{type:Boolean,default:!0},showSkinTones:{type:Boolean,default:!0},infiniteScroll:{type:Boolean,default:!0},pickerStyles:{type:Object,default:function(){return{}}}};function U(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function V(e){for(var t=1;t0},emojiObjects:function(){var e=this;return this.emojis.map((function(t){return{emojiObject:t,emojiView:new R(t,e.emojiProps.skin,e.emojiProps.set,e.emojiProps.native,e.emojiProps.fallback,e.emojiProps.emojiTooltip,e.emojiProps.emojiSize)}}))}},components:{Emoji:W}},(function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible&&(e.isSearch||e.hasResults)?i("section",{class:{"emoji-mart-category":!0,"emoji-mart-no-results":!e.hasResults},attrs:{"aria-label":e.i18n.categories[e.id]}},[i("div",{staticClass:"emoji-mart-category-label"},[i("h3",{staticClass:"emoji-mart-category-label"},[e._v(e._s(e.i18n.categories[e.id]))])]),e._v(" "),e._l(e.emojiObjects,(function(t){var n=t.emojiObject,o=t.emojiView;return[o.canRender?i("button",{key:n.id,staticClass:"emoji-mart-emoji",class:e.activeClass(n),attrs:{"aria-label":o.ariaLabel,role:"option","aria-selected":"false","aria-posinset":"1","aria-setsize":"1812",type:"button","data-title":n.short_name,title:o.title},on:{mouseenter:function(t){e.emojiProps.onEnter(o.getEmoji())},mouseleave:function(t){e.emojiProps.onLeave(o.getEmoji())},click:function(t){e.emojiProps.onClick(o.getEmoji())}}},[i("span",{class:o.cssClass,style:o.cssStyle},[e._v(e._s(o.content))])]):e._e()]})),e._v(" "),e.hasResults?e._e():i("div",[i("emoji",{attrs:{data:e.data,emoji:"sleuth_or_spy",native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}}),e._v(" "),i("div",{staticClass:"emoji-mart-no-results-label"},[e._v(e._s(e.i18n.notfound))])],1)],2):e._e()}),[],!1,null,null,null).exports,X=C({props:{skin:{type:Number,required:!0}},data:function(){return{opened:!1}},methods:{onClick:function(e){this.opened&&e!=this.skin&&this.$emit("change",e),this.opened=!this.opened}}},(function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:{"emoji-mart-skin-swatches":!0,"emoji-mart-skin-swatches-opened":e.opened}},e._l(6,(function(t){return i("span",{key:t,class:{"emoji-mart-skin-swatch":!0,"emoji-mart-skin-swatch-selected":e.skin==t}},[i("span",{class:"emoji-mart-skin emoji-mart-skin-tone-"+t,on:{click:function(i){return e.onClick(t)}}})])})),0)}),[],!1,null,null,null).exports,Z=C({props:{data:{type:Object,required:!0},title:{type:String,required:!0},emoji:{type:[String,Object]},idleEmoji:{type:[String,Object],required:!0},showSkinTones:{type:Boolean,default:!0},emojiProps:{type:Object,required:!0},skinProps:{type:Object,required:!0},onSkinChange:{type:Function,required:!0}},computed:{emojiData:function(){return this.emoji?this.emoji:{}},emojiShortNames:function(){return this.emojiData.short_names},emojiEmoticons:function(){return this.emojiData.emoticons}},components:{Emoji:W,Skins:X}},(function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-preview"},[e.emoji?[i("div",{staticClass:"emoji-mart-preview-emoji"},[i("emoji",{attrs:{data:e.data,emoji:e.emoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(" "),i("div",{staticClass:"emoji-mart-preview-data"},[i("div",{staticClass:"emoji-mart-preview-name"},[e._v(e._s(e.emoji.name))]),e._v(" "),i("div",{staticClass:"emoji-mart-preview-shortnames"},e._l(e.emojiShortNames,(function(t){return i("span",{key:t,staticClass:"emoji-mart-preview-shortname"},[e._v(":"+e._s(t)+":")])})),0),e._v(" "),i("div",{staticClass:"emoji-mart-preview-emoticons"},e._l(e.emojiEmoticons,(function(t){return i("span",{key:t,staticClass:"emoji-mart-preview-emoticon"},[e._v(e._s(t))])})),0)])]:[i("div",{staticClass:"emoji-mart-preview-emoji"},[i("emoji",{attrs:{data:e.data,emoji:e.idleEmoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(" "),i("div",{staticClass:"emoji-mart-preview-data"},[i("span",{staticClass:"emoji-mart-title-label"},[e._v(e._s(e.title))])]),e._v(" "),e.showSkinTones?i("div",{staticClass:"emoji-mart-preview-skins"},[i("skins",{attrs:{skin:e.skinProps.skin},on:{change:function(t){return e.onSkinChange(t)}}})],1):e._e()]],2)}),[],!1,null,null,null).exports,G=C({props:{data:{type:Object,required:!0},i18n:{type:Object,required:!0},autoFocus:{type:Boolean,default:!1},onSearch:{type:Function,required:!0},onArrowLeft:{type:Function,required:!1},onArrowRight:{type:Function,required:!1},onArrowDown:{type:Function,required:!1},onArrowUp:{type:Function,required:!1},onEnter:{type:Function,required:!1}},data:function(){return{value:""}},computed:{emojiIndex:function(){return this.data}},watch:{value:function(){this.$emit("search",this.value)}},methods:{clear:function(){this.value=""}},mounted:function(){var e=this.$el.querySelector("input");this.autoFocus&&e.focus()}},(function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-search"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],attrs:{type:"text",placeholder:e.i18n.search,role:"textbox","aria-autocomplete":"list","aria-owns":"emoji-mart-list","aria-label":"Search for an emoji","aria-describedby":"emoji-mart-search-description"},domProps:{value:e.value},on:{keydown:[function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:function(t){return e.$emit("arrowLeft",t)}.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"right",39,t.key,["Right","ArrowRight"])||"button"in t&&2!==t.button?null:function(){return e.$emit("arrowRight")}.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?null:function(){return e.$emit("arrowDown")}.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?null:function(t){return e.$emit("arrowUp",t)}.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:function(){return e.$emit("enter")}.apply(null,arguments)}],input:function(t){t.target.composing||(e.value=t.target.value)}}}),e._v(" "),i("span",{staticClass:"hidden",attrs:{id:"emoji-picker-search-description"}},[e._v("Use the left, right, up and down arrow keys to navigate the emoji search\n results.")])])}),[],!1,null,null,null),K=G.exports;function Q(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i0})),this._categories[0].first=!0,Object.freeze(this._categories),this.activeCategory=this._categories[0],this.searchEmojis=null,this.previewEmoji=null,this.previewEmojiCategoryIdx=0,this.previewEmojiIdx=-1}return x(e,[{key:"onScroll",value:function(){for(var e=this._vm.$refs.scroll.scrollTop,t=this.filteredCategories[0],i=0,n=this.filteredCategories.length;ie)break;t=o}this.activeCategory=t}},{key:"allCategories",get:function(){return this._categories}},{key:"filteredCategories",get:function(){return this.searchEmojis?[{id:"search",name:"Search",emojis:this.searchEmojis}]:this._categories.filter((function(e){return e.emojis.length>0}))}},{key:"previewEmojiCategory",get:function(){return this.previewEmojiCategoryIdx>=0?this.filteredCategories[this.previewEmojiCategoryIdx]:null}},{key:"onAnchorClick",value:function(e){var t=this;if(!this.searchEmojis){var i=this.filteredCategories.indexOf(e),n=this._vm.getCategoryComponent(i);this._vm.infiniteScroll?function(){if(n){var i=n.$el.offsetTop;e.first&&(i=0),t._vm.$refs.scroll.scrollTop=i}}():this.activeCategory=this.filteredCategories[i]}}},{key:"onSearch",value:function(e){var t=this._data.search(e,this.maxSearchResults);this.searchEmojis=t,this.previewEmojiCategoryIdx=0,this.previewEmojiIdx=0,this.updatePreviewEmoji()}},{key:"onEmojiEnter",value:function(e){this.previewEmoji=e,this.previewEmojiIdx=-1,this.previewEmojiCategoryIdx=-1}},{key:"onEmojiLeave",value:function(e){this.previewEmoji=null}},{key:"onArrowLeft",value:function(){this.previewEmojiIdx>0?this.previewEmojiIdx-=1:(this.previewEmojiCategoryIdx-=1,this.previewEmojiCategoryIdx<0?this.previewEmojiCategoryIdx=0:this.previewEmojiIdx=this.filteredCategories[this.previewEmojiCategoryIdx].emojis.length-1),this.updatePreviewEmoji()}},{key:"onArrowRight",value:function(){this.previewEmojiIdx=this.filteredCategories.length?this.previewEmojiCategoryIdx=this.filteredCategories.length-1:this.previewEmojiIdx=0),this.updatePreviewEmoji()}},{key:"onArrowDown",value:function(){if(-1==this.previewEmojiIdx)return this.onArrowRight();var e=this.filteredCategories[this.previewEmojiCategoryIdx].emojis.length,t=this._perLine;this.previewEmojiIdx+t>e&&(t=e%this._perLine);for(var i=0;i0?this.filteredCategories[this.previewEmojiCategoryIdx-1].emojis.length%this._perLine:0);for(var t=0;tn+t.scrollTop&&(t.scrollTop+=i.offsetHeight),i&&i.offsetTop { "use strict"; /*! * escape-html * Copyright(c) 2012-2013 TJ Holowaychuk * Copyright(c) 2015 Andreas Lubbe * Copyright(c) 2015 Tiancheng "Timothy" Gu * MIT Licensed */ /** * Module variables. * @private */ var matchHtmlRegExp = /["'&<>]/; /** * Module exports. * @public */ module.exports = escapeHtml; /** * Escape special characters in the given string of html. * * @param {string} string The string to escape for inserting into HTML * @return {string} * @public */ function escapeHtml(string) { var str = '' + string; var match = matchHtmlRegExp.exec(str); if (!match) { return str; } var escape; var html = ''; var index = 0; var lastIndex = 0; for (index = match.index; index < str.length; index++) { switch (str.charCodeAt(index)) { case 34: // " escape = '"'; break; case 38: // & escape = '&'; break; case 39: // ' escape = '''; break; case 60: // < escape = '<'; break; case 62: // > escape = '>'; break; default: continue; } if (lastIndex !== index) { html += str.substring(lastIndex, index); } lastIndex = index + 1; html += escape; } return lastIndex !== index ? html + str.substring(lastIndex, index) : html; } /***/ }), /***/ "./node_modules/extend/index.js": /*!**************************************!*\ !*** ./node_modules/extend/index.js ***! \**************************************/ /***/ ((module) => { "use strict"; var hasOwn = Object.prototype.hasOwnProperty; var toStr = Object.prototype.toString; var defineProperty = Object.defineProperty; var gOPD = Object.getOwnPropertyDescriptor; var isArray = function isArray(arr) { if (typeof Array.isArray === 'function') { return Array.isArray(arr); } return toStr.call(arr) === '[object Array]'; }; var isPlainObject = function isPlainObject(obj) { if (!obj || toStr.call(obj) !== '[object Object]') { return false; } var hasOwnConstructor = hasOwn.call(obj, 'constructor'); var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); // Not own constructor property must be Object if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { return false; } // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. var key; for (key in obj) { /**/ } return typeof key === 'undefined' || hasOwn.call(obj, key); }; // If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target var setProperty = function setProperty(target, options) { if (defineProperty && options.name === '__proto__') { defineProperty(target, options.name, { enumerable: true, configurable: true, value: options.newValue, writable: true }); } else { target[options.name] = options.newValue; } }; // Return undefined instead of __proto__ if '__proto__' is not an own property var getProperty = function getProperty(obj, name) { if (name === '__proto__') { if (!hasOwn.call(obj, name)) { return void 0; } else if (gOPD) { // In early versions of node, obj['__proto__'] is buggy when obj has // __proto__ as an own property. Object.getOwnPropertyDescriptor() works. return gOPD(obj, name).value; } } return obj[name]; }; module.exports = function extend() { var options, name, src, copy, copyIsArray, clone; var target = arguments[0]; var i = 1; var length = arguments.length; var deep = false; // Handle a deep copy situation if (typeof target === 'boolean') { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } if (target == null || (typeof target !== 'object' && typeof target !== 'function')) { target = {}; } for (; i < length; ++i) { options = arguments[i]; // Only deal with non-null/undefined values if (options != null) { // Extend the base object for (name in options) { src = getProperty(target, name); copy = getProperty(options, name); // Prevent never-ending loop if (target !== copy) { // Recurse if we're merging plain objects or arrays if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { if (copyIsArray) { copyIsArray = false; clone = src && isArray(src) ? src : []; } else { clone = src && isPlainObject(src) ? src : {}; } // Never move original objects, clone them setProperty(target, { name: name, newValue: extend(deep, clone, copy) }); // Don't bring in undefined values } else if (typeof copy !== 'undefined') { setProperty(target, { name: name, newValue: copy }); } } } } } // Return the modified object return target; }; /***/ }), /***/ "./node_modules/floating-vue/dist/floating-vue.es.js": /*!***********************************************************!*\ !*** ./node_modules/floating-vue/dist/floating-vue.es.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Dropdown: () => (/* binding */ Dropdown), /* harmony export */ HIDE_EVENT_MAP: () => (/* binding */ HIDE_EVENT_MAP), /* harmony export */ Menu: () => (/* binding */ Menu), /* harmony export */ Popper: () => (/* binding */ Popper), /* harmony export */ PopperContent: () => (/* binding */ PopperContent), /* harmony export */ PopperMethods: () => (/* binding */ PopperMethods), /* harmony export */ PopperWrapper: () => (/* binding */ PopperWrapper), /* harmony export */ SHOW_EVENT_MAP: () => (/* binding */ SHOW_EVENT_MAP), /* harmony export */ ThemeClass: () => (/* binding */ ThemeClass), /* harmony export */ Tooltip: () => (/* binding */ Tooltip), /* harmony export */ TooltipDirective: () => (/* binding */ TooltipDirective), /* harmony export */ VClosePopper: () => (/* binding */ VClosePopper), /* harmony export */ VTooltip: () => (/* binding */ VTooltip), /* harmony export */ createTooltip: () => (/* binding */ createTooltip), /* harmony export */ "default": () => (/* binding */ plugin), /* harmony export */ destroyTooltip: () => (/* binding */ destroyTooltip), /* harmony export */ hideAllPoppers: () => (/* binding */ hideAllPoppers), /* harmony export */ install: () => (/* binding */ install), /* harmony export */ options: () => (/* binding */ options), /* harmony export */ placements: () => (/* binding */ placements) /* harmony export */ }); /* harmony import */ var _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @floating-ui/dom */ "./node_modules/@floating-ui/core/dist/floating-ui.core.esm.js"); /* harmony import */ var _floating_ui_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @floating-ui/dom */ "./node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js"); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); var __defProp = Object.defineProperty; var __defProps = Object.defineProperties; var __getOwnPropDescs = Object.getOwnPropertyDescriptors; var __getOwnPropSymbols = Object.getOwnPropertySymbols; var __hasOwnProp = Object.prototype.hasOwnProperty; var __propIsEnum = Object.prototype.propertyIsEnumerable; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __spreadValues = (a, b) => { for (var prop in b || (b = {})) if (__hasOwnProp.call(b, prop)) __defNormalProp(a, prop, b[prop]); if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b)) { if (__propIsEnum.call(b, prop)) __defNormalProp(a, prop, b[prop]); } return a; }; var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); var __objRest = (source, exclude) => { var target = {}; for (var prop in source) if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0) target[prop] = source[prop]; if (source != null && __getOwnPropSymbols) for (var prop of __getOwnPropSymbols(source)) { if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop)) target[prop] = source[prop]; } return target; }; function assign(to, from) { for (const key in from) { if (Object.prototype.hasOwnProperty.call(from, key)) { if (typeof from[key] === "object" && to[key]) { assign(to[key], from[key]); } else { to[key] = from[key]; } } } } const config = { disabled: false, distance: 5, skidding: 0, container: "body", boundary: void 0, instantMove: false, disposeTimeout: 5e3, popperTriggers: [], strategy: "absolute", preventOverflow: true, flip: true, shift: true, overflowPadding: 0, arrowPadding: 0, arrowOverflow: true, themes: { tooltip: { placement: "top", triggers: ["hover", "focus", "touch"], hideTriggers: (events) => [...events, "click"], delay: { show: 200, hide: 0 }, handleResize: false, html: false, loadingContent: "..." }, dropdown: { placement: "bottom", triggers: ["click"], delay: 0, handleResize: true, autoHide: true }, menu: { $extend: "dropdown", triggers: ["hover", "focus"], popperTriggers: ["hover", "focus"], delay: { show: 0, hide: 400 } } } }; function getDefaultConfig(theme, key) { let themeConfig = config.themes[theme] || {}; let value; do { value = themeConfig[key]; if (typeof value === "undefined") { if (themeConfig.$extend) { themeConfig = config.themes[themeConfig.$extend] || {}; } else { themeConfig = null; value = config[key]; } } else { themeConfig = null; } } while (themeConfig); return value; } function getThemeClasses(theme) { const result = [theme]; let themeConfig = config.themes[theme] || {}; do { if (themeConfig.$extend && !themeConfig.$resetCss) { result.push(themeConfig.$extend); themeConfig = config.themes[themeConfig.$extend] || {}; } else { themeConfig = null; } } while (themeConfig); return result.map((c) => `v-popper--theme-${c}`); } function getAllParentThemes(theme) { const result = [theme]; let themeConfig = config.themes[theme] || {}; do { if (themeConfig.$extend) { result.push(themeConfig.$extend); themeConfig = config.themes[themeConfig.$extend] || {}; } else { themeConfig = null; } } while (themeConfig); return result; } var vueResize = ""; let supportsPassive = false; if (typeof window !== "undefined") { supportsPassive = false; try { const opts = Object.defineProperty({}, "passive", { get() { supportsPassive = true; } }); window.addEventListener("test", null, opts); } catch (e) { } } let isIOS = false; if (typeof window !== "undefined" && typeof navigator !== "undefined") { isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; } const placements = ["auto", "top", "bottom", "left", "right"].reduce((acc, base) => acc.concat([ base, `${base}-start`, `${base}-end` ]), []); const SHOW_EVENT_MAP = { hover: "mouseenter", focus: "focus", click: "click", touch: "touchstart" }; const HIDE_EVENT_MAP = { hover: "mouseleave", focus: "blur", click: "click", touch: "touchend" }; function removeFromArray(array, item) { const index = array.indexOf(item); if (index !== -1) { array.splice(index, 1); } } function nextFrame() { return new Promise((resolve) => requestAnimationFrame(() => { requestAnimationFrame(resolve); })); } const shownPoppers = []; let hidingPopper = null; const shownPoppersByTheme = {}; function getShownPoppersByTheme(theme) { let list = shownPoppersByTheme[theme]; if (!list) { list = shownPoppersByTheme[theme] = []; } return list; } let Element = function() { }; if (typeof window !== "undefined") { Element = window.Element; } function defaultPropFactory(prop) { return function() { const props = this.$props; return getDefaultConfig(props.theme, prop); }; } const PROVIDE_KEY = "__floating-vue__popper"; var PrivatePopper = () => ({ name: "VPopper", props: { theme: { type: String, required: true }, targetNodes: { type: Function, required: true }, referenceNode: { type: Function, required: true }, popperNode: { type: Function, required: true }, shown: { type: Boolean, default: false }, showGroup: { type: String, default: null }, ariaId: { default: null }, disabled: { type: Boolean, default: defaultPropFactory("disabled") }, positioningDisabled: { type: Boolean, default: defaultPropFactory("positioningDisabled") }, placement: { type: String, default: defaultPropFactory("placement"), validator: (value) => placements.includes(value) }, delay: { type: [String, Number, Object], default: defaultPropFactory("delay") }, distance: { type: [Number, String], default: defaultPropFactory("distance") }, skidding: { type: [Number, String], default: defaultPropFactory("skidding") }, triggers: { type: Array, default: defaultPropFactory("triggers") }, showTriggers: { type: [Array, Function], default: defaultPropFactory("showTriggers") }, hideTriggers: { type: [Array, Function], default: defaultPropFactory("hideTriggers") }, popperTriggers: { type: Array, default: defaultPropFactory("popperTriggers") }, popperShowTriggers: { type: [Array, Function], default: defaultPropFactory("popperShowTriggers") }, popperHideTriggers: { type: [Array, Function], default: defaultPropFactory("popperHideTriggers") }, container: { type: [String, Object, Element, Boolean], default: defaultPropFactory("container") }, boundary: { type: [String, Element], default: defaultPropFactory("boundary") }, strategy: { type: String, validator: (value) => ["absolute", "fixed"].includes(value), default: defaultPropFactory("strategy") }, autoHide: { type: [Boolean, Function], default: defaultPropFactory("autoHide") }, handleResize: { type: Boolean, default: defaultPropFactory("handleResize") }, instantMove: { type: Boolean, default: defaultPropFactory("instantMove") }, eagerMount: { type: Boolean, default: defaultPropFactory("eagerMount") }, popperClass: { type: [String, Array, Object], default: defaultPropFactory("popperClass") }, computeTransformOrigin: { type: Boolean, default: defaultPropFactory("computeTransformOrigin") }, autoMinSize: { type: Boolean, default: defaultPropFactory("autoMinSize") }, autoSize: { type: [Boolean, String], default: defaultPropFactory("autoSize") }, autoMaxSize: { type: Boolean, default: defaultPropFactory("autoMaxSize") }, autoBoundaryMaxSize: { type: Boolean, default: defaultPropFactory("autoBoundaryMaxSize") }, preventOverflow: { type: Boolean, default: defaultPropFactory("preventOverflow") }, overflowPadding: { type: [Number, String], default: defaultPropFactory("overflowPadding") }, arrowPadding: { type: [Number, String], default: defaultPropFactory("arrowPadding") }, arrowOverflow: { type: Boolean, default: defaultPropFactory("arrowOverflow") }, flip: { type: Boolean, default: defaultPropFactory("flip") }, shift: { type: Boolean, default: defaultPropFactory("shift") }, shiftCrossAxis: { type: Boolean, default: defaultPropFactory("shiftCrossAxis") }, noAutoFocus: { type: Boolean, default: defaultPropFactory("noAutoFocus") } }, provide() { return { [PROVIDE_KEY]: { parentPopper: this } }; }, inject: { [PROVIDE_KEY]: { default: null } }, data() { return { isShown: false, isMounted: false, skipTransition: false, classes: { showFrom: false, showTo: false, hideFrom: false, hideTo: true }, result: { x: 0, y: 0, placement: "", strategy: this.strategy, arrow: { x: 0, y: 0, centerOffset: 0 }, transformOrigin: null }, shownChildren: /* @__PURE__ */ new Set(), lastAutoHide: true }; }, computed: { popperId() { return this.ariaId != null ? this.ariaId : this.randomId; }, shouldMountContent() { return this.eagerMount || this.isMounted; }, slotData() { return { popperId: this.popperId, isShown: this.isShown, shouldMountContent: this.shouldMountContent, skipTransition: this.skipTransition, autoHide: typeof this.autoHide === "function" ? this.lastAutoHide : this.autoHide, show: this.show, hide: this.hide, handleResize: this.handleResize, onResize: this.onResize, classes: __spreadProps(__spreadValues({}, this.classes), { popperClass: this.popperClass }), result: this.positioningDisabled ? null : this.result }; }, parentPopper() { var _a; return (_a = this[PROVIDE_KEY]) == null ? void 0 : _a.parentPopper; }, hasPopperShowTriggerHover() { var _a, _b; return ((_a = this.popperTriggers) == null ? void 0 : _a.includes("hover")) || ((_b = this.popperShowTriggers) == null ? void 0 : _b.includes("hover")); } }, watch: __spreadValues(__spreadValues({ shown: "$_autoShowHide", disabled(value) { if (value) { this.dispose(); } else { this.init(); } }, async container() { if (this.isShown) { this.$_ensureTeleport(); await this.$_computePosition(); } } }, [ "triggers", "positioningDisabled" ].reduce((acc, prop) => { acc[prop] = "$_refreshListeners"; return acc; }, {})), [ "placement", "distance", "skidding", "boundary", "strategy", "overflowPadding", "arrowPadding", "preventOverflow", "shift", "shiftCrossAxis", "flip" ].reduce((acc, prop) => { acc[prop] = "$_computePosition"; return acc; }, {})), created() { this.$_isDisposed = true; this.randomId = `popper_${[Math.random(), Date.now()].map((n) => n.toString(36).substring(2, 10)).join("_")}`; if (this.autoMinSize) { console.warn('[floating-vue] `autoMinSize` option is deprecated. Use `autoSize="min"` instead.'); } if (this.autoMaxSize) { console.warn("[floating-vue] `autoMaxSize` option is deprecated. Use `autoBoundaryMaxSize` instead."); } }, mounted() { this.init(); this.$_detachPopperNode(); }, activated() { this.$_autoShowHide(); }, deactivated() { this.hide(); }, beforeDestroy() { this.dispose(); }, methods: { show({ event = null, skipDelay = false, force = false } = {}) { var _a, _b; if (((_a = this.parentPopper) == null ? void 0 : _a.lockedChild) && this.parentPopper.lockedChild !== this) return; this.$_pendingHide = false; if (force || !this.disabled) { if (((_b = this.parentPopper) == null ? void 0 : _b.lockedChild) === this) { this.parentPopper.lockedChild = null; } this.$_scheduleShow(event, skipDelay); this.$emit("show"); this.$_showFrameLocked = true; requestAnimationFrame(() => { this.$_showFrameLocked = false; }); } this.$emit("update:shown", true); }, hide({ event = null, skipDelay = false, skipAiming = false } = {}) { var _a; if (this.$_hideInProgress) return; if (this.shownChildren.size > 0) { this.$_pendingHide = true; return; } if (!skipAiming && this.hasPopperShowTriggerHover && this.$_isAimingPopper()) { if (this.parentPopper) { this.parentPopper.lockedChild = this; clearTimeout(this.parentPopper.lockedChildTimer); this.parentPopper.lockedChildTimer = setTimeout(() => { if (this.parentPopper.lockedChild === this) { this.parentPopper.lockedChild.hide({ skipDelay }); this.parentPopper.lockedChild = null; } }, 1e3); } return; } if (((_a = this.parentPopper) == null ? void 0 : _a.lockedChild) === this) { this.parentPopper.lockedChild = null; } this.$_pendingHide = false; this.$_scheduleHide(event, skipDelay); this.$emit("hide"); this.$emit("update:shown", false); }, init() { if (!this.$_isDisposed) return; this.$_isDisposed = false; this.isMounted = false; this.$_events = []; this.$_preventShow = false; this.$_referenceNode = this.referenceNode(); this.$_targetNodes = this.targetNodes().filter((e) => e.nodeType === e.ELEMENT_NODE); this.$_popperNode = this.popperNode(); this.$_innerNode = this.$_popperNode.querySelector(".v-popper__inner"); this.$_arrowNode = this.$_popperNode.querySelector(".v-popper__arrow-container"); this.$_swapTargetAttrs("title", "data-original-title"); this.$_detachPopperNode(); if (this.triggers.length) { this.$_addEventListeners(); } if (this.shown) { this.show(); } }, dispose() { if (this.$_isDisposed) return; this.$_isDisposed = true; this.$_removeEventListeners(); this.hide({ skipDelay: true }); this.$_detachPopperNode(); this.isMounted = false; this.isShown = false; this.$_updateParentShownChildren(false); this.$_swapTargetAttrs("data-original-title", "title"); this.$emit("dispose"); }, async onResize() { if (this.isShown) { await this.$_computePosition(); this.$emit("resize"); } }, async $_computePosition() { var _a; if (this.$_isDisposed || this.positioningDisabled) return; const options2 = { strategy: this.strategy, middleware: [] }; if (this.distance || this.skidding) { options2.middleware.push((0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.offset)({ mainAxis: this.distance, crossAxis: this.skidding })); } const isPlacementAuto = this.placement.startsWith("auto"); if (isPlacementAuto) { options2.middleware.push((0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.autoPlacement)({ alignment: (_a = this.placement.split("-")[1]) != null ? _a : "" })); } else { options2.placement = this.placement; } if (this.preventOverflow) { if (this.shift) { options2.middleware.push((0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.shift)({ padding: this.overflowPadding, boundary: this.boundary, crossAxis: this.shiftCrossAxis })); } if (!isPlacementAuto && this.flip) { options2.middleware.push((0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.flip)({ padding: this.overflowPadding, boundary: this.boundary })); } } options2.middleware.push((0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.arrow)({ element: this.$_arrowNode, padding: this.arrowPadding })); if (this.arrowOverflow) { options2.middleware.push({ name: "arrowOverflow", fn: ({ placement, rects, middlewareData }) => { let overflow; const { centerOffset } = middlewareData.arrow; if (placement.startsWith("top") || placement.startsWith("bottom")) { overflow = Math.abs(centerOffset) > rects.reference.width / 2; } else { overflow = Math.abs(centerOffset) > rects.reference.height / 2; } return { data: { overflow } }; } }); } if (this.autoMinSize || this.autoSize) { const autoSize = this.autoSize ? this.autoSize : this.autoMinSize ? "min" : null; options2.middleware.push({ name: "autoSize", fn: ({ rects, placement, middlewareData }) => { var _a2; if ((_a2 = middlewareData.autoSize) == null ? void 0 : _a2.skip) { return {}; } let width; let height; if (placement.startsWith("top") || placement.startsWith("bottom")) { width = rects.reference.width; } else { height = rects.reference.height; } this.$_innerNode.style[autoSize === "min" ? "minWidth" : autoSize === "max" ? "maxWidth" : "width"] = width != null ? `${width}px` : null; this.$_innerNode.style[autoSize === "min" ? "minHeight" : autoSize === "max" ? "maxHeight" : "height"] = height != null ? `${height}px` : null; return { data: { skip: true }, reset: { rects: true } }; } }); } if (this.autoMaxSize || this.autoBoundaryMaxSize) { this.$_innerNode.style.maxWidth = null; this.$_innerNode.style.maxHeight = null; options2.middleware.push((0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.size)({ boundary: this.boundary, padding: this.overflowPadding, apply: ({ width, height }) => { this.$_innerNode.style.maxWidth = width != null ? `${width}px` : null; this.$_innerNode.style.maxHeight = height != null ? `${height}px` : null; } })); } const data = await (0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_1__.computePosition)(this.$_referenceNode, this.$_popperNode, options2); Object.assign(this.result, { x: data.x, y: data.y, placement: data.placement, strategy: data.strategy, arrow: __spreadValues(__spreadValues({}, data.middlewareData.arrow), data.middlewareData.arrowOverflow) }); }, $_scheduleShow(event = null, skipDelay = false) { this.$_updateParentShownChildren(true); this.$_hideInProgress = false; clearTimeout(this.$_scheduleTimer); if (hidingPopper && this.instantMove && hidingPopper.instantMove && hidingPopper !== this.parentPopper) { hidingPopper.$_applyHide(true); this.$_applyShow(true); return; } if (skipDelay) { this.$_applyShow(); } else { this.$_scheduleTimer = setTimeout(this.$_applyShow.bind(this), this.$_computeDelay("show")); } }, $_scheduleHide(event = null, skipDelay = false) { if (this.shownChildren.size > 0) { this.$_pendingHide = true; return; } this.$_updateParentShownChildren(false); this.$_hideInProgress = true; clearTimeout(this.$_scheduleTimer); if (this.isShown) { hidingPopper = this; } if (skipDelay) { this.$_applyHide(); } else { this.$_scheduleTimer = setTimeout(this.$_applyHide.bind(this), this.$_computeDelay("hide")); } }, $_computeDelay(type) { const delay = this.delay; return parseInt(delay && delay[type] || delay || 0); }, async $_applyShow(skipTransition = false) { clearTimeout(this.$_disposeTimer); clearTimeout(this.$_scheduleTimer); this.skipTransition = skipTransition; if (this.isShown) { return; } this.$_ensureTeleport(); await nextFrame(); await this.$_computePosition(); await this.$_applyShowEffect(); if (!this.positioningDisabled) { this.$_registerEventListeners([ ...(0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_1__.getScrollParents)(this.$_referenceNode), ...(0,_floating_ui_dom__WEBPACK_IMPORTED_MODULE_1__.getScrollParents)(this.$_popperNode) ], "scroll", () => { this.$_computePosition(); }); } }, async $_applyShowEffect() { if (this.$_hideInProgress) return; if (this.computeTransformOrigin) { const bounds = this.$_referenceNode.getBoundingClientRect(); const popperWrapper = this.$_popperNode.querySelector(".v-popper__wrapper"); const parentBounds = popperWrapper.parentNode.getBoundingClientRect(); const x = bounds.x + bounds.width / 2 - (parentBounds.left + popperWrapper.offsetLeft); const y = bounds.y + bounds.height / 2 - (parentBounds.top + popperWrapper.offsetTop); this.result.transformOrigin = `${x}px ${y}px`; } this.isShown = true; this.$_applyAttrsToTarget({ "aria-describedby": this.popperId, "data-popper-shown": "" }); const showGroup = this.showGroup; if (showGroup) { let popover; for (let i = 0; i < shownPoppers.length; i++) { popover = shownPoppers[i]; if (popover.showGroup !== showGroup) { popover.hide(); popover.$emit("close-group"); } } } shownPoppers.push(this); document.body.classList.add("v-popper--some-open"); for (const theme of getAllParentThemes(this.theme)) { getShownPoppersByTheme(theme).push(this); document.body.classList.add(`v-popper--some-open--${theme}`); } this.$emit("apply-show"); this.classes.showFrom = true; this.classes.showTo = false; this.classes.hideFrom = false; this.classes.hideTo = false; await nextFrame(); this.classes.showFrom = false; this.classes.showTo = true; if (!this.noAutoFocus) this.$_popperNode.focus(); }, async $_applyHide(skipTransition = false) { if (this.shownChildren.size > 0) { this.$_pendingHide = true; this.$_hideInProgress = false; return; } clearTimeout(this.$_scheduleTimer); if (!this.isShown) { return; } this.skipTransition = skipTransition; removeFromArray(shownPoppers, this); if (shownPoppers.length === 0) { document.body.classList.remove("v-popper--some-open"); } for (const theme of getAllParentThemes(this.theme)) { const list = getShownPoppersByTheme(theme); removeFromArray(list, this); if (list.length === 0) { document.body.classList.remove(`v-popper--some-open--${theme}`); } } if (hidingPopper === this) { hidingPopper = null; } this.isShown = false; this.$_applyAttrsToTarget({ "aria-describedby": void 0, "data-popper-shown": void 0 }); clearTimeout(this.$_disposeTimer); const disposeTime = getDefaultConfig(this.theme, "disposeTimeout"); if (disposeTime !== null) { this.$_disposeTimer = setTimeout(() => { if (this.$_popperNode) { this.$_detachPopperNode(); this.isMounted = false; } }, disposeTime); } this.$_removeEventListeners("scroll"); this.$emit("apply-hide"); this.classes.showFrom = false; this.classes.showTo = false; this.classes.hideFrom = true; this.classes.hideTo = false; await nextFrame(); this.classes.hideFrom = false; this.classes.hideTo = true; }, $_autoShowHide() { if (this.shown) { this.show(); } else { this.hide(); } }, $_ensureTeleport() { if (this.$_isDisposed) return; let container = this.container; if (typeof container === "string") { container = window.document.querySelector(container); } else if (container === false) { container = this.$_targetNodes[0].parentNode; } if (!container) { throw new Error("No container for popover: " + this.container); } container.appendChild(this.$_popperNode); this.isMounted = true; }, $_addEventListeners() { const handleShow = (event) => { if (this.isShown && !this.$_hideInProgress) { return; } event.usedByTooltip = true; !this.$_preventShow && this.show({ event }); }; this.$_registerTriggerListeners(this.$_targetNodes, SHOW_EVENT_MAP, this.triggers, this.showTriggers, handleShow); this.$_registerTriggerListeners([this.$_popperNode], SHOW_EVENT_MAP, this.popperTriggers, this.popperShowTriggers, handleShow); const handleHide = (skipAiming) => (event) => { if (event.usedByTooltip) { return; } this.hide({ event, skipAiming }); }; this.$_registerTriggerListeners(this.$_targetNodes, HIDE_EVENT_MAP, this.triggers, this.hideTriggers, handleHide(false)); this.$_registerTriggerListeners([this.$_popperNode], HIDE_EVENT_MAP, this.popperTriggers, this.popperHideTriggers, handleHide(true)); }, $_registerEventListeners(targetNodes, eventType, handler) { this.$_events.push({ targetNodes, eventType, handler }); targetNodes.forEach((node) => node.addEventListener(eventType, handler, supportsPassive ? { passive: true } : void 0)); }, $_registerTriggerListeners(targetNodes, eventMap, commonTriggers, customTrigger, handler) { let triggers = commonTriggers; if (customTrigger != null) { triggers = typeof customTrigger === "function" ? customTrigger(triggers) : customTrigger; } triggers.forEach((trigger) => { const eventType = eventMap[trigger]; if (eventType) { this.$_registerEventListeners(targetNodes, eventType, handler); } }); }, $_removeEventListeners(filterEventType) { const newList = []; this.$_events.forEach((listener) => { const { targetNodes, eventType, handler } = listener; if (!filterEventType || filterEventType === eventType) { targetNodes.forEach((node) => node.removeEventListener(eventType, handler)); } else { newList.push(listener); } }); this.$_events = newList; }, $_refreshListeners() { if (!this.$_isDisposed) { this.$_removeEventListeners(); this.$_addEventListeners(); } }, $_handleGlobalClose(event, touch = false) { if (this.$_showFrameLocked) return; this.hide({ event }); if (event.closePopover) { this.$emit("close-directive"); } else { this.$emit("auto-hide"); } if (touch) { this.$_preventShow = true; setTimeout(() => { this.$_preventShow = false; }, 300); } }, $_detachPopperNode() { this.$_popperNode.parentNode && this.$_popperNode.parentNode.removeChild(this.$_popperNode); }, $_swapTargetAttrs(attrFrom, attrTo) { for (const el of this.$_targetNodes) { const value = el.getAttribute(attrFrom); if (value) { el.removeAttribute(attrFrom); el.setAttribute(attrTo, value); } } }, $_applyAttrsToTarget(attrs) { for (const el of this.$_targetNodes) { for (const n in attrs) { const value = attrs[n]; if (value == null) { el.removeAttribute(n); } else { el.setAttribute(n, value); } } } }, $_updateParentShownChildren(value) { let parent = this.parentPopper; while (parent) { if (value) { parent.shownChildren.add(this.randomId); } else { parent.shownChildren.delete(this.randomId); if (parent.$_pendingHide) { parent.hide(); } } parent = parent.parentPopper; } }, $_isAimingPopper() { const referenceBounds = this.$el.getBoundingClientRect(); if (mouseX >= referenceBounds.left && mouseX <= referenceBounds.right && mouseY >= referenceBounds.top && mouseY <= referenceBounds.bottom) { const popperBounds = this.$_popperNode.getBoundingClientRect(); const vectorX = mouseX - mousePreviousX; const vectorY = mouseY - mousePreviousY; const distance = popperBounds.left + popperBounds.width / 2 - mousePreviousX + (popperBounds.top + popperBounds.height / 2) - mousePreviousY; const newVectorLength = distance + popperBounds.width + popperBounds.height; const edgeX = mousePreviousX + vectorX * newVectorLength; const edgeY = mousePreviousY + vectorY * newVectorLength; return lineIntersectsLine(mousePreviousX, mousePreviousY, edgeX, edgeY, popperBounds.left, popperBounds.top, popperBounds.left, popperBounds.bottom) || lineIntersectsLine(mousePreviousX, mousePreviousY, edgeX, edgeY, popperBounds.left, popperBounds.top, popperBounds.right, popperBounds.top) || lineIntersectsLine(mousePreviousX, mousePreviousY, edgeX, edgeY, popperBounds.right, popperBounds.top, popperBounds.right, popperBounds.bottom) || lineIntersectsLine(mousePreviousX, mousePreviousY, edgeX, edgeY, popperBounds.left, popperBounds.bottom, popperBounds.right, popperBounds.bottom); } return false; } }, render() { return this.$scopedSlots.default(this.slotData)[0]; } }); if (typeof document !== "undefined" && typeof window !== "undefined") { if (isIOS) { document.addEventListener("touchstart", handleGlobalMousedown, supportsPassive ? { passive: true, capture: true } : true); document.addEventListener("touchend", handleGlobalTouchend, supportsPassive ? { passive: true, capture: true } : true); } else { window.addEventListener("mousedown", handleGlobalMousedown, true); window.addEventListener("click", handleGlobalClick, true); } window.addEventListener("resize", computePositionAllShownPoppers); } function handleGlobalMousedown(event) { for (let i = 0; i < shownPoppers.length; i++) { const popper = shownPoppers[i]; try { const popperContent = popper.popperNode(); popper.$_mouseDownContains = popperContent.contains(event.target); } catch (e) { } } } function handleGlobalClick(event) { handleGlobalClose(event); } function handleGlobalTouchend(event) { handleGlobalClose(event, true); } function handleGlobalClose(event, touch = false) { const preventClose = {}; for (let i = shownPoppers.length - 1; i >= 0; i--) { const popper = shownPoppers[i]; try { const contains = popper.$_containsGlobalTarget = isContainingEventTarget(popper, event); popper.$_pendingHide = false; requestAnimationFrame(() => { popper.$_pendingHide = false; if (preventClose[popper.randomId]) return; if (shouldAutoHide(popper, contains, event)) { popper.$_handleGlobalClose(event, touch); if (!event.closeAllPopover && event.closePopover && contains) { let parent2 = popper.parentPopper; while (parent2) { preventClose[parent2.randomId] = true; parent2 = parent2.parentPopper; } return; } let parent = popper.parentPopper; while (parent) { if (shouldAutoHide(parent, parent.$_containsGlobalTarget, event)) { parent.$_handleGlobalClose(event, touch); } else { break; } parent = parent.parentPopper; } } }); } catch (e) { } } } function isContainingEventTarget(popper, event) { const popperContent = popper.popperNode(); return popper.$_mouseDownContains || popperContent.contains(event.target); } function shouldAutoHide(popper, contains, event) { return event.closeAllPopover || event.closePopover && contains || getAutoHideResult(popper, event) && !contains; } function getAutoHideResult(popper, event) { if (typeof popper.autoHide === "function") { const result = popper.autoHide(event); popper.lastAutoHide = result; return result; } return popper.autoHide; } function computePositionAllShownPoppers(event) { for (let i = 0; i < shownPoppers.length; i++) { const popper = shownPoppers[i]; popper.$_computePosition(event); } } function hideAllPoppers() { for (let i = 0; i < shownPoppers.length; i++) { const popper = shownPoppers[i]; popper.hide(); } } let mousePreviousX = 0; let mousePreviousY = 0; let mouseX = 0; let mouseY = 0; if (typeof window !== "undefined") { window.addEventListener("mousemove", (event) => { mousePreviousX = mouseX; mousePreviousY = mouseY; mouseX = event.clientX; mouseY = event.clientY; }, supportsPassive ? { passive: true } : void 0); } function lineIntersectsLine(x1, y1, x2, y2, x3, y3, x4, y4) { const uA = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1)); const uB = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1)); return uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1; } function getInternetExplorerVersion() { var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > 0) { return parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)), 10); } var trident = ua.indexOf("Trident/"); if (trident > 0) { var rv = ua.indexOf("rv:"); return parseInt(ua.substring(rv + 3, ua.indexOf(".", rv)), 10); } var edge = ua.indexOf("Edge/"); if (edge > 0) { return parseInt(ua.substring(edge + 5, ua.indexOf(".", edge)), 10); } return -1; } var isIE; function initCompat() { if (!initCompat.init) { initCompat.init = true; isIE = getInternetExplorerVersion() !== -1; } } var script = { name: "ResizeObserver", props: { emitOnMount: { type: Boolean, default: false }, ignoreWidth: { type: Boolean, default: false }, ignoreHeight: { type: Boolean, default: false } }, mounted: function mounted() { var _this = this; initCompat(); this.$nextTick(function() { _this._w = _this.$el.offsetWidth; _this._h = _this.$el.offsetHeight; if (_this.emitOnMount) { _this.emitSize(); } }); var object = document.createElement("object"); this._resizeObject = object; object.setAttribute("aria-hidden", "true"); object.setAttribute("tabindex", -1); object.onload = this.addResizeHandlers; object.type = "text/html"; if (isIE) { this.$el.appendChild(object); } object.data = "about:blank"; if (!isIE) { this.$el.appendChild(object); } }, beforeDestroy: function beforeDestroy() { this.removeResizeHandlers(); }, methods: { compareAndNotify: function compareAndNotify() { if (!this.ignoreWidth && this._w !== this.$el.offsetWidth || !this.ignoreHeight && this._h !== this.$el.offsetHeight) { this._w = this.$el.offsetWidth; this._h = this.$el.offsetHeight; this.emitSize(); } }, emitSize: function emitSize() { this.$emit("notify", { width: this._w, height: this._h }); }, addResizeHandlers: function addResizeHandlers() { this._resizeObject.contentDocument.defaultView.addEventListener("resize", this.compareAndNotify); this.compareAndNotify(); }, removeResizeHandlers: function removeResizeHandlers() { if (this._resizeObject && this._resizeObject.onload) { if (!isIE && this._resizeObject.contentDocument) { this._resizeObject.contentDocument.defaultView.removeEventListener("resize", this.compareAndNotify); } this.$el.removeChild(this._resizeObject); this._resizeObject.onload = null; this._resizeObject = null; } } } }; function normalizeComponent$1(template, style, script2, scopeId, isFunctionalTemplate, moduleIdentifier, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) { if (typeof shadowMode !== "boolean") { createInjectorSSR = createInjector; createInjector = shadowMode; shadowMode = false; } var options2 = typeof script2 === "function" ? script2.options : script2; if (template && template.render) { options2.render = template.render; options2.staticRenderFns = template.staticRenderFns; options2._compiled = true; if (isFunctionalTemplate) { options2.functional = true; } } if (scopeId) { options2._scopeId = scopeId; } var hook; if (moduleIdentifier) { hook = function hook2(context) { context = context || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext; if (!context && typeof __VUE_SSR_CONTEXT__ !== "undefined") { context = __VUE_SSR_CONTEXT__; } if (style) { style.call(this, createInjectorSSR(context)); } if (context && context._registeredComponents) { context._registeredComponents.add(moduleIdentifier); } }; options2._ssrRegister = hook; } else if (style) { hook = shadowMode ? function(context) { style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot)); } : function(context) { style.call(this, createInjector(context)); }; } if (hook) { if (options2.functional) { var originalRender = options2.render; options2.render = function renderWithStyleInjection(h, context) { hook.call(context); return originalRender(h, context); }; } else { var existing = options2.beforeCreate; options2.beforeCreate = existing ? [].concat(existing, hook) : [hook]; } } return script2; } var __vue_script__ = script; var __vue_render__ = function __vue_render__2() { var _vm = this; var _h = _vm.$createElement; var _c = _vm._self._c || _h; return _c("div", { staticClass: "resize-observer", attrs: { tabindex: "-1" } }); }; var __vue_staticRenderFns__ = []; __vue_render__._withStripped = true; var __vue_inject_styles__ = void 0; var __vue_scope_id__ = "data-v-8859cc6c"; var __vue_module_identifier__ = void 0; var __vue_is_functional_template__ = false; var __vue_component__ = /* @__PURE__ */ normalizeComponent$1({ render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, __vue_script__, __vue_scope_id__, __vue_is_functional_template__, __vue_module_identifier__, false, void 0, void 0, void 0); function install$1(Vue2) { Vue2.component("resize-observer", __vue_component__); Vue2.component("ResizeObserver", __vue_component__); } var plugin$1 = { version: "1.0.1", install: install$1 }; var GlobalVue$1 = null; if (typeof window !== "undefined") { GlobalVue$1 = window.Vue; } else if (typeof __webpack_require__.g !== "undefined") { GlobalVue$1 = __webpack_require__.g.Vue; } if (GlobalVue$1) { GlobalVue$1.use(plugin$1); } var PrivateThemeClass = { computed: { themeClass() { return getThemeClasses(this.theme); } } }; var __vue2_script$5 = { name: "VPopperContent", components: { ResizeObserver: __vue_component__ }, mixins: [ PrivateThemeClass ], props: { popperId: String, theme: String, shown: Boolean, mounted: Boolean, skipTransition: Boolean, autoHide: Boolean, handleResize: Boolean, classes: Object, result: Object }, methods: { toPx(value) { if (value != null && !isNaN(value)) { return `${value}px`; } return null; } } }; var render$2 = function() { var _vm = this; var _h = _vm.$createElement; var _c = _vm._self._c || _h; return _c("div", { ref: "popover", staticClass: "v-popper__popper", class: [ _vm.themeClass, _vm.classes.popperClass, { "v-popper__popper--shown": _vm.shown, "v-popper__popper--hidden": !_vm.shown, "v-popper__popper--show-from": _vm.classes.showFrom, "v-popper__popper--show-to": _vm.classes.showTo, "v-popper__popper--hide-from": _vm.classes.hideFrom, "v-popper__popper--hide-to": _vm.classes.hideTo, "v-popper__popper--skip-transition": _vm.skipTransition, "v-popper__popper--arrow-overflow": _vm.result && _vm.result.arrow.overflow, "v-popper__popper--no-positioning": !_vm.result } ], style: _vm.result ? { position: _vm.result.strategy, transform: "translate3d(" + Math.round(_vm.result.x) + "px," + Math.round(_vm.result.y) + "px,0)" } : void 0, attrs: { "id": _vm.popperId, "aria-hidden": _vm.shown ? "false" : "true", "tabindex": _vm.autoHide ? 0 : void 0, "data-popper-placement": _vm.result ? _vm.result.placement : void 0 }, on: { "keyup": function($event) { if (!$event.type.indexOf("key") && _vm._k($event.keyCode, "esc", 27, $event.key, ["Esc", "Escape"])) { return null; } _vm.autoHide && _vm.$emit("hide"); } } }, [_c("div", { staticClass: "v-popper__backdrop", on: { "click": function($event) { _vm.autoHide && _vm.$emit("hide"); } } }), _c("div", { staticClass: "v-popper__wrapper", style: _vm.result ? { transformOrigin: _vm.result.transformOrigin } : void 0 }, [_c("div", { ref: "inner", staticClass: "v-popper__inner" }, [_vm.mounted ? [_c("div", [_vm._t("default")], 2), _vm.handleResize ? _c("ResizeObserver", { on: { "notify": function($event) { return _vm.$emit("resize", $event); } } }) : _vm._e()] : _vm._e()], 2), _c("div", { ref: "arrow", staticClass: "v-popper__arrow-container", style: _vm.result ? { left: _vm.toPx(_vm.result.arrow.x), top: _vm.toPx(_vm.result.arrow.y) } : void 0 }, [_c("div", { staticClass: "v-popper__arrow-outer" }), _c("div", { staticClass: "v-popper__arrow-inner" })])])]); }; var staticRenderFns$2 = []; var PopperContent_vue_vue_type_style_index_0_lang = ""; function normalizeComponent(scriptExports, render2, staticRenderFns2, functionalTemplate, injectStyles, scopeId, moduleIdentifier, shadowMode) { var options2 = typeof scriptExports === "function" ? scriptExports.options : scriptExports; if (render2) { options2.render = render2; options2.staticRenderFns = staticRenderFns2; options2._compiled = true; } if (functionalTemplate) { options2.functional = true; } if (scopeId) { options2._scopeId = "data-v-" + scopeId; } var hook; if (moduleIdentifier) { hook = function(context) { context = context || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext; if (!context && typeof __VUE_SSR_CONTEXT__ !== "undefined") { context = __VUE_SSR_CONTEXT__; } if (injectStyles) { injectStyles.call(this, context); } if (context && context._registeredComponents) { context._registeredComponents.add(moduleIdentifier); } }; options2._ssrRegister = hook; } else if (injectStyles) { hook = shadowMode ? function() { injectStyles.call(this, (options2.functional ? this.parent : this).$root.$options.shadowRoot); } : injectStyles; } if (hook) { if (options2.functional) { options2._injectStyles = hook; var originalRender = options2.render; options2.render = function renderWithStyleInjection(h, context) { hook.call(context); return originalRender(h, context); }; } else { var existing = options2.beforeCreate; options2.beforeCreate = existing ? [].concat(existing, hook) : [hook]; } } return { exports: scriptExports, options: options2 }; } const __cssModules$5 = {}; var __component__$5 = /* @__PURE__ */ normalizeComponent(__vue2_script$5, render$2, staticRenderFns$2, false, __vue2_injectStyles$5, null, null, null); function __vue2_injectStyles$5(context) { for (let o in __cssModules$5) { this[o] = __cssModules$5[o]; } } var PrivatePopperContent = /* @__PURE__ */ function() { return __component__$5.exports; }(); var PrivatePopperMethods = { methods: { show(...args) { return this.$refs.popper.show(...args); }, hide(...args) { return this.$refs.popper.hide(...args); }, dispose(...args) { return this.$refs.popper.dispose(...args); }, onResize(...args) { return this.$refs.popper.onResize(...args); } } }; var __vue2_script$4 = { name: "VPopperWrapper", components: { Popper: PrivatePopper(), PopperContent: PrivatePopperContent }, mixins: [ PrivatePopperMethods, PrivateThemeClass ], inheritAttrs: false, props: { theme: { type: String, default() { return this.$options.vPopperTheme; } } }, methods: { getTargetNodes() { return Array.from(this.$refs.reference.children).filter((node) => node !== this.$refs.popperContent.$el); } } }; var render$1 = function() { var _vm = this; var _h = _vm.$createElement; var _c = _vm._self._c || _h; return _c("Popper", _vm._g(_vm._b({ ref: "popper", attrs: { "theme": _vm.theme, "target-nodes": _vm.getTargetNodes, "reference-node": function() { return _vm.$refs.reference; }, "popper-node": function() { return _vm.$refs.popperContent.$el; } }, scopedSlots: _vm._u([{ key: "default", fn: function(ref) { var popperId = ref.popperId; var isShown = ref.isShown; var shouldMountContent = ref.shouldMountContent; var skipTransition = ref.skipTransition; var autoHide = ref.autoHide; var show = ref.show; var hide = ref.hide; var handleResize = ref.handleResize; var onResize = ref.onResize; var classes = ref.classes; var result = ref.result; return [_c("div", { ref: "reference", staticClass: "v-popper", class: [ _vm.themeClass, { "v-popper--shown": isShown } ] }, [_vm._t("default", null, { "shown": isShown, "show": show, "hide": hide }), _c("PopperContent", { ref: "popperContent", attrs: { "popper-id": popperId, "theme": _vm.theme, "shown": isShown, "mounted": shouldMountContent, "skip-transition": skipTransition, "auto-hide": autoHide, "handle-resize": handleResize, "classes": classes, "result": result }, on: { "hide": hide, "resize": onResize } }, [_vm._t("popper", null, { "shown": isShown, "hide": hide })], 2)], 2)]; } }], null, true) }, "Popper", _vm.$attrs, false), _vm.$listeners)); }; var staticRenderFns$1 = []; const __cssModules$4 = {}; var __component__$4 = /* @__PURE__ */ normalizeComponent(__vue2_script$4, render$1, staticRenderFns$1, false, __vue2_injectStyles$4, null, null, null); function __vue2_injectStyles$4(context) { for (let o in __cssModules$4) { this[o] = __cssModules$4[o]; } } var PrivatePopperWrapper = /* @__PURE__ */ function() { return __component__$4.exports; }(); var __vue2_script$3 = __spreadProps(__spreadValues({}, PrivatePopperWrapper), { name: "VDropdown", vPopperTheme: "dropdown" }); var Dropdown_vue_vue_type_style_index_0_lang = ""; let __vue2_render$2, __vue2_staticRenderFns$2; const __cssModules$3 = {}; var __component__$3 = /* @__PURE__ */ normalizeComponent(__vue2_script$3, __vue2_render$2, __vue2_staticRenderFns$2, false, __vue2_injectStyles$3, null, null, null); function __vue2_injectStyles$3(context) { for (let o in __cssModules$3) { this[o] = __cssModules$3[o]; } } var PrivateDropdown = /* @__PURE__ */ function() { return __component__$3.exports; }(); var __vue2_script$2 = __spreadProps(__spreadValues({}, PrivatePopperWrapper), { name: "VMenu", vPopperTheme: "menu" }); let __vue2_render$1, __vue2_staticRenderFns$1; const __cssModules$2 = {}; var __component__$2 = /* @__PURE__ */ normalizeComponent(__vue2_script$2, __vue2_render$1, __vue2_staticRenderFns$1, false, __vue2_injectStyles$2, null, null, null); function __vue2_injectStyles$2(context) { for (let o in __cssModules$2) { this[o] = __cssModules$2[o]; } } var PrivateMenu = /* @__PURE__ */ function() { return __component__$2.exports; }(); var __vue2_script$1 = __spreadProps(__spreadValues({}, PrivatePopperWrapper), { name: "VTooltip", vPopperTheme: "tooltip" }); var Tooltip_vue_vue_type_style_index_0_lang = ""; let __vue2_render, __vue2_staticRenderFns; const __cssModules$1 = {}; var __component__$1 = /* @__PURE__ */ normalizeComponent(__vue2_script$1, __vue2_render, __vue2_staticRenderFns, false, __vue2_injectStyles$1, null, null, null); function __vue2_injectStyles$1(context) { for (let o in __cssModules$1) { this[o] = __cssModules$1[o]; } } var PrivateTooltip = /* @__PURE__ */ function() { return __component__$1.exports; }(); var __vue2_script = { name: "VTooltipDirective", components: { Popper: PrivatePopper(), PopperContent: PrivatePopperContent }, mixins: [ PrivatePopperMethods ], inheritAttrs: false, props: { theme: { type: String, default: "tooltip" }, html: { type: Boolean, default() { return getDefaultConfig(this.theme, "html"); } }, content: { type: [String, Number, Function], default: null }, loadingContent: { type: String, default() { return getDefaultConfig(this.theme, "loadingContent"); } } }, data() { return { asyncContent: null }; }, computed: { isContentAsync() { return typeof this.content === "function"; }, loading() { return this.isContentAsync && this.asyncContent == null; }, finalContent() { if (this.isContentAsync) { return this.loading ? this.loadingContent : this.asyncContent; } return this.content; } }, watch: { content: { handler() { this.fetchContent(true); }, immediate: true }, async finalContent(value) { await this.$nextTick(); this.$refs.popper.onResize(); } }, created() { this.$_fetchId = 0; }, methods: { fetchContent(force) { if (typeof this.content === "function" && this.$_isShown && (force || !this.$_loading && this.asyncContent == null)) { this.asyncContent = null; this.$_loading = true; const fetchId = ++this.$_fetchId; const result = this.content(this); if (result.then) { result.then((res) => this.onResult(fetchId, res)); } else { this.onResult(fetchId, result); } } }, onResult(fetchId, result) { if (fetchId !== this.$_fetchId) return; this.$_loading = false; this.asyncContent = result; }, onShow() { this.$_isShown = true; this.fetchContent(); }, onHide() { this.$_isShown = false; } } }; var render = function() { var _vm = this; var _h = _vm.$createElement; var _c = _vm._self._c || _h; return _c("Popper", _vm._g(_vm._b({ ref: "popper", attrs: { "theme": _vm.theme, "popper-node": function() { return _vm.$refs.popperContent.$el; } }, on: { "apply-show": _vm.onShow, "apply-hide": _vm.onHide }, scopedSlots: _vm._u([{ key: "default", fn: function(ref) { var popperId = ref.popperId; var isShown = ref.isShown; var shouldMountContent = ref.shouldMountContent; var skipTransition = ref.skipTransition; var autoHide = ref.autoHide; var hide = ref.hide; var handleResize = ref.handleResize; var onResize = ref.onResize; var classes = ref.classes; var result = ref.result; return [_c("PopperContent", { ref: "popperContent", class: { "v-popper--tooltip-loading": _vm.loading }, attrs: { "popper-id": popperId, "theme": _vm.theme, "shown": isShown, "mounted": shouldMountContent, "skip-transition": skipTransition, "auto-hide": autoHide, "handle-resize": handleResize, "classes": classes, "result": result }, on: { "hide": hide, "resize": onResize } }, [_vm.html ? _c("div", { domProps: { "innerHTML": _vm._s(_vm.finalContent) } }) : _c("div", { domProps: { "textContent": _vm._s(_vm.finalContent) } })])]; } }]) }, "Popper", _vm.$attrs, false), _vm.$listeners)); }; var staticRenderFns = []; const __cssModules = {}; var __component__ = /* @__PURE__ */ normalizeComponent(__vue2_script, render, staticRenderFns, false, __vue2_injectStyles, null, null, null); function __vue2_injectStyles(context) { for (let o in __cssModules) { this[o] = __cssModules[o]; } } var PrivateTooltipDirective = /* @__PURE__ */ function() { return __component__.exports; }(); const TARGET_CLASS = "v-popper--has-tooltip"; function getPlacement(options2, modifiers) { let result = options2.placement; if (!result && modifiers) { for (const pos of placements) { if (modifiers[pos]) { result = pos; } } } if (!result) { result = getDefaultConfig(options2.theme || "tooltip", "placement"); } return result; } function getOptions(el, value, modifiers) { let options2; const type = typeof value; if (type === "string") { options2 = { content: value }; } else if (value && type === "object") { options2 = value; } else { options2 = { content: false }; } options2.placement = getPlacement(options2, modifiers); options2.targetNodes = () => [el]; options2.referenceNode = () => el; return options2; } function createTooltip(el, value, modifiers) { const options2 = getOptions(el, value, modifiers); const tooltipApp = el.$_popper = new vue__WEBPACK_IMPORTED_MODULE_2__["default"]({ mixins: [ PrivatePopperMethods ], data() { return { options: options2 }; }, render(h) { const _a = this.options, { theme, html, content, loadingContent } = _a, otherOptions = __objRest(_a, [ "theme", "html", "content", "loadingContent" ]); return h(PrivateTooltipDirective, { props: { theme, html, content, loadingContent }, attrs: otherOptions, ref: "popper" }); }, devtools: { hide: true } }); const mountTarget = document.createElement("div"); document.body.appendChild(mountTarget); tooltipApp.$mount(mountTarget); if (el.classList) { el.classList.add(TARGET_CLASS); } return tooltipApp; } function destroyTooltip(el) { if (el.$_popper) { el.$_popper.$destroy(); delete el.$_popper; delete el.$_popperOldShown; } if (el.classList) { el.classList.remove(TARGET_CLASS); } } function bind(el, { value, oldValue, modifiers }) { const options2 = getOptions(el, value, modifiers); if (!options2.content || getDefaultConfig(options2.theme || "tooltip", "disabled")) { destroyTooltip(el); } else { let tooltipApp; if (el.$_popper) { tooltipApp = el.$_popper; tooltipApp.options = options2; } else { tooltipApp = createTooltip(el, value, modifiers); } if (typeof value.shown !== "undefined" && value.shown !== el.$_popperOldShown) { el.$_popperOldShown = value.shown; value.shown ? tooltipApp.show() : tooltipApp.hide(); } } } var PrivateVTooltip = { bind, update: bind, unbind(el) { destroyTooltip(el); } }; function addListeners(el) { el.addEventListener("click", onClick); el.addEventListener("touchstart", onTouchStart, supportsPassive ? { passive: true } : false); } function removeListeners(el) { el.removeEventListener("click", onClick); el.removeEventListener("touchstart", onTouchStart); el.removeEventListener("touchend", onTouchEnd); el.removeEventListener("touchcancel", onTouchCancel); } function onClick(event) { const el = event.currentTarget; event.closePopover = !el.$_vclosepopover_touch; event.closeAllPopover = el.$_closePopoverModifiers && !!el.$_closePopoverModifiers.all; } function onTouchStart(event) { if (event.changedTouches.length === 1) { const el = event.currentTarget; el.$_vclosepopover_touch = true; const touch = event.changedTouches[0]; el.$_vclosepopover_touchPoint = touch; el.addEventListener("touchend", onTouchEnd); el.addEventListener("touchcancel", onTouchCancel); } } function onTouchEnd(event) { const el = event.currentTarget; el.$_vclosepopover_touch = false; if (event.changedTouches.length === 1) { const touch = event.changedTouches[0]; const firstTouch = el.$_vclosepopover_touchPoint; event.closePopover = Math.abs(touch.screenY - firstTouch.screenY) < 20 && Math.abs(touch.screenX - firstTouch.screenX) < 20; event.closeAllPopover = el.$_closePopoverModifiers && !!el.$_closePopoverModifiers.all; } } function onTouchCancel(event) { const el = event.currentTarget; el.$_vclosepopover_touch = false; } var PrivateVClosePopper = { bind(el, { value, modifiers }) { el.$_closePopoverModifiers = modifiers; if (typeof value === "undefined" || value) { addListeners(el); } }, update(el, { value, oldValue, modifiers }) { el.$_closePopoverModifiers = modifiers; if (value !== oldValue) { if (typeof value === "undefined" || value) { addListeners(el); } else { removeListeners(el); } } }, unbind(el) { removeListeners(el); } }; const options = config; const VTooltip = PrivateVTooltip; const VClosePopper = PrivateVClosePopper; const Dropdown = PrivateDropdown; const Menu = PrivateMenu; const Popper = PrivatePopper; const PopperContent = PrivatePopperContent; const PopperMethods = PrivatePopperMethods; const PopperWrapper = PrivatePopperWrapper; const ThemeClass = PrivateThemeClass; const Tooltip = PrivateTooltip; const TooltipDirective = PrivateTooltipDirective; function install(app, options2 = {}) { if (app.$_vTooltipInstalled) return; app.$_vTooltipInstalled = true; assign(config, options2); app.directive("tooltip", PrivateVTooltip); app.directive("close-popper", PrivateVClosePopper); app.component("v-tooltip", PrivateTooltip); app.component("VTooltip", PrivateTooltip); app.component("v-dropdown", PrivateDropdown); app.component("VDropdown", PrivateDropdown); app.component("v-menu", PrivateMenu); app.component("VMenu", PrivateMenu); } const plugin = { version: "1.0.0-beta.19", install, options: config }; let GlobalVue = null; if (typeof window !== "undefined") { GlobalVue = window.Vue; } else if (typeof __webpack_require__.g !== "undefined") { GlobalVue = __webpack_require__.g.Vue; } if (GlobalVue) { GlobalVue.use(plugin); } /***/ }), /***/ "./node_modules/focus-trap/dist/focus-trap.esm.js": /*!********************************************************!*\ !*** ./node_modules/focus-trap/dist/focus-trap.esm.js ***! \********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createFocusTrap: () => (/* binding */ createFocusTrap) /* harmony export */ }); /* harmony import */ var tabbable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tabbable */ "./node_modules/tabbable/dist/index.esm.js"); /*! * focus-trap 7.5.2 * @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE */ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } var activeFocusTraps = { activateTrap: function activateTrap(trapStack, trap) { if (trapStack.length > 0) { var activeTrap = trapStack[trapStack.length - 1]; if (activeTrap !== trap) { activeTrap.pause(); } } var trapIndex = trapStack.indexOf(trap); if (trapIndex === -1) { trapStack.push(trap); } else { // move this existing trap to the front of the queue trapStack.splice(trapIndex, 1); trapStack.push(trap); } }, deactivateTrap: function deactivateTrap(trapStack, trap) { var trapIndex = trapStack.indexOf(trap); if (trapIndex !== -1) { trapStack.splice(trapIndex, 1); } if (trapStack.length > 0) { trapStack[trapStack.length - 1].unpause(); } } }; var isSelectableInput = function isSelectableInput(node) { return node.tagName && node.tagName.toLowerCase() === 'input' && typeof node.select === 'function'; }; var isEscapeEvent = function isEscapeEvent(e) { return (e === null || e === void 0 ? void 0 : e.key) === 'Escape' || (e === null || e === void 0 ? void 0 : e.key) === 'Esc' || (e === null || e === void 0 ? void 0 : e.keyCode) === 27; }; var isTabEvent = function isTabEvent(e) { return (e === null || e === void 0 ? void 0 : e.key) === 'Tab' || (e === null || e === void 0 ? void 0 : e.keyCode) === 9; }; // checks for TAB by default var isKeyForward = function isKeyForward(e) { return isTabEvent(e) && !e.shiftKey; }; // checks for SHIFT+TAB by default var isKeyBackward = function isKeyBackward(e) { return isTabEvent(e) && e.shiftKey; }; var delay = function delay(fn) { return setTimeout(fn, 0); }; // Array.find/findIndex() are not supported on IE; this replicates enough // of Array.findIndex() for our needs var findIndex = function findIndex(arr, fn) { var idx = -1; arr.every(function (value, i) { if (fn(value)) { idx = i; return false; // break } return true; // next }); return idx; }; /** * Get an option's value when it could be a plain value, or a handler that provides * the value. * @param {*} value Option's value to check. * @param {...*} [params] Any parameters to pass to the handler, if `value` is a function. * @returns {*} The `value`, or the handler's returned value. */ var valueOrHandler = function valueOrHandler(value) { for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { params[_key - 1] = arguments[_key]; } return typeof value === 'function' ? value.apply(void 0, params) : value; }; var getActualTarget = function getActualTarget(event) { // NOTE: If the trap is _inside_ a shadow DOM, event.target will always be the // shadow host. However, event.target.composedPath() will be an array of // nodes "clicked" from inner-most (the actual element inside the shadow) to // outer-most (the host HTML document). If we have access to composedPath(), // then use its first element; otherwise, fall back to event.target (and // this only works for an _open_ shadow DOM; otherwise, // composedPath()[0] === event.target always). return event.target.shadowRoot && typeof event.composedPath === 'function' ? event.composedPath()[0] : event.target; }; // NOTE: this must be _outside_ `createFocusTrap()` to make sure all traps in this // current instance use the same stack if `userOptions.trapStack` isn't specified var internalTrapStack = []; var createFocusTrap = function createFocusTrap(elements, userOptions) { // SSR: a live trap shouldn't be created in this type of environment so this // should be safe code to execute if the `document` option isn't specified var doc = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.document) || document; var trapStack = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.trapStack) || internalTrapStack; var config = _objectSpread2({ returnFocusOnDeactivate: true, escapeDeactivates: true, delayInitialFocus: true, isKeyForward: isKeyForward, isKeyBackward: isKeyBackward }, userOptions); var state = { // containers given to createFocusTrap() // @type {Array} containers: [], // list of objects identifying tabbable nodes in `containers` in the trap // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap // is active, but the trap should never get to a state where there isn't at least one group // with at least one tabbable node in it (that would lead to an error condition that would // result in an error being thrown) // @type {Array<{ // container: HTMLElement, // tabbableNodes: Array, // empty if none // focusableNodes: Array, // empty if none // posTabIndexesFound: boolean, // firstTabbableNode: HTMLElement|undefined, // lastTabbableNode: HTMLElement|undefined, // firstDomTabbableNode: HTMLElement|undefined, // lastDomTabbableNode: HTMLElement|undefined, // nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined // }>} containerGroups: [], // same order/length as `containers` list // references to objects in `containerGroups`, but only those that actually have // tabbable nodes in them // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__ // the same length tabbableGroups: [], nodeFocusedBeforeActivation: null, mostRecentlyFocusedNode: null, active: false, paused: false, // timer ID for when delayInitialFocus is true and initial focus in this trap // has been delayed during activation delayInitialFocusTimer: undefined, // the most recent KeyboardEvent for the configured nav key (typically [SHIFT+]TAB), if any recentNavEvent: undefined }; var trap; // eslint-disable-line prefer-const -- some private functions reference it, and its methods reference private functions, so we must declare here and define later /** * Gets a configuration option value. * @param {Object|undefined} configOverrideOptions If true, and option is defined in this set, * value will be taken from this object. Otherwise, value will be taken from base configuration. * @param {string} optionName Name of the option whose value is sought. * @param {string|undefined} [configOptionName] Name of option to use __instead of__ `optionName` * IIF `configOverrideOptions` is not defined. Otherwise, `optionName` is used. */ var getOption = function getOption(configOverrideOptions, optionName, configOptionName) { return configOverrideOptions && configOverrideOptions[optionName] !== undefined ? configOverrideOptions[optionName] : config[configOptionName || optionName]; }; /** * Finds the index of the container that contains the element. * @param {HTMLElement} element * @param {Event} [event] If available, and `element` isn't directly found in any container, * the event's composed path is used to see if includes any known trap containers in the * case where the element is inside a Shadow DOM. * @returns {number} Index of the container in either `state.containers` or * `state.containerGroups` (the order/length of these lists are the same); -1 * if the element isn't found. */ var findContainerIndex = function findContainerIndex(element, event) { var composedPath = typeof (event === null || event === void 0 ? void 0 : event.composedPath) === 'function' ? event.composedPath() : undefined; // NOTE: search `containerGroups` because it's possible a group contains no tabbable // nodes, but still contains focusable nodes (e.g. if they all have `tabindex=-1`) // and we still need to find the element in there return state.containerGroups.findIndex(function (_ref) { var container = _ref.container, tabbableNodes = _ref.tabbableNodes; return container.contains(element) || ( // fall back to explicit tabbable search which will take into consideration any // web components if the `tabbableOptions.getShadowRoot` option was used for // the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't // look inside web components even if open) composedPath === null || composedPath === void 0 ? void 0 : composedPath.includes(container)) || tabbableNodes.find(function (node) { return node === element; }); }); }; /** * Gets the node for the given option, which is expected to be an option that * can be either a DOM node, a string that is a selector to get a node, `false` * (if a node is explicitly NOT given), or a function that returns any of these * values. * @param {string} optionName * @returns {undefined | false | HTMLElement | SVGElement} Returns * `undefined` if the option is not specified; `false` if the option * resolved to `false` (node explicitly not given); otherwise, the resolved * DOM node. * @throws {Error} If the option is set, not `false`, and is not, or does not * resolve to a node. */ var getNodeForOption = function getNodeForOption(optionName) { var optionValue = config[optionName]; if (typeof optionValue === 'function') { for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { params[_key2 - 1] = arguments[_key2]; } optionValue = optionValue.apply(void 0, params); } if (optionValue === true) { optionValue = undefined; // use default value } if (!optionValue) { if (optionValue === undefined || optionValue === false) { return optionValue; } // else, empty string (invalid), null (invalid), 0 (invalid) throw new Error("`".concat(optionName, "` was specified but was not a node, or did not return a node")); } var node = optionValue; // could be HTMLElement, SVGElement, or non-empty string at this point if (typeof optionValue === 'string') { node = doc.querySelector(optionValue); // resolve to node, or null if fails if (!node) { throw new Error("`".concat(optionName, "` as selector refers to no known node")); } } return node; }; var getInitialFocusNode = function getInitialFocusNode() { var node = getNodeForOption('initialFocus'); // false explicitly indicates we want no initialFocus at all if (node === false) { return false; } if (node === undefined || !(0,tabbable__WEBPACK_IMPORTED_MODULE_0__.isFocusable)(node, config.tabbableOptions)) { // option not specified nor focusable: use fallback options if (findContainerIndex(doc.activeElement) >= 0) { node = doc.activeElement; } else { var firstTabbableGroup = state.tabbableGroups[0]; var firstTabbableNode = firstTabbableGroup && firstTabbableGroup.firstTabbableNode; // NOTE: `fallbackFocus` option function cannot return `false` (not supported) node = firstTabbableNode || getNodeForOption('fallbackFocus'); } } if (!node) { throw new Error('Your focus-trap needs to have at least one focusable element'); } return node; }; var updateTabbableNodes = function updateTabbableNodes() { state.containerGroups = state.containers.map(function (container) { var tabbableNodes = (0,tabbable__WEBPACK_IMPORTED_MODULE_0__.tabbable)(container, config.tabbableOptions); // NOTE: if we have tabbable nodes, we must have focusable nodes; focusable nodes // are a superset of tabbable nodes since nodes with negative `tabindex` attributes // are focusable but not tabbable var focusableNodes = (0,tabbable__WEBPACK_IMPORTED_MODULE_0__.focusable)(container, config.tabbableOptions); var firstTabbableNode = tabbableNodes.length > 0 ? tabbableNodes[0] : undefined; var lastTabbableNode = tabbableNodes.length > 0 ? tabbableNodes[tabbableNodes.length - 1] : undefined; var firstDomTabbableNode = focusableNodes.find(function (node) { return (0,tabbable__WEBPACK_IMPORTED_MODULE_0__.isTabbable)(node); }); var lastDomTabbableNode = focusableNodes.slice().reverse().find(function (node) { return (0,tabbable__WEBPACK_IMPORTED_MODULE_0__.isTabbable)(node); }); var posTabIndexesFound = !!tabbableNodes.find(function (node) { return (0,tabbable__WEBPACK_IMPORTED_MODULE_0__.getTabIndex)(node) > 0; }); return { container: container, tabbableNodes: tabbableNodes, focusableNodes: focusableNodes, /** True if at least one node with positive `tabindex` was found in this container. */ posTabIndexesFound: posTabIndexesFound, /** First tabbable node in container, __tabindex__ order; `undefined` if none. */ firstTabbableNode: firstTabbableNode, /** Last tabbable node in container, __tabindex__ order; `undefined` if none. */ lastTabbableNode: lastTabbableNode, // NOTE: DOM order is NOT NECESSARILY "document position" order, but figuring that out // would require more than just https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition // because that API doesn't work with Shadow DOM as well as it should (@see // https://github.com/whatwg/dom/issues/320) and since this first/last is only needed, so far, // to address an edge case related to positive tabindex support, this seems like a much easier, // "close enough most of the time" alternative for positive tabindexes which should generally // be avoided anyway... /** First tabbable node in container, __DOM__ order; `undefined` if none. */ firstDomTabbableNode: firstDomTabbableNode, /** Last tabbable node in container, __DOM__ order; `undefined` if none. */ lastDomTabbableNode: lastDomTabbableNode, /** * Finds the __tabbable__ node that follows the given node in the specified direction, * in this container, if any. * @param {HTMLElement} node * @param {boolean} [forward] True if going in forward tab order; false if going * in reverse. * @returns {HTMLElement|undefined} The next tabbable node, if any. */ nextTabbableNode: function nextTabbableNode(node) { var forward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var nodeIdx = tabbableNodes.indexOf(node); if (nodeIdx < 0) { // either not tabbable nor focusable, or was focused but not tabbable (negative tabindex): // since `node` should at least have been focusable, we assume that's the case and mimic // what browsers do, which is set focus to the next node in __document position order__, // regardless of positive tabindexes, if any -- and for reasons explained in the NOTE // above related to `firstDomTabbable` and `lastDomTabbable` properties, we fall back to // basic DOM order if (forward) { return focusableNodes.slice(focusableNodes.indexOf(node) + 1).find(function (el) { return (0,tabbable__WEBPACK_IMPORTED_MODULE_0__.isTabbable)(el); }); } return focusableNodes.slice(0, focusableNodes.indexOf(node)).reverse().find(function (el) { return (0,tabbable__WEBPACK_IMPORTED_MODULE_0__.isTabbable)(el); }); } return tabbableNodes[nodeIdx + (forward ? 1 : -1)]; } }; }); state.tabbableGroups = state.containerGroups.filter(function (group) { return group.tabbableNodes.length > 0; }); // throw if no groups have tabbable nodes and we don't have a fallback focus node either if (state.tabbableGroups.length <= 0 && !getNodeForOption('fallbackFocus') // returning false not supported for this option ) { throw new Error('Your focus-trap must have at least one container with at least one tabbable node in it at all times'); } // NOTE: Positive tabindexes are only properly supported in single-container traps because // doing it across multiple containers where tabindexes could be all over the place // would require Tabbable to support multiple containers, would require additional // specialized Shadow DOM support, and would require Tabbable's multi-container support // to look at those containers in document position order rather than user-provided // order (as they are treated in Focus-trap, for legacy reasons). See discussion on // https://github.com/focus-trap/focus-trap/issues/375 for more details. if (state.containerGroups.find(function (g) { return g.posTabIndexesFound; }) && state.containerGroups.length > 1) { throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps."); } }; var tryFocus = function tryFocus(node) { if (node === false) { return; } if (node === doc.activeElement) { return; } if (!node || !node.focus) { tryFocus(getInitialFocusNode()); return; } node.focus({ preventScroll: !!config.preventScroll }); // NOTE: focus() API does not trigger focusIn event so set MRU node manually state.mostRecentlyFocusedNode = node; if (isSelectableInput(node)) { node.select(); } }; var getReturnFocusNode = function getReturnFocusNode(previousActiveElement) { var node = getNodeForOption('setReturnFocus', previousActiveElement); return node ? node : node === false ? false : previousActiveElement; }; /** * Finds the next node (in either direction) where focus should move according to a * keyboard focus-in event. * @param {Object} params * @param {Node} [params.target] Known target __from which__ to navigate, if any. * @param {KeyboardEvent|FocusEvent} [params.event] Event to use if `target` isn't known (event * will be used to determine the `target`). Ignored if `target` is specified. * @param {boolean} [params.isBackward] True if focus should move backward. * @returns {Node|undefined} The next node, or `undefined` if a next node couldn't be * determined given the current state of the trap. */ var findNextNavNode = function findNextNavNode(_ref2) { var target = _ref2.target, event = _ref2.event, _ref2$isBackward = _ref2.isBackward, isBackward = _ref2$isBackward === void 0 ? false : _ref2$isBackward; target = target || getActualTarget(event); updateTabbableNodes(); var destinationNode = null; if (state.tabbableGroups.length > 0) { // make sure the target is actually contained in a group // NOTE: the target may also be the container itself if it's focusable // with tabIndex='-1' and was given initial focus var containerIndex = findContainerIndex(target, event); var containerGroup = containerIndex >= 0 ? state.containerGroups[containerIndex] : undefined; if (containerIndex < 0) { // target not found in any group: quite possible focus has escaped the trap, // so bring it back into... if (isBackward) { // ...the last node in the last group destinationNode = state.tabbableGroups[state.tabbableGroups.length - 1].lastTabbableNode; } else { // ...the first node in the first group destinationNode = state.tabbableGroups[0].firstTabbableNode; } } else if (isBackward) { // REVERSE // is the target the first tabbable node in a group? var startOfGroupIndex = findIndex(state.tabbableGroups, function (_ref3) { var firstTabbableNode = _ref3.firstTabbableNode; return target === firstTabbableNode; }); if (startOfGroupIndex < 0 && (containerGroup.container === target || (0,tabbable__WEBPACK_IMPORTED_MODULE_0__.isFocusable)(target, config.tabbableOptions) && !(0,tabbable__WEBPACK_IMPORTED_MODULE_0__.isTabbable)(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target, false))) { // an exception case where the target is either the container itself, or // a non-tabbable node that was given focus (i.e. tabindex is negative // and user clicked on it or node was programmatically given focus) // and is not followed by any other tabbable node, in which // case, we should handle shift+tab as if focus were on the container's // first tabbable node, and go to the last tabbable node of the LAST group startOfGroupIndex = containerIndex; } if (startOfGroupIndex >= 0) { // YES: then shift+tab should go to the last tabbable node in the // previous group (and wrap around to the last tabbable node of // the LAST group if it's the first tabbable node of the FIRST group) var destinationGroupIndex = startOfGroupIndex === 0 ? state.tabbableGroups.length - 1 : startOfGroupIndex - 1; var destinationGroup = state.tabbableGroups[destinationGroupIndex]; destinationNode = (0,tabbable__WEBPACK_IMPORTED_MODULE_0__.getTabIndex)(target) >= 0 ? destinationGroup.lastTabbableNode : destinationGroup.lastDomTabbableNode; } else if (!isTabEvent(event)) { // user must have customized the nav keys so we have to move focus manually _within_ // the active group: do this based on the order determined by tabbable() destinationNode = containerGroup.nextTabbableNode(target, false); } } else { // FORWARD // is the target the last tabbable node in a group? var lastOfGroupIndex = findIndex(state.tabbableGroups, function (_ref4) { var lastTabbableNode = _ref4.lastTabbableNode; return target === lastTabbableNode; }); if (lastOfGroupIndex < 0 && (containerGroup.container === target || (0,tabbable__WEBPACK_IMPORTED_MODULE_0__.isFocusable)(target, config.tabbableOptions) && !(0,tabbable__WEBPACK_IMPORTED_MODULE_0__.isTabbable)(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target))) { // an exception case where the target is the container itself, or // a non-tabbable node that was given focus (i.e. tabindex is negative // and user clicked on it or node was programmatically given focus) // and is not followed by any other tabbable node, in which // case, we should handle tab as if focus were on the container's // last tabbable node, and go to the first tabbable node of the FIRST group lastOfGroupIndex = containerIndex; } if (lastOfGroupIndex >= 0) { // YES: then tab should go to the first tabbable node in the next // group (and wrap around to the first tabbable node of the FIRST // group if it's the last tabbable node of the LAST group) var _destinationGroupIndex = lastOfGroupIndex === state.tabbableGroups.length - 1 ? 0 : lastOfGroupIndex + 1; var _destinationGroup = state.tabbableGroups[_destinationGroupIndex]; destinationNode = (0,tabbable__WEBPACK_IMPORTED_MODULE_0__.getTabIndex)(target) >= 0 ? _destinationGroup.firstTabbableNode : _destinationGroup.firstDomTabbableNode; } else if (!isTabEvent(event)) { // user must have customized the nav keys so we have to move focus manually _within_ // the active group: do this based on the order determined by tabbable() destinationNode = containerGroup.nextTabbableNode(target); } } } else { // no groups available // NOTE: the fallbackFocus option does not support returning false to opt-out destinationNode = getNodeForOption('fallbackFocus'); } return destinationNode; }; // This needs to be done on mousedown and touchstart instead of click // so that it precedes the focus event. var checkPointerDown = function checkPointerDown(e) { var target = getActualTarget(e); if (findContainerIndex(target, e) >= 0) { // allow the click since it ocurred inside the trap return; } if (valueOrHandler(config.clickOutsideDeactivates, e)) { // immediately deactivate the trap trap.deactivate({ // NOTE: by setting `returnFocus: false`, deactivate() will do nothing, // which will result in the outside click setting focus to the node // that was clicked (and if not focusable, to "nothing"); by setting // `returnFocus: true`, we'll attempt to re-focus the node originally-focused // on activation (or the configured `setReturnFocus` node), whether the // outside click was on a focusable node or not returnFocus: config.returnFocusOnDeactivate }); return; } // This is needed for mobile devices. // (If we'll only let `click` events through, // then on mobile they will be blocked anyways if `touchstart` is blocked.) if (valueOrHandler(config.allowOutsideClick, e)) { // allow the click outside the trap to take place return; } // otherwise, prevent the click e.preventDefault(); }; // In case focus escapes the trap for some strange reason, pull it back in. // NOTE: the focusIn event is NOT cancelable, so if focus escapes, it may cause unexpected // scrolling if the node that got focused was out of view; there's nothing we can do to // prevent that from happening by the time we discover that focus escaped var checkFocusIn = function checkFocusIn(event) { var target = getActualTarget(event); var targetContained = findContainerIndex(target, event) >= 0; // In Firefox when you Tab out of an iframe the Document is briefly focused. if (targetContained || target instanceof Document) { if (targetContained) { state.mostRecentlyFocusedNode = target; } } else { // escaped! pull it back in to where it just left event.stopImmediatePropagation(); // focus will escape if the MRU node had a positive tab index and user tried to nav forward; // it will also escape if the MRU node had a 0 tab index and user tried to nav backward // toward a node with a positive tab index var nextNode; // next node to focus, if we find one var navAcrossContainers = true; if (state.mostRecentlyFocusedNode) { if ((0,tabbable__WEBPACK_IMPORTED_MODULE_0__.getTabIndex)(state.mostRecentlyFocusedNode) > 0) { // MRU container index must be >=0 otherwise we wouldn't have it as an MRU node... var mruContainerIdx = findContainerIndex(state.mostRecentlyFocusedNode); // there MAY not be any tabbable nodes in the container if there are at least 2 containers // and the MRU node is focusable but not tabbable (focus-trap requires at least 1 container // with at least one tabbable node in order to function, so this could be the other container // with nothing tabbable in it) var tabbableNodes = state.containerGroups[mruContainerIdx].tabbableNodes; if (tabbableNodes.length > 0) { // MRU tab index MAY not be found if the MRU node is focusable but not tabbable var mruTabIdx = tabbableNodes.findIndex(function (node) { return node === state.mostRecentlyFocusedNode; }); if (mruTabIdx >= 0) { if (config.isKeyForward(state.recentNavEvent)) { if (mruTabIdx + 1 < tabbableNodes.length) { nextNode = tabbableNodes[mruTabIdx + 1]; navAcrossContainers = false; } // else, don't wrap within the container as focus should move to next/previous // container } else { if (mruTabIdx - 1 >= 0) { nextNode = tabbableNodes[mruTabIdx - 1]; navAcrossContainers = false; } // else, don't wrap within the container as focus should move to next/previous // container } // else, don't find in container order without considering direction too } } // else, no tabbable nodes in that container (which means we must have at least one other // container with at least one tabbable node in it, otherwise focus-trap would've thrown // an error the last time updateTabbableNodes() was run): find next node among all known // containers } else { // check to see if there's at least one tabbable node with a positive tab index inside // the trap because focus seems to escape when navigating backward from a tabbable node // with tabindex=0 when this is the case (instead of wrapping to the tabbable node with // the greatest positive tab index like it should) if (!state.containerGroups.some(function (g) { return g.tabbableNodes.some(function (n) { return (0,tabbable__WEBPACK_IMPORTED_MODULE_0__.getTabIndex)(n) > 0; }); })) { // no containers with tabbable nodes with positive tab indexes which means the focus // escaped for some other reason and we should just execute the fallback to the // MRU node or initial focus node, if any navAcrossContainers = false; } } } else { // no MRU node means we're likely in some initial condition when the trap has just // been activated and initial focus hasn't been given yet, in which case we should // fall through to trying to focus the initial focus node, which is what should // happen below at this point in the logic navAcrossContainers = false; } if (navAcrossContainers) { nextNode = findNextNavNode({ // move FROM the MRU node, not event-related node (which will be the node that is // outside the trap causing the focus escape we're trying to fix) target: state.mostRecentlyFocusedNode, isBackward: config.isKeyBackward(state.recentNavEvent) }); } if (nextNode) { tryFocus(nextNode); } else { tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode()); } } state.recentNavEvent = undefined; // clear }; // Hijack key nav events on the first and last focusable nodes of the trap, // in order to prevent focus from escaping. If it escapes for even a // moment it can end up scrolling the page and causing confusion so we // kind of need to capture the action at the keydown phase. var checkKeyNav = function checkKeyNav(event) { var isBackward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; state.recentNavEvent = event; var destinationNode = findNextNavNode({ event: event, isBackward: isBackward }); if (destinationNode) { if (isTabEvent(event)) { // since tab natively moves focus, we wouldn't have a destination node unless we // were on the edge of a container and had to move to the next/previous edge, in // which case we want to prevent default to keep the browser from moving focus // to where it normally would event.preventDefault(); } tryFocus(destinationNode); } // else, let the browser take care of [shift+]tab and move the focus }; var checkKey = function checkKey(event) { if (isEscapeEvent(event) && valueOrHandler(config.escapeDeactivates, event) !== false) { event.preventDefault(); trap.deactivate(); return; } if (config.isKeyForward(event) || config.isKeyBackward(event)) { checkKeyNav(event, config.isKeyBackward(event)); } }; var checkClick = function checkClick(e) { var target = getActualTarget(e); if (findContainerIndex(target, e) >= 0) { return; } if (valueOrHandler(config.clickOutsideDeactivates, e)) { return; } if (valueOrHandler(config.allowOutsideClick, e)) { return; } e.preventDefault(); e.stopImmediatePropagation(); }; // // EVENT LISTENERS // var addListeners = function addListeners() { if (!state.active) { return; } // There can be only one listening focus trap at a time activeFocusTraps.activateTrap(trapStack, trap); // Delay ensures that the focused element doesn't capture the event // that caused the focus trap activation. state.delayInitialFocusTimer = config.delayInitialFocus ? delay(function () { tryFocus(getInitialFocusNode()); }) : tryFocus(getInitialFocusNode()); doc.addEventListener('focusin', checkFocusIn, true); doc.addEventListener('mousedown', checkPointerDown, { capture: true, passive: false }); doc.addEventListener('touchstart', checkPointerDown, { capture: true, passive: false }); doc.addEventListener('click', checkClick, { capture: true, passive: false }); doc.addEventListener('keydown', checkKey, { capture: true, passive: false }); return trap; }; var removeListeners = function removeListeners() { if (!state.active) { return; } doc.removeEventListener('focusin', checkFocusIn, true); doc.removeEventListener('mousedown', checkPointerDown, true); doc.removeEventListener('touchstart', checkPointerDown, true); doc.removeEventListener('click', checkClick, true); doc.removeEventListener('keydown', checkKey, true); return trap; }; // // MUTATION OBSERVER // var checkDomRemoval = function checkDomRemoval(mutations) { var isFocusedNodeRemoved = mutations.some(function (mutation) { var removedNodes = Array.from(mutation.removedNodes); return removedNodes.some(function (node) { return node === state.mostRecentlyFocusedNode; }); }); // If the currently focused is removed then browsers will move focus to the // element. If this happens, try to move focus back into the trap. if (isFocusedNodeRemoved) { tryFocus(getInitialFocusNode()); } }; // Use MutationObserver - if supported - to detect if focused node is removed // from the DOM. var mutationObserver = typeof window !== 'undefined' && 'MutationObserver' in window ? new MutationObserver(checkDomRemoval) : undefined; var updateObservedNodes = function updateObservedNodes() { if (!mutationObserver) { return; } mutationObserver.disconnect(); if (state.active && !state.paused) { state.containers.map(function (container) { mutationObserver.observe(container, { subtree: true, childList: true }); }); } }; // // TRAP DEFINITION // trap = { get active() { return state.active; }, get paused() { return state.paused; }, activate: function activate(activateOptions) { if (state.active) { return this; } var onActivate = getOption(activateOptions, 'onActivate'); var onPostActivate = getOption(activateOptions, 'onPostActivate'); var checkCanFocusTrap = getOption(activateOptions, 'checkCanFocusTrap'); if (!checkCanFocusTrap) { updateTabbableNodes(); } state.active = true; state.paused = false; state.nodeFocusedBeforeActivation = doc.activeElement; onActivate === null || onActivate === void 0 ? void 0 : onActivate(); var finishActivation = function finishActivation() { if (checkCanFocusTrap) { updateTabbableNodes(); } addListeners(); updateObservedNodes(); onPostActivate === null || onPostActivate === void 0 ? void 0 : onPostActivate(); }; if (checkCanFocusTrap) { checkCanFocusTrap(state.containers.concat()).then(finishActivation, finishActivation); return this; } finishActivation(); return this; }, deactivate: function deactivate(deactivateOptions) { if (!state.active) { return this; } var options = _objectSpread2({ onDeactivate: config.onDeactivate, onPostDeactivate: config.onPostDeactivate, checkCanReturnFocus: config.checkCanReturnFocus }, deactivateOptions); clearTimeout(state.delayInitialFocusTimer); // noop if undefined state.delayInitialFocusTimer = undefined; removeListeners(); state.active = false; state.paused = false; updateObservedNodes(); activeFocusTraps.deactivateTrap(trapStack, trap); var onDeactivate = getOption(options, 'onDeactivate'); var onPostDeactivate = getOption(options, 'onPostDeactivate'); var checkCanReturnFocus = getOption(options, 'checkCanReturnFocus'); var returnFocus = getOption(options, 'returnFocus', 'returnFocusOnDeactivate'); onDeactivate === null || onDeactivate === void 0 ? void 0 : onDeactivate(); var finishDeactivation = function finishDeactivation() { delay(function () { if (returnFocus) { tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation)); } onPostDeactivate === null || onPostDeactivate === void 0 ? void 0 : onPostDeactivate(); }); }; if (returnFocus && checkCanReturnFocus) { checkCanReturnFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation)).then(finishDeactivation, finishDeactivation); return this; } finishDeactivation(); return this; }, pause: function pause(pauseOptions) { if (state.paused || !state.active) { return this; } var onPause = getOption(pauseOptions, 'onPause'); var onPostPause = getOption(pauseOptions, 'onPostPause'); state.paused = true; onPause === null || onPause === void 0 ? void 0 : onPause(); removeListeners(); updateObservedNodes(); onPostPause === null || onPostPause === void 0 ? void 0 : onPostPause(); return this; }, unpause: function unpause(unpauseOptions) { if (!state.paused || !state.active) { return this; } var onUnpause = getOption(unpauseOptions, 'onUnpause'); var onPostUnpause = getOption(unpauseOptions, 'onPostUnpause'); state.paused = false; onUnpause === null || onUnpause === void 0 ? void 0 : onUnpause(); updateTabbableNodes(); addListeners(); updateObservedNodes(); onPostUnpause === null || onPostUnpause === void 0 ? void 0 : onPostUnpause(); return this; }, updateContainerElements: function updateContainerElements(containerElements) { var elementsAsArray = [].concat(containerElements).filter(Boolean); state.containers = elementsAsArray.map(function (element) { return typeof element === 'string' ? doc.querySelector(element) : element; }); if (state.active) { updateTabbableNodes(); } updateObservedNodes(); return this; } }; // initialize container elements trap.updateContainerElements(elements); return trap; }; //# sourceMappingURL=focus-trap.esm.js.map /***/ }), /***/ "./node_modules/html-entities/lib/index.js": /*!*************************************************!*\ !*** ./node_modules/html-entities/lib/index.js ***! \*************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; var __assign=this&&this.__assign||function(){__assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i'"&]/g,nonAscii:/[<>'"&\u0080-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/g,nonAsciiPrintable:/[<>'"&\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/g,nonAsciiPrintableOnly:/[\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/g,extensive:/[\x01-\x0c\x0e-\x1f\x21-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7d\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/g};var defaultEncodeOptions={mode:"specialChars",level:"all",numeric:"decimal"};function encode(text,_a){var _b=_a===void 0?defaultEncodeOptions:_a,_c=_b.mode,mode=_c===void 0?"specialChars":_c,_d=_b.numeric,numeric=_d===void 0?"decimal":_d,_e=_b.level,level=_e===void 0?"all":_e;if(!text){return""}var encodeRegExp=encodeRegExps[mode];var references=allNamedReferences[level].characters;var isHex=numeric==="hexadecimal";return replaceUsingRegExp(text,encodeRegExp,(function(input){var result=references[input];if(!result){var code=input.length>1?surrogate_pairs_1.getCodePoint(input,0):input.charCodeAt(0);result=(isHex?"&#x"+code.toString(16):"&#"+code)+";"}return result}))}exports.encode=encode;var defaultDecodeOptions={scope:"body",level:"all"};var strict=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g;var attribute=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g;var baseDecodeRegExps={xml:{strict:strict,attribute:attribute,body:named_references_1.bodyRegExps.xml},html4:{strict:strict,attribute:attribute,body:named_references_1.bodyRegExps.html4},html5:{strict:strict,attribute:attribute,body:named_references_1.bodyRegExps.html5}};var decodeRegExps=__assign(__assign({},baseDecodeRegExps),{all:baseDecodeRegExps.html5});var fromCharCode=String.fromCharCode;var outOfBoundsChar=fromCharCode(65533);var defaultDecodeEntityOptions={level:"all"};function getDecodedEntity(entity,references,isAttribute,isStrict){var decodeResult=entity;var decodeEntityLastChar=entity[entity.length-1];if(isAttribute&&decodeEntityLastChar==="="){decodeResult=entity}else if(isStrict&&decodeEntityLastChar!==";"){decodeResult=entity}else{var decodeResultByReference=references[entity];if(decodeResultByReference){decodeResult=decodeResultByReference}else if(entity[0]==="&"&&entity[1]==="#"){var decodeSecondChar=entity[2];var decodeCode=decodeSecondChar=="x"||decodeSecondChar=="X"?parseInt(entity.substr(3),16):parseInt(entity.substr(2));decodeResult=decodeCode>=1114111?outOfBoundsChar:decodeCode>65535?surrogate_pairs_1.fromCodePoint(decodeCode):fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode]||decodeCode)}}return decodeResult}function decodeEntity(entity,_a){var _b=(_a===void 0?defaultDecodeEntityOptions:_a).level,level=_b===void 0?"all":_b;if(!entity){return""}return getDecodedEntity(entity,allNamedReferences[level].entities,false,false)}exports.decodeEntity=decodeEntity;function decode(text,_a){var _b=_a===void 0?defaultDecodeOptions:_a,_c=_b.level,level=_c===void 0?"all":_c,_d=_b.scope,scope=_d===void 0?level==="xml"?"strict":"body":_d;if(!text){return""}var decodeRegExp=decodeRegExps[level][scope];var references=allNamedReferences[level].entities;var isAttribute=scope==="attribute";var isStrict=scope==="strict";return replaceUsingRegExp(text,decodeRegExp,(function(entity){return getDecodedEntity(entity,references,isAttribute,isStrict)}))}exports.decode=decode; //# sourceMappingURL=./index.js.map /***/ }), /***/ "./node_modules/html-entities/lib/named-references.js": /*!************************************************************!*\ !*** ./node_modules/html-entities/lib/named-references.js ***! \************************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({value:true}));exports.bodyRegExps={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/∉|&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/·|℗|⋇|⪧|⩺|⋗|⦕|⩼|⪆|⥸|⋗|⋛|⪌|≷|≳|⪦|⩹|⋖|⋋|⋉|⥶|⩻|⦖|◃|⊴|◂|∉|⋹̸|⋵̸|∉|⋷|⋶|∌|∌|⋾|⋽|∥|⊠|⨱|⨰|&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g};exports.namedReferences={xml:{entities:{"<":"<",">":">",""":'"',"'":"'","&":"&"},characters:{"<":"<",">":">",'"':""","'":"'","&":"&"}},html4:{entities:{"'":"'"," ":" "," ":" ","¡":"¡","¡":"¡","¢":"¢","¢":"¢","£":"£","£":"£","¤":"¤","¤":"¤","¥":"¥","¥":"¥","¦":"¦","¦":"¦","§":"§","§":"§","¨":"¨","¨":"¨","©":"©","©":"©","ª":"ª","ª":"ª","«":"«","«":"«","¬":"¬","¬":"¬","­":"­","­":"­","®":"®","®":"®","¯":"¯","¯":"¯","°":"°","°":"°","±":"±","±":"±","²":"²","²":"²","³":"³","³":"³","´":"´","´":"´","µ":"µ","µ":"µ","¶":"¶","¶":"¶","·":"·","·":"·","¸":"¸","¸":"¸","¹":"¹","¹":"¹","º":"º","º":"º","»":"»","»":"»","¼":"¼","¼":"¼","½":"½","½":"½","¾":"¾","¾":"¾","¿":"¿","¿":"¿","À":"À","À":"À","Á":"Á","Á":"Á","Â":"Â","Â":"Â","Ã":"Ã","Ã":"Ã","Ä":"Ä","Ä":"Ä","Å":"Å","Å":"Å","Æ":"Æ","Æ":"Æ","Ç":"Ç","Ç":"Ç","È":"È","È":"È","É":"É","É":"É","Ê":"Ê","Ê":"Ê","Ë":"Ë","Ë":"Ë","Ì":"Ì","Ì":"Ì","Í":"Í","Í":"Í","Î":"Î","Î":"Î","Ï":"Ï","Ï":"Ï","Ð":"Ð","Ð":"Ð","Ñ":"Ñ","Ñ":"Ñ","Ò":"Ò","Ò":"Ò","Ó":"Ó","Ó":"Ó","Ô":"Ô","Ô":"Ô","Õ":"Õ","Õ":"Õ","Ö":"Ö","Ö":"Ö","×":"×","×":"×","Ø":"Ø","Ø":"Ø","Ù":"Ù","Ù":"Ù","Ú":"Ú","Ú":"Ú","Û":"Û","Û":"Û","Ü":"Ü","Ü":"Ü","Ý":"Ý","Ý":"Ý","Þ":"Þ","Þ":"Þ","ß":"ß","ß":"ß","à":"à","à":"à","á":"á","á":"á","â":"â","â":"â","ã":"ã","ã":"ã","ä":"ä","ä":"ä","å":"å","å":"å","æ":"æ","æ":"æ","ç":"ç","ç":"ç","è":"è","è":"è","é":"é","é":"é","ê":"ê","ê":"ê","ë":"ë","ë":"ë","ì":"ì","ì":"ì","í":"í","í":"í","î":"î","î":"î","ï":"ï","ï":"ï","ð":"ð","ð":"ð","ñ":"ñ","ñ":"ñ","ò":"ò","ò":"ò","ó":"ó","ó":"ó","ô":"ô","ô":"ô","õ":"õ","õ":"õ","ö":"ö","ö":"ö","÷":"÷","÷":"÷","ø":"ø","ø":"ø","ù":"ù","ù":"ù","ú":"ú","ú":"ú","û":"û","û":"û","ü":"ü","ü":"ü","ý":"ý","ý":"ý","þ":"þ","þ":"þ","ÿ":"ÿ","ÿ":"ÿ",""":'"',""":'"',"&":"&","&":"&","<":"<","<":"<",">":">",">":">","Œ":"Œ","œ":"œ","Š":"Š","š":"š","Ÿ":"Ÿ","ˆ":"ˆ","˜":"˜"," ":" "," ":" "," ":" ","‌":"‌","‍":"‍","‎":"‎","‏":"‏","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","”":"”","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","ƒ":"ƒ","Α":"Α","Β":"Β","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Ν":"Ν","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Υ":"Υ","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","π":"π","ρ":"ρ","ς":"ς","σ":"σ","τ":"τ","υ":"υ","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","ϑ":"ϑ","ϒ":"ϒ","ϖ":"ϖ","•":"•","…":"…","′":"′","″":"″","‾":"‾","⁄":"⁄","℘":"℘","ℑ":"ℑ","ℜ":"ℜ","™":"™","ℵ":"ℵ","←":"←","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","⇐":"⇐","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","∏":"∏","∑":"∑","−":"−","∗":"∗","√":"√","∝":"∝","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","⋅":"⋅","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","⟨":"〈","⟩":"〉","◊":"◊","♠":"♠","♣":"♣","♥":"♥","♦":"♦"},characters:{"'":"'"," ":" ","¡":"¡","¢":"¢","£":"£","¤":"¤","¥":"¥","¦":"¦","§":"§","¨":"¨","©":"©","ª":"ª","«":"«","¬":"¬","­":"­","®":"®","¯":"¯","°":"°","±":"±","²":"²","³":"³","´":"´","µ":"µ","¶":"¶","·":"·","¸":"¸","¹":"¹","º":"º","»":"»","¼":"¼","½":"½","¾":"¾","¿":"¿","À":"À","Á":"Á","Â":"Â","Ã":"Ã","Ä":"Ä","Å":"Å","Æ":"Æ","Ç":"Ç","È":"È","É":"É","Ê":"Ê","Ë":"Ë","Ì":"Ì","Í":"Í","Î":"Î","Ï":"Ï","Ð":"Ð","Ñ":"Ñ","Ò":"Ò","Ó":"Ó","Ô":"Ô","Õ":"Õ","Ö":"Ö","×":"×","Ø":"Ø","Ù":"Ù","Ú":"Ú","Û":"Û","Ü":"Ü","Ý":"Ý","Þ":"Þ","ß":"ß","à":"à","á":"á","â":"â","ã":"ã","ä":"ä","å":"å","æ":"æ","ç":"ç","è":"è","é":"é","ê":"ê","ë":"ë","ì":"ì","í":"í","î":"î","ï":"ï","ð":"ð","ñ":"ñ","ò":"ò","ó":"ó","ô":"ô","õ":"õ","ö":"ö","÷":"÷","ø":"ø","ù":"ù","ú":"ú","û":"û","ü":"ü","ý":"ý","þ":"þ","ÿ":"ÿ",'"':""","&":"&","<":"<",">":">","Œ":"Œ","œ":"œ","Š":"Š","š":"š","Ÿ":"Ÿ","ˆ":"ˆ","˜":"˜"," ":" "," ":" "," ":" ","‌":"‌","‍":"‍","‎":"‎","‏":"‏","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","”":"”","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","ƒ":"ƒ","Α":"Α","Β":"Β","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Ν":"Ν","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Υ":"Υ","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","π":"π","ρ":"ρ","ς":"ς","σ":"σ","τ":"τ","υ":"υ","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","ϑ":"ϑ","ϒ":"ϒ","ϖ":"ϖ","•":"•","…":"…","′":"′","″":"″","‾":"‾","⁄":"⁄","℘":"℘","ℑ":"ℑ","ℜ":"ℜ","™":"™","ℵ":"ℵ","←":"←","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","⇐":"⇐","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","∏":"∏","∑":"∑","−":"−","∗":"∗","√":"√","∝":"∝","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","⋅":"⋅","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","〈":"⟨","〉":"⟩","◊":"◊","♠":"♠","♣":"♣","♥":"♥","♦":"♦"}},html5:{entities:{"Æ":"Æ","Æ":"Æ","&":"&","&":"&","Á":"Á","Á":"Á","Ă":"Ă","Â":"Â","Â":"Â","А":"А","𝔄":"𝔄","À":"À","À":"À","Α":"Α","Ā":"Ā","⩓":"⩓","Ą":"Ą","𝔸":"𝔸","⁡":"⁡","Å":"Å","Å":"Å","𝒜":"𝒜","≔":"≔","Ã":"Ã","Ã":"Ã","Ä":"Ä","Ä":"Ä","∖":"∖","⫧":"⫧","⌆":"⌆","Б":"Б","∵":"∵","ℬ":"ℬ","Β":"Β","𝔅":"𝔅","𝔹":"𝔹","˘":"˘","ℬ":"ℬ","≎":"≎","Ч":"Ч","©":"©","©":"©","Ć":"Ć","⋒":"⋒","ⅅ":"ⅅ","ℭ":"ℭ","Č":"Č","Ç":"Ç","Ç":"Ç","Ĉ":"Ĉ","∰":"∰","Ċ":"Ċ","¸":"¸","·":"·","ℭ":"ℭ","Χ":"Χ","⊙":"⊙","⊖":"⊖","⊕":"⊕","⊗":"⊗","∲":"∲","”":"”","’":"’","∷":"∷","⩴":"⩴","≡":"≡","∯":"∯","∮":"∮","ℂ":"ℂ","∐":"∐","∳":"∳","⨯":"⨯","𝒞":"𝒞","⋓":"⋓","≍":"≍","ⅅ":"ⅅ","⤑":"⤑","Ђ":"Ђ","Ѕ":"Ѕ","Џ":"Џ","‡":"‡","↡":"↡","⫤":"⫤","Ď":"Ď","Д":"Д","∇":"∇","Δ":"Δ","𝔇":"𝔇","´":"´","˙":"˙","˝":"˝","`":"`","˜":"˜","⋄":"⋄","ⅆ":"ⅆ","𝔻":"𝔻","¨":"¨","⃜":"⃜","≐":"≐","∯":"∯","¨":"¨","⇓":"⇓","⇐":"⇐","⇔":"⇔","⫤":"⫤","⟸":"⟸","⟺":"⟺","⟹":"⟹","⇒":"⇒","⊨":"⊨","⇑":"⇑","⇕":"⇕","∥":"∥","↓":"↓","⤓":"⤓","⇵":"⇵","̑":"̑","⥐":"⥐","⥞":"⥞","↽":"↽","⥖":"⥖","⥟":"⥟","⇁":"⇁","⥗":"⥗","⊤":"⊤","↧":"↧","⇓":"⇓","𝒟":"𝒟","Đ":"Đ","Ŋ":"Ŋ","Ð":"Ð","Ð":"Ð","É":"É","É":"É","Ě":"Ě","Ê":"Ê","Ê":"Ê","Э":"Э","Ė":"Ė","𝔈":"𝔈","È":"È","È":"È","∈":"∈","Ē":"Ē","◻":"◻","▫":"▫","Ę":"Ę","𝔼":"𝔼","Ε":"Ε","⩵":"⩵","≂":"≂","⇌":"⇌","ℰ":"ℰ","⩳":"⩳","Η":"Η","Ë":"Ë","Ë":"Ë","∃":"∃","ⅇ":"ⅇ","Ф":"Ф","𝔉":"𝔉","◼":"◼","▪":"▪","𝔽":"𝔽","∀":"∀","ℱ":"ℱ","ℱ":"ℱ","Ѓ":"Ѓ",">":">",">":">","Γ":"Γ","Ϝ":"Ϝ","Ğ":"Ğ","Ģ":"Ģ","Ĝ":"Ĝ","Г":"Г","Ġ":"Ġ","𝔊":"𝔊","⋙":"⋙","𝔾":"𝔾","≥":"≥","⋛":"⋛","≧":"≧","⪢":"⪢","≷":"≷","⩾":"⩾","≳":"≳","𝒢":"𝒢","≫":"≫","Ъ":"Ъ","ˇ":"ˇ","^":"^","Ĥ":"Ĥ","ℌ":"ℌ","ℋ":"ℋ","ℍ":"ℍ","─":"─","ℋ":"ℋ","Ħ":"Ħ","≎":"≎","≏":"≏","Е":"Е","IJ":"IJ","Ё":"Ё","Í":"Í","Í":"Í","Î":"Î","Î":"Î","И":"И","İ":"İ","ℑ":"ℑ","Ì":"Ì","Ì":"Ì","ℑ":"ℑ","Ī":"Ī","ⅈ":"ⅈ","⇒":"⇒","∬":"∬","∫":"∫","⋂":"⋂","⁣":"⁣","⁢":"⁢","Į":"Į","𝕀":"𝕀","Ι":"Ι","ℐ":"ℐ","Ĩ":"Ĩ","І":"І","Ï":"Ï","Ï":"Ï","Ĵ":"Ĵ","Й":"Й","𝔍":"𝔍","𝕁":"𝕁","𝒥":"𝒥","Ј":"Ј","Є":"Є","Х":"Х","Ќ":"Ќ","Κ":"Κ","Ķ":"Ķ","К":"К","𝔎":"𝔎","𝕂":"𝕂","𝒦":"𝒦","Љ":"Љ","<":"<","<":"<","Ĺ":"Ĺ","Λ":"Λ","⟪":"⟪","ℒ":"ℒ","↞":"↞","Ľ":"Ľ","Ļ":"Ļ","Л":"Л","⟨":"⟨","←":"←","⇤":"⇤","⇆":"⇆","⌈":"⌈","⟦":"⟦","⥡":"⥡","⇃":"⇃","⥙":"⥙","⌊":"⌊","↔":"↔","⥎":"⥎","⊣":"⊣","↤":"↤","⥚":"⥚","⊲":"⊲","⧏":"⧏","⊴":"⊴","⥑":"⥑","⥠":"⥠","↿":"↿","⥘":"⥘","↼":"↼","⥒":"⥒","⇐":"⇐","⇔":"⇔","⋚":"⋚","≦":"≦","≶":"≶","⪡":"⪡","⩽":"⩽","≲":"≲","𝔏":"𝔏","⋘":"⋘","⇚":"⇚","Ŀ":"Ŀ","⟵":"⟵","⟷":"⟷","⟶":"⟶","⟸":"⟸","⟺":"⟺","⟹":"⟹","𝕃":"𝕃","↙":"↙","↘":"↘","ℒ":"ℒ","↰":"↰","Ł":"Ł","≪":"≪","⤅":"⤅","М":"М"," ":" ","ℳ":"ℳ","𝔐":"𝔐","∓":"∓","𝕄":"𝕄","ℳ":"ℳ","Μ":"Μ","Њ":"Њ","Ń":"Ń","Ň":"Ň","Ņ":"Ņ","Н":"Н","​":"​","​":"​","​":"​","​":"​","≫":"≫","≪":"≪"," ":"\n","𝔑":"𝔑","⁠":"⁠"," ":" ","ℕ":"ℕ","⫬":"⫬","≢":"≢","≭":"≭","∦":"∦","∉":"∉","≠":"≠","≂̸":"≂̸","∄":"∄","≯":"≯","≱":"≱","≧̸":"≧̸","≫̸":"≫̸","≹":"≹","⩾̸":"⩾̸","≵":"≵","≎̸":"≎̸","≏̸":"≏̸","⋪":"⋪","⧏̸":"⧏̸","⋬":"⋬","≮":"≮","≰":"≰","≸":"≸","≪̸":"≪̸","⩽̸":"⩽̸","≴":"≴","⪢̸":"⪢̸","⪡̸":"⪡̸","⊀":"⊀","⪯̸":"⪯̸","⋠":"⋠","∌":"∌","⋫":"⋫","⧐̸":"⧐̸","⋭":"⋭","⊏̸":"⊏̸","⋢":"⋢","⊐̸":"⊐̸","⋣":"⋣","⊂⃒":"⊂⃒","⊈":"⊈","⊁":"⊁","⪰̸":"⪰̸","⋡":"⋡","≿̸":"≿̸","⊃⃒":"⊃⃒","⊉":"⊉","≁":"≁","≄":"≄","≇":"≇","≉":"≉","∤":"∤","𝒩":"𝒩","Ñ":"Ñ","Ñ":"Ñ","Ν":"Ν","Œ":"Œ","Ó":"Ó","Ó":"Ó","Ô":"Ô","Ô":"Ô","О":"О","Ő":"Ő","𝔒":"𝔒","Ò":"Ò","Ò":"Ò","Ō":"Ō","Ω":"Ω","Ο":"Ο","𝕆":"𝕆","“":"“","‘":"‘","⩔":"⩔","𝒪":"𝒪","Ø":"Ø","Ø":"Ø","Õ":"Õ","Õ":"Õ","⨷":"⨷","Ö":"Ö","Ö":"Ö","‾":"‾","⏞":"⏞","⎴":"⎴","⏜":"⏜","∂":"∂","П":"П","𝔓":"𝔓","Φ":"Φ","Π":"Π","±":"±","ℌ":"ℌ","ℙ":"ℙ","⪻":"⪻","≺":"≺","⪯":"⪯","≼":"≼","≾":"≾","″":"″","∏":"∏","∷":"∷","∝":"∝","𝒫":"𝒫","Ψ":"Ψ",""":'"',""":'"',"𝔔":"𝔔","ℚ":"ℚ","𝒬":"𝒬","⤐":"⤐","®":"®","®":"®","Ŕ":"Ŕ","⟫":"⟫","↠":"↠","⤖":"⤖","Ř":"Ř","Ŗ":"Ŗ","Р":"Р","ℜ":"ℜ","∋":"∋","⇋":"⇋","⥯":"⥯","ℜ":"ℜ","Ρ":"Ρ","⟩":"⟩","→":"→","⇥":"⇥","⇄":"⇄","⌉":"⌉","⟧":"⟧","⥝":"⥝","⇂":"⇂","⥕":"⥕","⌋":"⌋","⊢":"⊢","↦":"↦","⥛":"⥛","⊳":"⊳","⧐":"⧐","⊵":"⊵","⥏":"⥏","⥜":"⥜","↾":"↾","⥔":"⥔","⇀":"⇀","⥓":"⥓","⇒":"⇒","ℝ":"ℝ","⥰":"⥰","⇛":"⇛","ℛ":"ℛ","↱":"↱","⧴":"⧴","Щ":"Щ","Ш":"Ш","Ь":"Ь","Ś":"Ś","⪼":"⪼","Š":"Š","Ş":"Ş","Ŝ":"Ŝ","С":"С","𝔖":"𝔖","↓":"↓","←":"←","→":"→","↑":"↑","Σ":"Σ","∘":"∘","𝕊":"𝕊","√":"√","□":"□","⊓":"⊓","⊏":"⊏","⊑":"⊑","⊐":"⊐","⊒":"⊒","⊔":"⊔","𝒮":"𝒮","⋆":"⋆","⋐":"⋐","⋐":"⋐","⊆":"⊆","≻":"≻","⪰":"⪰","≽":"≽","≿":"≿","∋":"∋","∑":"∑","⋑":"⋑","⊃":"⊃","⊇":"⊇","⋑":"⋑","Þ":"Þ","Þ":"Þ","™":"™","Ћ":"Ћ","Ц":"Ц"," ":"\t","Τ":"Τ","Ť":"Ť","Ţ":"Ţ","Т":"Т","𝔗":"𝔗","∴":"∴","Θ":"Θ","  ":"  "," ":" ","∼":"∼","≃":"≃","≅":"≅","≈":"≈","𝕋":"𝕋","⃛":"⃛","𝒯":"𝒯","Ŧ":"Ŧ","Ú":"Ú","Ú":"Ú","↟":"↟","⥉":"⥉","Ў":"Ў","Ŭ":"Ŭ","Û":"Û","Û":"Û","У":"У","Ű":"Ű","𝔘":"𝔘","Ù":"Ù","Ù":"Ù","Ū":"Ū","_":"_","⏟":"⏟","⎵":"⎵","⏝":"⏝","⋃":"⋃","⊎":"⊎","Ų":"Ų","𝕌":"𝕌","↑":"↑","⤒":"⤒","⇅":"⇅","↕":"↕","⥮":"⥮","⊥":"⊥","↥":"↥","⇑":"⇑","⇕":"⇕","↖":"↖","↗":"↗","ϒ":"ϒ","Υ":"Υ","Ů":"Ů","𝒰":"𝒰","Ũ":"Ũ","Ü":"Ü","Ü":"Ü","⊫":"⊫","⫫":"⫫","В":"В","⊩":"⊩","⫦":"⫦","⋁":"⋁","‖":"‖","‖":"‖","∣":"∣","|":"|","❘":"❘","≀":"≀"," ":" ","𝔙":"𝔙","𝕍":"𝕍","𝒱":"𝒱","⊪":"⊪","Ŵ":"Ŵ","⋀":"⋀","𝔚":"𝔚","𝕎":"𝕎","𝒲":"𝒲","𝔛":"𝔛","Ξ":"Ξ","𝕏":"𝕏","𝒳":"𝒳","Я":"Я","Ї":"Ї","Ю":"Ю","Ý":"Ý","Ý":"Ý","Ŷ":"Ŷ","Ы":"Ы","𝔜":"𝔜","𝕐":"𝕐","𝒴":"𝒴","Ÿ":"Ÿ","Ж":"Ж","Ź":"Ź","Ž":"Ž","З":"З","Ż":"Ż","​":"​","Ζ":"Ζ","ℨ":"ℨ","ℤ":"ℤ","𝒵":"𝒵","á":"á","á":"á","ă":"ă","∾":"∾","∾̳":"∾̳","∿":"∿","â":"â","â":"â","´":"´","´":"´","а":"а","æ":"æ","æ":"æ","⁡":"⁡","𝔞":"𝔞","à":"à","à":"à","ℵ":"ℵ","ℵ":"ℵ","α":"α","ā":"ā","⨿":"⨿","&":"&","&":"&","∧":"∧","⩕":"⩕","⩜":"⩜","⩘":"⩘","⩚":"⩚","∠":"∠","⦤":"⦤","∠":"∠","∡":"∡","⦨":"⦨","⦩":"⦩","⦪":"⦪","⦫":"⦫","⦬":"⦬","⦭":"⦭","⦮":"⦮","⦯":"⦯","∟":"∟","⊾":"⊾","⦝":"⦝","∢":"∢","Å":"Å","⍼":"⍼","ą":"ą","𝕒":"𝕒","≈":"≈","⩰":"⩰","⩯":"⩯","≊":"≊","≋":"≋","'":"'","≈":"≈","≊":"≊","å":"å","å":"å","𝒶":"𝒶","*":"*","≈":"≈","≍":"≍","ã":"ã","ã":"ã","ä":"ä","ä":"ä","∳":"∳","⨑":"⨑","⫭":"⫭","≌":"≌","϶":"϶","‵":"‵","∽":"∽","⋍":"⋍","⊽":"⊽","⌅":"⌅","⌅":"⌅","⎵":"⎵","⎶":"⎶","≌":"≌","б":"б","„":"„","∵":"∵","∵":"∵","⦰":"⦰","϶":"϶","ℬ":"ℬ","β":"β","ℶ":"ℶ","≬":"≬","𝔟":"𝔟","⋂":"⋂","◯":"◯","⋃":"⋃","⨀":"⨀","⨁":"⨁","⨂":"⨂","⨆":"⨆","★":"★","▽":"▽","△":"△","⨄":"⨄","⋁":"⋁","⋀":"⋀","⤍":"⤍","⧫":"⧫","▪":"▪","▴":"▴","▾":"▾","◂":"◂","▸":"▸","␣":"␣","▒":"▒","░":"░","▓":"▓","█":"█","=⃥":"=⃥","≡⃥":"≡⃥","⌐":"⌐","𝕓":"𝕓","⊥":"⊥","⊥":"⊥","⋈":"⋈","╗":"╗","╔":"╔","╖":"╖","╓":"╓","═":"═","╦":"╦","╩":"╩","╤":"╤","╧":"╧","╝":"╝","╚":"╚","╜":"╜","╙":"╙","║":"║","╬":"╬","╣":"╣","╠":"╠","╫":"╫","╢":"╢","╟":"╟","⧉":"⧉","╕":"╕","╒":"╒","┐":"┐","┌":"┌","─":"─","╥":"╥","╨":"╨","┬":"┬","┴":"┴","⊟":"⊟","⊞":"⊞","⊠":"⊠","╛":"╛","╘":"╘","┘":"┘","└":"└","│":"│","╪":"╪","╡":"╡","╞":"╞","┼":"┼","┤":"┤","├":"├","‵":"‵","˘":"˘","¦":"¦","¦":"¦","𝒷":"𝒷","⁏":"⁏","∽":"∽","⋍":"⋍","\":"\\","⧅":"⧅","⟈":"⟈","•":"•","•":"•","≎":"≎","⪮":"⪮","≏":"≏","≏":"≏","ć":"ć","∩":"∩","⩄":"⩄","⩉":"⩉","⩋":"⩋","⩇":"⩇","⩀":"⩀","∩︀":"∩︀","⁁":"⁁","ˇ":"ˇ","⩍":"⩍","č":"č","ç":"ç","ç":"ç","ĉ":"ĉ","⩌":"⩌","⩐":"⩐","ċ":"ċ","¸":"¸","¸":"¸","⦲":"⦲","¢":"¢","¢":"¢","·":"·","𝔠":"𝔠","ч":"ч","✓":"✓","✓":"✓","χ":"χ","○":"○","⧃":"⧃","ˆ":"ˆ","≗":"≗","↺":"↺","↻":"↻","®":"®","Ⓢ":"Ⓢ","⊛":"⊛","⊚":"⊚","⊝":"⊝","≗":"≗","⨐":"⨐","⫯":"⫯","⧂":"⧂","♣":"♣","♣":"♣",":":":","≔":"≔","≔":"≔",",":",","@":"@","∁":"∁","∘":"∘","∁":"∁","ℂ":"ℂ","≅":"≅","⩭":"⩭","∮":"∮","𝕔":"𝕔","∐":"∐","©":"©","©":"©","℗":"℗","↵":"↵","✗":"✗","𝒸":"𝒸","⫏":"⫏","⫑":"⫑","⫐":"⫐","⫒":"⫒","⋯":"⋯","⤸":"⤸","⤵":"⤵","⋞":"⋞","⋟":"⋟","↶":"↶","⤽":"⤽","∪":"∪","⩈":"⩈","⩆":"⩆","⩊":"⩊","⊍":"⊍","⩅":"⩅","∪︀":"∪︀","↷":"↷","⤼":"⤼","⋞":"⋞","⋟":"⋟","⋎":"⋎","⋏":"⋏","¤":"¤","¤":"¤","↶":"↶","↷":"↷","⋎":"⋎","⋏":"⋏","∲":"∲","∱":"∱","⌭":"⌭","⇓":"⇓","⥥":"⥥","†":"†","ℸ":"ℸ","↓":"↓","‐":"‐","⊣":"⊣","⤏":"⤏","˝":"˝","ď":"ď","д":"д","ⅆ":"ⅆ","‡":"‡","⇊":"⇊","⩷":"⩷","°":"°","°":"°","δ":"δ","⦱":"⦱","⥿":"⥿","𝔡":"𝔡","⇃":"⇃","⇂":"⇂","⋄":"⋄","⋄":"⋄","♦":"♦","♦":"♦","¨":"¨","ϝ":"ϝ","⋲":"⋲","÷":"÷","÷":"÷","÷":"÷","⋇":"⋇","⋇":"⋇","ђ":"ђ","⌞":"⌞","⌍":"⌍","$":"$","𝕕":"𝕕","˙":"˙","≐":"≐","≑":"≑","∸":"∸","∔":"∔","⊡":"⊡","⌆":"⌆","↓":"↓","⇊":"⇊","⇃":"⇃","⇂":"⇂","⤐":"⤐","⌟":"⌟","⌌":"⌌","𝒹":"𝒹","ѕ":"ѕ","⧶":"⧶","đ":"đ","⋱":"⋱","▿":"▿","▾":"▾","⇵":"⇵","⥯":"⥯","⦦":"⦦","џ":"џ","⟿":"⟿","⩷":"⩷","≑":"≑","é":"é","é":"é","⩮":"⩮","ě":"ě","≖":"≖","ê":"ê","ê":"ê","≕":"≕","э":"э","ė":"ė","ⅇ":"ⅇ","≒":"≒","𝔢":"𝔢","⪚":"⪚","è":"è","è":"è","⪖":"⪖","⪘":"⪘","⪙":"⪙","⏧":"⏧","ℓ":"ℓ","⪕":"⪕","⪗":"⪗","ē":"ē","∅":"∅","∅":"∅","∅":"∅"," ":" "," ":" "," ":" ","ŋ":"ŋ"," ":" ","ę":"ę","𝕖":"𝕖","⋕":"⋕","⧣":"⧣","⩱":"⩱","ε":"ε","ε":"ε","ϵ":"ϵ","≖":"≖","≕":"≕","≂":"≂","⪖":"⪖","⪕":"⪕","=":"=","≟":"≟","≡":"≡","⩸":"⩸","⧥":"⧥","≓":"≓","⥱":"⥱","ℯ":"ℯ","≐":"≐","≂":"≂","η":"η","ð":"ð","ð":"ð","ë":"ë","ë":"ë","€":"€","!":"!","∃":"∃","ℰ":"ℰ","ⅇ":"ⅇ","≒":"≒","ф":"ф","♀":"♀","ffi":"ffi","ff":"ff","ffl":"ffl","𝔣":"𝔣","fi":"fi","fj":"fj","♭":"♭","fl":"fl","▱":"▱","ƒ":"ƒ","𝕗":"𝕗","∀":"∀","⋔":"⋔","⫙":"⫙","⨍":"⨍","½":"½","½":"½","⅓":"⅓","¼":"¼","¼":"¼","⅕":"⅕","⅙":"⅙","⅛":"⅛","⅔":"⅔","⅖":"⅖","¾":"¾","¾":"¾","⅗":"⅗","⅜":"⅜","⅘":"⅘","⅚":"⅚","⅝":"⅝","⅞":"⅞","⁄":"⁄","⌢":"⌢","𝒻":"𝒻","≧":"≧","⪌":"⪌","ǵ":"ǵ","γ":"γ","ϝ":"ϝ","⪆":"⪆","ğ":"ğ","ĝ":"ĝ","г":"г","ġ":"ġ","≥":"≥","⋛":"⋛","≥":"≥","≧":"≧","⩾":"⩾","⩾":"⩾","⪩":"⪩","⪀":"⪀","⪂":"⪂","⪄":"⪄","⋛︀":"⋛︀","⪔":"⪔","𝔤":"𝔤","≫":"≫","⋙":"⋙","ℷ":"ℷ","ѓ":"ѓ","≷":"≷","⪒":"⪒","⪥":"⪥","⪤":"⪤","≩":"≩","⪊":"⪊","⪊":"⪊","⪈":"⪈","⪈":"⪈","≩":"≩","⋧":"⋧","𝕘":"𝕘","`":"`","ℊ":"ℊ","≳":"≳","⪎":"⪎","⪐":"⪐",">":">",">":">","⪧":"⪧","⩺":"⩺","⋗":"⋗","⦕":"⦕","⩼":"⩼","⪆":"⪆","⥸":"⥸","⋗":"⋗","⋛":"⋛","⪌":"⪌","≷":"≷","≳":"≳","≩︀":"≩︀","≩︀":"≩︀","⇔":"⇔"," ":" ","½":"½","ℋ":"ℋ","ъ":"ъ","↔":"↔","⥈":"⥈","↭":"↭","ℏ":"ℏ","ĥ":"ĥ","♥":"♥","♥":"♥","…":"…","⊹":"⊹","𝔥":"𝔥","⤥":"⤥","⤦":"⤦","⇿":"⇿","∻":"∻","↩":"↩","↪":"↪","𝕙":"𝕙","―":"―","𝒽":"𝒽","ℏ":"ℏ","ħ":"ħ","⁃":"⁃","‐":"‐","í":"í","í":"í","⁣":"⁣","î":"î","î":"î","и":"и","е":"е","¡":"¡","¡":"¡","⇔":"⇔","𝔦":"𝔦","ì":"ì","ì":"ì","ⅈ":"ⅈ","⨌":"⨌","∭":"∭","⧜":"⧜","℩":"℩","ij":"ij","ī":"ī","ℑ":"ℑ","ℐ":"ℐ","ℑ":"ℑ","ı":"ı","⊷":"⊷","Ƶ":"Ƶ","∈":"∈","℅":"℅","∞":"∞","⧝":"⧝","ı":"ı","∫":"∫","⊺":"⊺","ℤ":"ℤ","⊺":"⊺","⨗":"⨗","⨼":"⨼","ё":"ё","į":"į","𝕚":"𝕚","ι":"ι","⨼":"⨼","¿":"¿","¿":"¿","𝒾":"𝒾","∈":"∈","⋹":"⋹","⋵":"⋵","⋴":"⋴","⋳":"⋳","∈":"∈","⁢":"⁢","ĩ":"ĩ","і":"і","ï":"ï","ï":"ï","ĵ":"ĵ","й":"й","𝔧":"𝔧","ȷ":"ȷ","𝕛":"𝕛","𝒿":"𝒿","ј":"ј","є":"є","κ":"κ","ϰ":"ϰ","ķ":"ķ","к":"к","𝔨":"𝔨","ĸ":"ĸ","х":"х","ќ":"ќ","𝕜":"𝕜","𝓀":"𝓀","⇚":"⇚","⇐":"⇐","⤛":"⤛","⤎":"⤎","≦":"≦","⪋":"⪋","⥢":"⥢","ĺ":"ĺ","⦴":"⦴","ℒ":"ℒ","λ":"λ","⟨":"⟨","⦑":"⦑","⟨":"⟨","⪅":"⪅","«":"«","«":"«","←":"←","⇤":"⇤","⤟":"⤟","⤝":"⤝","↩":"↩","↫":"↫","⤹":"⤹","⥳":"⥳","↢":"↢","⪫":"⪫","⤙":"⤙","⪭":"⪭","⪭︀":"⪭︀","⤌":"⤌","❲":"❲","{":"{","[":"[","⦋":"⦋","⦏":"⦏","⦍":"⦍","ľ":"ľ","ļ":"ļ","⌈":"⌈","{":"{","л":"л","⤶":"⤶","“":"“","„":"„","⥧":"⥧","⥋":"⥋","↲":"↲","≤":"≤","←":"←","↢":"↢","↽":"↽","↼":"↼","⇇":"⇇","↔":"↔","⇆":"⇆","⇋":"⇋","↭":"↭","⋋":"⋋","⋚":"⋚","≤":"≤","≦":"≦","⩽":"⩽","⩽":"⩽","⪨":"⪨","⩿":"⩿","⪁":"⪁","⪃":"⪃","⋚︀":"⋚︀","⪓":"⪓","⪅":"⪅","⋖":"⋖","⋚":"⋚","⪋":"⪋","≶":"≶","≲":"≲","⥼":"⥼","⌊":"⌊","𝔩":"𝔩","≶":"≶","⪑":"⪑","↽":"↽","↼":"↼","⥪":"⥪","▄":"▄","љ":"љ","≪":"≪","⇇":"⇇","⌞":"⌞","⥫":"⥫","◺":"◺","ŀ":"ŀ","⎰":"⎰","⎰":"⎰","≨":"≨","⪉":"⪉","⪉":"⪉","⪇":"⪇","⪇":"⪇","≨":"≨","⋦":"⋦","⟬":"⟬","⇽":"⇽","⟦":"⟦","⟵":"⟵","⟷":"⟷","⟼":"⟼","⟶":"⟶","↫":"↫","↬":"↬","⦅":"⦅","𝕝":"𝕝","⨭":"⨭","⨴":"⨴","∗":"∗","_":"_","◊":"◊","◊":"◊","⧫":"⧫","(":"(","⦓":"⦓","⇆":"⇆","⌟":"⌟","⇋":"⇋","⥭":"⥭","‎":"‎","⊿":"⊿","‹":"‹","𝓁":"𝓁","↰":"↰","≲":"≲","⪍":"⪍","⪏":"⪏","[":"[","‘":"‘","‚":"‚","ł":"ł","<":"<","<":"<","⪦":"⪦","⩹":"⩹","⋖":"⋖","⋋":"⋋","⋉":"⋉","⥶":"⥶","⩻":"⩻","⦖":"⦖","◃":"◃","⊴":"⊴","◂":"◂","⥊":"⥊","⥦":"⥦","≨︀":"≨︀","≨︀":"≨︀","∺":"∺","¯":"¯","¯":"¯","♂":"♂","✠":"✠","✠":"✠","↦":"↦","↦":"↦","↧":"↧","↤":"↤","↥":"↥","▮":"▮","⨩":"⨩","м":"м","—":"—","∡":"∡","𝔪":"𝔪","℧":"℧","µ":"µ","µ":"µ","∣":"∣","*":"*","⫰":"⫰","·":"·","·":"·","−":"−","⊟":"⊟","∸":"∸","⨪":"⨪","⫛":"⫛","…":"…","∓":"∓","⊧":"⊧","𝕞":"𝕞","∓":"∓","𝓂":"𝓂","∾":"∾","μ":"μ","⊸":"⊸","⊸":"⊸","⋙̸":"⋙̸","≫⃒":"≫⃒","≫̸":"≫̸","⇍":"⇍","⇎":"⇎","⋘̸":"⋘̸","≪⃒":"≪⃒","≪̸":"≪̸","⇏":"⇏","⊯":"⊯","⊮":"⊮","∇":"∇","ń":"ń","∠⃒":"∠⃒","≉":"≉","⩰̸":"⩰̸","≋̸":"≋̸","ʼn":"ʼn","≉":"≉","♮":"♮","♮":"♮","ℕ":"ℕ"," ":" "," ":" ","≎̸":"≎̸","≏̸":"≏̸","⩃":"⩃","ň":"ň","ņ":"ņ","≇":"≇","⩭̸":"⩭̸","⩂":"⩂","н":"н","–":"–","≠":"≠","⇗":"⇗","⤤":"⤤","↗":"↗","↗":"↗","≐̸":"≐̸","≢":"≢","⤨":"⤨","≂̸":"≂̸","∄":"∄","∄":"∄","𝔫":"𝔫","≧̸":"≧̸","≱":"≱","≱":"≱","≧̸":"≧̸","⩾̸":"⩾̸","⩾̸":"⩾̸","≵":"≵","≯":"≯","≯":"≯","⇎":"⇎","↮":"↮","⫲":"⫲","∋":"∋","⋼":"⋼","⋺":"⋺","∋":"∋","њ":"њ","⇍":"⇍","≦̸":"≦̸","↚":"↚","‥":"‥","≰":"≰","↚":"↚","↮":"↮","≰":"≰","≦̸":"≦̸","⩽̸":"⩽̸","⩽̸":"⩽̸","≮":"≮","≴":"≴","≮":"≮","⋪":"⋪","⋬":"⋬","∤":"∤","𝕟":"𝕟","¬":"¬","¬":"¬","∉":"∉","⋹̸":"⋹̸","⋵̸":"⋵̸","∉":"∉","⋷":"⋷","⋶":"⋶","∌":"∌","∌":"∌","⋾":"⋾","⋽":"⋽","∦":"∦","∦":"∦","⫽⃥":"⫽⃥","∂̸":"∂̸","⨔":"⨔","⊀":"⊀","⋠":"⋠","⪯̸":"⪯̸","⊀":"⊀","⪯̸":"⪯̸","⇏":"⇏","↛":"↛","⤳̸":"⤳̸","↝̸":"↝̸","↛":"↛","⋫":"⋫","⋭":"⋭","⊁":"⊁","⋡":"⋡","⪰̸":"⪰̸","𝓃":"𝓃","∤":"∤","∦":"∦","≁":"≁","≄":"≄","≄":"≄","∤":"∤","∦":"∦","⋢":"⋢","⋣":"⋣","⊄":"⊄","⫅̸":"⫅̸","⊈":"⊈","⊂⃒":"⊂⃒","⊈":"⊈","⫅̸":"⫅̸","⊁":"⊁","⪰̸":"⪰̸","⊅":"⊅","⫆̸":"⫆̸","⊉":"⊉","⊃⃒":"⊃⃒","⊉":"⊉","⫆̸":"⫆̸","≹":"≹","ñ":"ñ","ñ":"ñ","≸":"≸","⋪":"⋪","⋬":"⋬","⋫":"⋫","⋭":"⋭","ν":"ν","#":"#","№":"№"," ":" ","⊭":"⊭","⤄":"⤄","≍⃒":"≍⃒","⊬":"⊬","≥⃒":"≥⃒",">⃒":">⃒","⧞":"⧞","⤂":"⤂","≤⃒":"≤⃒","<⃒":"<⃒","⊴⃒":"⊴⃒","⤃":"⤃","⊵⃒":"⊵⃒","∼⃒":"∼⃒","⇖":"⇖","⤣":"⤣","↖":"↖","↖":"↖","⤧":"⤧","Ⓢ":"Ⓢ","ó":"ó","ó":"ó","⊛":"⊛","⊚":"⊚","ô":"ô","ô":"ô","о":"о","⊝":"⊝","ő":"ő","⨸":"⨸","⊙":"⊙","⦼":"⦼","œ":"œ","⦿":"⦿","𝔬":"𝔬","˛":"˛","ò":"ò","ò":"ò","⧁":"⧁","⦵":"⦵","Ω":"Ω","∮":"∮","↺":"↺","⦾":"⦾","⦻":"⦻","‾":"‾","⧀":"⧀","ō":"ō","ω":"ω","ο":"ο","⦶":"⦶","⊖":"⊖","𝕠":"𝕠","⦷":"⦷","⦹":"⦹","⊕":"⊕","∨":"∨","↻":"↻","⩝":"⩝","ℴ":"ℴ","ℴ":"ℴ","ª":"ª","ª":"ª","º":"º","º":"º","⊶":"⊶","⩖":"⩖","⩗":"⩗","⩛":"⩛","ℴ":"ℴ","ø":"ø","ø":"ø","⊘":"⊘","õ":"õ","õ":"õ","⊗":"⊗","⨶":"⨶","ö":"ö","ö":"ö","⌽":"⌽","∥":"∥","¶":"¶","¶":"¶","∥":"∥","⫳":"⫳","⫽":"⫽","∂":"∂","п":"п","%":"%",".":".","‰":"‰","⊥":"⊥","‱":"‱","𝔭":"𝔭","φ":"φ","ϕ":"ϕ","ℳ":"ℳ","☎":"☎","π":"π","⋔":"⋔","ϖ":"ϖ","ℏ":"ℏ","ℎ":"ℎ","ℏ":"ℏ","+":"+","⨣":"⨣","⊞":"⊞","⨢":"⨢","∔":"∔","⨥":"⨥","⩲":"⩲","±":"±","±":"±","⨦":"⨦","⨧":"⨧","±":"±","⨕":"⨕","𝕡":"𝕡","£":"£","£":"£","≺":"≺","⪳":"⪳","⪷":"⪷","≼":"≼","⪯":"⪯","≺":"≺","⪷":"⪷","≼":"≼","⪯":"⪯","⪹":"⪹","⪵":"⪵","⋨":"⋨","≾":"≾","′":"′","ℙ":"ℙ","⪵":"⪵","⪹":"⪹","⋨":"⋨","∏":"∏","⌮":"⌮","⌒":"⌒","⌓":"⌓","∝":"∝","∝":"∝","≾":"≾","⊰":"⊰","𝓅":"𝓅","ψ":"ψ"," ":" ","𝔮":"𝔮","⨌":"⨌","𝕢":"𝕢","⁗":"⁗","𝓆":"𝓆","ℍ":"ℍ","⨖":"⨖","?":"?","≟":"≟",""":'"',""":'"',"⇛":"⇛","⇒":"⇒","⤜":"⤜","⤏":"⤏","⥤":"⥤","∽̱":"∽̱","ŕ":"ŕ","√":"√","⦳":"⦳","⟩":"⟩","⦒":"⦒","⦥":"⦥","⟩":"⟩","»":"»","»":"»","→":"→","⥵":"⥵","⇥":"⇥","⤠":"⤠","⤳":"⤳","⤞":"⤞","↪":"↪","↬":"↬","⥅":"⥅","⥴":"⥴","↣":"↣","↝":"↝","⤚":"⤚","∶":"∶","ℚ":"ℚ","⤍":"⤍","❳":"❳","}":"}","]":"]","⦌":"⦌","⦎":"⦎","⦐":"⦐","ř":"ř","ŗ":"ŗ","⌉":"⌉","}":"}","р":"р","⤷":"⤷","⥩":"⥩","”":"”","”":"”","↳":"↳","ℜ":"ℜ","ℛ":"ℛ","ℜ":"ℜ","ℝ":"ℝ","▭":"▭","®":"®","®":"®","⥽":"⥽","⌋":"⌋","𝔯":"𝔯","⇁":"⇁","⇀":"⇀","⥬":"⥬","ρ":"ρ","ϱ":"ϱ","→":"→","↣":"↣","⇁":"⇁","⇀":"⇀","⇄":"⇄","⇌":"⇌","⇉":"⇉","↝":"↝","⋌":"⋌","˚":"˚","≓":"≓","⇄":"⇄","⇌":"⇌","‏":"‏","⎱":"⎱","⎱":"⎱","⫮":"⫮","⟭":"⟭","⇾":"⇾","⟧":"⟧","⦆":"⦆","𝕣":"𝕣","⨮":"⨮","⨵":"⨵",")":")","⦔":"⦔","⨒":"⨒","⇉":"⇉","›":"›","𝓇":"𝓇","↱":"↱","]":"]","’":"’","’":"’","⋌":"⋌","⋊":"⋊","▹":"▹","⊵":"⊵","▸":"▸","⧎":"⧎","⥨":"⥨","℞":"℞","ś":"ś","‚":"‚","≻":"≻","⪴":"⪴","⪸":"⪸","š":"š","≽":"≽","⪰":"⪰","ş":"ş","ŝ":"ŝ","⪶":"⪶","⪺":"⪺","⋩":"⋩","⨓":"⨓","≿":"≿","с":"с","⋅":"⋅","⊡":"⊡","⩦":"⩦","⇘":"⇘","⤥":"⤥","↘":"↘","↘":"↘","§":"§","§":"§",";":";","⤩":"⤩","∖":"∖","∖":"∖","✶":"✶","𝔰":"𝔰","⌢":"⌢","♯":"♯","щ":"щ","ш":"ш","∣":"∣","∥":"∥","­":"­","­":"­","σ":"σ","ς":"ς","ς":"ς","∼":"∼","⩪":"⩪","≃":"≃","≃":"≃","⪞":"⪞","⪠":"⪠","⪝":"⪝","⪟":"⪟","≆":"≆","⨤":"⨤","⥲":"⥲","←":"←","∖":"∖","⨳":"⨳","⧤":"⧤","∣":"∣","⌣":"⌣","⪪":"⪪","⪬":"⪬","⪬︀":"⪬︀","ь":"ь","/":"/","⧄":"⧄","⌿":"⌿","𝕤":"𝕤","♠":"♠","♠":"♠","∥":"∥","⊓":"⊓","⊓︀":"⊓︀","⊔":"⊔","⊔︀":"⊔︀","⊏":"⊏","⊑":"⊑","⊏":"⊏","⊑":"⊑","⊐":"⊐","⊒":"⊒","⊐":"⊐","⊒":"⊒","□":"□","□":"□","▪":"▪","▪":"▪","→":"→","𝓈":"𝓈","∖":"∖","⌣":"⌣","⋆":"⋆","☆":"☆","★":"★","ϵ":"ϵ","ϕ":"ϕ","¯":"¯","⊂":"⊂","⫅":"⫅","⪽":"⪽","⊆":"⊆","⫃":"⫃","⫁":"⫁","⫋":"⫋","⊊":"⊊","⪿":"⪿","⥹":"⥹","⊂":"⊂","⊆":"⊆","⫅":"⫅","⊊":"⊊","⫋":"⫋","⫇":"⫇","⫕":"⫕","⫓":"⫓","≻":"≻","⪸":"⪸","≽":"≽","⪰":"⪰","⪺":"⪺","⪶":"⪶","⋩":"⋩","≿":"≿","∑":"∑","♪":"♪","¹":"¹","¹":"¹","²":"²","²":"²","³":"³","³":"³","⊃":"⊃","⫆":"⫆","⪾":"⪾","⫘":"⫘","⊇":"⊇","⫄":"⫄","⟉":"⟉","⫗":"⫗","⥻":"⥻","⫂":"⫂","⫌":"⫌","⊋":"⊋","⫀":"⫀","⊃":"⊃","⊇":"⊇","⫆":"⫆","⊋":"⊋","⫌":"⫌","⫈":"⫈","⫔":"⫔","⫖":"⫖","⇙":"⇙","⤦":"⤦","↙":"↙","↙":"↙","⤪":"⤪","ß":"ß","ß":"ß","⌖":"⌖","τ":"τ","⎴":"⎴","ť":"ť","ţ":"ţ","т":"т","⃛":"⃛","⌕":"⌕","𝔱":"𝔱","∴":"∴","∴":"∴","θ":"θ","ϑ":"ϑ","ϑ":"ϑ","≈":"≈","∼":"∼"," ":" ","≈":"≈","∼":"∼","þ":"þ","þ":"þ","˜":"˜","×":"×","×":"×","⊠":"⊠","⨱":"⨱","⨰":"⨰","∭":"∭","⤨":"⤨","⊤":"⊤","⌶":"⌶","⫱":"⫱","𝕥":"𝕥","⫚":"⫚","⤩":"⤩","‴":"‴","™":"™","▵":"▵","▿":"▿","◃":"◃","⊴":"⊴","≜":"≜","▹":"▹","⊵":"⊵","◬":"◬","≜":"≜","⨺":"⨺","⨹":"⨹","⧍":"⧍","⨻":"⨻","⏢":"⏢","𝓉":"𝓉","ц":"ц","ћ":"ћ","ŧ":"ŧ","≬":"≬","↞":"↞","↠":"↠","⇑":"⇑","⥣":"⥣","ú":"ú","ú":"ú","↑":"↑","ў":"ў","ŭ":"ŭ","û":"û","û":"û","у":"у","⇅":"⇅","ű":"ű","⥮":"⥮","⥾":"⥾","𝔲":"𝔲","ù":"ù","ù":"ù","↿":"↿","↾":"↾","▀":"▀","⌜":"⌜","⌜":"⌜","⌏":"⌏","◸":"◸","ū":"ū","¨":"¨","¨":"¨","ų":"ų","𝕦":"𝕦","↑":"↑","↕":"↕","↿":"↿","↾":"↾","⊎":"⊎","υ":"υ","ϒ":"ϒ","υ":"υ","⇈":"⇈","⌝":"⌝","⌝":"⌝","⌎":"⌎","ů":"ů","◹":"◹","𝓊":"𝓊","⋰":"⋰","ũ":"ũ","▵":"▵","▴":"▴","⇈":"⇈","ü":"ü","ü":"ü","⦧":"⦧","⇕":"⇕","⫨":"⫨","⫩":"⫩","⊨":"⊨","⦜":"⦜","ϵ":"ϵ","ϰ":"ϰ","∅":"∅","ϕ":"ϕ","ϖ":"ϖ","∝":"∝","↕":"↕","ϱ":"ϱ","ς":"ς","⊊︀":"⊊︀","⫋︀":"⫋︀","⊋︀":"⊋︀","⫌︀":"⫌︀","ϑ":"ϑ","⊲":"⊲","⊳":"⊳","в":"в","⊢":"⊢","∨":"∨","⊻":"⊻","≚":"≚","⋮":"⋮","|":"|","|":"|","𝔳":"𝔳","⊲":"⊲","⊂⃒":"⊂⃒","⊃⃒":"⊃⃒","𝕧":"𝕧","∝":"∝","⊳":"⊳","𝓋":"𝓋","⫋︀":"⫋︀","⊊︀":"⊊︀","⫌︀":"⫌︀","⊋︀":"⊋︀","⦚":"⦚","ŵ":"ŵ","⩟":"⩟","∧":"∧","≙":"≙","℘":"℘","𝔴":"𝔴","𝕨":"𝕨","℘":"℘","≀":"≀","≀":"≀","𝓌":"𝓌","⋂":"⋂","◯":"◯","⋃":"⋃","▽":"▽","𝔵":"𝔵","⟺":"⟺","⟷":"⟷","ξ":"ξ","⟸":"⟸","⟵":"⟵","⟼":"⟼","⋻":"⋻","⨀":"⨀","𝕩":"𝕩","⨁":"⨁","⨂":"⨂","⟹":"⟹","⟶":"⟶","𝓍":"𝓍","⨆":"⨆","⨄":"⨄","△":"△","⋁":"⋁","⋀":"⋀","ý":"ý","ý":"ý","я":"я","ŷ":"ŷ","ы":"ы","¥":"¥","¥":"¥","𝔶":"𝔶","ї":"ї","𝕪":"𝕪","𝓎":"𝓎","ю":"ю","ÿ":"ÿ","ÿ":"ÿ","ź":"ź","ž":"ž","з":"з","ż":"ż","ℨ":"ℨ","ζ":"ζ","𝔷":"𝔷","ж":"ж","⇝":"⇝","𝕫":"𝕫","𝓏":"𝓏","‍":"‍","‌":"‌"},characters:{"Æ":"Æ","&":"&","Á":"Á","Ă":"Ă","Â":"Â","А":"А","𝔄":"𝔄","À":"À","Α":"Α","Ā":"Ā","⩓":"⩓","Ą":"Ą","𝔸":"𝔸","⁡":"⁡","Å":"Å","𝒜":"𝒜","≔":"≔","Ã":"Ã","Ä":"Ä","∖":"∖","⫧":"⫧","⌆":"⌆","Б":"Б","∵":"∵","ℬ":"ℬ","Β":"Β","𝔅":"𝔅","𝔹":"𝔹","˘":"˘","≎":"≎","Ч":"Ч","©":"©","Ć":"Ć","⋒":"⋒","ⅅ":"ⅅ","ℭ":"ℭ","Č":"Č","Ç":"Ç","Ĉ":"Ĉ","∰":"∰","Ċ":"Ċ","¸":"¸","·":"·","Χ":"Χ","⊙":"⊙","⊖":"⊖","⊕":"⊕","⊗":"⊗","∲":"∲","”":"”","’":"’","∷":"∷","⩴":"⩴","≡":"≡","∯":"∯","∮":"∮","ℂ":"ℂ","∐":"∐","∳":"∳","⨯":"⨯","𝒞":"𝒞","⋓":"⋓","≍":"≍","⤑":"⤑","Ђ":"Ђ","Ѕ":"Ѕ","Џ":"Џ","‡":"‡","↡":"↡","⫤":"⫤","Ď":"Ď","Д":"Д","∇":"∇","Δ":"Δ","𝔇":"𝔇","´":"´","˙":"˙","˝":"˝","`":"`","˜":"˜","⋄":"⋄","ⅆ":"ⅆ","𝔻":"𝔻","¨":"¨","⃜":"⃜","≐":"≐","⇓":"⇓","⇐":"⇐","⇔":"⇔","⟸":"⟸","⟺":"⟺","⟹":"⟹","⇒":"⇒","⊨":"⊨","⇑":"⇑","⇕":"⇕","∥":"∥","↓":"↓","⤓":"⤓","⇵":"⇵","̑":"̑","⥐":"⥐","⥞":"⥞","↽":"↽","⥖":"⥖","⥟":"⥟","⇁":"⇁","⥗":"⥗","⊤":"⊤","↧":"↧","𝒟":"𝒟","Đ":"Đ","Ŋ":"Ŋ","Ð":"Ð","É":"É","Ě":"Ě","Ê":"Ê","Э":"Э","Ė":"Ė","𝔈":"𝔈","È":"È","∈":"∈","Ē":"Ē","◻":"◻","▫":"▫","Ę":"Ę","𝔼":"𝔼","Ε":"Ε","⩵":"⩵","≂":"≂","⇌":"⇌","ℰ":"ℰ","⩳":"⩳","Η":"Η","Ë":"Ë","∃":"∃","ⅇ":"ⅇ","Ф":"Ф","𝔉":"𝔉","◼":"◼","▪":"▪","𝔽":"𝔽","∀":"∀","ℱ":"ℱ","Ѓ":"Ѓ",">":">","Γ":"Γ","Ϝ":"Ϝ","Ğ":"Ğ","Ģ":"Ģ","Ĝ":"Ĝ","Г":"Г","Ġ":"Ġ","𝔊":"𝔊","⋙":"⋙","𝔾":"𝔾","≥":"≥","⋛":"⋛","≧":"≧","⪢":"⪢","≷":"≷","⩾":"⩾","≳":"≳","𝒢":"𝒢","≫":"≫","Ъ":"Ъ","ˇ":"ˇ","^":"^","Ĥ":"Ĥ","ℌ":"ℌ","ℋ":"ℋ","ℍ":"ℍ","─":"─","Ħ":"Ħ","≏":"≏","Е":"Е","IJ":"IJ","Ё":"Ё","Í":"Í","Î":"Î","И":"И","İ":"İ","ℑ":"ℑ","Ì":"Ì","Ī":"Ī","ⅈ":"ⅈ","∬":"∬","∫":"∫","⋂":"⋂","⁣":"⁣","⁢":"⁢","Į":"Į","𝕀":"𝕀","Ι":"Ι","ℐ":"ℐ","Ĩ":"Ĩ","І":"І","Ï":"Ï","Ĵ":"Ĵ","Й":"Й","𝔍":"𝔍","𝕁":"𝕁","𝒥":"𝒥","Ј":"Ј","Є":"Є","Х":"Х","Ќ":"Ќ","Κ":"Κ","Ķ":"Ķ","К":"К","𝔎":"𝔎","𝕂":"𝕂","𝒦":"𝒦","Љ":"Љ","<":"<","Ĺ":"Ĺ","Λ":"Λ","⟪":"⟪","ℒ":"ℒ","↞":"↞","Ľ":"Ľ","Ļ":"Ļ","Л":"Л","⟨":"⟨","←":"←","⇤":"⇤","⇆":"⇆","⌈":"⌈","⟦":"⟦","⥡":"⥡","⇃":"⇃","⥙":"⥙","⌊":"⌊","↔":"↔","⥎":"⥎","⊣":"⊣","↤":"↤","⥚":"⥚","⊲":"⊲","⧏":"⧏","⊴":"⊴","⥑":"⥑","⥠":"⥠","↿":"↿","⥘":"⥘","↼":"↼","⥒":"⥒","⋚":"⋚","≦":"≦","≶":"≶","⪡":"⪡","⩽":"⩽","≲":"≲","𝔏":"𝔏","⋘":"⋘","⇚":"⇚","Ŀ":"Ŀ","⟵":"⟵","⟷":"⟷","⟶":"⟶","𝕃":"𝕃","↙":"↙","↘":"↘","↰":"↰","Ł":"Ł","≪":"≪","⤅":"⤅","М":"М"," ":" ","ℳ":"ℳ","𝔐":"𝔐","∓":"∓","𝕄":"𝕄","Μ":"Μ","Њ":"Њ","Ń":"Ń","Ň":"Ň","Ņ":"Ņ","Н":"Н","​":"​","\n":" ","𝔑":"𝔑","⁠":"⁠"," ":" ","ℕ":"ℕ","⫬":"⫬","≢":"≢","≭":"≭","∦":"∦","∉":"∉","≠":"≠","≂̸":"≂̸","∄":"∄","≯":"≯","≱":"≱","≧̸":"≧̸","≫̸":"≫̸","≹":"≹","⩾̸":"⩾̸","≵":"≵","≎̸":"≎̸","≏̸":"≏̸","⋪":"⋪","⧏̸":"⧏̸","⋬":"⋬","≮":"≮","≰":"≰","≸":"≸","≪̸":"≪̸","⩽̸":"⩽̸","≴":"≴","⪢̸":"⪢̸","⪡̸":"⪡̸","⊀":"⊀","⪯̸":"⪯̸","⋠":"⋠","∌":"∌","⋫":"⋫","⧐̸":"⧐̸","⋭":"⋭","⊏̸":"⊏̸","⋢":"⋢","⊐̸":"⊐̸","⋣":"⋣","⊂⃒":"⊂⃒","⊈":"⊈","⊁":"⊁","⪰̸":"⪰̸","⋡":"⋡","≿̸":"≿̸","⊃⃒":"⊃⃒","⊉":"⊉","≁":"≁","≄":"≄","≇":"≇","≉":"≉","∤":"∤","𝒩":"𝒩","Ñ":"Ñ","Ν":"Ν","Œ":"Œ","Ó":"Ó","Ô":"Ô","О":"О","Ő":"Ő","𝔒":"𝔒","Ò":"Ò","Ō":"Ō","Ω":"Ω","Ο":"Ο","𝕆":"𝕆","“":"“","‘":"‘","⩔":"⩔","𝒪":"𝒪","Ø":"Ø","Õ":"Õ","⨷":"⨷","Ö":"Ö","‾":"‾","⏞":"⏞","⎴":"⎴","⏜":"⏜","∂":"∂","П":"П","𝔓":"𝔓","Φ":"Φ","Π":"Π","±":"±","ℙ":"ℙ","⪻":"⪻","≺":"≺","⪯":"⪯","≼":"≼","≾":"≾","″":"″","∏":"∏","∝":"∝","𝒫":"𝒫","Ψ":"Ψ",'"':""","𝔔":"𝔔","ℚ":"ℚ","𝒬":"𝒬","⤐":"⤐","®":"®","Ŕ":"Ŕ","⟫":"⟫","↠":"↠","⤖":"⤖","Ř":"Ř","Ŗ":"Ŗ","Р":"Р","ℜ":"ℜ","∋":"∋","⇋":"⇋","⥯":"⥯","Ρ":"Ρ","⟩":"⟩","→":"→","⇥":"⇥","⇄":"⇄","⌉":"⌉","⟧":"⟧","⥝":"⥝","⇂":"⇂","⥕":"⥕","⌋":"⌋","⊢":"⊢","↦":"↦","⥛":"⥛","⊳":"⊳","⧐":"⧐","⊵":"⊵","⥏":"⥏","⥜":"⥜","↾":"↾","⥔":"⥔","⇀":"⇀","⥓":"⥓","ℝ":"ℝ","⥰":"⥰","⇛":"⇛","ℛ":"ℛ","↱":"↱","⧴":"⧴","Щ":"Щ","Ш":"Ш","Ь":"Ь","Ś":"Ś","⪼":"⪼","Š":"Š","Ş":"Ş","Ŝ":"Ŝ","С":"С","𝔖":"𝔖","↑":"↑","Σ":"Σ","∘":"∘","𝕊":"𝕊","√":"√","□":"□","⊓":"⊓","⊏":"⊏","⊑":"⊑","⊐":"⊐","⊒":"⊒","⊔":"⊔","𝒮":"𝒮","⋆":"⋆","⋐":"⋐","⊆":"⊆","≻":"≻","⪰":"⪰","≽":"≽","≿":"≿","∑":"∑","⋑":"⋑","⊃":"⊃","⊇":"⊇","Þ":"Þ","™":"™","Ћ":"Ћ","Ц":"Ц","\t":" ","Τ":"Τ","Ť":"Ť","Ţ":"Ţ","Т":"Т","𝔗":"𝔗","∴":"∴","Θ":"Θ","  ":"  "," ":" ","∼":"∼","≃":"≃","≅":"≅","≈":"≈","𝕋":"𝕋","⃛":"⃛","𝒯":"𝒯","Ŧ":"Ŧ","Ú":"Ú","↟":"↟","⥉":"⥉","Ў":"Ў","Ŭ":"Ŭ","Û":"Û","У":"У","Ű":"Ű","𝔘":"𝔘","Ù":"Ù","Ū":"Ū",_:"_","⏟":"⏟","⎵":"⎵","⏝":"⏝","⋃":"⋃","⊎":"⊎","Ų":"Ų","𝕌":"𝕌","⤒":"⤒","⇅":"⇅","↕":"↕","⥮":"⥮","⊥":"⊥","↥":"↥","↖":"↖","↗":"↗","ϒ":"ϒ","Υ":"Υ","Ů":"Ů","𝒰":"𝒰","Ũ":"Ũ","Ü":"Ü","⊫":"⊫","⫫":"⫫","В":"В","⊩":"⊩","⫦":"⫦","⋁":"⋁","‖":"‖","∣":"∣","|":"|","❘":"❘","≀":"≀"," ":" ","𝔙":"𝔙","𝕍":"𝕍","𝒱":"𝒱","⊪":"⊪","Ŵ":"Ŵ","⋀":"⋀","𝔚":"𝔚","𝕎":"𝕎","𝒲":"𝒲","𝔛":"𝔛","Ξ":"Ξ","𝕏":"𝕏","𝒳":"𝒳","Я":"Я","Ї":"Ї","Ю":"Ю","Ý":"Ý","Ŷ":"Ŷ","Ы":"Ы","𝔜":"𝔜","𝕐":"𝕐","𝒴":"𝒴","Ÿ":"Ÿ","Ж":"Ж","Ź":"Ź","Ž":"Ž","З":"З","Ż":"Ż","Ζ":"Ζ","ℨ":"ℨ","ℤ":"ℤ","𝒵":"𝒵","á":"á","ă":"ă","∾":"∾","∾̳":"∾̳","∿":"∿","â":"â","а":"а","æ":"æ","𝔞":"𝔞","à":"à","ℵ":"ℵ","α":"α","ā":"ā","⨿":"⨿","∧":"∧","⩕":"⩕","⩜":"⩜","⩘":"⩘","⩚":"⩚","∠":"∠","⦤":"⦤","∡":"∡","⦨":"⦨","⦩":"⦩","⦪":"⦪","⦫":"⦫","⦬":"⦬","⦭":"⦭","⦮":"⦮","⦯":"⦯","∟":"∟","⊾":"⊾","⦝":"⦝","∢":"∢","⍼":"⍼","ą":"ą","𝕒":"𝕒","⩰":"⩰","⩯":"⩯","≊":"≊","≋":"≋","'":"'","å":"å","𝒶":"𝒶","*":"*","ã":"ã","ä":"ä","⨑":"⨑","⫭":"⫭","≌":"≌","϶":"϶","‵":"‵","∽":"∽","⋍":"⋍","⊽":"⊽","⌅":"⌅","⎶":"⎶","б":"б","„":"„","⦰":"⦰","β":"β","ℶ":"ℶ","≬":"≬","𝔟":"𝔟","◯":"◯","⨀":"⨀","⨁":"⨁","⨂":"⨂","⨆":"⨆","★":"★","▽":"▽","△":"△","⨄":"⨄","⤍":"⤍","⧫":"⧫","▴":"▴","▾":"▾","◂":"◂","▸":"▸","␣":"␣","▒":"▒","░":"░","▓":"▓","█":"█","=⃥":"=⃥","≡⃥":"≡⃥","⌐":"⌐","𝕓":"𝕓","⋈":"⋈","╗":"╗","╔":"╔","╖":"╖","╓":"╓","═":"═","╦":"╦","╩":"╩","╤":"╤","╧":"╧","╝":"╝","╚":"╚","╜":"╜","╙":"╙","║":"║","╬":"╬","╣":"╣","╠":"╠","╫":"╫","╢":"╢","╟":"╟","⧉":"⧉","╕":"╕","╒":"╒","┐":"┐","┌":"┌","╥":"╥","╨":"╨","┬":"┬","┴":"┴","⊟":"⊟","⊞":"⊞","⊠":"⊠","╛":"╛","╘":"╘","┘":"┘","└":"└","│":"│","╪":"╪","╡":"╡","╞":"╞","┼":"┼","┤":"┤","├":"├","¦":"¦","𝒷":"𝒷","⁏":"⁏","\\":"\","⧅":"⧅","⟈":"⟈","•":"•","⪮":"⪮","ć":"ć","∩":"∩","⩄":"⩄","⩉":"⩉","⩋":"⩋","⩇":"⩇","⩀":"⩀","∩︀":"∩︀","⁁":"⁁","⩍":"⩍","č":"č","ç":"ç","ĉ":"ĉ","⩌":"⩌","⩐":"⩐","ċ":"ċ","⦲":"⦲","¢":"¢","𝔠":"𝔠","ч":"ч","✓":"✓","χ":"χ","○":"○","⧃":"⧃","ˆ":"ˆ","≗":"≗","↺":"↺","↻":"↻","Ⓢ":"Ⓢ","⊛":"⊛","⊚":"⊚","⊝":"⊝","⨐":"⨐","⫯":"⫯","⧂":"⧂","♣":"♣",":":":",",":",","@":"@","∁":"∁","⩭":"⩭","𝕔":"𝕔","℗":"℗","↵":"↵","✗":"✗","𝒸":"𝒸","⫏":"⫏","⫑":"⫑","⫐":"⫐","⫒":"⫒","⋯":"⋯","⤸":"⤸","⤵":"⤵","⋞":"⋞","⋟":"⋟","↶":"↶","⤽":"⤽","∪":"∪","⩈":"⩈","⩆":"⩆","⩊":"⩊","⊍":"⊍","⩅":"⩅","∪︀":"∪︀","↷":"↷","⤼":"⤼","⋎":"⋎","⋏":"⋏","¤":"¤","∱":"∱","⌭":"⌭","⥥":"⥥","†":"†","ℸ":"ℸ","‐":"‐","⤏":"⤏","ď":"ď","д":"д","⇊":"⇊","⩷":"⩷","°":"°","δ":"δ","⦱":"⦱","⥿":"⥿","𝔡":"𝔡","♦":"♦","ϝ":"ϝ","⋲":"⋲","÷":"÷","⋇":"⋇","ђ":"ђ","⌞":"⌞","⌍":"⌍",$:"$","𝕕":"𝕕","≑":"≑","∸":"∸","∔":"∔","⊡":"⊡","⌟":"⌟","⌌":"⌌","𝒹":"𝒹","ѕ":"ѕ","⧶":"⧶","đ":"đ","⋱":"⋱","▿":"▿","⦦":"⦦","џ":"џ","⟿":"⟿","é":"é","⩮":"⩮","ě":"ě","≖":"≖","ê":"ê","≕":"≕","э":"э","ė":"ė","≒":"≒","𝔢":"𝔢","⪚":"⪚","è":"è","⪖":"⪖","⪘":"⪘","⪙":"⪙","⏧":"⏧","ℓ":"ℓ","⪕":"⪕","⪗":"⪗","ē":"ē","∅":"∅"," ":" "," ":" "," ":" ","ŋ":"ŋ"," ":" ","ę":"ę","𝕖":"𝕖","⋕":"⋕","⧣":"⧣","⩱":"⩱","ε":"ε","ϵ":"ϵ","=":"=","≟":"≟","⩸":"⩸","⧥":"⧥","≓":"≓","⥱":"⥱","ℯ":"ℯ","η":"η","ð":"ð","ë":"ë","€":"€","!":"!","ф":"ф","♀":"♀","ffi":"ffi","ff":"ff","ffl":"ffl","𝔣":"𝔣","fi":"fi",fj:"fj","♭":"♭","fl":"fl","▱":"▱","ƒ":"ƒ","𝕗":"𝕗","⋔":"⋔","⫙":"⫙","⨍":"⨍","½":"½","⅓":"⅓","¼":"¼","⅕":"⅕","⅙":"⅙","⅛":"⅛","⅔":"⅔","⅖":"⅖","¾":"¾","⅗":"⅗","⅜":"⅜","⅘":"⅘","⅚":"⅚","⅝":"⅝","⅞":"⅞","⁄":"⁄","⌢":"⌢","𝒻":"𝒻","⪌":"⪌","ǵ":"ǵ","γ":"γ","⪆":"⪆","ğ":"ğ","ĝ":"ĝ","г":"г","ġ":"ġ","⪩":"⪩","⪀":"⪀","⪂":"⪂","⪄":"⪄","⋛︀":"⋛︀","⪔":"⪔","𝔤":"𝔤","ℷ":"ℷ","ѓ":"ѓ","⪒":"⪒","⪥":"⪥","⪤":"⪤","≩":"≩","⪊":"⪊","⪈":"⪈","⋧":"⋧","𝕘":"𝕘","ℊ":"ℊ","⪎":"⪎","⪐":"⪐","⪧":"⪧","⩺":"⩺","⋗":"⋗","⦕":"⦕","⩼":"⩼","⥸":"⥸","≩︀":"≩︀","ъ":"ъ","⥈":"⥈","↭":"↭","ℏ":"ℏ","ĥ":"ĥ","♥":"♥","…":"…","⊹":"⊹","𝔥":"𝔥","⤥":"⤥","⤦":"⤦","⇿":"⇿","∻":"∻","↩":"↩","↪":"↪","𝕙":"𝕙","―":"―","𝒽":"𝒽","ħ":"ħ","⁃":"⁃","í":"í","î":"î","и":"и","е":"е","¡":"¡","𝔦":"𝔦","ì":"ì","⨌":"⨌","∭":"∭","⧜":"⧜","℩":"℩","ij":"ij","ī":"ī","ı":"ı","⊷":"⊷","Ƶ":"Ƶ","℅":"℅","∞":"∞","⧝":"⧝","⊺":"⊺","⨗":"⨗","⨼":"⨼","ё":"ё","į":"į","𝕚":"𝕚","ι":"ι","¿":"¿","𝒾":"𝒾","⋹":"⋹","⋵":"⋵","⋴":"⋴","⋳":"⋳","ĩ":"ĩ","і":"і","ï":"ï","ĵ":"ĵ","й":"й","𝔧":"𝔧","ȷ":"ȷ","𝕛":"𝕛","𝒿":"𝒿","ј":"ј","є":"є","κ":"κ","ϰ":"ϰ","ķ":"ķ","к":"к","𝔨":"𝔨","ĸ":"ĸ","х":"х","ќ":"ќ","𝕜":"𝕜","𝓀":"𝓀","⤛":"⤛","⤎":"⤎","⪋":"⪋","⥢":"⥢","ĺ":"ĺ","⦴":"⦴","λ":"λ","⦑":"⦑","⪅":"⪅","«":"«","⤟":"⤟","⤝":"⤝","↫":"↫","⤹":"⤹","⥳":"⥳","↢":"↢","⪫":"⪫","⤙":"⤙","⪭":"⪭","⪭︀":"⪭︀","⤌":"⤌","❲":"❲","{":"{","[":"[","⦋":"⦋","⦏":"⦏","⦍":"⦍","ľ":"ľ","ļ":"ļ","л":"л","⤶":"⤶","⥧":"⥧","⥋":"⥋","↲":"↲","≤":"≤","⇇":"⇇","⋋":"⋋","⪨":"⪨","⩿":"⩿","⪁":"⪁","⪃":"⪃","⋚︀":"⋚︀","⪓":"⪓","⋖":"⋖","⥼":"⥼","𝔩":"𝔩","⪑":"⪑","⥪":"⥪","▄":"▄","љ":"љ","⥫":"⥫","◺":"◺","ŀ":"ŀ","⎰":"⎰","≨":"≨","⪉":"⪉","⪇":"⪇","⋦":"⋦","⟬":"⟬","⇽":"⇽","⟼":"⟼","↬":"↬","⦅":"⦅","𝕝":"𝕝","⨭":"⨭","⨴":"⨴","∗":"∗","◊":"◊","(":"(","⦓":"⦓","⥭":"⥭","‎":"‎","⊿":"⊿","‹":"‹","𝓁":"𝓁","⪍":"⪍","⪏":"⪏","‚":"‚","ł":"ł","⪦":"⪦","⩹":"⩹","⋉":"⋉","⥶":"⥶","⩻":"⩻","⦖":"⦖","◃":"◃","⥊":"⥊","⥦":"⥦","≨︀":"≨︀","∺":"∺","¯":"¯","♂":"♂","✠":"✠","▮":"▮","⨩":"⨩","м":"м","—":"—","𝔪":"𝔪","℧":"℧","µ":"µ","⫰":"⫰","−":"−","⨪":"⨪","⫛":"⫛","⊧":"⊧","𝕞":"𝕞","𝓂":"𝓂","μ":"μ","⊸":"⊸","⋙̸":"⋙̸","≫⃒":"≫⃒","⇍":"⇍","⇎":"⇎","⋘̸":"⋘̸","≪⃒":"≪⃒","⇏":"⇏","⊯":"⊯","⊮":"⊮","ń":"ń","∠⃒":"∠⃒","⩰̸":"⩰̸","≋̸":"≋̸","ʼn":"ʼn","♮":"♮","⩃":"⩃","ň":"ň","ņ":"ņ","⩭̸":"⩭̸","⩂":"⩂","н":"н","–":"–","⇗":"⇗","⤤":"⤤","≐̸":"≐̸","⤨":"⤨","𝔫":"𝔫","↮":"↮","⫲":"⫲","⋼":"⋼","⋺":"⋺","њ":"њ","≦̸":"≦̸","↚":"↚","‥":"‥","𝕟":"𝕟","¬":"¬","⋹̸":"⋹̸","⋵̸":"⋵̸","⋷":"⋷","⋶":"⋶","⋾":"⋾","⋽":"⋽","⫽⃥":"⫽⃥","∂̸":"∂̸","⨔":"⨔","↛":"↛","⤳̸":"⤳̸","↝̸":"↝̸","𝓃":"𝓃","⊄":"⊄","⫅̸":"⫅̸","⊅":"⊅","⫆̸":"⫆̸","ñ":"ñ","ν":"ν","#":"#","№":"№"," ":" ","⊭":"⊭","⤄":"⤄","≍⃒":"≍⃒","⊬":"⊬","≥⃒":"≥⃒",">⃒":">⃒","⧞":"⧞","⤂":"⤂","≤⃒":"≤⃒","<⃒":"<⃒","⊴⃒":"⊴⃒","⤃":"⤃","⊵⃒":"⊵⃒","∼⃒":"∼⃒","⇖":"⇖","⤣":"⤣","⤧":"⤧","ó":"ó","ô":"ô","о":"о","ő":"ő","⨸":"⨸","⦼":"⦼","œ":"œ","⦿":"⦿","𝔬":"𝔬","˛":"˛","ò":"ò","⧁":"⧁","⦵":"⦵","⦾":"⦾","⦻":"⦻","⧀":"⧀","ō":"ō","ω":"ω","ο":"ο","⦶":"⦶","𝕠":"𝕠","⦷":"⦷","⦹":"⦹","∨":"∨","⩝":"⩝","ℴ":"ℴ","ª":"ª","º":"º","⊶":"⊶","⩖":"⩖","⩗":"⩗","⩛":"⩛","ø":"ø","⊘":"⊘","õ":"õ","⨶":"⨶","ö":"ö","⌽":"⌽","¶":"¶","⫳":"⫳","⫽":"⫽","п":"п","%":"%",".":".","‰":"‰","‱":"‱","𝔭":"𝔭","φ":"φ","ϕ":"ϕ","☎":"☎","π":"π","ϖ":"ϖ","ℎ":"ℎ","+":"+","⨣":"⨣","⨢":"⨢","⨥":"⨥","⩲":"⩲","⨦":"⨦","⨧":"⨧","⨕":"⨕","𝕡":"𝕡","£":"£","⪳":"⪳","⪷":"⪷","⪹":"⪹","⪵":"⪵","⋨":"⋨","′":"′","⌮":"⌮","⌒":"⌒","⌓":"⌓","⊰":"⊰","𝓅":"𝓅","ψ":"ψ"," ":" ","𝔮":"𝔮","𝕢":"𝕢","⁗":"⁗","𝓆":"𝓆","⨖":"⨖","?":"?","⤜":"⤜","⥤":"⥤","∽̱":"∽̱","ŕ":"ŕ","⦳":"⦳","⦒":"⦒","⦥":"⦥","»":"»","⥵":"⥵","⤠":"⤠","⤳":"⤳","⤞":"⤞","⥅":"⥅","⥴":"⥴","↣":"↣","↝":"↝","⤚":"⤚","∶":"∶","❳":"❳","}":"}","]":"]","⦌":"⦌","⦎":"⦎","⦐":"⦐","ř":"ř","ŗ":"ŗ","р":"р","⤷":"⤷","⥩":"⥩","↳":"↳","▭":"▭","⥽":"⥽","𝔯":"𝔯","⥬":"⥬","ρ":"ρ","ϱ":"ϱ","⇉":"⇉","⋌":"⋌","˚":"˚","‏":"‏","⎱":"⎱","⫮":"⫮","⟭":"⟭","⇾":"⇾","⦆":"⦆","𝕣":"𝕣","⨮":"⨮","⨵":"⨵",")":")","⦔":"⦔","⨒":"⨒","›":"›","𝓇":"𝓇","⋊":"⋊","▹":"▹","⧎":"⧎","⥨":"⥨","℞":"℞","ś":"ś","⪴":"⪴","⪸":"⪸","š":"š","ş":"ş","ŝ":"ŝ","⪶":"⪶","⪺":"⪺","⋩":"⋩","⨓":"⨓","с":"с","⋅":"⋅","⩦":"⩦","⇘":"⇘","§":"§",";":";","⤩":"⤩","✶":"✶","𝔰":"𝔰","♯":"♯","щ":"щ","ш":"ш","­":"­","σ":"σ","ς":"ς","⩪":"⩪","⪞":"⪞","⪠":"⪠","⪝":"⪝","⪟":"⪟","≆":"≆","⨤":"⨤","⥲":"⥲","⨳":"⨳","⧤":"⧤","⌣":"⌣","⪪":"⪪","⪬":"⪬","⪬︀":"⪬︀","ь":"ь","/":"/","⧄":"⧄","⌿":"⌿","𝕤":"𝕤","♠":"♠","⊓︀":"⊓︀","⊔︀":"⊔︀","𝓈":"𝓈","☆":"☆","⊂":"⊂","⫅":"⫅","⪽":"⪽","⫃":"⫃","⫁":"⫁","⫋":"⫋","⊊":"⊊","⪿":"⪿","⥹":"⥹","⫇":"⫇","⫕":"⫕","⫓":"⫓","♪":"♪","¹":"¹","²":"²","³":"³","⫆":"⫆","⪾":"⪾","⫘":"⫘","⫄":"⫄","⟉":"⟉","⫗":"⫗","⥻":"⥻","⫂":"⫂","⫌":"⫌","⊋":"⊋","⫀":"⫀","⫈":"⫈","⫔":"⫔","⫖":"⫖","⇙":"⇙","⤪":"⤪","ß":"ß","⌖":"⌖","τ":"τ","ť":"ť","ţ":"ţ","т":"т","⌕":"⌕","𝔱":"𝔱","θ":"θ","ϑ":"ϑ","þ":"þ","×":"×","⨱":"⨱","⨰":"⨰","⌶":"⌶","⫱":"⫱","𝕥":"𝕥","⫚":"⫚","‴":"‴","▵":"▵","≜":"≜","◬":"◬","⨺":"⨺","⨹":"⨹","⧍":"⧍","⨻":"⨻","⏢":"⏢","𝓉":"𝓉","ц":"ц","ћ":"ћ","ŧ":"ŧ","⥣":"⥣","ú":"ú","ў":"ў","ŭ":"ŭ","û":"û","у":"у","ű":"ű","⥾":"⥾","𝔲":"𝔲","ù":"ù","▀":"▀","⌜":"⌜","⌏":"⌏","◸":"◸","ū":"ū","ų":"ų","𝕦":"𝕦","υ":"υ","⇈":"⇈","⌝":"⌝","⌎":"⌎","ů":"ů","◹":"◹","𝓊":"𝓊","⋰":"⋰","ũ":"ũ","ü":"ü","⦧":"⦧","⫨":"⫨","⫩":"⫩","⦜":"⦜","⊊︀":"⊊︀","⫋︀":"⫋︀","⊋︀":"⊋︀","⫌︀":"⫌︀","в":"в","⊻":"⊻","≚":"≚","⋮":"⋮","𝔳":"𝔳","𝕧":"𝕧","𝓋":"𝓋","⦚":"⦚","ŵ":"ŵ","⩟":"⩟","≙":"≙","℘":"℘","𝔴":"𝔴","𝕨":"𝕨","𝓌":"𝓌","𝔵":"𝔵","ξ":"ξ","⋻":"⋻","𝕩":"𝕩","𝓍":"𝓍","ý":"ý","я":"я","ŷ":"ŷ","ы":"ы","¥":"¥","𝔶":"𝔶","ї":"ї","𝕪":"𝕪","𝓎":"𝓎","ю":"ю","ÿ":"ÿ","ź":"ź","ž":"ž","з":"з","ż":"ż","ζ":"ζ","𝔷":"𝔷","ж":"ж","⇝":"⇝","𝕫":"𝕫","𝓏":"𝓏","‍":"‍","‌":"‌"}}}; //# sourceMappingURL=./named-references.js.map /***/ }), /***/ "./node_modules/html-entities/lib/numeric-unicode-map.js": /*!***************************************************************!*\ !*** ./node_modules/html-entities/lib/numeric-unicode-map.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({value:true}));exports.numericUnicodeMap={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376}; //# sourceMappingURL=./numeric-unicode-map.js.map /***/ }), /***/ "./node_modules/html-entities/lib/surrogate-pairs.js": /*!***********************************************************!*\ !*** ./node_modules/html-entities/lib/surrogate-pairs.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({value:true}));exports.fromCodePoint=String.fromCodePoint||function(astralCodePoint){return String.fromCharCode(Math.floor((astralCodePoint-65536)/1024)+55296,(astralCodePoint-65536)%1024+56320)};exports.getCodePoint=String.prototype.codePointAt?function(input,position){return input.codePointAt(position)}:function(input,position){return(input.charCodeAt(position)-55296)*1024+input.charCodeAt(position+1)-56320+65536};exports.highSurrogateFrom=55296;exports.highSurrogateTo=56319; //# sourceMappingURL=./surrogate-pairs.js.map /***/ }), /***/ "./node_modules/ical.js/build/ical.js": /*!********************************************!*\ !*** ./node_modules/ical.js/build/ical.js ***! \********************************************/ /***/ ((module) => { /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2021 */ /* jshint ignore:start */ var ICAL; (function() { /* istanbul ignore next */ if (true) { // CommonJS, where exports may be different each time. ICAL = module.exports; } else {} })(); /* jshint ignore:end */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ /** * The number of characters before iCalendar line folding should occur * @type {Number} * @default 75 */ ICAL.foldLength = 75; /** * The character(s) to be used for a newline. The default value is provided by * rfc5545. * @type {String} * @default "\r\n" */ ICAL.newLineChar = '\r\n'; /** * Helper functions used in various places within ical.js * @namespace */ ICAL.helpers = { /** * Compiles a list of all referenced TZIDs in all subcomponents and * removes any extra VTIMEZONE subcomponents. In addition, if any TZIDs * are referenced by a component, but a VTIMEZONE does not exist, * an attempt will be made to generate a VTIMEZONE using ICAL.TimezoneService. * * @param {ICAL.Component} vcal The top-level VCALENDAR component. * @return {ICAL.Component} The ICAL.Component that was passed in. */ updateTimezones: function(vcal) { var allsubs, properties, vtimezones, reqTzid, i, tzid; if (!vcal || vcal.name !== "vcalendar") { //not a top-level vcalendar component return vcal; } //Store vtimezone subcomponents in an object reference by tzid. //Store properties from everything else in another array allsubs = vcal.getAllSubcomponents(); properties = []; vtimezones = {}; for (i = 0; i < allsubs.length; i++) { if (allsubs[i].name === "vtimezone") { tzid = allsubs[i].getFirstProperty("tzid").getFirstValue(); vtimezones[tzid] = allsubs[i]; } else { properties = properties.concat(allsubs[i].getAllProperties()); } } //create an object with one entry for each required tz reqTzid = {}; for (i = 0; i < properties.length; i++) { if ((tzid = properties[i].getParameter("tzid"))) { reqTzid[tzid] = true; } } //delete any vtimezones that are not on the reqTzid list. for (i in vtimezones) { if (vtimezones.hasOwnProperty(i) && !reqTzid[i]) { vcal.removeSubcomponent(vtimezones[i]); } } //create any missing, but registered timezones for (i in reqTzid) { if ( reqTzid.hasOwnProperty(i) && !vtimezones[i] && ICAL.TimezoneService.has(i) ) { vcal.addSubcomponent(ICAL.TimezoneService.get(i).component); } } return vcal; }, /** * Checks if the given type is of the number type and also NaN. * * @param {Number} number The number to check * @return {Boolean} True, if the number is strictly NaN */ isStrictlyNaN: function(number) { return typeof(number) === 'number' && isNaN(number); }, /** * Parses a string value that is expected to be an integer, when the valid is * not an integer throws a decoration error. * * @param {String} string Raw string input * @return {Number} Parsed integer */ strictParseInt: function(string) { var result = parseInt(string, 10); if (ICAL.helpers.isStrictlyNaN(result)) { throw new Error( 'Could not extract integer from "' + string + '"' ); } return result; }, /** * Creates or returns a class instance of a given type with the initialization * data if the data is not already an instance of the given type. * * @example * var time = new ICAL.Time(...); * var result = ICAL.helpers.formatClassType(time, ICAL.Time); * * (result instanceof ICAL.Time) * // => true * * result = ICAL.helpers.formatClassType({}, ICAL.Time); * (result isntanceof ICAL.Time) * // => true * * * @param {Object} data object initialization data * @param {Object} type object type (like ICAL.Time) * @return {?} An instance of the found type. */ formatClassType: function formatClassType(data, type) { if (typeof(data) === 'undefined') { return undefined; } if (data instanceof type) { return data; } return new type(data); }, /** * Identical to indexOf but will only match values when they are not preceded * by a backslash character. * * @param {String} buffer String to search * @param {String} search Value to look for * @param {Number} pos Start position * @return {Number} The position, or -1 if not found */ unescapedIndexOf: function(buffer, search, pos) { while ((pos = buffer.indexOf(search, pos)) !== -1) { if (pos > 0 && buffer[pos - 1] === '\\') { pos += 1; } else { return pos; } } return -1; }, /** * Find the index for insertion using binary search. * * @param {Array} list The list to search * @param {?} seekVal The value to insert * @param {function(?,?)} cmpfunc The comparison func, that can * compare two seekVals * @return {Number} The insert position */ binsearchInsert: function(list, seekVal, cmpfunc) { if (!list.length) return 0; var low = 0, high = list.length - 1, mid, cmpval; while (low <= high) { mid = low + Math.floor((high - low) / 2); cmpval = cmpfunc(seekVal, list[mid]); if (cmpval < 0) high = mid - 1; else if (cmpval > 0) low = mid + 1; else break; } if (cmpval < 0) return mid; // insertion is displacing, so use mid outright. else if (cmpval > 0) return mid + 1; else return mid; }, /** * Convenience function for debug output * @private */ dumpn: /* istanbul ignore next */ function() { if (!ICAL.debug) { return; } if (typeof (console) !== 'undefined' && 'log' in console) { ICAL.helpers.dumpn = function consoleDumpn(input) { console.log(input); }; } else { ICAL.helpers.dumpn = function geckoDumpn(input) { dump(input + '\n'); }; } ICAL.helpers.dumpn(arguments[0]); }, /** * Clone the passed object or primitive. By default a shallow clone will be * executed. * * @param {*} aSrc The thing to clone * @param {Boolean=} aDeep If true, a deep clone will be performed * @return {*} The copy of the thing */ clone: function(aSrc, aDeep) { if (!aSrc || typeof aSrc != "object") { return aSrc; } else if (aSrc instanceof Date) { return new Date(aSrc.getTime()); } else if ("clone" in aSrc) { return aSrc.clone(); } else if (Array.isArray(aSrc)) { var arr = []; for (var i = 0; i < aSrc.length; i++) { arr.push(aDeep ? ICAL.helpers.clone(aSrc[i], true) : aSrc[i]); } return arr; } else { var obj = {}; for (var name in aSrc) { // uses prototype method to allow use of Object.create(null); /* istanbul ignore else */ if (Object.prototype.hasOwnProperty.call(aSrc, name)) { if (aDeep) { obj[name] = ICAL.helpers.clone(aSrc[name], true); } else { obj[name] = aSrc[name]; } } } return obj; } }, /** * Performs iCalendar line folding. A line ending character is inserted and * the next line begins with a whitespace. * * @example * SUMMARY:This line will be fold * ed right in the middle of a word. * * @param {String} aLine The line to fold * @return {String} The folded line */ foldline: function foldline(aLine) { var result = ""; var line = aLine || "", pos = 0, line_length = 0; //pos counts position in line for the UTF-16 presentation //line_length counts the bytes for the UTF-8 presentation while (line.length) { var cp = line.codePointAt(pos); if (cp < 128) ++line_length; else if (cp < 2048) line_length += 2;//needs 2 UTF-8 bytes else if (cp < 65536) line_length += 3; else line_length += 4; //cp is less than 1114112 if (line_length < ICAL.foldLength + 1) pos += cp > 65535 ? 2 : 1; else { result += ICAL.newLineChar + " " + line.substring(0, pos); line = line.substring(pos); pos = line_length = 0; } } return result.substr(ICAL.newLineChar.length + 1); }, /** * Pads the given string or number with zeros so it will have at least two * characters. * * @param {String|Number} data The string or number to pad * @return {String} The number padded as a string */ pad2: function pad(data) { if (typeof(data) !== 'string') { // handle fractions. if (typeof(data) === 'number') { data = parseInt(data); } data = String(data); } var len = data.length; switch (len) { case 0: return '00'; case 1: return '0' + data; default: return data; } }, /** * Truncates the given number, correctly handling negative numbers. * * @param {Number} number The number to truncate * @return {Number} The truncated number */ trunc: function trunc(number) { return (number < 0 ? Math.ceil(number) : Math.floor(number)); }, /** * Poor-man's cross-browser inheritance for JavaScript. Doesn't support all * the features, but enough for our usage. * * @param {Function} base The base class constructor function. * @param {Function} child The child class constructor function. * @param {Object} extra Extends the prototype with extra properties * and methods */ inherits: function(base, child, extra) { function F() {} F.prototype = base.prototype; child.prototype = new F(); if (extra) { ICAL.helpers.extend(extra, child.prototype); } }, /** * Poor-man's cross-browser object extension. Doesn't support all the * features, but enough for our usage. Note that the target's properties are * not overwritten with the source properties. * * @example * var child = ICAL.helpers.extend(parent, { * "bar": 123 * }); * * @param {Object} source The object to extend * @param {Object} target The object to extend with * @return {Object} Returns the target. */ extend: function(source, target) { for (var key in source) { var descr = Object.getOwnPropertyDescriptor(source, key); if (descr && !Object.getOwnPropertyDescriptor(target, key)) { Object.defineProperty(target, key, descr); } } return target; } }; /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ /** @namespace ICAL */ /** * This symbol is further described later on * @ignore */ ICAL.design = (function() { 'use strict'; var FROM_ICAL_NEWLINE = /\\\\|\\;|\\,|\\[Nn]/g; var TO_ICAL_NEWLINE = /\\|;|,|\n/g; var FROM_VCARD_NEWLINE = /\\\\|\\,|\\[Nn]/g; var TO_VCARD_NEWLINE = /\\|,|\n/g; function createTextType(fromNewline, toNewline) { var result = { matches: /.*/, fromICAL: function(aValue, structuredEscape) { return replaceNewline(aValue, fromNewline, structuredEscape); }, toICAL: function(aValue, structuredEscape) { var regEx = toNewline; if (structuredEscape) regEx = new RegExp(regEx.source + '|' + structuredEscape); return aValue.replace(regEx, function(str) { switch (str) { case "\\": return "\\\\"; case ";": return "\\;"; case ",": return "\\,"; case "\n": return "\\n"; /* istanbul ignore next */ default: return str; } }); } }; return result; } // default types used multiple times var DEFAULT_TYPE_TEXT = { defaultType: "text" }; var DEFAULT_TYPE_TEXT_MULTI = { defaultType: "text", multiValue: "," }; var DEFAULT_TYPE_TEXT_STRUCTURED = { defaultType: "text", structuredValue: ";" }; var DEFAULT_TYPE_INTEGER = { defaultType: "integer" }; var DEFAULT_TYPE_DATETIME_DATE = { defaultType: "date-time", allowedTypes: ["date-time", "date"] }; var DEFAULT_TYPE_DATETIME = { defaultType: "date-time" }; var DEFAULT_TYPE_URI = { defaultType: "uri" }; var DEFAULT_TYPE_UTCOFFSET = { defaultType: "utc-offset" }; var DEFAULT_TYPE_RECUR = { defaultType: "recur" }; var DEFAULT_TYPE_DATE_ANDOR_TIME = { defaultType: "date-and-or-time", allowedTypes: ["date-time", "date", "text"] }; function replaceNewlineReplace(string) { switch (string) { case "\\\\": return "\\"; case "\\;": return ";"; case "\\,": return ","; case "\\n": case "\\N": return "\n"; /* istanbul ignore next */ default: return string; } } function replaceNewline(value, newline, structuredEscape) { // avoid regex when possible. if (value.indexOf('\\') === -1) { return value; } if (structuredEscape) newline = new RegExp(newline.source + '|\\\\' + structuredEscape); return value.replace(newline, replaceNewlineReplace); } var commonProperties = { "categories": DEFAULT_TYPE_TEXT_MULTI, "url": DEFAULT_TYPE_URI, "version": DEFAULT_TYPE_TEXT, "uid": DEFAULT_TYPE_TEXT }; var commonValues = { "boolean": { values: ["TRUE", "FALSE"], fromICAL: function(aValue) { switch (aValue) { case 'TRUE': return true; case 'FALSE': return false; default: //TODO: parser warning return false; } }, toICAL: function(aValue) { if (aValue) { return 'TRUE'; } return 'FALSE'; } }, float: { matches: /^[+-]?\d+\.\d+$/, fromICAL: function(aValue) { var parsed = parseFloat(aValue); if (ICAL.helpers.isStrictlyNaN(parsed)) { // TODO: parser warning return 0.0; } return parsed; }, toICAL: function(aValue) { return String(aValue); } }, integer: { fromICAL: function(aValue) { var parsed = parseInt(aValue); if (ICAL.helpers.isStrictlyNaN(parsed)) { return 0; } return parsed; }, toICAL: function(aValue) { return String(aValue); } }, "utc-offset": { toICAL: function(aValue) { if (aValue.length < 7) { // no seconds // -0500 return aValue.substr(0, 3) + aValue.substr(4, 2); } else { // seconds // -050000 return aValue.substr(0, 3) + aValue.substr(4, 2) + aValue.substr(7, 2); } }, fromICAL: function(aValue) { if (aValue.length < 6) { // no seconds // -05:00 return aValue.substr(0, 3) + ':' + aValue.substr(3, 2); } else { // seconds // -05:00:00 return aValue.substr(0, 3) + ':' + aValue.substr(3, 2) + ':' + aValue.substr(5, 2); } }, decorate: function(aValue) { return ICAL.UtcOffset.fromString(aValue); }, undecorate: function(aValue) { return aValue.toString(); } } }; var icalParams = { // Although the syntax is DQUOTE uri DQUOTE, I don't think we should // enfoce anything aside from it being a valid content line. // // At least some params require - if multi values are used - DQUOTEs // for each of its values - e.g. delegated-from="uri1","uri2" // To indicate this, I introduced the new k/v pair // multiValueSeparateDQuote: true // // "ALTREP": { ... }, // CN just wants a param-value // "CN": { ... } "cutype": { values: ["INDIVIDUAL", "GROUP", "RESOURCE", "ROOM", "UNKNOWN"], allowXName: true, allowIanaToken: true }, "delegated-from": { valueType: "cal-address", multiValue: ",", multiValueSeparateDQuote: true }, "delegated-to": { valueType: "cal-address", multiValue: ",", multiValueSeparateDQuote: true }, // "DIR": { ... }, // See ALTREP "encoding": { values: ["8BIT", "BASE64"] }, // "FMTTYPE": { ... }, // See ALTREP "fbtype": { values: ["FREE", "BUSY", "BUSY-UNAVAILABLE", "BUSY-TENTATIVE"], allowXName: true, allowIanaToken: true }, // "LANGUAGE": { ... }, // See ALTREP "member": { valueType: "cal-address", multiValue: ",", multiValueSeparateDQuote: true }, "partstat": { // TODO These values are actually different per-component values: ["NEEDS-ACTION", "ACCEPTED", "DECLINED", "TENTATIVE", "DELEGATED", "COMPLETED", "IN-PROCESS"], allowXName: true, allowIanaToken: true }, "range": { values: ["THISANDFUTURE"] }, "related": { values: ["START", "END"] }, "reltype": { values: ["PARENT", "CHILD", "SIBLING"], allowXName: true, allowIanaToken: true }, "role": { values: ["REQ-PARTICIPANT", "CHAIR", "OPT-PARTICIPANT", "NON-PARTICIPANT"], allowXName: true, allowIanaToken: true }, "rsvp": { values: ["TRUE", "FALSE"] }, "sent-by": { valueType: "cal-address" }, "tzid": { matches: /^\// }, "value": { // since the value here is a 'type' lowercase is used. values: ["binary", "boolean", "cal-address", "date", "date-time", "duration", "float", "integer", "period", "recur", "text", "time", "uri", "utc-offset"], allowXName: true, allowIanaToken: true } }; // When adding a value here, be sure to add it to the parameter types! var icalValues = ICAL.helpers.extend(commonValues, { text: createTextType(FROM_ICAL_NEWLINE, TO_ICAL_NEWLINE), uri: { // TODO /* ... */ }, "binary": { decorate: function(aString) { return ICAL.Binary.fromString(aString); }, undecorate: function(aBinary) { return aBinary.toString(); } }, "cal-address": { // needs to be an uri }, "date": { decorate: function(aValue, aProp) { if (design.strict) { return ICAL.Time.fromDateString(aValue, aProp); } else { return ICAL.Time.fromString(aValue, aProp); } }, /** * undecorates a time object. */ undecorate: function(aValue) { return aValue.toString(); }, fromICAL: function(aValue) { // from: 20120901 // to: 2012-09-01 if (!design.strict && aValue.length >= 15) { // This is probably a date-time, e.g. 20120901T130000Z return icalValues["date-time"].fromICAL(aValue); } else { return aValue.substr(0, 4) + '-' + aValue.substr(4, 2) + '-' + aValue.substr(6, 2); } }, toICAL: function(aValue) { // from: 2012-09-01 // to: 20120901 var len = aValue.length; if (len == 10) { return aValue.substr(0, 4) + aValue.substr(5, 2) + aValue.substr(8, 2); } else if (len >= 19) { return icalValues["date-time"].toICAL(aValue); } else { //TODO: serialize warning? return aValue; } } }, "date-time": { fromICAL: function(aValue) { // from: 20120901T130000 // to: 2012-09-01T13:00:00 if (!design.strict && aValue.length == 8) { // This is probably a date, e.g. 20120901 return icalValues.date.fromICAL(aValue); } else { var result = aValue.substr(0, 4) + '-' + aValue.substr(4, 2) + '-' + aValue.substr(6, 2) + 'T' + aValue.substr(9, 2) + ':' + aValue.substr(11, 2) + ':' + aValue.substr(13, 2); if (aValue[15] && aValue[15] === 'Z') { result += 'Z'; } return result; } }, toICAL: function(aValue) { // from: 2012-09-01T13:00:00 // to: 20120901T130000 var len = aValue.length; if (len == 10 && !design.strict) { return icalValues.date.toICAL(aValue); } else if (len >= 19) { var result = aValue.substr(0, 4) + aValue.substr(5, 2) + // grab the (DDTHH) segment aValue.substr(8, 5) + // MM aValue.substr(14, 2) + // SS aValue.substr(17, 2); if (aValue[19] && aValue[19] === 'Z') { result += 'Z'; } return result; } else { // TODO: error return aValue; } }, decorate: function(aValue, aProp) { if (design.strict) { return ICAL.Time.fromDateTimeString(aValue, aProp); } else { return ICAL.Time.fromString(aValue, aProp); } }, undecorate: function(aValue) { return aValue.toString(); } }, duration: { decorate: function(aValue) { return ICAL.Duration.fromString(aValue); }, undecorate: function(aValue) { return aValue.toString(); } }, period: { fromICAL: function(string) { var parts = string.split('/'); parts[0] = icalValues['date-time'].fromICAL(parts[0]); if (!ICAL.Duration.isValueString(parts[1])) { parts[1] = icalValues['date-time'].fromICAL(parts[1]); } return parts; }, toICAL: function(parts) { if (!design.strict && parts[0].length == 10) { parts[0] = icalValues.date.toICAL(parts[0]); } else { parts[0] = icalValues['date-time'].toICAL(parts[0]); } if (!ICAL.Duration.isValueString(parts[1])) { if (!design.strict && parts[1].length == 10) { parts[1] = icalValues.date.toICAL(parts[1]); } else { parts[1] = icalValues['date-time'].toICAL(parts[1]); } } return parts.join("/"); }, decorate: function(aValue, aProp) { return ICAL.Period.fromJSON(aValue, aProp, !design.strict); }, undecorate: function(aValue) { return aValue.toJSON(); } }, recur: { fromICAL: function(string) { return ICAL.Recur._stringToData(string, true); }, toICAL: function(data) { var str = ""; for (var k in data) { /* istanbul ignore if */ if (!Object.prototype.hasOwnProperty.call(data, k)) { continue; } var val = data[k]; if (k == "until") { if (val.length > 10) { val = icalValues['date-time'].toICAL(val); } else { val = icalValues.date.toICAL(val); } } else if (k == "wkst") { if (typeof val === 'number') { val = ICAL.Recur.numericDayToIcalDay(val); } } else if (Array.isArray(val)) { val = val.join(","); } str += k.toUpperCase() + "=" + val + ";"; } return str.substr(0, str.length - 1); }, decorate: function decorate(aValue) { return ICAL.Recur.fromData(aValue); }, undecorate: function(aRecur) { return aRecur.toJSON(); } }, time: { fromICAL: function(aValue) { // from: MMHHSS(Z)? // to: HH:MM:SS(Z)? if (aValue.length < 6) { // TODO: parser exception? return aValue; } // HH::MM::SSZ? var result = aValue.substr(0, 2) + ':' + aValue.substr(2, 2) + ':' + aValue.substr(4, 2); if (aValue[6] === 'Z') { result += 'Z'; } return result; }, toICAL: function(aValue) { // from: HH:MM:SS(Z)? // to: MMHHSS(Z)? if (aValue.length < 8) { //TODO: error return aValue; } var result = aValue.substr(0, 2) + aValue.substr(3, 2) + aValue.substr(6, 2); if (aValue[8] === 'Z') { result += 'Z'; } return result; } } }); var icalProperties = ICAL.helpers.extend(commonProperties, { "action": DEFAULT_TYPE_TEXT, "attach": { defaultType: "uri" }, "attendee": { defaultType: "cal-address" }, "calscale": DEFAULT_TYPE_TEXT, "class": DEFAULT_TYPE_TEXT, "comment": DEFAULT_TYPE_TEXT, "completed": DEFAULT_TYPE_DATETIME, "contact": DEFAULT_TYPE_TEXT, "created": DEFAULT_TYPE_DATETIME, "description": DEFAULT_TYPE_TEXT, "dtend": DEFAULT_TYPE_DATETIME_DATE, "dtstamp": DEFAULT_TYPE_DATETIME, "dtstart": DEFAULT_TYPE_DATETIME_DATE, "due": DEFAULT_TYPE_DATETIME_DATE, "duration": { defaultType: "duration" }, "exdate": { defaultType: "date-time", allowedTypes: ["date-time", "date"], multiValue: ',' }, "exrule": DEFAULT_TYPE_RECUR, "freebusy": { defaultType: "period", multiValue: "," }, "geo": { defaultType: "float", structuredValue: ";" }, "last-modified": DEFAULT_TYPE_DATETIME, "location": DEFAULT_TYPE_TEXT, "method": DEFAULT_TYPE_TEXT, "organizer": { defaultType: "cal-address" }, "percent-complete": DEFAULT_TYPE_INTEGER, "priority": DEFAULT_TYPE_INTEGER, "prodid": DEFAULT_TYPE_TEXT, "related-to": DEFAULT_TYPE_TEXT, "repeat": DEFAULT_TYPE_INTEGER, "rdate": { defaultType: "date-time", allowedTypes: ["date-time", "date", "period"], multiValue: ',', detectType: function(string) { if (string.indexOf('/') !== -1) { return 'period'; } return (string.indexOf('T') === -1) ? 'date' : 'date-time'; } }, "recurrence-id": DEFAULT_TYPE_DATETIME_DATE, "resources": DEFAULT_TYPE_TEXT_MULTI, "request-status": DEFAULT_TYPE_TEXT_STRUCTURED, "rrule": DEFAULT_TYPE_RECUR, "sequence": DEFAULT_TYPE_INTEGER, "status": DEFAULT_TYPE_TEXT, "summary": DEFAULT_TYPE_TEXT, "transp": DEFAULT_TYPE_TEXT, "trigger": { defaultType: "duration", allowedTypes: ["duration", "date-time"] }, "tzoffsetfrom": DEFAULT_TYPE_UTCOFFSET, "tzoffsetto": DEFAULT_TYPE_UTCOFFSET, "tzurl": DEFAULT_TYPE_URI, "tzid": DEFAULT_TYPE_TEXT, "tzname": DEFAULT_TYPE_TEXT }); // When adding a value here, be sure to add it to the parameter types! var vcardValues = ICAL.helpers.extend(commonValues, { text: createTextType(FROM_VCARD_NEWLINE, TO_VCARD_NEWLINE), uri: createTextType(FROM_VCARD_NEWLINE, TO_VCARD_NEWLINE), date: { decorate: function(aValue) { return ICAL.VCardTime.fromDateAndOrTimeString(aValue, "date"); }, undecorate: function(aValue) { return aValue.toString(); }, fromICAL: function(aValue) { if (aValue.length == 8) { return icalValues.date.fromICAL(aValue); } else if (aValue[0] == '-' && aValue.length == 6) { return aValue.substr(0, 4) + '-' + aValue.substr(4); } else { return aValue; } }, toICAL: function(aValue) { if (aValue.length == 10) { return icalValues.date.toICAL(aValue); } else if (aValue[0] == '-' && aValue.length == 7) { return aValue.substr(0, 4) + aValue.substr(5); } else { return aValue; } } }, time: { decorate: function(aValue) { return ICAL.VCardTime.fromDateAndOrTimeString("T" + aValue, "time"); }, undecorate: function(aValue) { return aValue.toString(); }, fromICAL: function(aValue) { var splitzone = vcardValues.time._splitZone(aValue, true); var zone = splitzone[0], value = splitzone[1]; //console.log("SPLIT: ",splitzone); if (value.length == 6) { value = value.substr(0, 2) + ':' + value.substr(2, 2) + ':' + value.substr(4, 2); } else if (value.length == 4 && value[0] != '-') { value = value.substr(0, 2) + ':' + value.substr(2, 2); } else if (value.length == 5) { value = value.substr(0, 3) + ':' + value.substr(3, 2); } if (zone.length == 5 && (zone[0] == '-' || zone[0] == '+')) { zone = zone.substr(0, 3) + ':' + zone.substr(3); } return value + zone; }, toICAL: function(aValue) { var splitzone = vcardValues.time._splitZone(aValue); var zone = splitzone[0], value = splitzone[1]; if (value.length == 8) { value = value.substr(0, 2) + value.substr(3, 2) + value.substr(6, 2); } else if (value.length == 5 && value[0] != '-') { value = value.substr(0, 2) + value.substr(3, 2); } else if (value.length == 6) { value = value.substr(0, 3) + value.substr(4, 2); } if (zone.length == 6 && (zone[0] == '-' || zone[0] == '+')) { zone = zone.substr(0, 3) + zone.substr(4); } return value + zone; }, _splitZone: function(aValue, isFromIcal) { var lastChar = aValue.length - 1; var signChar = aValue.length - (isFromIcal ? 5 : 6); var sign = aValue[signChar]; var zone, value; if (aValue[lastChar] == 'Z') { zone = aValue[lastChar]; value = aValue.substr(0, lastChar); } else if (aValue.length > 6 && (sign == '-' || sign == '+')) { zone = aValue.substr(signChar); value = aValue.substr(0, signChar); } else { zone = ""; value = aValue; } return [zone, value]; } }, "date-time": { decorate: function(aValue) { return ICAL.VCardTime.fromDateAndOrTimeString(aValue, "date-time"); }, undecorate: function(aValue) { return aValue.toString(); }, fromICAL: function(aValue) { return vcardValues['date-and-or-time'].fromICAL(aValue); }, toICAL: function(aValue) { return vcardValues['date-and-or-time'].toICAL(aValue); } }, "date-and-or-time": { decorate: function(aValue) { return ICAL.VCardTime.fromDateAndOrTimeString(aValue, "date-and-or-time"); }, undecorate: function(aValue) { return aValue.toString(); }, fromICAL: function(aValue) { var parts = aValue.split('T'); return (parts[0] ? vcardValues.date.fromICAL(parts[0]) : '') + (parts[1] ? 'T' + vcardValues.time.fromICAL(parts[1]) : ''); }, toICAL: function(aValue) { var parts = aValue.split('T'); return vcardValues.date.toICAL(parts[0]) + (parts[1] ? 'T' + vcardValues.time.toICAL(parts[1]) : ''); } }, timestamp: icalValues['date-time'], "language-tag": { matches: /^[a-zA-Z0-9-]+$/ // Could go with a more strict regex here } }); var vcardParams = { "type": { valueType: "text", multiValue: "," }, "value": { // since the value here is a 'type' lowercase is used. values: ["text", "uri", "date", "time", "date-time", "date-and-or-time", "timestamp", "boolean", "integer", "float", "utc-offset", "language-tag"], allowXName: true, allowIanaToken: true } }; var vcardProperties = ICAL.helpers.extend(commonProperties, { "adr": { defaultType: "text", structuredValue: ";", multiValue: "," }, "anniversary": DEFAULT_TYPE_DATE_ANDOR_TIME, "bday": DEFAULT_TYPE_DATE_ANDOR_TIME, "caladruri": DEFAULT_TYPE_URI, "caluri": DEFAULT_TYPE_URI, "clientpidmap": DEFAULT_TYPE_TEXT_STRUCTURED, "email": DEFAULT_TYPE_TEXT, "fburl": DEFAULT_TYPE_URI, "fn": DEFAULT_TYPE_TEXT, "gender": DEFAULT_TYPE_TEXT_STRUCTURED, "geo": DEFAULT_TYPE_URI, "impp": DEFAULT_TYPE_URI, "key": DEFAULT_TYPE_URI, "kind": DEFAULT_TYPE_TEXT, "lang": { defaultType: "language-tag" }, "logo": DEFAULT_TYPE_URI, "member": DEFAULT_TYPE_URI, "n": { defaultType: "text", structuredValue: ";", multiValue: "," }, "nickname": DEFAULT_TYPE_TEXT_MULTI, "note": DEFAULT_TYPE_TEXT, "org": { defaultType: "text", structuredValue: ";" }, "photo": DEFAULT_TYPE_URI, "related": DEFAULT_TYPE_URI, "rev": { defaultType: "timestamp" }, "role": DEFAULT_TYPE_TEXT, "sound": DEFAULT_TYPE_URI, "source": DEFAULT_TYPE_URI, "tel": { defaultType: "uri", allowedTypes: ["uri", "text"] }, "title": DEFAULT_TYPE_TEXT, "tz": { defaultType: "text", allowedTypes: ["text", "utc-offset", "uri"] }, "xml": DEFAULT_TYPE_TEXT }); var vcard3Values = ICAL.helpers.extend(commonValues, { binary: icalValues.binary, date: vcardValues.date, "date-time": vcardValues["date-time"], "phone-number": { // TODO /* ... */ }, uri: icalValues.uri, text: icalValues.text, time: icalValues.time, vcard: icalValues.text, "utc-offset": { toICAL: function(aValue) { return aValue.substr(0, 7); }, fromICAL: function(aValue) { return aValue.substr(0, 7); }, decorate: function(aValue) { return ICAL.UtcOffset.fromString(aValue); }, undecorate: function(aValue) { return aValue.toString(); } } }); var vcard3Params = { "type": { valueType: "text", multiValue: "," }, "value": { // since the value here is a 'type' lowercase is used. values: ["text", "uri", "date", "date-time", "phone-number", "time", "boolean", "integer", "float", "utc-offset", "vcard", "binary"], allowXName: true, allowIanaToken: true } }; var vcard3Properties = ICAL.helpers.extend(commonProperties, { fn: DEFAULT_TYPE_TEXT, n: { defaultType: "text", structuredValue: ";", multiValue: "," }, nickname: DEFAULT_TYPE_TEXT_MULTI, photo: { defaultType: "binary", allowedTypes: ["binary", "uri"] }, bday: { defaultType: "date-time", allowedTypes: ["date-time", "date"], detectType: function(string) { return (string.indexOf('T') === -1) ? 'date' : 'date-time'; } }, adr: { defaultType: "text", structuredValue: ";", multiValue: "," }, label: DEFAULT_TYPE_TEXT, tel: { defaultType: "phone-number" }, email: DEFAULT_TYPE_TEXT, mailer: DEFAULT_TYPE_TEXT, tz: { defaultType: "utc-offset", allowedTypes: ["utc-offset", "text"] }, geo: { defaultType: "float", structuredValue: ";" }, title: DEFAULT_TYPE_TEXT, role: DEFAULT_TYPE_TEXT, logo: { defaultType: "binary", allowedTypes: ["binary", "uri"] }, agent: { defaultType: "vcard", allowedTypes: ["vcard", "text", "uri"] }, org: DEFAULT_TYPE_TEXT_STRUCTURED, note: DEFAULT_TYPE_TEXT_MULTI, prodid: DEFAULT_TYPE_TEXT, rev: { defaultType: "date-time", allowedTypes: ["date-time", "date"], detectType: function(string) { return (string.indexOf('T') === -1) ? 'date' : 'date-time'; } }, "sort-string": DEFAULT_TYPE_TEXT, sound: { defaultType: "binary", allowedTypes: ["binary", "uri"] }, class: DEFAULT_TYPE_TEXT, key: { defaultType: "binary", allowedTypes: ["binary", "text"] } }); /** * iCalendar design set * @type {ICAL.design.designSet} */ var icalSet = { value: icalValues, param: icalParams, property: icalProperties }; /** * vCard 4.0 design set * @type {ICAL.design.designSet} */ var vcardSet = { value: vcardValues, param: vcardParams, property: vcardProperties }; /** * vCard 3.0 design set * @type {ICAL.design.designSet} */ var vcard3Set = { value: vcard3Values, param: vcard3Params, property: vcard3Properties }; /** * The design data, used by the parser to determine types for properties and * other metadata needed to produce correct jCard/jCal data. * * @alias ICAL.design * @namespace */ var design = { /** * A designSet describes value, parameter and property data. It is used by * ther parser and stringifier in components and properties to determine they * should be represented. * * @typedef {Object} designSet * @memberOf ICAL.design * @property {Object} value Definitions for value types, keys are type names * @property {Object} param Definitions for params, keys are param names * @property {Object} property Defintions for properties, keys are property names */ /** * Can be set to false to make the parser more lenient. */ strict: true, /** * The default set for new properties and components if none is specified. * @type {ICAL.design.designSet} */ defaultSet: icalSet, /** * The default type for unknown properties * @type {String} */ defaultType: 'unknown', /** * Holds the design set for known top-level components * * @type {Object} * @property {ICAL.design.designSet} vcard vCard VCARD * @property {ICAL.design.designSet} vevent iCalendar VEVENT * @property {ICAL.design.designSet} vtodo iCalendar VTODO * @property {ICAL.design.designSet} vjournal iCalendar VJOURNAL * @property {ICAL.design.designSet} valarm iCalendar VALARM * @property {ICAL.design.designSet} vtimezone iCalendar VTIMEZONE * @property {ICAL.design.designSet} daylight iCalendar DAYLIGHT * @property {ICAL.design.designSet} standard iCalendar STANDARD * * @example * var propertyName = 'fn'; * var componentDesign = ICAL.design.components.vcard; * var propertyDetails = componentDesign.property[propertyName]; * if (propertyDetails.defaultType == 'text') { * // Yep, sure is... * } */ components: { vcard: vcardSet, vcard3: vcard3Set, vevent: icalSet, vtodo: icalSet, vjournal: icalSet, valarm: icalSet, vtimezone: icalSet, daylight: icalSet, standard: icalSet }, /** * The design set for iCalendar (rfc5545/rfc7265) components. * @type {ICAL.design.designSet} */ icalendar: icalSet, /** * The design set for vCard (rfc6350/rfc7095) components. * @type {ICAL.design.designSet} */ vcard: vcardSet, /** * The design set for vCard (rfc2425/rfc2426/rfc7095) components. * @type {ICAL.design.designSet} */ vcard3: vcard3Set, /** * Gets the design set for the given component name. * * @param {String} componentName The name of the component * @return {ICAL.design.designSet} The design set for the component */ getDesignSet: function(componentName) { var isInDesign = componentName && componentName in design.components; return isInDesign ? design.components[componentName] : design.defaultSet; } }; return design; }()); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ /** * Contains various functions to convert jCal and jCard data back into * iCalendar and vCard. * @namespace */ ICAL.stringify = (function() { 'use strict'; var LINE_ENDING = '\r\n'; var DEFAULT_VALUE_TYPE = 'unknown'; var design = ICAL.design; var helpers = ICAL.helpers; /** * Convert a full jCal/jCard array into a iCalendar/vCard string. * * @function ICAL.stringify * @variation function * @param {Array} jCal The jCal/jCard document * @return {String} The stringified iCalendar/vCard document */ function stringify(jCal) { if (typeof jCal[0] == "string") { // This is a single component jCal = [jCal]; } var i = 0; var len = jCal.length; var result = ''; for (; i < len; i++) { result += stringify.component(jCal[i]) + LINE_ENDING; } return result; } /** * Converts an jCal component array into a ICAL string. * Recursive will resolve sub-components. * * Exact component/property order is not saved all * properties will come before subcomponents. * * @function ICAL.stringify.component * @param {Array} component * jCal/jCard fragment of a component * @param {ICAL.design.designSet} designSet * The design data to use for this component * @return {String} The iCalendar/vCard string */ stringify.component = function(component, designSet) { var name = component[0].toUpperCase(); var result = 'BEGIN:' + name + LINE_ENDING; var props = component[1]; var propIdx = 0; var propLen = props.length; var designSetName = component[0]; // rfc6350 requires that in vCard 4.0 the first component is the VERSION // component with as value 4.0, note that 3.0 does not have this requirement. if (designSetName === 'vcard' && component[1].length > 0 && !(component[1][0][0] === "version" && component[1][0][3] === "4.0")) { designSetName = "vcard3"; } designSet = designSet || design.getDesignSet(designSetName); for (; propIdx < propLen; propIdx++) { result += stringify.property(props[propIdx], designSet) + LINE_ENDING; } // Ignore subcomponents if none exist, e.g. in vCard. var comps = component[2] || []; var compIdx = 0; var compLen = comps.length; for (; compIdx < compLen; compIdx++) { result += stringify.component(comps[compIdx], designSet) + LINE_ENDING; } result += 'END:' + name; return result; }; /** * Converts a single jCal/jCard property to a iCalendar/vCard string. * * @function ICAL.stringify.property * @param {Array} property * jCal/jCard property array * @param {ICAL.design.designSet} designSet * The design data to use for this property * @param {Boolean} noFold * If true, the line is not folded * @return {String} The iCalendar/vCard string */ stringify.property = function(property, designSet, noFold) { var name = property[0].toUpperCase(); var jsName = property[0]; var params = property[1]; var line = name; var paramName; for (paramName in params) { var value = params[paramName]; /* istanbul ignore else */ if (params.hasOwnProperty(paramName)) { var multiValue = (paramName in designSet.param) && designSet.param[paramName].multiValue; if (multiValue && Array.isArray(value)) { if (designSet.param[paramName].multiValueSeparateDQuote) { multiValue = '"' + multiValue + '"'; } value = value.map(stringify._rfc6868Unescape); value = stringify.multiValue(value, multiValue, "unknown", null, designSet); } else { value = stringify._rfc6868Unescape(value); } line += ';' + paramName.toUpperCase(); line += '=' + stringify.propertyValue(value); } } if (property.length === 3) { // If there are no values, we must assume a blank value return line + ':'; } var valueType = property[2]; if (!designSet) { designSet = design.defaultSet; } var propDetails; var multiValue = false; var structuredValue = false; var isDefault = false; if (jsName in designSet.property) { propDetails = designSet.property[jsName]; if ('multiValue' in propDetails) { multiValue = propDetails.multiValue; } if (('structuredValue' in propDetails) && Array.isArray(property[3])) { structuredValue = propDetails.structuredValue; } if ('defaultType' in propDetails) { if (valueType === propDetails.defaultType) { isDefault = true; } } else { if (valueType === DEFAULT_VALUE_TYPE) { isDefault = true; } } } else { if (valueType === DEFAULT_VALUE_TYPE) { isDefault = true; } } // push the VALUE property if type is not the default // for the current property. if (!isDefault) { // value will never contain ;/:/, so we don't escape it here. line += ';VALUE=' + valueType.toUpperCase(); } line += ':'; if (multiValue && structuredValue) { line += stringify.multiValue( property[3], structuredValue, valueType, multiValue, designSet, structuredValue ); } else if (multiValue) { line += stringify.multiValue( property.slice(3), multiValue, valueType, null, designSet, false ); } else if (structuredValue) { line += stringify.multiValue( property[3], structuredValue, valueType, null, designSet, structuredValue ); } else { line += stringify.value(property[3], valueType, designSet, false); } return noFold ? line : ICAL.helpers.foldline(line); }; /** * Handles escaping of property values that may contain: * * COLON (:), SEMICOLON (;), or COMMA (,) * * If any of the above are present the result is wrapped * in double quotes. * * @function ICAL.stringify.propertyValue * @param {String} value Raw property value * @return {String} Given or escaped value when needed */ stringify.propertyValue = function(value) { if ((helpers.unescapedIndexOf(value, ',') === -1) && (helpers.unescapedIndexOf(value, ':') === -1) && (helpers.unescapedIndexOf(value, ';') === -1)) { return value; } return '"' + value + '"'; }; /** * Converts an array of ical values into a single * string based on a type and a delimiter value (like ","). * * @function ICAL.stringify.multiValue * @param {Array} values List of values to convert * @param {String} delim Used to join the values (",", ";", ":") * @param {String} type Lowecase ical value type * (like boolean, date-time, etc..) * @param {?String} innerMulti If set, each value will again be processed * Used for structured values * @param {ICAL.design.designSet} designSet * The design data to use for this property * * @return {String} iCalendar/vCard string for value */ stringify.multiValue = function(values, delim, type, innerMulti, designSet, structuredValue) { var result = ''; var len = values.length; var i = 0; for (; i < len; i++) { if (innerMulti && Array.isArray(values[i])) { result += stringify.multiValue(values[i], innerMulti, type, null, designSet, structuredValue); } else { result += stringify.value(values[i], type, designSet, structuredValue); } if (i !== (len - 1)) { result += delim; } } return result; }; /** * Processes a single ical value runs the associated "toICAL" method from the * design value type if available to convert the value. * * @function ICAL.stringify.value * @param {String|Number} value A formatted value * @param {String} type Lowercase iCalendar/vCard value type * (like boolean, date-time, etc..) * @return {String} iCalendar/vCard value for single value */ stringify.value = function(value, type, designSet, structuredValue) { if (type in designSet.value && 'toICAL' in designSet.value[type]) { return designSet.value[type].toICAL(value, structuredValue); } return value; }; /** * Internal helper for rfc6868. Exposing this on ICAL.stringify so that * hackers can disable the rfc6868 parsing if the really need to. * * @param {String} val The value to unescape * @return {String} The escaped value */ stringify._rfc6868Unescape = function(val) { return val.replace(/[\n^"]/g, function(x) { return RFC6868_REPLACE_MAP[x]; }); }; var RFC6868_REPLACE_MAP = { '"': "^'", "\n": "^n", "^": "^^" }; return stringify; }()); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ /** * Contains various functions to parse iCalendar and vCard data. * @namespace */ ICAL.parse = (function() { 'use strict'; var CHAR = /[^ \t]/; var MULTIVALUE_DELIMITER = ','; var VALUE_DELIMITER = ':'; var PARAM_DELIMITER = ';'; var PARAM_NAME_DELIMITER = '='; var DEFAULT_VALUE_TYPE = 'unknown'; var DEFAULT_PARAM_TYPE = 'text'; var design = ICAL.design; var helpers = ICAL.helpers; /** * An error that occurred during parsing. * * @param {String} message The error message * @memberof ICAL.parse * @extends {Error} * @class */ function ParserError(message) { this.message = message; this.name = 'ParserError'; try { throw new Error(); } catch (e) { if (e.stack) { var split = e.stack.split('\n'); split.shift(); this.stack = split.join('\n'); } } } ParserError.prototype = Error.prototype; /** * Parses iCalendar or vCard data into a raw jCal object. Consult * documentation on the {@tutorial layers|layers of parsing} for more * details. * * @function ICAL.parse * @variation function * @todo Fix the API to be more clear on the return type * @param {String} input The string data to parse * @return {Object|Object[]} A single jCal object, or an array thereof */ function parser(input) { var state = {}; var root = state.component = []; state.stack = [root]; parser._eachLine(input, function(err, line) { parser._handleContentLine(line, state); }); // when there are still items on the stack // throw a fatal error, a component was not closed // correctly in that case. if (state.stack.length > 1) { throw new ParserError( 'invalid ical body. component began but did not end' ); } state = null; return (root.length == 1 ? root[0] : root); } /** * Parse an iCalendar property value into the jCal for a single property * * @function ICAL.parse.property * @param {String} str * The iCalendar property string to parse * @param {ICAL.design.designSet=} designSet * The design data to use for this property * @return {Object} * The jCal Object containing the property */ parser.property = function(str, designSet) { var state = { component: [[], []], designSet: designSet || design.defaultSet }; parser._handleContentLine(str, state); return state.component[1][0]; }; /** * Convenience method to parse a component. You can use ICAL.parse() directly * instead. * * @function ICAL.parse.component * @see ICAL.parse(function) * @param {String} str The iCalendar component string to parse * @return {Object} The jCal Object containing the component */ parser.component = function(str) { return parser(str); }; // classes & constants parser.ParserError = ParserError; /** * The state for parsing content lines from an iCalendar/vCard string. * * @private * @memberof ICAL.parse * @typedef {Object} parserState * @property {ICAL.design.designSet} designSet The design set to use for parsing * @property {ICAL.Component[]} stack The stack of components being processed * @property {ICAL.Component} component The currently active component */ /** * Handles a single line of iCalendar/vCard, updating the state. * * @private * @function ICAL.parse._handleContentLine * @param {String} line The content line to process * @param {ICAL.parse.parserState} The current state of the line parsing */ parser._handleContentLine = function(line, state) { // break up the parts of the line var valuePos = line.indexOf(VALUE_DELIMITER); var paramPos = line.indexOf(PARAM_DELIMITER); var lastParamIndex; var lastValuePos; // name of property or begin/end var name; var value; // params is only overridden if paramPos !== -1. // we can't do params = params || {} later on // because it sacrifices ops. var params = {}; /** * Different property cases * * * 1. RRULE:FREQ=foo * // FREQ= is not a param but the value * * 2. ATTENDEE;ROLE=REQ-PARTICIPANT; * // ROLE= is a param because : has not happened yet */ // when the parameter delimiter is after the // value delimiter then it is not a parameter. if ((paramPos !== -1 && valuePos !== -1)) { // when the parameter delimiter is after the // value delimiter then it is not a parameter. if (paramPos > valuePos) { paramPos = -1; } } var parsedParams; if (paramPos !== -1) { name = line.substring(0, paramPos).toLowerCase(); parsedParams = parser._parseParameters(line.substring(paramPos), 0, state.designSet); if (parsedParams[2] == -1) { throw new ParserError("Invalid parameters in '" + line + "'"); } params = parsedParams[0]; lastParamIndex = parsedParams[1].length + parsedParams[2] + paramPos; if ((lastValuePos = line.substring(lastParamIndex).indexOf(VALUE_DELIMITER)) !== -1) { value = line.substring(lastParamIndex + lastValuePos + 1); } else { throw new ParserError("Missing parameter value in '" + line + "'"); } } else if (valuePos !== -1) { // without parmeters (BEGIN:VCAENDAR, CLASS:PUBLIC) name = line.substring(0, valuePos).toLowerCase(); value = line.substring(valuePos + 1); if (name === 'begin') { var newComponent = [value.toLowerCase(), [], []]; if (state.stack.length === 1) { state.component.push(newComponent); } else { state.component[2].push(newComponent); } state.stack.push(state.component); state.component = newComponent; if (!state.designSet) { state.designSet = design.getDesignSet(state.component[0]); } return; } else if (name === 'end') { state.component = state.stack.pop(); return; } // If it is not begin/end, then this is a property with an empty value, // which should be considered valid. } else { /** * Invalid line. * The rational to throw an error is we will * never be certain that the rest of the file * is sane and it is unlikely that we can serialize * the result correctly either. */ throw new ParserError( 'invalid line (no token ";" or ":") "' + line + '"' ); } var valueType; var multiValue = false; var structuredValue = false; var propertyDetails; if (name in state.designSet.property) { propertyDetails = state.designSet.property[name]; if ('multiValue' in propertyDetails) { multiValue = propertyDetails.multiValue; } if ('structuredValue' in propertyDetails) { structuredValue = propertyDetails.structuredValue; } if (value && 'detectType' in propertyDetails) { valueType = propertyDetails.detectType(value); } } // attempt to determine value if (!valueType) { if (!('value' in params)) { if (propertyDetails) { valueType = propertyDetails.defaultType; } else { valueType = DEFAULT_VALUE_TYPE; } } else { // possible to avoid this? valueType = params.value.toLowerCase(); } } delete params.value; /** * Note on `var result` juggling: * * I observed that building the array in pieces has adverse * effects on performance, so where possible we inline the creation. * It is a little ugly but resulted in ~2000 additional ops/sec. */ var result; if (multiValue && structuredValue) { value = parser._parseMultiValue(value, structuredValue, valueType, [], multiValue, state.designSet, structuredValue); result = [name, params, valueType, value]; } else if (multiValue) { result = [name, params, valueType]; parser._parseMultiValue(value, multiValue, valueType, result, null, state.designSet, false); } else if (structuredValue) { value = parser._parseMultiValue(value, structuredValue, valueType, [], null, state.designSet, structuredValue); result = [name, params, valueType, value]; } else { value = parser._parseValue(value, valueType, state.designSet, false); result = [name, params, valueType, value]; } // rfc6350 requires that in vCard 4.0 the first component is the VERSION // component with as value 4.0, note that 3.0 does not have this requirement. if (state.component[0] === 'vcard' && state.component[1].length === 0 && !(name === 'version' && value === '4.0')) { state.designSet = design.getDesignSet("vcard3"); } state.component[1].push(result); }; /** * Parse a value from the raw value into the jCard/jCal value. * * @private * @function ICAL.parse._parseValue * @param {String} value Original value * @param {String} type Type of value * @param {Object} designSet The design data to use for this value * @return {Object} varies on type */ parser._parseValue = function(value, type, designSet, structuredValue) { if (type in designSet.value && 'fromICAL' in designSet.value[type]) { return designSet.value[type].fromICAL(value, structuredValue); } return value; }; /** * Parse parameters from a string to object. * * @function ICAL.parse._parseParameters * @private * @param {String} line A single unfolded line * @param {Numeric} start Position to start looking for properties * @param {Object} designSet The design data to use for this property * @return {Object} key/value pairs */ parser._parseParameters = function(line, start, designSet) { var lastParam = start; var pos = 0; var delim = PARAM_NAME_DELIMITER; var result = {}; var name, lcname; var value, valuePos = -1; var type, multiValue, mvdelim; // find the next '=' sign // use lastParam and pos to find name // check if " is used if so get value from "->" // then increment pos to find next ; while ((pos !== false) && (pos = helpers.unescapedIndexOf(line, delim, pos + 1)) !== -1) { name = line.substr(lastParam + 1, pos - lastParam - 1); if (name.length == 0) { throw new ParserError("Empty parameter name in '" + line + "'"); } lcname = name.toLowerCase(); mvdelim = false; multiValue = false; if (lcname in designSet.param && designSet.param[lcname].valueType) { type = designSet.param[lcname].valueType; } else { type = DEFAULT_PARAM_TYPE; } if (lcname in designSet.param) { multiValue = designSet.param[lcname].multiValue; if (designSet.param[lcname].multiValueSeparateDQuote) { mvdelim = parser._rfc6868Escape('"' + multiValue + '"'); } } var nextChar = line[pos + 1]; if (nextChar === '"') { valuePos = pos + 2; pos = helpers.unescapedIndexOf(line, '"', valuePos); if (multiValue && pos != -1) { var extendedValue = true; while (extendedValue) { if (line[pos + 1] == multiValue && line[pos + 2] == '"') { pos = helpers.unescapedIndexOf(line, '"', pos + 3); } else { extendedValue = false; } } } if (pos === -1) { throw new ParserError( 'invalid line (no matching double quote) "' + line + '"' ); } value = line.substr(valuePos, pos - valuePos); lastParam = helpers.unescapedIndexOf(line, PARAM_DELIMITER, pos); if (lastParam === -1) { pos = false; } } else { valuePos = pos + 1; // move to next ";" var nextPos = helpers.unescapedIndexOf(line, PARAM_DELIMITER, valuePos); var propValuePos = helpers.unescapedIndexOf(line, VALUE_DELIMITER, valuePos); if (propValuePos !== -1 && nextPos > propValuePos) { // this is a delimiter in the property value, let's stop here nextPos = propValuePos; pos = false; } else if (nextPos === -1) { // no ";" if (propValuePos === -1) { nextPos = line.length; } else { nextPos = propValuePos; } pos = false; } else { lastParam = nextPos; pos = nextPos; } value = line.substr(valuePos, nextPos - valuePos); } value = parser._rfc6868Escape(value); if (multiValue) { var delimiter = mvdelim || multiValue; value = parser._parseMultiValue(value, delimiter, type, [], null, designSet); } else { value = parser._parseValue(value, type, designSet); } if (multiValue && (lcname in result)) { if (Array.isArray(result[lcname])) { result[lcname].push(value); } else { result[lcname] = [ result[lcname], value ]; } } else { result[lcname] = value; } } return [result, value, valuePos]; }; /** * Internal helper for rfc6868. Exposing this on ICAL.parse so that * hackers can disable the rfc6868 parsing if the really need to. * * @function ICAL.parse._rfc6868Escape * @param {String} val The value to escape * @return {String} The escaped value */ parser._rfc6868Escape = function(val) { return val.replace(/\^['n^]/g, function(x) { return RFC6868_REPLACE_MAP[x]; }); }; var RFC6868_REPLACE_MAP = { "^'": '"', "^n": "\n", "^^": "^" }; /** * Parse a multi value string. This function is used either for parsing * actual multi-value property's values, or for handling parameter values. It * can be used for both multi-value properties and structured value properties. * * @private * @function ICAL.parse._parseMultiValue * @param {String} buffer The buffer containing the full value * @param {String} delim The multi-value delimiter * @param {String} type The value type to be parsed * @param {Array.} result The array to append results to, varies on value type * @param {String} innerMulti The inner delimiter to split each value with * @param {ICAL.design.designSet} designSet The design data for this value * @return {?|Array.} Either an array of results, or the first result */ parser._parseMultiValue = function(buffer, delim, type, result, innerMulti, designSet, structuredValue) { var pos = 0; var lastPos = 0; var value; if (delim.length === 0) { return buffer; } // split each piece while ((pos = helpers.unescapedIndexOf(buffer, delim, lastPos)) !== -1) { value = buffer.substr(lastPos, pos - lastPos); if (innerMulti) { value = parser._parseMultiValue(value, innerMulti, type, [], null, designSet, structuredValue); } else { value = parser._parseValue(value, type, designSet, structuredValue); } result.push(value); lastPos = pos + delim.length; } // on the last piece take the rest of string value = buffer.substr(lastPos); if (innerMulti) { value = parser._parseMultiValue(value, innerMulti, type, [], null, designSet, structuredValue); } else { value = parser._parseValue(value, type, designSet, structuredValue); } result.push(value); return result.length == 1 ? result[0] : result; }; /** * Process a complete buffer of iCalendar/vCard data line by line, correctly * unfolding content. Each line will be processed with the given callback * * @private * @function ICAL.parse._eachLine * @param {String} buffer The buffer to process * @param {function(?String, String)} callback The callback for each line */ parser._eachLine = function(buffer, callback) { var len = buffer.length; var lastPos = buffer.search(CHAR); var pos = lastPos; var line; var firstChar; var newlineOffset; do { pos = buffer.indexOf('\n', lastPos) + 1; if (pos > 1 && buffer[pos - 2] === '\r') { newlineOffset = 2; } else { newlineOffset = 1; } if (pos === 0) { pos = len; newlineOffset = 0; } firstChar = buffer[lastPos]; if (firstChar === ' ' || firstChar === '\t') { // add to line line += buffer.substr( lastPos + 1, pos - lastPos - (newlineOffset + 1) ); } else { if (line) callback(null, line); // push line line = buffer.substr( lastPos, pos - lastPos - newlineOffset ); } lastPos = pos; } while (pos !== len); // extra ending line line = line.trim(); if (line.length) callback(null, line); }; return parser; }()); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ /** * This symbol is further described later on * @ignore */ ICAL.Component = (function() { 'use strict'; var PROPERTY_INDEX = 1; var COMPONENT_INDEX = 2; var NAME_INDEX = 0; /** * @classdesc * Wraps a jCal component, adding convenience methods to add, remove and * update subcomponents and properties. * * @class * @alias ICAL.Component * @param {Array|String} jCal Raw jCal component data OR name of new * component * @param {ICAL.Component} parent Parent component to associate */ function Component(jCal, parent) { if (typeof(jCal) === 'string') { // jCal spec (name, properties, components) jCal = [jCal, [], []]; } // mostly for legacy reasons. this.jCal = jCal; this.parent = parent || null; } Component.prototype = { /** * Hydrated properties are inserted into the _properties array at the same * position as in the jCal array, so it is possible that the array contains * undefined values for unhydrdated properties. To avoid iterating the * array when checking if all properties have been hydrated, we save the * count here. * * @type {Number} * @private */ _hydratedPropertyCount: 0, /** * The same count as for _hydratedPropertyCount, but for subcomponents * * @type {Number} * @private */ _hydratedComponentCount: 0, /** * The name of this component * @readonly */ get name() { return this.jCal[NAME_INDEX]; }, /** * The design set for this component, e.g. icalendar vs vcard * * @type {ICAL.design.designSet} * @private */ get _designSet() { var parentDesign = this.parent && this.parent._designSet; return parentDesign || ICAL.design.getDesignSet(this.name); }, _hydrateComponent: function(index) { if (!this._components) { this._components = []; this._hydratedComponentCount = 0; } if (this._components[index]) { return this._components[index]; } var comp = new Component( this.jCal[COMPONENT_INDEX][index], this ); this._hydratedComponentCount++; return (this._components[index] = comp); }, _hydrateProperty: function(index) { if (!this._properties) { this._properties = []; this._hydratedPropertyCount = 0; } if (this._properties[index]) { return this._properties[index]; } var prop = new ICAL.Property( this.jCal[PROPERTY_INDEX][index], this ); this._hydratedPropertyCount++; return (this._properties[index] = prop); }, /** * Finds first sub component, optionally filtered by name. * * @param {String=} name Optional name to filter by * @return {?ICAL.Component} The found subcomponent */ getFirstSubcomponent: function(name) { if (name) { var i = 0; var comps = this.jCal[COMPONENT_INDEX]; var len = comps.length; for (; i < len; i++) { if (comps[i][NAME_INDEX] === name) { var result = this._hydrateComponent(i); return result; } } } else { if (this.jCal[COMPONENT_INDEX].length) { return this._hydrateComponent(0); } } // ensure we return a value (strict mode) return null; }, /** * Finds all sub components, optionally filtering by name. * * @param {String=} name Optional name to filter by * @return {ICAL.Component[]} The found sub components */ getAllSubcomponents: function(name) { var jCalLen = this.jCal[COMPONENT_INDEX].length; var i = 0; if (name) { var comps = this.jCal[COMPONENT_INDEX]; var result = []; for (; i < jCalLen; i++) { if (name === comps[i][NAME_INDEX]) { result.push( this._hydrateComponent(i) ); } } return result; } else { if (!this._components || (this._hydratedComponentCount !== jCalLen)) { for (; i < jCalLen; i++) { this._hydrateComponent(i); } } return this._components || []; } }, /** * Returns true when a named property exists. * * @param {String} name The property name * @return {Boolean} True, when property is found */ hasProperty: function(name) { var props = this.jCal[PROPERTY_INDEX]; var len = props.length; var i = 0; for (; i < len; i++) { // 0 is property name if (props[i][NAME_INDEX] === name) { return true; } } return false; }, /** * Finds the first property, optionally with the given name. * * @param {String=} name Lowercase property name * @return {?ICAL.Property} The found property */ getFirstProperty: function(name) { if (name) { var i = 0; var props = this.jCal[PROPERTY_INDEX]; var len = props.length; for (; i < len; i++) { if (props[i][NAME_INDEX] === name) { var result = this._hydrateProperty(i); return result; } } } else { if (this.jCal[PROPERTY_INDEX].length) { return this._hydrateProperty(0); } } return null; }, /** * Returns first property's value, if available. * * @param {String=} name Lowercase property name * @return {?String} The found property value. */ getFirstPropertyValue: function(name) { var prop = this.getFirstProperty(name); if (prop) { return prop.getFirstValue(); } return null; }, /** * Get all properties in the component, optionally filtered by name. * * @param {String=} name Lowercase property name * @return {ICAL.Property[]} List of properties */ getAllProperties: function(name) { var jCalLen = this.jCal[PROPERTY_INDEX].length; var i = 0; if (name) { var props = this.jCal[PROPERTY_INDEX]; var result = []; for (; i < jCalLen; i++) { if (name === props[i][NAME_INDEX]) { result.push( this._hydrateProperty(i) ); } } return result; } else { if (!this._properties || (this._hydratedPropertyCount !== jCalLen)) { for (; i < jCalLen; i++) { this._hydrateProperty(i); } } return this._properties || []; } }, _removeObjectByIndex: function(jCalIndex, cache, index) { cache = cache || []; // remove cached version if (cache[index]) { var obj = cache[index]; if ("parent" in obj) { obj.parent = null; } } cache.splice(index, 1); // remove it from the jCal this.jCal[jCalIndex].splice(index, 1); }, _removeObject: function(jCalIndex, cache, nameOrObject) { var i = 0; var objects = this.jCal[jCalIndex]; var len = objects.length; var cached = this[cache]; if (typeof(nameOrObject) === 'string') { for (; i < len; i++) { if (objects[i][NAME_INDEX] === nameOrObject) { this._removeObjectByIndex(jCalIndex, cached, i); return true; } } } else if (cached) { for (; i < len; i++) { if (cached[i] && cached[i] === nameOrObject) { this._removeObjectByIndex(jCalIndex, cached, i); return true; } } } return false; }, _removeAllObjects: function(jCalIndex, cache, name) { var cached = this[cache]; // Unfortunately we have to run through all children to reset their // parent property. var objects = this.jCal[jCalIndex]; var i = objects.length - 1; // descending search required because splice // is used and will effect the indices. for (; i >= 0; i--) { if (!name || objects[i][NAME_INDEX] === name) { this._removeObjectByIndex(jCalIndex, cached, i); } } }, /** * Adds a single sub component. * * @param {ICAL.Component} component The component to add * @return {ICAL.Component} The passed in component */ addSubcomponent: function(component) { if (!this._components) { this._components = []; this._hydratedComponentCount = 0; } if (component.parent) { component.parent.removeSubcomponent(component); } var idx = this.jCal[COMPONENT_INDEX].push(component.jCal); this._components[idx - 1] = component; this._hydratedComponentCount++; component.parent = this; return component; }, /** * Removes a single component by name or the instance of a specific * component. * * @param {ICAL.Component|String} nameOrComp Name of component, or component * @return {Boolean} True when comp is removed */ removeSubcomponent: function(nameOrComp) { var removed = this._removeObject(COMPONENT_INDEX, '_components', nameOrComp); if (removed) { this._hydratedComponentCount--; } return removed; }, /** * Removes all components or (if given) all components by a particular * name. * * @param {String=} name Lowercase component name */ removeAllSubcomponents: function(name) { var removed = this._removeAllObjects(COMPONENT_INDEX, '_components', name); this._hydratedComponentCount = 0; return removed; }, /** * Adds an {@link ICAL.Property} to the component. * * @param {ICAL.Property} property The property to add * @return {ICAL.Property} The passed in property */ addProperty: function(property) { if (!(property instanceof ICAL.Property)) { throw new TypeError('must instance of ICAL.Property'); } if (!this._properties) { this._properties = []; this._hydratedPropertyCount = 0; } if (property.parent) { property.parent.removeProperty(property); } var idx = this.jCal[PROPERTY_INDEX].push(property.jCal); this._properties[idx - 1] = property; this._hydratedPropertyCount++; property.parent = this; return property; }, /** * Helper method to add a property with a value to the component. * * @param {String} name Property name to add * @param {String|Number|Object} value Property value * @return {ICAL.Property} The created property */ addPropertyWithValue: function(name, value) { var prop = new ICAL.Property(name); prop.setValue(value); this.addProperty(prop); return prop; }, /** * Helper method that will update or create a property of the given name * and sets its value. If multiple properties with the given name exist, * only the first is updated. * * @param {String} name Property name to update * @param {String|Number|Object} value Property value * @return {ICAL.Property} The created property */ updatePropertyWithValue: function(name, value) { var prop = this.getFirstProperty(name); if (prop) { prop.setValue(value); } else { prop = this.addPropertyWithValue(name, value); } return prop; }, /** * Removes a single property by name or the instance of the specific * property. * * @param {String|ICAL.Property} nameOrProp Property name or instance to remove * @return {Boolean} True, when deleted */ removeProperty: function(nameOrProp) { var removed = this._removeObject(PROPERTY_INDEX, '_properties', nameOrProp); if (removed) { this._hydratedPropertyCount--; } return removed; }, /** * Removes all properties associated with this component, optionally * filtered by name. * * @param {String=} name Lowercase property name * @return {Boolean} True, when deleted */ removeAllProperties: function(name) { var removed = this._removeAllObjects(PROPERTY_INDEX, '_properties', name); this._hydratedPropertyCount = 0; return removed; }, /** * Returns the Object representation of this component. The returned object * is a live jCal object and should be cloned if modified. * @return {Object} */ toJSON: function() { return this.jCal; }, /** * The string representation of this component. * @return {String} */ toString: function() { return ICAL.stringify.component( this.jCal, this._designSet ); } }; /** * Create an {@link ICAL.Component} by parsing the passed iCalendar string. * * @param {String} str The iCalendar string to parse */ Component.fromString = function(str) { return new Component(ICAL.parse.component(str)); }; return Component; }()); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ /** * This symbol is further described later on * @ignore */ ICAL.Property = (function() { 'use strict'; var NAME_INDEX = 0; var PROP_INDEX = 1; var TYPE_INDEX = 2; var VALUE_INDEX = 3; var design = ICAL.design; /** * @classdesc * Provides a layer on top of the raw jCal object for manipulating a single * property, with its parameters and value. * * @description * It is important to note that mutations done in the wrapper * directly mutate the jCal object used to initialize. * * Can also be used to create new properties by passing * the name of the property (as a String). * * @class * @alias ICAL.Property * @param {Array|String} jCal Raw jCal representation OR * the new name of the property * * @param {ICAL.Component=} parent Parent component */ function Property(jCal, parent) { this._parent = parent || null; if (typeof(jCal) === 'string') { // We are creating the property by name and need to detect the type this.jCal = [jCal, {}, design.defaultType]; this.jCal[TYPE_INDEX] = this.getDefaultType(); } else { this.jCal = jCal; } this._updateType(); } Property.prototype = { /** * The value type for this property * @readonly * @type {String} */ get type() { return this.jCal[TYPE_INDEX]; }, /** * The name of this property, in lowercase. * @readonly * @type {String} */ get name() { return this.jCal[NAME_INDEX]; }, /** * The parent component for this property. * @type {ICAL.Component} */ get parent() { return this._parent; }, set parent(p) { // Before setting the parent, check if the design set has changed. If it // has, we later need to update the type if it was unknown before. var designSetChanged = !this._parent || (p && p._designSet != this._parent._designSet); this._parent = p; if (this.type == design.defaultType && designSetChanged) { this.jCal[TYPE_INDEX] = this.getDefaultType(); this._updateType(); } return p; }, /** * The design set for this property, e.g. icalendar vs vcard * * @type {ICAL.design.designSet} * @private */ get _designSet() { return this.parent ? this.parent._designSet : design.defaultSet; }, /** * Updates the type metadata from the current jCal type and design set. * * @private */ _updateType: function() { var designSet = this._designSet; if (this.type in designSet.value) { var designType = designSet.value[this.type]; if ('decorate' in designSet.value[this.type]) { this.isDecorated = true; } else { this.isDecorated = false; } if (this.name in designSet.property) { this.isMultiValue = ('multiValue' in designSet.property[this.name]); this.isStructuredValue = ('structuredValue' in designSet.property[this.name]); } } }, /** * Hydrate a single value. The act of hydrating means turning the raw jCal * value into a potentially wrapped object, for example {@link ICAL.Time}. * * @private * @param {Number} index The index of the value to hydrate * @return {Object} The decorated value. */ _hydrateValue: function(index) { if (this._values && this._values[index]) { return this._values[index]; } // for the case where there is no value. if (this.jCal.length <= (VALUE_INDEX + index)) { return null; } if (this.isDecorated) { if (!this._values) { this._values = []; } return (this._values[index] = this._decorate( this.jCal[VALUE_INDEX + index] )); } else { return this.jCal[VALUE_INDEX + index]; } }, /** * Decorate a single value, returning its wrapped object. This is used by * the hydrate function to actually wrap the value. * * @private * @param {?} value The value to decorate * @return {Object} The decorated value */ _decorate: function(value) { return this._designSet.value[this.type].decorate(value, this); }, /** * Undecorate a single value, returning its raw jCal data. * * @private * @param {Object} value The value to undecorate * @return {?} The undecorated value */ _undecorate: function(value) { return this._designSet.value[this.type].undecorate(value, this); }, /** * Sets the value at the given index while also hydrating it. The passed * value can either be a decorated or undecorated value. * * @private * @param {?} value The value to set * @param {Number} index The index to set it at */ _setDecoratedValue: function(value, index) { if (!this._values) { this._values = []; } if (typeof(value) === 'object' && 'icaltype' in value) { // decorated value this.jCal[VALUE_INDEX + index] = this._undecorate(value); this._values[index] = value; } else { // undecorated value this.jCal[VALUE_INDEX + index] = value; this._values[index] = this._decorate(value); } }, /** * Gets a parameter on the property. * * @param {String} name Parameter name (lowercase) * @return {Array|String} Parameter value */ getParameter: function(name) { if (name in this.jCal[PROP_INDEX]) { return this.jCal[PROP_INDEX][name]; } else { return undefined; } }, /** * Gets first parameter on the property. * * @param {String} name Parameter name (lowercase) * @return {String} Parameter value */ getFirstParameter: function(name) { var parameters = this.getParameter(name); if (Array.isArray(parameters)) { return parameters[0]; } return parameters; }, /** * Sets a parameter on the property. * * @param {String} name The parameter name * @param {Array|String} value The parameter value */ setParameter: function(name, value) { var lcname = name.toLowerCase(); if (typeof value === "string" && lcname in this._designSet.param && 'multiValue' in this._designSet.param[lcname]) { value = [value]; } this.jCal[PROP_INDEX][name] = value; }, /** * Removes a parameter * * @param {String} name The parameter name */ removeParameter: function(name) { delete this.jCal[PROP_INDEX][name]; }, /** * Get the default type based on this property's name. * * @return {String} The default type for this property */ getDefaultType: function() { var name = this.jCal[NAME_INDEX]; var designSet = this._designSet; if (name in designSet.property) { var details = designSet.property[name]; if ('defaultType' in details) { return details.defaultType; } } return design.defaultType; }, /** * Sets type of property and clears out any existing values of the current * type. * * @param {String} type New iCAL type (see design.*.values) */ resetType: function(type) { this.removeAllValues(); this.jCal[TYPE_INDEX] = type; this._updateType(); }, /** * Finds the first property value. * * @return {String} First property value */ getFirstValue: function() { return this._hydrateValue(0); }, /** * Gets all values on the property. * * NOTE: this creates an array during each call. * * @return {Array} List of values */ getValues: function() { var len = this.jCal.length - VALUE_INDEX; if (len < 1) { // it is possible for a property to have no value. return []; } var i = 0; var result = []; for (; i < len; i++) { result[i] = this._hydrateValue(i); } return result; }, /** * Removes all values from this property */ removeAllValues: function() { if (this._values) { this._values.length = 0; } this.jCal.length = 3; }, /** * Sets the values of the property. Will overwrite the existing values. * This can only be used for multi-value properties. * * @param {Array} values An array of values */ setValues: function(values) { if (!this.isMultiValue) { throw new Error( this.name + ': does not not support mulitValue.\n' + 'override isMultiValue' ); } var len = values.length; var i = 0; this.removeAllValues(); if (len > 0 && typeof(values[0]) === 'object' && 'icaltype' in values[0]) { this.resetType(values[0].icaltype); } if (this.isDecorated) { for (; i < len; i++) { this._setDecoratedValue(values[i], i); } } else { for (; i < len; i++) { this.jCal[VALUE_INDEX + i] = values[i]; } } }, /** * Sets the current value of the property. If this is a multi-value * property, all other values will be removed. * * @param {String|Object} value New property value. */ setValue: function(value) { this.removeAllValues(); if (typeof(value) === 'object' && 'icaltype' in value) { this.resetType(value.icaltype); } if (this.isDecorated) { this._setDecoratedValue(value, 0); } else { this.jCal[VALUE_INDEX] = value; } }, /** * Returns the Object representation of this component. The returned object * is a live jCal object and should be cloned if modified. * @return {Object} */ toJSON: function() { return this.jCal; }, /** * The string representation of this component. * @return {String} */ toICALString: function() { return ICAL.stringify.property( this.jCal, this._designSet, true ); } }; /** * Create an {@link ICAL.Property} by parsing the passed iCalendar string. * * @param {String} str The iCalendar string to parse * @param {ICAL.design.designSet=} designSet The design data to use for this property * @return {ICAL.Property} The created iCalendar property */ Property.fromString = function(str, designSet) { return new Property(ICAL.parse.property(str, designSet)); }; return Property; }()); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ /** * This symbol is further described later on * @ignore */ ICAL.UtcOffset = (function() { /** * @classdesc * This class represents the "duration" value type, with various calculation * and manipulation methods. * * @class * @alias ICAL.UtcOffset * @param {Object} aData An object with members of the utc offset * @param {Number=} aData.hours The hours for the utc offset * @param {Number=} aData.minutes The minutes in the utc offset * @param {Number=} aData.factor The factor for the utc-offset, either -1 or 1 */ function UtcOffset(aData) { this.fromData(aData); } UtcOffset.prototype = { /** * The hours in the utc-offset * @type {Number} */ hours: 0, /** * The minutes in the utc-offset * @type {Number} */ minutes: 0, /** * The sign of the utc offset, 1 for positive offset, -1 for negative * offsets. * @type {Number} */ factor: 1, /** * The type name, to be used in the jCal object. * @constant * @type {String} * @default "utc-offset" */ icaltype: "utc-offset", /** * Returns a clone of the utc offset object. * * @return {ICAL.UtcOffset} The cloned object */ clone: function() { return ICAL.UtcOffset.fromSeconds(this.toSeconds()); }, /** * Sets up the current instance using members from the passed data object. * * @param {Object} aData An object with members of the utc offset * @param {Number=} aData.hours The hours for the utc offset * @param {Number=} aData.minutes The minutes in the utc offset * @param {Number=} aData.factor The factor for the utc-offset, either -1 or 1 */ fromData: function(aData) { if (aData) { for (var key in aData) { /* istanbul ignore else */ if (aData.hasOwnProperty(key)) { this[key] = aData[key]; } } } this._normalize(); }, /** * Sets up the current instance from the given seconds value. The seconds * value is truncated to the minute. Offsets are wrapped when the world * ends, the hour after UTC+14:00 is UTC-12:00. * * @param {Number} aSeconds The seconds to convert into an offset */ fromSeconds: function(aSeconds) { var secs = Math.abs(aSeconds); this.factor = aSeconds < 0 ? -1 : 1; this.hours = ICAL.helpers.trunc(secs / 3600); secs -= (this.hours * 3600); this.minutes = ICAL.helpers.trunc(secs / 60); return this; }, /** * Convert the current offset to a value in seconds * * @return {Number} The offset in seconds */ toSeconds: function() { return this.factor * (60 * this.minutes + 3600 * this.hours); }, /** * Compare this utc offset with another one. * * @param {ICAL.UtcOffset} other The other offset to compare with * @return {Number} -1, 0 or 1 for less/equal/greater */ compare: function icaltime_compare(other) { var a = this.toSeconds(); var b = other.toSeconds(); return (a > b) - (b > a); }, _normalize: function() { // Range: 97200 seconds (with 1 hour inbetween) var secs = this.toSeconds(); var factor = this.factor; while (secs < -43200) { // = UTC-12:00 secs += 97200; } while (secs > 50400) { // = UTC+14:00 secs -= 97200; } this.fromSeconds(secs); // Avoid changing the factor when on zero seconds if (secs == 0) { this.factor = factor; } }, /** * The iCalendar string representation of this utc-offset. * @return {String} */ toICALString: function() { return ICAL.design.icalendar.value['utc-offset'].toICAL(this.toString()); }, /** * The string representation of this utc-offset. * @return {String} */ toString: function toString() { return (this.factor == 1 ? "+" : "-") + ICAL.helpers.pad2(this.hours) + ':' + ICAL.helpers.pad2(this.minutes); } }; /** * Creates a new {@link ICAL.UtcOffset} instance from the passed string. * * @param {String} aString The string to parse * @return {ICAL.Duration} The created utc-offset instance */ UtcOffset.fromString = function(aString) { // -05:00 var options = {}; //TODO: support seconds per rfc5545 ? options.factor = (aString[0] === '+') ? 1 : -1; options.hours = ICAL.helpers.strictParseInt(aString.substr(1, 2)); options.minutes = ICAL.helpers.strictParseInt(aString.substr(4, 2)); return new ICAL.UtcOffset(options); }; /** * Creates a new {@link ICAL.UtcOffset} instance from the passed seconds * value. * * @param {Number} aSeconds The number of seconds to convert */ UtcOffset.fromSeconds = function(aSeconds) { var instance = new UtcOffset(); instance.fromSeconds(aSeconds); return instance; }; return UtcOffset; }()); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ /** * This symbol is further described later on * @ignore */ ICAL.Binary = (function() { /** * @classdesc * Represents the BINARY value type, which contains extra methods for * encoding and decoding. * * @class * @alias ICAL.Binary * @param {String} aValue The binary data for this value */ function Binary(aValue) { this.value = aValue; } Binary.prototype = { /** * The type name, to be used in the jCal object. * @default "binary" * @constant */ icaltype: "binary", /** * Base64 decode the current value * * @return {String} The base64-decoded value */ decodeValue: function decodeValue() { return this._b64_decode(this.value); }, /** * Encodes the passed parameter with base64 and sets the internal * value to the result. * * @param {String} aValue The raw binary value to encode */ setEncodedValue: function setEncodedValue(aValue) { this.value = this._b64_encode(aValue); }, _b64_encode: function base64_encode(data) { // http://kevin.vanzonneveld.net // + original by: Tyler Akins (http://rumkin.com) // + improved by: Bayron Guevara // + improved by: Thunder.m // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + bugfixed by: Pellentesque Malesuada // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + improved by: Rafał Kukawski (http://kukawski.pl) // * example 1: base64_encode('Kevin van Zonneveld'); // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' // mozilla has this native // - but breaks in 2.0.0.12! //if (typeof this.window['atob'] == 'function') { // return atob(data); //} var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz0123456789+/="; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc = "", tmp_arr = []; if (!data) { return data; } do { // pack three octets into four hexets o1 = data.charCodeAt(i++); o2 = data.charCodeAt(i++); o3 = data.charCodeAt(i++); bits = o1 << 16 | o2 << 8 | o3; h1 = bits >> 18 & 0x3f; h2 = bits >> 12 & 0x3f; h3 = bits >> 6 & 0x3f; h4 = bits & 0x3f; // use hexets to index into b64, and append result to encoded string tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); } while (i < data.length); enc = tmp_arr.join(''); var r = data.length % 3; return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3); }, _b64_decode: function base64_decode(data) { // http://kevin.vanzonneveld.net // + original by: Tyler Akins (http://rumkin.com) // + improved by: Thunder.m // + input by: Aman Gupta // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + bugfixed by: Onno Marsman // + bugfixed by: Pellentesque Malesuada // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + input by: Brett Zamir (http://brett-zamir.me) // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA=='); // * returns 1: 'Kevin van Zonneveld' // mozilla has this native // - but breaks in 2.0.0.12! //if (typeof this.window['btoa'] == 'function') { // return btoa(data); //} var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz0123456789+/="; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, dec = "", tmp_arr = []; if (!data) { return data; } data += ''; do { // unpack four hexets into three octets using index points in b64 h1 = b64.indexOf(data.charAt(i++)); h2 = b64.indexOf(data.charAt(i++)); h3 = b64.indexOf(data.charAt(i++)); h4 = b64.indexOf(data.charAt(i++)); bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; o1 = bits >> 16 & 0xff; o2 = bits >> 8 & 0xff; o3 = bits & 0xff; if (h3 == 64) { tmp_arr[ac++] = String.fromCharCode(o1); } else if (h4 == 64) { tmp_arr[ac++] = String.fromCharCode(o1, o2); } else { tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); } } while (i < data.length); dec = tmp_arr.join(''); return dec; }, /** * The string representation of this value * @return {String} */ toString: function() { return this.value; } }; /** * Creates a binary value from the given string. * * @param {String} aString The binary value string * @return {ICAL.Binary} The binary value instance */ Binary.fromString = function(aString) { return new Binary(aString); }; return Binary; }()); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ (function() { /** * @classdesc * This class represents the "period" value type, with various calculation * and manipulation methods. * * @description * The passed data object cannot contain both and end date and a duration. * * @class * @param {Object} aData An object with members of the period * @param {ICAL.Time=} aData.start The start of the period * @param {ICAL.Time=} aData.end The end of the period * @param {ICAL.Duration=} aData.duration The duration of the period */ ICAL.Period = function icalperiod(aData) { this.wrappedJSObject = this; if (aData && 'start' in aData) { if (aData.start && !(aData.start instanceof ICAL.Time)) { throw new TypeError('.start must be an instance of ICAL.Time'); } this.start = aData.start; } if (aData && aData.end && aData.duration) { throw new Error('cannot accept both end and duration'); } if (aData && 'end' in aData) { if (aData.end && !(aData.end instanceof ICAL.Time)) { throw new TypeError('.end must be an instance of ICAL.Time'); } this.end = aData.end; } if (aData && 'duration' in aData) { if (aData.duration && !(aData.duration instanceof ICAL.Duration)) { throw new TypeError('.duration must be an instance of ICAL.Duration'); } this.duration = aData.duration; } }; ICAL.Period.prototype = { /** * The start of the period * @type {ICAL.Time} */ start: null, /** * The end of the period * @type {ICAL.Time} */ end: null, /** * The duration of the period * @type {ICAL.Duration} */ duration: null, /** * The class identifier. * @constant * @type {String} * @default "icalperiod" */ icalclass: "icalperiod", /** * The type name, to be used in the jCal object. * @constant * @type {String} * @default "period" */ icaltype: "period", /** * Returns a clone of the duration object. * * @return {ICAL.Period} The cloned object */ clone: function() { return ICAL.Period.fromData({ start: this.start ? this.start.clone() : null, end: this.end ? this.end.clone() : null, duration: this.duration ? this.duration.clone() : null }); }, /** * Calculates the duration of the period, either directly or by subtracting * start from end date. * * @return {ICAL.Duration} The calculated duration */ getDuration: function duration() { if (this.duration) { return this.duration; } else { return this.end.subtractDate(this.start); } }, /** * Calculates the end date of the period, either directly or by adding * duration to start date. * * @return {ICAL.Time} The calculated end date */ getEnd: function() { if (this.end) { return this.end; } else { var end = this.start.clone(); end.addDuration(this.duration); return end; } }, /** * The string representation of this period. * @return {String} */ toString: function toString() { return this.start + "/" + (this.end || this.duration); }, /** * The jCal representation of this period type. * @return {Object} */ toJSON: function() { return [this.start.toString(), (this.end || this.duration).toString()]; }, /** * The iCalendar string representation of this period. * @return {String} */ toICALString: function() { return this.start.toICALString() + "/" + (this.end || this.duration).toICALString(); } }; /** * Creates a new {@link ICAL.Period} instance from the passed string. * * @param {String} str The string to parse * @param {ICAL.Property} prop The property this period will be on * @return {ICAL.Period} The created period instance */ ICAL.Period.fromString = function fromString(str, prop) { var parts = str.split('/'); if (parts.length !== 2) { throw new Error( 'Invalid string value: "' + str + '" must contain a "/" char.' ); } var options = { start: ICAL.Time.fromDateTimeString(parts[0], prop) }; var end = parts[1]; if (ICAL.Duration.isValueString(end)) { options.duration = ICAL.Duration.fromString(end); } else { options.end = ICAL.Time.fromDateTimeString(end, prop); } return new ICAL.Period(options); }; /** * Creates a new {@link ICAL.Period} instance from the given data object. * The passed data object cannot contain both and end date and a duration. * * @param {Object} aData An object with members of the period * @param {ICAL.Time=} aData.start The start of the period * @param {ICAL.Time=} aData.end The end of the period * @param {ICAL.Duration=} aData.duration The duration of the period * @return {ICAL.Period} The period instance */ ICAL.Period.fromData = function fromData(aData) { return new ICAL.Period(aData); }; /** * Returns a new period instance from the given jCal data array. The first * member is always the start date string, the second member is either a * duration or end date string. * * @param {Array} aData The jCal data array * @param {ICAL.Property} aProp The property this jCal data is on * @param {Boolean} aLenient If true, data value can be both date and date-time * @return {ICAL.Period} The period instance */ ICAL.Period.fromJSON = function(aData, aProp, aLenient) { function fromDateOrDateTimeString(aValue, aProp) { if (aLenient) { return ICAL.Time.fromString(aValue, aProp); } else { return ICAL.Time.fromDateTimeString(aValue, aProp); } } if (ICAL.Duration.isValueString(aData[1])) { return ICAL.Period.fromData({ start: fromDateOrDateTimeString(aData[0], aProp), duration: ICAL.Duration.fromString(aData[1]) }); } else { return ICAL.Period.fromData({ start: fromDateOrDateTimeString(aData[0], aProp), end: fromDateOrDateTimeString(aData[1], aProp) }); } }; })(); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ (function() { var DURATION_LETTERS = /([PDWHMTS]{1,1})/; /** * @classdesc * This class represents the "duration" value type, with various calculation * and manipulation methods. * * @class * @alias ICAL.Duration * @param {Object} data An object with members of the duration * @param {Number} data.weeks Duration in weeks * @param {Number} data.days Duration in days * @param {Number} data.hours Duration in hours * @param {Number} data.minutes Duration in minutes * @param {Number} data.seconds Duration in seconds * @param {Boolean} data.isNegative If true, the duration is negative */ ICAL.Duration = function icalduration(data) { this.wrappedJSObject = this; this.fromData(data); }; ICAL.Duration.prototype = { /** * The weeks in this duration * @type {Number} * @default 0 */ weeks: 0, /** * The days in this duration * @type {Number} * @default 0 */ days: 0, /** * The days in this duration * @type {Number} * @default 0 */ hours: 0, /** * The minutes in this duration * @type {Number} * @default 0 */ minutes: 0, /** * The seconds in this duration * @type {Number} * @default 0 */ seconds: 0, /** * The seconds in this duration * @type {Boolean} * @default false */ isNegative: false, /** * The class identifier. * @constant * @type {String} * @default "icalduration" */ icalclass: "icalduration", /** * The type name, to be used in the jCal object. * @constant * @type {String} * @default "duration" */ icaltype: "duration", /** * Returns a clone of the duration object. * * @return {ICAL.Duration} The cloned object */ clone: function clone() { return ICAL.Duration.fromData(this); }, /** * The duration value expressed as a number of seconds. * * @return {Number} The duration value in seconds */ toSeconds: function toSeconds() { var seconds = this.seconds + 60 * this.minutes + 3600 * this.hours + 86400 * this.days + 7 * 86400 * this.weeks; return (this.isNegative ? -seconds : seconds); }, /** * Reads the passed seconds value into this duration object. Afterwards, * members like {@link ICAL.Duration#days days} and {@link ICAL.Duration#weeks weeks} will be set up * accordingly. * * @param {Number} aSeconds The duration value in seconds * @return {ICAL.Duration} Returns this instance */ fromSeconds: function fromSeconds(aSeconds) { var secs = Math.abs(aSeconds); this.isNegative = (aSeconds < 0); this.days = ICAL.helpers.trunc(secs / 86400); // If we have a flat number of weeks, use them. if (this.days % 7 == 0) { this.weeks = this.days / 7; this.days = 0; } else { this.weeks = 0; } secs -= (this.days + 7 * this.weeks) * 86400; this.hours = ICAL.helpers.trunc(secs / 3600); secs -= this.hours * 3600; this.minutes = ICAL.helpers.trunc(secs / 60); secs -= this.minutes * 60; this.seconds = secs; return this; }, /** * Sets up the current instance using members from the passed data object. * * @param {Object} aData An object with members of the duration * @param {Number} aData.weeks Duration in weeks * @param {Number} aData.days Duration in days * @param {Number} aData.hours Duration in hours * @param {Number} aData.minutes Duration in minutes * @param {Number} aData.seconds Duration in seconds * @param {Boolean} aData.isNegative If true, the duration is negative */ fromData: function fromData(aData) { var propsToCopy = ["weeks", "days", "hours", "minutes", "seconds", "isNegative"]; for (var key in propsToCopy) { /* istanbul ignore if */ if (!propsToCopy.hasOwnProperty(key)) { continue; } var prop = propsToCopy[key]; if (aData && prop in aData) { this[prop] = aData[prop]; } else { this[prop] = 0; } } }, /** * Resets the duration instance to the default values, i.e. PT0S */ reset: function reset() { this.isNegative = false; this.weeks = 0; this.days = 0; this.hours = 0; this.minutes = 0; this.seconds = 0; }, /** * Compares the duration instance with another one. * * @param {ICAL.Duration} aOther The instance to compare with * @return {Number} -1, 0 or 1 for less/equal/greater */ compare: function compare(aOther) { var thisSeconds = this.toSeconds(); var otherSeconds = aOther.toSeconds(); return (thisSeconds > otherSeconds) - (thisSeconds < otherSeconds); }, /** * Normalizes the duration instance. For example, a duration with a value * of 61 seconds will be normalized to 1 minute and 1 second. */ normalize: function normalize() { this.fromSeconds(this.toSeconds()); }, /** * The string representation of this duration. * @return {String} */ toString: function toString() { if (this.toSeconds() == 0) { return "PT0S"; } else { var str = ""; if (this.isNegative) str += "-"; str += "P"; if (this.weeks) str += this.weeks + "W"; if (this.days) str += this.days + "D"; if (this.hours || this.minutes || this.seconds) { str += "T"; if (this.hours) str += this.hours + "H"; if (this.minutes) str += this.minutes + "M"; if (this.seconds) str += this.seconds + "S"; } return str; } }, /** * The iCalendar string representation of this duration. * @return {String} */ toICALString: function() { return this.toString(); } }; /** * Returns a new ICAL.Duration instance from the passed seconds value. * * @param {Number} aSeconds The seconds to create the instance from * @return {ICAL.Duration} The newly created duration instance */ ICAL.Duration.fromSeconds = function icalduration_from_seconds(aSeconds) { return (new ICAL.Duration()).fromSeconds(aSeconds); }; /** * Internal helper function to handle a chunk of a duration. * * @param {String} letter type of duration chunk * @param {String} number numeric value or -/+ * @param {Object} dict target to assign values to */ function parseDurationChunk(letter, number, object) { var type; switch (letter) { case 'P': if (number && number === '-') { object.isNegative = true; } else { object.isNegative = false; } // period break; case 'D': type = 'days'; break; case 'W': type = 'weeks'; break; case 'H': type = 'hours'; break; case 'M': type = 'minutes'; break; case 'S': type = 'seconds'; break; default: // Not a valid chunk return 0; } if (type) { if (!number && number !== 0) { throw new Error( 'invalid duration value: Missing number before "' + letter + '"' ); } var num = parseInt(number, 10); if (ICAL.helpers.isStrictlyNaN(num)) { throw new Error( 'invalid duration value: Invalid number "' + number + '" before "' + letter + '"' ); } object[type] = num; } return 1; } /** * Checks if the given string is an iCalendar duration value. * * @param {String} value The raw ical value * @return {Boolean} True, if the given value is of the * duration ical type */ ICAL.Duration.isValueString = function(string) { return (string[0] === 'P' || string[1] === 'P'); }; /** * Creates a new {@link ICAL.Duration} instance from the passed string. * * @param {String} aStr The string to parse * @return {ICAL.Duration} The created duration instance */ ICAL.Duration.fromString = function icalduration_from_string(aStr) { var pos = 0; var dict = Object.create(null); var chunks = 0; while ((pos = aStr.search(DURATION_LETTERS)) !== -1) { var type = aStr[pos]; var numeric = aStr.substr(0, pos); aStr = aStr.substr(pos + 1); chunks += parseDurationChunk(type, numeric, dict); } if (chunks < 2) { // There must be at least a chunk with "P" and some unit chunk throw new Error( 'invalid duration value: Not enough duration components in "' + aStr + '"' ); } return new ICAL.Duration(dict); }; /** * Creates a new ICAL.Duration instance from the given data object. * * @param {Object} aData An object with members of the duration * @param {Number} aData.weeks Duration in weeks * @param {Number} aData.days Duration in days * @param {Number} aData.hours Duration in hours * @param {Number} aData.minutes Duration in minutes * @param {Number} aData.seconds Duration in seconds * @param {Boolean} aData.isNegative If true, the duration is negative * @return {ICAL.Duration} The createad duration instance */ ICAL.Duration.fromData = function icalduration_from_data(aData) { return new ICAL.Duration(aData); }; })(); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2012 */ (function() { var OPTIONS = ["tzid", "location", "tznames", "latitude", "longitude"]; /** * @classdesc * Timezone representation, created by passing in a tzid and component. * * @example * var vcalendar; * var timezoneComp = vcalendar.getFirstSubcomponent('vtimezone'); * var tzid = timezoneComp.getFirstPropertyValue('tzid'); * * var timezone = new ICAL.Timezone({ * component: timezoneComp, * tzid * }); * * @class * @param {ICAL.Component|Object} data options for class * @param {String|ICAL.Component} data.component * If data is a simple object, then this member can be set to either a * string containing the component data, or an already parsed * ICAL.Component * @param {String} data.tzid The timezone identifier * @param {String} data.location The timezone locationw * @param {String} data.tznames An alternative string representation of the * timezone * @param {Number} data.latitude The latitude of the timezone * @param {Number} data.longitude The longitude of the timezone */ ICAL.Timezone = function icaltimezone(data) { this.wrappedJSObject = this; this.fromData(data); }; ICAL.Timezone.prototype = { /** * Timezone identifier * @type {String} */ tzid: "", /** * Timezone location * @type {String} */ location: "", /** * Alternative timezone name, for the string representation * @type {String} */ tznames: "", /** * The primary latitude for the timezone. * @type {Number} */ latitude: 0.0, /** * The primary longitude for the timezone. * @type {Number} */ longitude: 0.0, /** * The vtimezone component for this timezone. * @type {ICAL.Component} */ component: null, /** * The year this timezone has been expanded to. All timezone transition * dates until this year are known and can be used for calculation * * @private * @type {Number} */ expandedUntilYear: 0, /** * The class identifier. * @constant * @type {String} * @default "icaltimezone" */ icalclass: "icaltimezone", /** * Sets up the current instance using members from the passed data object. * * @param {ICAL.Component|Object} aData options for class * @param {String|ICAL.Component} aData.component * If aData is a simple object, then this member can be set to either a * string containing the component data, or an already parsed * ICAL.Component * @param {String} aData.tzid The timezone identifier * @param {String} aData.location The timezone locationw * @param {String} aData.tznames An alternative string representation of the * timezone * @param {Number} aData.latitude The latitude of the timezone * @param {Number} aData.longitude The longitude of the timezone */ fromData: function fromData(aData) { this.expandedUntilYear = 0; this.changes = []; if (aData instanceof ICAL.Component) { // Either a component is passed directly this.component = aData; } else { // Otherwise the component may be in the data object if (aData && "component" in aData) { if (typeof aData.component == "string") { // If a string was passed, parse it as a component var jCal = ICAL.parse(aData.component); this.component = new ICAL.Component(jCal); } else if (aData.component instanceof ICAL.Component) { // If it was a component already, then just set it this.component = aData.component; } else { // Otherwise just null out the component this.component = null; } } // Copy remaining passed properties for (var key in OPTIONS) { /* istanbul ignore else */ if (OPTIONS.hasOwnProperty(key)) { var prop = OPTIONS[key]; if (aData && prop in aData) { this[prop] = aData[prop]; } } } } // If we have a component but no TZID, attempt to get it from the // component's properties. if (this.component instanceof ICAL.Component && !this.tzid) { this.tzid = this.component.getFirstPropertyValue('tzid'); } return this; }, /** * Finds the utcOffset the given time would occur in this timezone. * * @param {ICAL.Time} tt The time to check for * @return {Number} utc offset in seconds */ utcOffset: function utcOffset(tt) { if (this == ICAL.Timezone.utcTimezone || this == ICAL.Timezone.localTimezone) { return 0; } this._ensureCoverage(tt.year); if (!this.changes.length) { return 0; } var tt_change = { year: tt.year, month: tt.month, day: tt.day, hour: tt.hour, minute: tt.minute, second: tt.second }; var change_num = this._findNearbyChange(tt_change); var change_num_to_use = -1; var step = 1; // TODO: replace with bin search? for (;;) { var change = ICAL.helpers.clone(this.changes[change_num], true); if (change.utcOffset < change.prevUtcOffset) { ICAL.Timezone.adjust_change(change, 0, 0, 0, change.utcOffset); } else { ICAL.Timezone.adjust_change(change, 0, 0, 0, change.prevUtcOffset); } var cmp = ICAL.Timezone._compare_change_fn(tt_change, change); if (cmp >= 0) { change_num_to_use = change_num; } else { step = -1; } if (step == -1 && change_num_to_use != -1) { break; } change_num += step; if (change_num < 0) { return 0; } if (change_num >= this.changes.length) { break; } } var zone_change = this.changes[change_num_to_use]; var utcOffset_change = zone_change.utcOffset - zone_change.prevUtcOffset; if (utcOffset_change < 0 && change_num_to_use > 0) { var tmp_change = ICAL.helpers.clone(zone_change, true); ICAL.Timezone.adjust_change(tmp_change, 0, 0, 0, tmp_change.prevUtcOffset); if (ICAL.Timezone._compare_change_fn(tt_change, tmp_change) < 0) { var prev_zone_change = this.changes[change_num_to_use - 1]; var want_daylight = false; // TODO if (zone_change.is_daylight != want_daylight && prev_zone_change.is_daylight == want_daylight) { zone_change = prev_zone_change; } } } // TODO return is_daylight? return zone_change.utcOffset; }, _findNearbyChange: function icaltimezone_find_nearby_change(change) { // find the closest match var idx = ICAL.helpers.binsearchInsert( this.changes, change, ICAL.Timezone._compare_change_fn ); if (idx >= this.changes.length) { return this.changes.length - 1; } return idx; }, _ensureCoverage: function(aYear) { if (ICAL.Timezone._minimumExpansionYear == -1) { var today = ICAL.Time.now(); ICAL.Timezone._minimumExpansionYear = today.year; } var changesEndYear = aYear; if (changesEndYear < ICAL.Timezone._minimumExpansionYear) { changesEndYear = ICAL.Timezone._minimumExpansionYear; } changesEndYear += ICAL.Timezone.EXTRA_COVERAGE; if (changesEndYear > ICAL.Timezone.MAX_YEAR) { changesEndYear = ICAL.Timezone.MAX_YEAR; } if (!this.changes.length || this.expandedUntilYear < aYear) { var subcomps = this.component.getAllSubcomponents(); var compLen = subcomps.length; var compIdx = 0; for (; compIdx < compLen; compIdx++) { this._expandComponent( subcomps[compIdx], changesEndYear, this.changes ); } this.changes.sort(ICAL.Timezone._compare_change_fn); this.expandedUntilYear = changesEndYear; } }, _expandComponent: function(aComponent, aYear, changes) { if (!aComponent.hasProperty("dtstart") || !aComponent.hasProperty("tzoffsetto") || !aComponent.hasProperty("tzoffsetfrom")) { return null; } var dtstart = aComponent.getFirstProperty("dtstart").getFirstValue(); var change; function convert_tzoffset(offset) { return offset.factor * (offset.hours * 3600 + offset.minutes * 60); } function init_changes() { var changebase = {}; changebase.is_daylight = (aComponent.name == "daylight"); changebase.utcOffset = convert_tzoffset( aComponent.getFirstProperty("tzoffsetto").getFirstValue() ); changebase.prevUtcOffset = convert_tzoffset( aComponent.getFirstProperty("tzoffsetfrom").getFirstValue() ); return changebase; } if (!aComponent.hasProperty("rrule") && !aComponent.hasProperty("rdate")) { change = init_changes(); change.year = dtstart.year; change.month = dtstart.month; change.day = dtstart.day; change.hour = dtstart.hour; change.minute = dtstart.minute; change.second = dtstart.second; ICAL.Timezone.adjust_change(change, 0, 0, 0, -change.prevUtcOffset); changes.push(change); } else { var props = aComponent.getAllProperties("rdate"); for (var rdatekey in props) { /* istanbul ignore if */ if (!props.hasOwnProperty(rdatekey)) { continue; } var rdate = props[rdatekey]; var time = rdate.getFirstValue(); change = init_changes(); change.year = time.year; change.month = time.month; change.day = time.day; if (time.isDate) { change.hour = dtstart.hour; change.minute = dtstart.minute; change.second = dtstart.second; if (dtstart.zone != ICAL.Timezone.utcTimezone) { ICAL.Timezone.adjust_change(change, 0, 0, 0, -change.prevUtcOffset); } } else { change.hour = time.hour; change.minute = time.minute; change.second = time.second; if (time.zone != ICAL.Timezone.utcTimezone) { ICAL.Timezone.adjust_change(change, 0, 0, 0, -change.prevUtcOffset); } } changes.push(change); } var rrule = aComponent.getFirstProperty("rrule"); if (rrule) { rrule = rrule.getFirstValue(); change = init_changes(); if (rrule.until && rrule.until.zone == ICAL.Timezone.utcTimezone) { rrule.until.adjust(0, 0, 0, change.prevUtcOffset); rrule.until.zone = ICAL.Timezone.localTimezone; } var iterator = rrule.iterator(dtstart); var occ; while ((occ = iterator.next())) { change = init_changes(); if (occ.year > aYear || !occ) { break; } change.year = occ.year; change.month = occ.month; change.day = occ.day; change.hour = occ.hour; change.minute = occ.minute; change.second = occ.second; change.isDate = occ.isDate; ICAL.Timezone.adjust_change(change, 0, 0, 0, -change.prevUtcOffset); changes.push(change); } } } return changes; }, /** * The string representation of this timezone. * @return {String} */ toString: function toString() { return (this.tznames ? this.tznames : this.tzid); } }; ICAL.Timezone._compare_change_fn = function icaltimezone_compare_change_fn(a, b) { if (a.year < b.year) return -1; else if (a.year > b.year) return 1; if (a.month < b.month) return -1; else if (a.month > b.month) return 1; if (a.day < b.day) return -1; else if (a.day > b.day) return 1; if (a.hour < b.hour) return -1; else if (a.hour > b.hour) return 1; if (a.minute < b.minute) return -1; else if (a.minute > b.minute) return 1; if (a.second < b.second) return -1; else if (a.second > b.second) return 1; return 0; }; /** * Convert the date/time from one zone to the next. * * @param {ICAL.Time} tt The time to convert * @param {ICAL.Timezone} from_zone The source zone to convert from * @param {ICAL.Timezone} to_zone The target zone to convert to * @return {ICAL.Time} The converted date/time object */ ICAL.Timezone.convert_time = function icaltimezone_convert_time(tt, from_zone, to_zone) { if (tt.isDate || from_zone.tzid == to_zone.tzid || from_zone == ICAL.Timezone.localTimezone || to_zone == ICAL.Timezone.localTimezone) { tt.zone = to_zone; return tt; } var utcOffset = from_zone.utcOffset(tt); tt.adjust(0, 0, 0, - utcOffset); utcOffset = to_zone.utcOffset(tt); tt.adjust(0, 0, 0, utcOffset); return null; }; /** * Creates a new ICAL.Timezone instance from the passed data object. * * @param {ICAL.Component|Object} aData options for class * @param {String|ICAL.Component} aData.component * If aData is a simple object, then this member can be set to either a * string containing the component data, or an already parsed * ICAL.Component * @param {String} aData.tzid The timezone identifier * @param {String} aData.location The timezone locationw * @param {String} aData.tznames An alternative string representation of the * timezone * @param {Number} aData.latitude The latitude of the timezone * @param {Number} aData.longitude The longitude of the timezone */ ICAL.Timezone.fromData = function icaltimezone_fromData(aData) { var tt = new ICAL.Timezone(); return tt.fromData(aData); }; /** * The instance describing the UTC timezone * @type {ICAL.Timezone} * @constant * @instance */ ICAL.Timezone.utcTimezone = ICAL.Timezone.fromData({ tzid: "UTC" }); /** * The instance describing the local timezone * @type {ICAL.Timezone} * @constant * @instance */ ICAL.Timezone.localTimezone = ICAL.Timezone.fromData({ tzid: "floating" }); /** * Adjust a timezone change object. * @private * @param {Object} change The timezone change object * @param {Number} days The extra amount of days * @param {Number} hours The extra amount of hours * @param {Number} minutes The extra amount of minutes * @param {Number} seconds The extra amount of seconds */ ICAL.Timezone.adjust_change = function icaltimezone_adjust_change(change, days, hours, minutes, seconds) { return ICAL.Time.prototype.adjust.call( change, days, hours, minutes, seconds, change ); }; ICAL.Timezone._minimumExpansionYear = -1; ICAL.Timezone.MAX_YEAR = 2035; // TODO this is because of time_t, which we don't need. Still usefull? ICAL.Timezone.EXTRA_COVERAGE = 5; })(); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ /** * This symbol is further described later on * @ignore */ ICAL.TimezoneService = (function() { var zones; /** * @classdesc * Singleton class to contain timezones. Right now it is all manual registry in * the future we may use this class to download timezone information or handle * loading pre-expanded timezones. * * @namespace * @alias ICAL.TimezoneService */ var TimezoneService = { get count() { return Object.keys(zones).length; }, reset: function() { zones = Object.create(null); var utc = ICAL.Timezone.utcTimezone; zones.Z = utc; zones.UTC = utc; zones.GMT = utc; }, /** * Checks if timezone id has been registered. * * @param {String} tzid Timezone identifier (e.g. America/Los_Angeles) * @return {Boolean} False, when not present */ has: function(tzid) { return !!zones[tzid]; }, /** * Returns a timezone by its tzid if present. * * @param {String} tzid Timezone identifier (e.g. America/Los_Angeles) * @return {?ICAL.Timezone} The timezone, or null if not found */ get: function(tzid) { return zones[tzid]; }, /** * Registers a timezone object or component. * * @param {String=} name * The name of the timezone. Defaults to the component's TZID if not * passed. * @param {ICAL.Component|ICAL.Timezone} zone * The initialized zone or vtimezone. */ register: function(name, timezone) { if (name instanceof ICAL.Component) { if (name.name === 'vtimezone') { timezone = new ICAL.Timezone(name); name = timezone.tzid; } } if (timezone instanceof ICAL.Timezone) { zones[name] = timezone; } else { throw new TypeError('timezone must be ICAL.Timezone or ICAL.Component'); } }, /** * Removes a timezone by its tzid from the list. * * @param {String} tzid Timezone identifier (e.g. America/Los_Angeles) * @return {?ICAL.Timezone} The removed timezone, or null if not registered */ remove: function(tzid) { return (delete zones[tzid]); } }; // initialize defaults TimezoneService.reset(); return TimezoneService; }()); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ (function() { /** * @classdesc * iCalendar Time representation (similar to JS Date object). Fully * independent of system (OS) timezone / time. Unlike JS Date, the month * January is 1, not zero. * * @example * var time = new ICAL.Time({ * year: 2012, * month: 10, * day: 11 * minute: 0, * second: 0, * isDate: false * }); * * * @alias ICAL.Time * @class * @param {Object} data Time initialization * @param {Number=} data.year The year for this date * @param {Number=} data.month The month for this date * @param {Number=} data.day The day for this date * @param {Number=} data.hour The hour for this date * @param {Number=} data.minute The minute for this date * @param {Number=} data.second The second for this date * @param {Boolean=} data.isDate If true, the instance represents a date (as * opposed to a date-time) * @param {ICAL.Timezone} zone timezone this position occurs in */ ICAL.Time = function icaltime(data, zone) { this.wrappedJSObject = this; var time = this._time = Object.create(null); /* time defaults */ time.year = 0; time.month = 1; time.day = 1; time.hour = 0; time.minute = 0; time.second = 0; time.isDate = false; this.fromData(data, zone); }; ICAL.Time._dowCache = {}; ICAL.Time._wnCache = {}; ICAL.Time.prototype = { /** * The class identifier. * @constant * @type {String} * @default "icaltime" */ icalclass: "icaltime", _cachedUnixTime: null, /** * The type name, to be used in the jCal object. This value may change and * is strictly defined by the {@link ICAL.Time#isDate isDate} member. * @readonly * @type {String} * @default "date-time" */ get icaltype() { return this.isDate ? 'date' : 'date-time'; }, /** * The timezone for this time. * @type {ICAL.Timezone} */ zone: null, /** * Internal uses to indicate that a change has been made and the next read * operation must attempt to normalize the value (for example changing the * day to 33). * * @type {Boolean} * @private */ _pendingNormalization: false, /** * Returns a clone of the time object. * * @return {ICAL.Time} The cloned object */ clone: function() { return new ICAL.Time(this._time, this.zone); }, /** * Reset the time instance to epoch time */ reset: function icaltime_reset() { this.fromData(ICAL.Time.epochTime); this.zone = ICAL.Timezone.utcTimezone; }, /** * Reset the time instance to the given date/time values. * * @param {Number} year The year to set * @param {Number} month The month to set * @param {Number} day The day to set * @param {Number} hour The hour to set * @param {Number} minute The minute to set * @param {Number} second The second to set * @param {ICAL.Timezone} timezone The timezone to set */ resetTo: function icaltime_resetTo(year, month, day, hour, minute, second, timezone) { this.fromData({ year: year, month: month, day: day, hour: hour, minute: minute, second: second, zone: timezone }); }, /** * Set up the current instance from the Javascript date value. * * @param {?Date} aDate The Javascript Date to read, or null to reset * @param {Boolean} useUTC If true, the UTC values of the date will be used */ fromJSDate: function icaltime_fromJSDate(aDate, useUTC) { if (!aDate) { this.reset(); } else { if (useUTC) { this.zone = ICAL.Timezone.utcTimezone; this.year = aDate.getUTCFullYear(); this.month = aDate.getUTCMonth() + 1; this.day = aDate.getUTCDate(); this.hour = aDate.getUTCHours(); this.minute = aDate.getUTCMinutes(); this.second = aDate.getUTCSeconds(); } else { this.zone = ICAL.Timezone.localTimezone; this.year = aDate.getFullYear(); this.month = aDate.getMonth() + 1; this.day = aDate.getDate(); this.hour = aDate.getHours(); this.minute = aDate.getMinutes(); this.second = aDate.getSeconds(); } } this._cachedUnixTime = null; return this; }, /** * Sets up the current instance using members from the passed data object. * * @param {Object} aData Time initialization * @param {Number=} aData.year The year for this date * @param {Number=} aData.month The month for this date * @param {Number=} aData.day The day for this date * @param {Number=} aData.hour The hour for this date * @param {Number=} aData.minute The minute for this date * @param {Number=} aData.second The second for this date * @param {Boolean=} aData.isDate If true, the instance represents a date * (as opposed to a date-time) * @param {ICAL.Timezone=} aZone Timezone this position occurs in */ fromData: function fromData(aData, aZone) { if (aData) { for (var key in aData) { /* istanbul ignore else */ if (Object.prototype.hasOwnProperty.call(aData, key)) { // ical type cannot be set if (key === 'icaltype') continue; this[key] = aData[key]; } } } if (aZone) { this.zone = aZone; } if (aData && !("isDate" in aData)) { this.isDate = !("hour" in aData); } else if (aData && ("isDate" in aData)) { this.isDate = aData.isDate; } if (aData && "timezone" in aData) { var zone = ICAL.TimezoneService.get( aData.timezone ); this.zone = zone || ICAL.Timezone.localTimezone; } if (aData && "zone" in aData) { this.zone = aData.zone; } if (!this.zone) { this.zone = ICAL.Timezone.localTimezone; } this._cachedUnixTime = null; return this; }, /** * Calculate the day of week. * @param {ICAL.Time.weekDay=} aWeekStart * The week start weekday, defaults to SUNDAY * @return {ICAL.Time.weekDay} */ dayOfWeek: function icaltime_dayOfWeek(aWeekStart) { var firstDow = aWeekStart || ICAL.Time.SUNDAY; var dowCacheKey = (this.year << 12) + (this.month << 8) + (this.day << 3) + firstDow; if (dowCacheKey in ICAL.Time._dowCache) { return ICAL.Time._dowCache[dowCacheKey]; } // Using Zeller's algorithm var q = this.day; var m = this.month + (this.month < 3 ? 12 : 0); var Y = this.year - (this.month < 3 ? 1 : 0); var h = (q + Y + ICAL.helpers.trunc(((m + 1) * 26) / 10) + ICAL.helpers.trunc(Y / 4)); /* istanbul ignore else */ if (true /* gregorian */) { h += ICAL.helpers.trunc(Y / 100) * 6 + ICAL.helpers.trunc(Y / 400); } else {} // Normalize to 1 = wkst h = ((h + 7 - firstDow) % 7) + 1; ICAL.Time._dowCache[dowCacheKey] = h; return h; }, /** * Calculate the day of year. * @return {Number} */ dayOfYear: function dayOfYear() { var is_leap = (ICAL.Time.isLeapYear(this.year) ? 1 : 0); var diypm = ICAL.Time.daysInYearPassedMonth; return diypm[is_leap][this.month - 1] + this.day; }, /** * Returns a copy of the current date/time, rewound to the start of the * week. The resulting ICAL.Time instance is of icaltype date, even if this * is a date-time. * * @param {ICAL.Time.weekDay=} aWeekStart * The week start weekday, defaults to SUNDAY * @return {ICAL.Time} The start of the week (cloned) */ startOfWeek: function startOfWeek(aWeekStart) { var firstDow = aWeekStart || ICAL.Time.SUNDAY; var result = this.clone(); result.day -= ((this.dayOfWeek() + 7 - firstDow) % 7); result.isDate = true; result.hour = 0; result.minute = 0; result.second = 0; return result; }, /** * Returns a copy of the current date/time, shifted to the end of the week. * The resulting ICAL.Time instance is of icaltype date, even if this is a * date-time. * * @param {ICAL.Time.weekDay=} aWeekStart * The week start weekday, defaults to SUNDAY * @return {ICAL.Time} The end of the week (cloned) */ endOfWeek: function endOfWeek(aWeekStart) { var firstDow = aWeekStart || ICAL.Time.SUNDAY; var result = this.clone(); result.day += (7 - this.dayOfWeek() + firstDow - ICAL.Time.SUNDAY) % 7; result.isDate = true; result.hour = 0; result.minute = 0; result.second = 0; return result; }, /** * Returns a copy of the current date/time, rewound to the start of the * month. The resulting ICAL.Time instance is of icaltype date, even if * this is a date-time. * * @return {ICAL.Time} The start of the month (cloned) */ startOfMonth: function startOfMonth() { var result = this.clone(); result.day = 1; result.isDate = true; result.hour = 0; result.minute = 0; result.second = 0; return result; }, /** * Returns a copy of the current date/time, shifted to the end of the * month. The resulting ICAL.Time instance is of icaltype date, even if * this is a date-time. * * @return {ICAL.Time} The end of the month (cloned) */ endOfMonth: function endOfMonth() { var result = this.clone(); result.day = ICAL.Time.daysInMonth(result.month, result.year); result.isDate = true; result.hour = 0; result.minute = 0; result.second = 0; return result; }, /** * Returns a copy of the current date/time, rewound to the start of the * year. The resulting ICAL.Time instance is of icaltype date, even if * this is a date-time. * * @return {ICAL.Time} The start of the year (cloned) */ startOfYear: function startOfYear() { var result = this.clone(); result.day = 1; result.month = 1; result.isDate = true; result.hour = 0; result.minute = 0; result.second = 0; return result; }, /** * Returns a copy of the current date/time, shifted to the end of the * year. The resulting ICAL.Time instance is of icaltype date, even if * this is a date-time. * * @return {ICAL.Time} The end of the year (cloned) */ endOfYear: function endOfYear() { var result = this.clone(); result.day = 31; result.month = 12; result.isDate = true; result.hour = 0; result.minute = 0; result.second = 0; return result; }, /** * First calculates the start of the week, then returns the day of year for * this date. If the day falls into the previous year, the day is zero or negative. * * @param {ICAL.Time.weekDay=} aFirstDayOfWeek * The week start weekday, defaults to SUNDAY * @return {Number} The calculated day of year */ startDoyWeek: function startDoyWeek(aFirstDayOfWeek) { var firstDow = aFirstDayOfWeek || ICAL.Time.SUNDAY; var delta = this.dayOfWeek() - firstDow; if (delta < 0) delta += 7; return this.dayOfYear() - delta; }, /** * Get the dominical letter for the current year. Letters range from A - G * for common years, and AG to GF for leap years. * * @param {Number} yr The year to retrieve the letter for * @return {String} The dominical letter. */ getDominicalLetter: function() { return ICAL.Time.getDominicalLetter(this.year); }, /** * Finds the nthWeekDay relative to the current month (not day). The * returned value is a day relative the month that this month belongs to so * 1 would indicate the first of the month and 40 would indicate a day in * the following month. * * @param {Number} aDayOfWeek Day of the week see the day name constants * @param {Number} aPos Nth occurrence of a given week day values * of 1 and 0 both indicate the first weekday of that type. aPos may * be either positive or negative * * @return {Number} numeric value indicating a day relative * to the current month of this time object */ nthWeekDay: function icaltime_nthWeekDay(aDayOfWeek, aPos) { var daysInMonth = ICAL.Time.daysInMonth(this.month, this.year); var weekday; var pos = aPos; var start = 0; var otherDay = this.clone(); if (pos >= 0) { otherDay.day = 1; // because 0 means no position has been given // 1 and 0 indicate the same day. if (pos != 0) { // remove the extra numeric value pos--; } // set current start offset to current day. start = otherDay.day; // find the current day of week var startDow = otherDay.dayOfWeek(); // calculate the difference between current // day of the week and desired day of the week var offset = aDayOfWeek - startDow; // if the offset goes into the past // week we add 7 so it goes into the next // week. We only want to go forward in time here. if (offset < 0) // this is really important otherwise we would // end up with dates from in the past. offset += 7; // add offset to start so start is the same // day of the week as the desired day of week. start += offset; // because we are going to add (and multiply) // the numeric value of the day we subtract it // from the start position so not to add it twice. start -= aDayOfWeek; // set week day weekday = aDayOfWeek; } else { // then we set it to the last day in the current month otherDay.day = daysInMonth; // find the ends weekday var endDow = otherDay.dayOfWeek(); pos++; weekday = (endDow - aDayOfWeek); if (weekday < 0) { weekday += 7; } weekday = daysInMonth - weekday; } weekday += pos * 7; return start + weekday; }, /** * Checks if current time is the nth weekday, relative to the current * month. Will always return false when rule resolves outside of current * month. * * @param {ICAL.Time.weekDay} aDayOfWeek Day of week to check * @param {Number} aPos Relative position * @return {Boolean} True, if it is the nth weekday */ isNthWeekDay: function(aDayOfWeek, aPos) { var dow = this.dayOfWeek(); if (aPos === 0 && dow === aDayOfWeek) { return true; } // get pos var day = this.nthWeekDay(aDayOfWeek, aPos); if (day === this.day) { return true; } return false; }, /** * Calculates the ISO 8601 week number. The first week of a year is the * week that contains the first Thursday. The year can have 53 weeks, if * January 1st is a Friday. * * Note there are regions where the first week of the year is the one that * starts on January 1st, which may offset the week number. Also, if a * different week start is specified, this will also affect the week * number. * * @see ICAL.Time.weekOneStarts * @param {ICAL.Time.weekDay} aWeekStart The weekday the week starts with * @return {Number} The ISO week number */ weekNumber: function weekNumber(aWeekStart) { var wnCacheKey = (this.year << 12) + (this.month << 8) + (this.day << 3) + aWeekStart; if (wnCacheKey in ICAL.Time._wnCache) { return ICAL.Time._wnCache[wnCacheKey]; } // This function courtesty of Julian Bucknall, published under the MIT license // http://www.boyet.com/articles/publishedarticles/calculatingtheisoweeknumb.html // plus some fixes to be able to use different week starts. var week1; var dt = this.clone(); dt.isDate = true; var isoyear = this.year; if (dt.month == 12 && dt.day > 25) { week1 = ICAL.Time.weekOneStarts(isoyear + 1, aWeekStart); if (dt.compare(week1) < 0) { week1 = ICAL.Time.weekOneStarts(isoyear, aWeekStart); } else { isoyear++; } } else { week1 = ICAL.Time.weekOneStarts(isoyear, aWeekStart); if (dt.compare(week1) < 0) { week1 = ICAL.Time.weekOneStarts(--isoyear, aWeekStart); } } var daysBetween = (dt.subtractDate(week1).toSeconds() / 86400); var answer = ICAL.helpers.trunc(daysBetween / 7) + 1; ICAL.Time._wnCache[wnCacheKey] = answer; return answer; }, /** * Adds the duration to the current time. The instance is modified in * place. * * @param {ICAL.Duration} aDuration The duration to add */ addDuration: function icaltime_add(aDuration) { var mult = (aDuration.isNegative ? -1 : 1); // because of the duration optimizations it is much // more efficient to grab all the values up front // then set them directly (which will avoid a normalization call). // So we don't actually normalize until we need it. var second = this.second; var minute = this.minute; var hour = this.hour; var day = this.day; second += mult * aDuration.seconds; minute += mult * aDuration.minutes; hour += mult * aDuration.hours; day += mult * aDuration.days; day += mult * 7 * aDuration.weeks; this.second = second; this.minute = minute; this.hour = hour; this.day = day; this._cachedUnixTime = null; }, /** * Subtract the date details (_excluding_ timezone). Useful for finding * the relative difference between two time objects excluding their * timezone differences. * * @param {ICAL.Time} aDate The date to substract * @return {ICAL.Duration} The difference as a duration */ subtractDate: function icaltime_subtract(aDate) { var unixTime = this.toUnixTime() + this.utcOffset(); var other = aDate.toUnixTime() + aDate.utcOffset(); return ICAL.Duration.fromSeconds(unixTime - other); }, /** * Subtract the date details, taking timezones into account. * * @param {ICAL.Time} aDate The date to subtract * @return {ICAL.Duration} The difference in duration */ subtractDateTz: function icaltime_subtract_abs(aDate) { var unixTime = this.toUnixTime(); var other = aDate.toUnixTime(); return ICAL.Duration.fromSeconds(unixTime - other); }, /** * Compares the ICAL.Time instance with another one. * * @param {ICAL.Duration} aOther The instance to compare with * @return {Number} -1, 0 or 1 for less/equal/greater */ compare: function icaltime_compare(other) { var a = this.toUnixTime(); var b = other.toUnixTime(); if (a > b) return 1; if (b > a) return -1; return 0; }, /** * Compares only the date part of this instance with another one. * * @param {ICAL.Duration} other The instance to compare with * @param {ICAL.Timezone} tz The timezone to compare in * @return {Number} -1, 0 or 1 for less/equal/greater */ compareDateOnlyTz: function icaltime_compareDateOnlyTz(other, tz) { function cmp(attr) { return ICAL.Time._cmp_attr(a, b, attr); } var a = this.convertToZone(tz); var b = other.convertToZone(tz); var rc = 0; if ((rc = cmp("year")) != 0) return rc; if ((rc = cmp("month")) != 0) return rc; if ((rc = cmp("day")) != 0) return rc; return rc; }, /** * Convert the instance into another timezone. The returned ICAL.Time * instance is always a copy. * * @param {ICAL.Timezone} zone The zone to convert to * @return {ICAL.Time} The copy, converted to the zone */ convertToZone: function convertToZone(zone) { var copy = this.clone(); var zone_equals = (this.zone.tzid == zone.tzid); if (!this.isDate && !zone_equals) { ICAL.Timezone.convert_time(copy, this.zone, zone); } copy.zone = zone; return copy; }, /** * Calculates the UTC offset of the current date/time in the timezone it is * in. * * @return {Number} UTC offset in seconds */ utcOffset: function utc_offset() { if (this.zone == ICAL.Timezone.localTimezone || this.zone == ICAL.Timezone.utcTimezone) { return 0; } else { return this.zone.utcOffset(this); } }, /** * Returns an RFC 5545 compliant ical representation of this object. * * @return {String} ical date/date-time */ toICALString: function() { var string = this.toString(); if (string.length > 10) { return ICAL.design.icalendar.value['date-time'].toICAL(string); } else { return ICAL.design.icalendar.value.date.toICAL(string); } }, /** * The string representation of this date/time, in jCal form * (including : and - separators). * @return {String} */ toString: function toString() { var result = this.year + '-' + ICAL.helpers.pad2(this.month) + '-' + ICAL.helpers.pad2(this.day); if (!this.isDate) { result += 'T' + ICAL.helpers.pad2(this.hour) + ':' + ICAL.helpers.pad2(this.minute) + ':' + ICAL.helpers.pad2(this.second); if (this.zone === ICAL.Timezone.utcTimezone) { result += 'Z'; } } return result; }, /** * Converts the current instance to a Javascript date * @return {Date} */ toJSDate: function toJSDate() { if (this.zone == ICAL.Timezone.localTimezone) { if (this.isDate) { return new Date(this.year, this.month - 1, this.day); } else { return new Date(this.year, this.month - 1, this.day, this.hour, this.minute, this.second, 0); } } else { return new Date(this.toUnixTime() * 1000); } }, _normalize: function icaltime_normalize() { var isDate = this._time.isDate; if (this._time.isDate) { this._time.hour = 0; this._time.minute = 0; this._time.second = 0; } this.adjust(0, 0, 0, 0); return this; }, /** * Adjust the date/time by the given offset * * @param {Number} aExtraDays The extra amount of days * @param {Number} aExtraHours The extra amount of hours * @param {Number} aExtraMinutes The extra amount of minutes * @param {Number} aExtraSeconds The extra amount of seconds * @param {Number=} aTime The time to adjust, defaults to the * current instance. */ adjust: function icaltime_adjust(aExtraDays, aExtraHours, aExtraMinutes, aExtraSeconds, aTime) { var minutesOverflow, hoursOverflow, daysOverflow = 0, yearsOverflow = 0; var second, minute, hour, day; var daysInMonth; var time = aTime || this._time; if (!time.isDate) { second = time.second + aExtraSeconds; time.second = second % 60; minutesOverflow = ICAL.helpers.trunc(second / 60); if (time.second < 0) { time.second += 60; minutesOverflow--; } minute = time.minute + aExtraMinutes + minutesOverflow; time.minute = minute % 60; hoursOverflow = ICAL.helpers.trunc(minute / 60); if (time.minute < 0) { time.minute += 60; hoursOverflow--; } hour = time.hour + aExtraHours + hoursOverflow; time.hour = hour % 24; daysOverflow = ICAL.helpers.trunc(hour / 24); if (time.hour < 0) { time.hour += 24; daysOverflow--; } } // Adjust month and year first, because we need to know what month the day // is in before adjusting it. if (time.month > 12) { yearsOverflow = ICAL.helpers.trunc((time.month - 1) / 12); } else if (time.month < 1) { yearsOverflow = ICAL.helpers.trunc(time.month / 12) - 1; } time.year += yearsOverflow; time.month -= 12 * yearsOverflow; // Now take care of the days (and adjust month if needed) day = time.day + aExtraDays + daysOverflow; if (day > 0) { for (;;) { daysInMonth = ICAL.Time.daysInMonth(time.month, time.year); if (day <= daysInMonth) { break; } time.month++; if (time.month > 12) { time.year++; time.month = 1; } day -= daysInMonth; } } else { while (day <= 0) { if (time.month == 1) { time.year--; time.month = 12; } else { time.month--; } day += ICAL.Time.daysInMonth(time.month, time.year); } } time.day = day; this._cachedUnixTime = null; return this; }, /** * Sets up the current instance from unix time, the number of seconds since * January 1st, 1970. * * @param {Number} seconds The seconds to set up with */ fromUnixTime: function fromUnixTime(seconds) { this.zone = ICAL.Timezone.utcTimezone; var epoch = ICAL.Time.epochTime.clone(); epoch.adjust(0, 0, 0, seconds); this.year = epoch.year; this.month = epoch.month; this.day = epoch.day; this.hour = epoch.hour; this.minute = epoch.minute; this.second = Math.floor(epoch.second); this._cachedUnixTime = null; }, /** * Converts the current instance to seconds since January 1st 1970. * * @return {Number} Seconds since 1970 */ toUnixTime: function toUnixTime() { if (this._cachedUnixTime !== null) { return this._cachedUnixTime; } var offset = this.utcOffset(); // we use the offset trick to ensure // that we are getting the actual UTC time var ms = Date.UTC( this.year, this.month - 1, this.day, this.hour, this.minute, this.second - offset ); // seconds this._cachedUnixTime = ms / 1000; return this._cachedUnixTime; }, /** * Converts time to into Object which can be serialized then re-created * using the constructor. * * @example * // toJSON will automatically be called * var json = JSON.stringify(mytime); * * var deserialized = JSON.parse(json); * * var time = new ICAL.Time(deserialized); * * @return {Object} */ toJSON: function() { var copy = [ 'year', 'month', 'day', 'hour', 'minute', 'second', 'isDate' ]; var result = Object.create(null); var i = 0; var len = copy.length; var prop; for (; i < len; i++) { prop = copy[i]; result[prop] = this[prop]; } if (this.zone) { result.timezone = this.zone.tzid; } return result; } }; (function setupNormalizeAttributes() { // This needs to run before any instances are created! function defineAttr(attr) { Object.defineProperty(ICAL.Time.prototype, attr, { get: function getTimeAttr() { if (this._pendingNormalization) { this._normalize(); this._pendingNormalization = false; } return this._time[attr]; }, set: function setTimeAttr(val) { // Check if isDate will be set and if was not set to normalize date. // This avoids losing days when seconds, minutes and hours are zeroed // what normalize will do when time is a date. if (attr === "isDate" && val && !this._time.isDate) { this.adjust(0, 0, 0, 0); } this._cachedUnixTime = null; this._pendingNormalization = true; this._time[attr] = val; return val; } }); } /* istanbul ignore else */ if ("defineProperty" in Object) { defineAttr("year"); defineAttr("month"); defineAttr("day"); defineAttr("hour"); defineAttr("minute"); defineAttr("second"); defineAttr("isDate"); } })(); /** * Returns the days in the given month * * @param {Number} month The month to check * @param {Number} year The year to check * @return {Number} The number of days in the month */ ICAL.Time.daysInMonth = function icaltime_daysInMonth(month, year) { var _daysInMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; var days = 30; if (month < 1 || month > 12) return days; days = _daysInMonth[month]; if (month == 2) { days += ICAL.Time.isLeapYear(year); } return days; }; /** * Checks if the year is a leap year * * @param {Number} year The year to check * @return {Boolean} True, if the year is a leap year */ ICAL.Time.isLeapYear = function isLeapYear(year) { if (year <= 1752) { return ((year % 4) == 0); } else { return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)); } }; /** * Create a new ICAL.Time from the day of year and year. The date is returned * in floating timezone. * * @param {Number} aDayOfYear The day of year * @param {Number} aYear The year to create the instance in * @return {ICAL.Time} The created instance with the calculated date */ ICAL.Time.fromDayOfYear = function icaltime_fromDayOfYear(aDayOfYear, aYear) { var year = aYear; var doy = aDayOfYear; var tt = new ICAL.Time(); tt.auto_normalize = false; var is_leap = (ICAL.Time.isLeapYear(year) ? 1 : 0); if (doy < 1) { year--; is_leap = (ICAL.Time.isLeapYear(year) ? 1 : 0); doy += ICAL.Time.daysInYearPassedMonth[is_leap][12]; return ICAL.Time.fromDayOfYear(doy, year); } else if (doy > ICAL.Time.daysInYearPassedMonth[is_leap][12]) { is_leap = (ICAL.Time.isLeapYear(year) ? 1 : 0); doy -= ICAL.Time.daysInYearPassedMonth[is_leap][12]; year++; return ICAL.Time.fromDayOfYear(doy, year); } tt.year = year; tt.isDate = true; for (var month = 11; month >= 0; month--) { if (doy > ICAL.Time.daysInYearPassedMonth[is_leap][month]) { tt.month = month + 1; tt.day = doy - ICAL.Time.daysInYearPassedMonth[is_leap][month]; break; } } tt.auto_normalize = true; return tt; }; /** * Returns a new ICAL.Time instance from a date string, e.g 2015-01-02. * * @deprecated Use {@link ICAL.Time.fromDateString} instead * @param {String} str The string to create from * @return {ICAL.Time} The date/time instance */ ICAL.Time.fromStringv2 = function fromString(str) { return new ICAL.Time({ year: parseInt(str.substr(0, 4), 10), month: parseInt(str.substr(5, 2), 10), day: parseInt(str.substr(8, 2), 10), isDate: true }); }; /** * Returns a new ICAL.Time instance from a date string, e.g 2015-01-02. * * @param {String} aValue The string to create from * @return {ICAL.Time} The date/time instance */ ICAL.Time.fromDateString = function(aValue) { // Dates should have no timezone. // Google likes to sometimes specify Z on dates // we specifically ignore that to avoid issues. // YYYY-MM-DD // 2012-10-10 return new ICAL.Time({ year: ICAL.helpers.strictParseInt(aValue.substr(0, 4)), month: ICAL.helpers.strictParseInt(aValue.substr(5, 2)), day: ICAL.helpers.strictParseInt(aValue.substr(8, 2)), isDate: true }); }; /** * Returns a new ICAL.Time instance from a date-time string, e.g * 2015-01-02T03:04:05. If a property is specified, the timezone is set up * from the property's TZID parameter. * * @param {String} aValue The string to create from * @param {ICAL.Property=} prop The property the date belongs to * @return {ICAL.Time} The date/time instance */ ICAL.Time.fromDateTimeString = function(aValue, prop) { if (aValue.length < 19) { throw new Error( 'invalid date-time value: "' + aValue + '"' ); } var zone; if (aValue[19] && aValue[19] === 'Z') { zone = 'Z'; } else if (prop) { zone = prop.getParameter('tzid'); } // 2012-10-10T10:10:10(Z)? var time = new ICAL.Time({ year: ICAL.helpers.strictParseInt(aValue.substr(0, 4)), month: ICAL.helpers.strictParseInt(aValue.substr(5, 2)), day: ICAL.helpers.strictParseInt(aValue.substr(8, 2)), hour: ICAL.helpers.strictParseInt(aValue.substr(11, 2)), minute: ICAL.helpers.strictParseInt(aValue.substr(14, 2)), second: ICAL.helpers.strictParseInt(aValue.substr(17, 2)), timezone: zone }); return time; }; /** * Returns a new ICAL.Time instance from a date or date-time string, * * @param {String} aValue The string to create from * @param {ICAL.Property=} prop The property the date belongs to * @return {ICAL.Time} The date/time instance */ ICAL.Time.fromString = function fromString(aValue, aProperty) { if (aValue.length > 10) { return ICAL.Time.fromDateTimeString(aValue, aProperty); } else { return ICAL.Time.fromDateString(aValue); } }; /** * Creates a new ICAL.Time instance from the given Javascript Date. * * @param {?Date} aDate The Javascript Date to read, or null to reset * @param {Boolean} useUTC If true, the UTC values of the date will be used */ ICAL.Time.fromJSDate = function fromJSDate(aDate, useUTC) { var tt = new ICAL.Time(); return tt.fromJSDate(aDate, useUTC); }; /** * Creates a new ICAL.Time instance from the the passed data object. * * @param {Object} aData Time initialization * @param {Number=} aData.year The year for this date * @param {Number=} aData.month The month for this date * @param {Number=} aData.day The day for this date * @param {Number=} aData.hour The hour for this date * @param {Number=} aData.minute The minute for this date * @param {Number=} aData.second The second for this date * @param {Boolean=} aData.isDate If true, the instance represents a date * (as opposed to a date-time) * @param {ICAL.Timezone=} aZone Timezone this position occurs in */ ICAL.Time.fromData = function fromData(aData, aZone) { var t = new ICAL.Time(); return t.fromData(aData, aZone); }; /** * Creates a new ICAL.Time instance from the current moment. * The instance is “floating” - has no timezone relation. * To create an instance considering the time zone, call * ICAL.Time.fromJSDate(new Date(), true) * @return {ICAL.Time} */ ICAL.Time.now = function icaltime_now() { return ICAL.Time.fromJSDate(new Date(), false); }; /** * Returns the date on which ISO week number 1 starts. * * @see ICAL.Time#weekNumber * @param {Number} aYear The year to search in * @param {ICAL.Time.weekDay=} aWeekStart The week start weekday, used for calculation. * @return {ICAL.Time} The date on which week number 1 starts */ ICAL.Time.weekOneStarts = function weekOneStarts(aYear, aWeekStart) { var t = ICAL.Time.fromData({ year: aYear, month: 1, day: 1, isDate: true }); var dow = t.dayOfWeek(); var wkst = aWeekStart || ICAL.Time.DEFAULT_WEEK_START; if (dow > ICAL.Time.THURSDAY) { t.day += 7; } if (wkst > ICAL.Time.THURSDAY) { t.day -= 7; } t.day -= dow - wkst; return t; }; /** * Get the dominical letter for the given year. Letters range from A - G for * common years, and AG to GF for leap years. * * @param {Number} yr The year to retrieve the letter for * @return {String} The dominical letter. */ ICAL.Time.getDominicalLetter = function(yr) { var LTRS = "GFEDCBA"; var dom = (yr + (yr / 4 | 0) + (yr / 400 | 0) - (yr / 100 | 0) - 1) % 7; var isLeap = ICAL.Time.isLeapYear(yr); if (isLeap) { return LTRS[(dom + 6) % 7] + LTRS[dom]; } else { return LTRS[dom]; } }; /** * January 1st, 1970 as an ICAL.Time. * @type {ICAL.Time} * @constant * @instance */ ICAL.Time.epochTime = ICAL.Time.fromData({ year: 1970, month: 1, day: 1, hour: 0, minute: 0, second: 0, isDate: false, timezone: "Z" }); ICAL.Time._cmp_attr = function _cmp_attr(a, b, attr) { if (a[attr] > b[attr]) return 1; if (a[attr] < b[attr]) return -1; return 0; }; /** * The days that have passed in the year after a given month. The array has * two members, one being an array of passed days for non-leap years, the * other analog for leap years. * @example * var isLeapYear = ICAL.Time.isLeapYear(year); * var passedDays = ICAL.Time.daysInYearPassedMonth[isLeapYear][month]; * @type {Array.>} */ ICAL.Time.daysInYearPassedMonth = [ [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365], [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366] ]; /** * The weekday, 1 = SUNDAY, 7 = SATURDAY. Access via * ICAL.Time.MONDAY, ICAL.Time.TUESDAY, ... * * @typedef {Number} weekDay * @memberof ICAL.Time */ ICAL.Time.SUNDAY = 1; ICAL.Time.MONDAY = 2; ICAL.Time.TUESDAY = 3; ICAL.Time.WEDNESDAY = 4; ICAL.Time.THURSDAY = 5; ICAL.Time.FRIDAY = 6; ICAL.Time.SATURDAY = 7; /** * The default weekday for the WKST part. * @constant * @default ICAL.Time.MONDAY */ ICAL.Time.DEFAULT_WEEK_START = ICAL.Time.MONDAY; })(); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2015 */ (function() { /** * Describes a vCard time, which has slight differences to the ICAL.Time. * Properties can be null if not specified, for example for dates with * reduced accuracy or truncation. * * Note that currently not all methods are correctly re-implemented for * VCardTime. For example, comparison will have undefined results when some * members are null. * * Also, normalization is not yet implemented for this class! * * @alias ICAL.VCardTime * @class * @extends {ICAL.Time} * @param {Object} data The data for the time instance * @param {Number=} data.year The year for this date * @param {Number=} data.month The month for this date * @param {Number=} data.day The day for this date * @param {Number=} data.hour The hour for this date * @param {Number=} data.minute The minute for this date * @param {Number=} data.second The second for this date * @param {ICAL.Timezone|ICAL.UtcOffset} zone The timezone to use * @param {String} icaltype The type for this date/time object */ ICAL.VCardTime = function(data, zone, icaltype) { this.wrappedJSObject = this; var time = this._time = Object.create(null); time.year = null; time.month = null; time.day = null; time.hour = null; time.minute = null; time.second = null; this.icaltype = icaltype || "date-and-or-time"; this.fromData(data, zone); }; ICAL.helpers.inherits(ICAL.Time, ICAL.VCardTime, /** @lends ICAL.VCardTime */ { /** * The class identifier. * @constant * @type {String} * @default "vcardtime" */ icalclass: "vcardtime", /** * The type name, to be used in the jCal object. * @type {String} * @default "date-and-or-time" */ icaltype: "date-and-or-time", /** * The timezone. This can either be floating, UTC, or an instance of * ICAL.UtcOffset. * @type {ICAL.Timezone|ICAL.UtcOFfset} */ zone: null, /** * Returns a clone of the vcard date/time object. * * @return {ICAL.VCardTime} The cloned object */ clone: function() { return new ICAL.VCardTime(this._time, this.zone, this.icaltype); }, _normalize: function() { return this; }, /** * @inheritdoc */ utcOffset: function() { if (this.zone instanceof ICAL.UtcOffset) { return this.zone.toSeconds(); } else { return ICAL.Time.prototype.utcOffset.apply(this, arguments); } }, /** * Returns an RFC 6350 compliant representation of this object. * * @return {String} vcard date/time string */ toICALString: function() { return ICAL.design.vcard.value[this.icaltype].toICAL(this.toString()); }, /** * The string representation of this date/time, in jCard form * (including : and - separators). * @return {String} */ toString: function toString() { var p2 = ICAL.helpers.pad2; var y = this.year, m = this.month, d = this.day; var h = this.hour, mm = this.minute, s = this.second; var hasYear = y !== null, hasMonth = m !== null, hasDay = d !== null; var hasHour = h !== null, hasMinute = mm !== null, hasSecond = s !== null; var datepart = (hasYear ? p2(y) + (hasMonth || hasDay ? '-' : '') : (hasMonth || hasDay ? '--' : '')) + (hasMonth ? p2(m) : '') + (hasDay ? '-' + p2(d) : ''); var timepart = (hasHour ? p2(h) : '-') + (hasHour && hasMinute ? ':' : '') + (hasMinute ? p2(mm) : '') + (!hasHour && !hasMinute ? '-' : '') + (hasMinute && hasSecond ? ':' : '') + (hasSecond ? p2(s) : ''); var zone; if (this.zone === ICAL.Timezone.utcTimezone) { zone = 'Z'; } else if (this.zone instanceof ICAL.UtcOffset) { zone = this.zone.toString(); } else if (this.zone === ICAL.Timezone.localTimezone) { zone = ''; } else if (this.zone instanceof ICAL.Timezone) { var offset = ICAL.UtcOffset.fromSeconds(this.zone.utcOffset(this)); zone = offset.toString(); } else { zone = ''; } switch (this.icaltype) { case "time": return timepart + zone; case "date-and-or-time": case "date-time": return datepart + (timepart == '--' ? '' : 'T' + timepart + zone); case "date": return datepart; } return null; } }); /** * Returns a new ICAL.VCardTime instance from a date and/or time string. * * @param {String} aValue The string to create from * @param {String} aIcalType The type for this instance, e.g. date-and-or-time * @return {ICAL.VCardTime} The date/time instance */ ICAL.VCardTime.fromDateAndOrTimeString = function(aValue, aIcalType) { function part(v, s, e) { return v ? ICAL.helpers.strictParseInt(v.substr(s, e)) : null; } var parts = aValue.split('T'); var dt = parts[0], tmz = parts[1]; var splitzone = tmz ? ICAL.design.vcard.value.time._splitZone(tmz) : []; var zone = splitzone[0], tm = splitzone[1]; var stoi = ICAL.helpers.strictParseInt; var dtlen = dt ? dt.length : 0; var tmlen = tm ? tm.length : 0; var hasDashDate = dt && dt[0] == '-' && dt[1] == '-'; var hasDashTime = tm && tm[0] == '-'; var o = { year: hasDashDate ? null : part(dt, 0, 4), month: hasDashDate && (dtlen == 4 || dtlen == 7) ? part(dt, 2, 2) : dtlen == 7 ? part(dt, 5, 2) : dtlen == 10 ? part(dt, 5, 2) : null, day: dtlen == 5 ? part(dt, 3, 2) : dtlen == 7 && hasDashDate ? part(dt, 5, 2) : dtlen == 10 ? part(dt, 8, 2) : null, hour: hasDashTime ? null : part(tm, 0, 2), minute: hasDashTime && tmlen == 3 ? part(tm, 1, 2) : tmlen > 4 ? hasDashTime ? part(tm, 1, 2) : part(tm, 3, 2) : null, second: tmlen == 4 ? part(tm, 2, 2) : tmlen == 6 ? part(tm, 4, 2) : tmlen == 8 ? part(tm, 6, 2) : null }; if (zone == 'Z') { zone = ICAL.Timezone.utcTimezone; } else if (zone && zone[3] == ':') { zone = ICAL.UtcOffset.fromString(zone); } else { zone = null; } return new ICAL.VCardTime(o, zone, aIcalType); }; })(); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ (function() { var DOW_MAP = { SU: ICAL.Time.SUNDAY, MO: ICAL.Time.MONDAY, TU: ICAL.Time.TUESDAY, WE: ICAL.Time.WEDNESDAY, TH: ICAL.Time.THURSDAY, FR: ICAL.Time.FRIDAY, SA: ICAL.Time.SATURDAY }; var REVERSE_DOW_MAP = {}; for (var key in DOW_MAP) { /* istanbul ignore else */ if (DOW_MAP.hasOwnProperty(key)) { REVERSE_DOW_MAP[DOW_MAP[key]] = key; } } var COPY_PARTS = ["BYSECOND", "BYMINUTE", "BYHOUR", "BYDAY", "BYMONTHDAY", "BYYEARDAY", "BYWEEKNO", "BYMONTH", "BYSETPOS"]; /** * @classdesc * This class represents the "recur" value type, with various calculation * and manipulation methods. * * @class * @alias ICAL.Recur * @param {Object} data An object with members of the recurrence * @param {ICAL.Recur.frequencyValues=} data.freq The frequency value * @param {Number=} data.interval The INTERVAL value * @param {ICAL.Time.weekDay=} data.wkst The week start value * @param {ICAL.Time=} data.until The end of the recurrence set * @param {Number=} data.count The number of occurrences * @param {Array.=} data.bysecond The seconds for the BYSECOND part * @param {Array.=} data.byminute The minutes for the BYMINUTE part * @param {Array.=} data.byhour The hours for the BYHOUR part * @param {Array.=} data.byday The BYDAY values * @param {Array.=} data.bymonthday The days for the BYMONTHDAY part * @param {Array.=} data.byyearday The days for the BYYEARDAY part * @param {Array.=} data.byweekno The weeks for the BYWEEKNO part * @param {Array.=} data.bymonth The month for the BYMONTH part * @param {Array.=} data.bysetpos The positionals for the BYSETPOS part */ ICAL.Recur = function icalrecur(data) { this.wrappedJSObject = this; this.parts = {}; if (data && typeof(data) === 'object') { this.fromData(data); } }; ICAL.Recur.prototype = { /** * An object holding the BY-parts of the recurrence rule * @type {Object} */ parts: null, /** * The interval value for the recurrence rule. * @type {Number} */ interval: 1, /** * The week start day * * @type {ICAL.Time.weekDay} * @default ICAL.Time.MONDAY */ wkst: ICAL.Time.MONDAY, /** * The end of the recurrence * @type {?ICAL.Time} */ until: null, /** * The maximum number of occurrences * @type {?Number} */ count: null, /** * The frequency value. * @type {ICAL.Recur.frequencyValues} */ freq: null, /** * The class identifier. * @constant * @type {String} * @default "icalrecur" */ icalclass: "icalrecur", /** * The type name, to be used in the jCal object. * @constant * @type {String} * @default "recur" */ icaltype: "recur", /** * Create a new iterator for this recurrence rule. The passed start date * must be the start date of the event, not the start of the range to * search in. * * @example * var recur = comp.getFirstPropertyValue('rrule'); * var dtstart = comp.getFirstPropertyValue('dtstart'); * var iter = recur.iterator(dtstart); * for (var next = iter.next(); next; next = iter.next()) { * if (next.compare(rangeStart) < 0) { * continue; * } * console.log(next.toString()); * } * * @param {ICAL.Time} aStart The item's start date * @return {ICAL.RecurIterator} The recurrence iterator */ iterator: function(aStart) { return new ICAL.RecurIterator({ rule: this, dtstart: aStart }); }, /** * Returns a clone of the recurrence object. * * @return {ICAL.Recur} The cloned object */ clone: function clone() { return new ICAL.Recur(this.toJSON()); }, /** * Checks if the current rule is finite, i.e. has a count or until part. * * @return {Boolean} True, if the rule is finite */ isFinite: function isfinite() { return !!(this.count || this.until); }, /** * Checks if the current rule has a count part, and not limited by an until * part. * * @return {Boolean} True, if the rule is by count */ isByCount: function isbycount() { return !!(this.count && !this.until); }, /** * Adds a component (part) to the recurrence rule. This is not a component * in the sense of {@link ICAL.Component}, but a part of the recurrence * rule, i.e. BYMONTH. * * @param {String} aType The name of the component part * @param {Array|String} aValue The component value */ addComponent: function addPart(aType, aValue) { var ucname = aType.toUpperCase(); if (ucname in this.parts) { this.parts[ucname].push(aValue); } else { this.parts[ucname] = [aValue]; } }, /** * Sets the component value for the given by-part. * * @param {String} aType The component part name * @param {Array} aValues The component values */ setComponent: function setComponent(aType, aValues) { this.parts[aType.toUpperCase()] = aValues.slice(); }, /** * Gets (a copy) of the requested component value. * * @param {String} aType The component part name * @return {Array} The component part value */ getComponent: function getComponent(aType) { var ucname = aType.toUpperCase(); return (ucname in this.parts ? this.parts[ucname].slice() : []); }, /** * Retrieves the next occurrence after the given recurrence id. See the * guide on {@tutorial terminology} for more details. * * NOTE: Currently, this method iterates all occurrences from the start * date. It should not be called in a loop for performance reasons. If you * would like to get more than one occurrence, you can iterate the * occurrences manually, see the example on the * {@link ICAL.Recur#iterator iterator} method. * * @param {ICAL.Time} aStartTime The start of the event series * @param {ICAL.Time} aRecurrenceId The date of the last occurrence * @return {ICAL.Time} The next occurrence after */ getNextOccurrence: function getNextOccurrence(aStartTime, aRecurrenceId) { var iter = this.iterator(aStartTime); var next, cdt; do { next = iter.next(); } while (next && next.compare(aRecurrenceId) <= 0); if (next && aRecurrenceId.zone) { next.zone = aRecurrenceId.zone; } return next; }, /** * Sets up the current instance using members from the passed data object. * * @param {Object} data An object with members of the recurrence * @param {ICAL.Recur.frequencyValues=} data.freq The frequency value * @param {Number=} data.interval The INTERVAL value * @param {ICAL.Time.weekDay=} data.wkst The week start value * @param {ICAL.Time=} data.until The end of the recurrence set * @param {Number=} data.count The number of occurrences * @param {Array.=} data.bysecond The seconds for the BYSECOND part * @param {Array.=} data.byminute The minutes for the BYMINUTE part * @param {Array.=} data.byhour The hours for the BYHOUR part * @param {Array.=} data.byday The BYDAY values * @param {Array.=} data.bymonthday The days for the BYMONTHDAY part * @param {Array.=} data.byyearday The days for the BYYEARDAY part * @param {Array.=} data.byweekno The weeks for the BYWEEKNO part * @param {Array.=} data.bymonth The month for the BYMONTH part * @param {Array.=} data.bysetpos The positionals for the BYSETPOS part */ fromData: function(data) { for (var key in data) { var uckey = key.toUpperCase(); if (uckey in partDesign) { if (Array.isArray(data[key])) { this.parts[uckey] = data[key]; } else { this.parts[uckey] = [data[key]]; } } else { this[key] = data[key]; } } if (this.interval && typeof this.interval != "number") { optionDesign.INTERVAL(this.interval, this); } if (this.wkst && typeof this.wkst != "number") { this.wkst = ICAL.Recur.icalDayToNumericDay(this.wkst); } if (this.until && !(this.until instanceof ICAL.Time)) { this.until = ICAL.Time.fromString(this.until); } }, /** * The jCal representation of this recurrence type. * @return {Object} */ toJSON: function() { var res = Object.create(null); res.freq = this.freq; if (this.count) { res.count = this.count; } if (this.interval > 1) { res.interval = this.interval; } for (var k in this.parts) { /* istanbul ignore if */ if (!this.parts.hasOwnProperty(k)) { continue; } var kparts = this.parts[k]; if (Array.isArray(kparts) && kparts.length == 1) { res[k.toLowerCase()] = kparts[0]; } else { res[k.toLowerCase()] = ICAL.helpers.clone(this.parts[k]); } } if (this.until) { res.until = this.until.toString(); } if ('wkst' in this && this.wkst !== ICAL.Time.DEFAULT_WEEK_START) { res.wkst = ICAL.Recur.numericDayToIcalDay(this.wkst); } return res; }, /** * The string representation of this recurrence rule. * @return {String} */ toString: function icalrecur_toString() { // TODO retain order var str = "FREQ=" + this.freq; if (this.count) { str += ";COUNT=" + this.count; } if (this.interval > 1) { str += ";INTERVAL=" + this.interval; } for (var k in this.parts) { /* istanbul ignore else */ if (this.parts.hasOwnProperty(k)) { str += ";" + k + "=" + this.parts[k]; } } if (this.until) { str += ';UNTIL=' + this.until.toICALString(); } if ('wkst' in this && this.wkst !== ICAL.Time.DEFAULT_WEEK_START) { str += ';WKST=' + ICAL.Recur.numericDayToIcalDay(this.wkst); } return str; } }; function parseNumericValue(type, min, max, value) { var result = value; if (value[0] === '+') { result = value.substr(1); } result = ICAL.helpers.strictParseInt(result); if (min !== undefined && value < min) { throw new Error( type + ': invalid value "' + value + '" must be > ' + min ); } if (max !== undefined && value > max) { throw new Error( type + ': invalid value "' + value + '" must be < ' + min ); } return result; } /** * Convert an ical representation of a day (SU, MO, etc..) * into a numeric value of that day. * * @param {String} string The iCalendar day name * @param {ICAL.Time.weekDay=} aWeekStart * The week start weekday, defaults to SUNDAY * @return {Number} Numeric value of given day */ ICAL.Recur.icalDayToNumericDay = function toNumericDay(string, aWeekStart) { //XXX: this is here so we can deal // with possibly invalid string values. var firstDow = aWeekStart || ICAL.Time.SUNDAY; return ((DOW_MAP[string] - firstDow + 7) % 7) + 1; }; /** * Convert a numeric day value into its ical representation (SU, MO, etc..) * * @param {Number} num Numeric value of given day * @param {ICAL.Time.weekDay=} aWeekStart * The week start weekday, defaults to SUNDAY * @return {String} The ICAL day value, e.g SU,MO,... */ ICAL.Recur.numericDayToIcalDay = function toIcalDay(num, aWeekStart) { //XXX: this is here so we can deal with possibly invalid number values. // Also, this allows consistent mapping between day numbers and day // names for external users. var firstDow = aWeekStart || ICAL.Time.SUNDAY; var dow = (num + firstDow - ICAL.Time.SUNDAY); if (dow > 7) { dow -= 7; } return REVERSE_DOW_MAP[dow]; }; var VALID_DAY_NAMES = /^(SU|MO|TU|WE|TH|FR|SA)$/; var VALID_BYDAY_PART = /^([+-])?(5[0-3]|[1-4][0-9]|[1-9])?(SU|MO|TU|WE|TH|FR|SA)$/; /** * Possible frequency values for the FREQ part * (YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY) * * @typedef {String} frequencyValues * @memberof ICAL.Recur */ var ALLOWED_FREQ = ['SECONDLY', 'MINUTELY', 'HOURLY', 'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY']; var optionDesign = { FREQ: function(value, dict, fmtIcal) { // yes this is actually equal or faster then regex. // upside here is we can enumerate the valid values. if (ALLOWED_FREQ.indexOf(value) !== -1) { dict.freq = value; } else { throw new Error( 'invalid frequency "' + value + '" expected: "' + ALLOWED_FREQ.join(', ') + '"' ); } }, COUNT: function(value, dict, fmtIcal) { dict.count = ICAL.helpers.strictParseInt(value); }, INTERVAL: function(value, dict, fmtIcal) { dict.interval = ICAL.helpers.strictParseInt(value); if (dict.interval < 1) { // 0 or negative values are not allowed, some engines seem to generate // it though. Assume 1 instead. dict.interval = 1; } }, UNTIL: function(value, dict, fmtIcal) { if (value.length > 10) { dict.until = ICAL.design.icalendar.value['date-time'].fromICAL(value); } else { dict.until = ICAL.design.icalendar.value.date.fromICAL(value); } if (!fmtIcal) { dict.until = ICAL.Time.fromString(dict.until); } }, WKST: function(value, dict, fmtIcal) { if (VALID_DAY_NAMES.test(value)) { dict.wkst = ICAL.Recur.icalDayToNumericDay(value); } else { throw new Error('invalid WKST value "' + value + '"'); } } }; var partDesign = { BYSECOND: parseNumericValue.bind(this, 'BYSECOND', 0, 60), BYMINUTE: parseNumericValue.bind(this, 'BYMINUTE', 0, 59), BYHOUR: parseNumericValue.bind(this, 'BYHOUR', 0, 23), BYDAY: function(value) { if (VALID_BYDAY_PART.test(value)) { return value; } else { throw new Error('invalid BYDAY value "' + value + '"'); } }, BYMONTHDAY: parseNumericValue.bind(this, 'BYMONTHDAY', -31, 31), BYYEARDAY: parseNumericValue.bind(this, 'BYYEARDAY', -366, 366), BYWEEKNO: parseNumericValue.bind(this, 'BYWEEKNO', -53, 53), BYMONTH: parseNumericValue.bind(this, 'BYMONTH', 1, 12), BYSETPOS: parseNumericValue.bind(this, 'BYSETPOS', -366, 366) }; /** * Creates a new {@link ICAL.Recur} instance from the passed string. * * @param {String} string The string to parse * @return {ICAL.Recur} The created recurrence instance */ ICAL.Recur.fromString = function(string) { var data = ICAL.Recur._stringToData(string, false); return new ICAL.Recur(data); }; /** * Creates a new {@link ICAL.Recur} instance using members from the passed * data object. * * @param {Object} aData An object with members of the recurrence * @param {ICAL.Recur.frequencyValues=} aData.freq The frequency value * @param {Number=} aData.interval The INTERVAL value * @param {ICAL.Time.weekDay=} aData.wkst The week start value * @param {ICAL.Time=} aData.until The end of the recurrence set * @param {Number=} aData.count The number of occurrences * @param {Array.=} aData.bysecond The seconds for the BYSECOND part * @param {Array.=} aData.byminute The minutes for the BYMINUTE part * @param {Array.=} aData.byhour The hours for the BYHOUR part * @param {Array.=} aData.byday The BYDAY values * @param {Array.=} aData.bymonthday The days for the BYMONTHDAY part * @param {Array.=} aData.byyearday The days for the BYYEARDAY part * @param {Array.=} aData.byweekno The weeks for the BYWEEKNO part * @param {Array.=} aData.bymonth The month for the BYMONTH part * @param {Array.=} aData.bysetpos The positionals for the BYSETPOS part */ ICAL.Recur.fromData = function(aData) { return new ICAL.Recur(aData); }; /** * Converts a recurrence string to a data object, suitable for the fromData * method. * * @param {String} string The string to parse * @param {Boolean} fmtIcal If true, the string is considered to be an * iCalendar string * @return {ICAL.Recur} The recurrence instance */ ICAL.Recur._stringToData = function(string, fmtIcal) { var dict = Object.create(null); // split is slower in FF but fast enough. // v8 however this is faster then manual split? var values = string.split(';'); var len = values.length; for (var i = 0; i < len; i++) { var parts = values[i].split('='); var ucname = parts[0].toUpperCase(); var lcname = parts[0].toLowerCase(); var name = (fmtIcal ? lcname : ucname); var value = parts[1]; if (ucname in partDesign) { var partArr = value.split(','); var partArrIdx = 0; var partArrLen = partArr.length; for (; partArrIdx < partArrLen; partArrIdx++) { partArr[partArrIdx] = partDesign[ucname](partArr[partArrIdx]); } dict[name] = (partArr.length == 1 ? partArr[0] : partArr); } else if (ucname in optionDesign) { optionDesign[ucname](value, dict, fmtIcal); } else { // Don't swallow unknown values. Just set them as they are. dict[lcname] = value; } } return dict; }; })(); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ /** * This symbol is further described later on * @ignore */ ICAL.RecurIterator = (function() { /** * @classdesc * An iterator for a single recurrence rule. This class usually doesn't have * to be instanciated directly, the convenience method * {@link ICAL.Recur#iterator} can be used. * * @description * The options object may contain additional members when resuming iteration from a previous run * * @description * The options object may contain additional members when resuming iteration * from a previous run. * * @class * @alias ICAL.RecurIterator * @param {Object} options The iterator options * @param {ICAL.Recur} options.rule The rule to iterate. * @param {ICAL.Time} options.dtstart The start date of the event. * @param {Boolean=} options.initialized When true, assume that options are * from a previously constructed iterator. Initialization will not be * repeated. */ function icalrecur_iterator(options) { this.fromData(options); } icalrecur_iterator.prototype = { /** * True when iteration is finished. * @type {Boolean} */ completed: false, /** * The rule that is being iterated * @type {ICAL.Recur} */ rule: null, /** * The start date of the event being iterated. * @type {ICAL.Time} */ dtstart: null, /** * The last occurrence that was returned from the * {@link ICAL.RecurIterator#next} method. * @type {ICAL.Time} */ last: null, /** * The sequence number from the occurrence * @type {Number} */ occurrence_number: 0, /** * The indices used for the {@link ICAL.RecurIterator#by_data} object. * @type {Object} * @private */ by_indices: null, /** * If true, the iterator has already been initialized * @type {Boolean} * @private */ initialized: false, /** * The initializd by-data. * @type {Object} * @private */ by_data: null, /** * The expanded yeardays * @type {Array} * @private */ days: null, /** * The index in the {@link ICAL.RecurIterator#days} array. * @type {Number} * @private */ days_index: 0, /** * Initialize the recurrence iterator from the passed data object. This * method is usually not called directly, you can initialize the iterator * through the constructor. * * @param {Object} options The iterator options * @param {ICAL.Recur} options.rule The rule to iterate. * @param {ICAL.Time} options.dtstart The start date of the event. * @param {Boolean=} options.initialized When true, assume that options are * from a previously constructed iterator. Initialization will not be * repeated. */ fromData: function(options) { this.rule = ICAL.helpers.formatClassType(options.rule, ICAL.Recur); if (!this.rule) { throw new Error('iterator requires a (ICAL.Recur) rule'); } this.dtstart = ICAL.helpers.formatClassType(options.dtstart, ICAL.Time); if (!this.dtstart) { throw new Error('iterator requires a (ICAL.Time) dtstart'); } if (options.by_data) { this.by_data = options.by_data; } else { this.by_data = ICAL.helpers.clone(this.rule.parts, true); } if (options.occurrence_number) this.occurrence_number = options.occurrence_number; this.days = options.days || []; if (options.last) { this.last = ICAL.helpers.formatClassType(options.last, ICAL.Time); } this.by_indices = options.by_indices; if (!this.by_indices) { this.by_indices = { "BYSECOND": 0, "BYMINUTE": 0, "BYHOUR": 0, "BYDAY": 0, "BYMONTH": 0, "BYWEEKNO": 0, "BYMONTHDAY": 0 }; } this.initialized = options.initialized || false; if (!this.initialized) { this.init(); } }, /** * Intialize the iterator * @private */ init: function icalrecur_iterator_init() { this.initialized = true; this.last = this.dtstart.clone(); var parts = this.by_data; if ("BYDAY" in parts) { // libical does this earlier when the rule is loaded, but we postpone to // now so we can preserve the original order. this.sort_byday_rules(parts.BYDAY); } // If the BYYEARDAY appares, no other date rule part may appear if ("BYYEARDAY" in parts) { if ("BYMONTH" in parts || "BYWEEKNO" in parts || "BYMONTHDAY" in parts || "BYDAY" in parts) { throw new Error("Invalid BYYEARDAY rule"); } } // BYWEEKNO and BYMONTHDAY rule parts may not both appear if ("BYWEEKNO" in parts && "BYMONTHDAY" in parts) { throw new Error("BYWEEKNO does not fit to BYMONTHDAY"); } // For MONTHLY recurrences (FREQ=MONTHLY) neither BYYEARDAY nor // BYWEEKNO may appear. if (this.rule.freq == "MONTHLY" && ("BYYEARDAY" in parts || "BYWEEKNO" in parts)) { throw new Error("For MONTHLY recurrences neither BYYEARDAY nor BYWEEKNO may appear"); } // For WEEKLY recurrences (FREQ=WEEKLY) neither BYMONTHDAY nor // BYYEARDAY may appear. if (this.rule.freq == "WEEKLY" && ("BYYEARDAY" in parts || "BYMONTHDAY" in parts)) { throw new Error("For WEEKLY recurrences neither BYMONTHDAY nor BYYEARDAY may appear"); } // BYYEARDAY may only appear in YEARLY rules if (this.rule.freq != "YEARLY" && "BYYEARDAY" in parts) { throw new Error("BYYEARDAY may only appear in YEARLY rules"); } this.last.second = this.setup_defaults("BYSECOND", "SECONDLY", this.dtstart.second); this.last.minute = this.setup_defaults("BYMINUTE", "MINUTELY", this.dtstart.minute); this.last.hour = this.setup_defaults("BYHOUR", "HOURLY", this.dtstart.hour); this.last.day = this.setup_defaults("BYMONTHDAY", "DAILY", this.dtstart.day); this.last.month = this.setup_defaults("BYMONTH", "MONTHLY", this.dtstart.month); if (this.rule.freq == "WEEKLY") { if ("BYDAY" in parts) { var bydayParts = this.ruleDayOfWeek(parts.BYDAY[0], this.rule.wkst); var pos = bydayParts[0]; var dow = bydayParts[1]; var wkdy = dow - this.last.dayOfWeek(this.rule.wkst); if ((this.last.dayOfWeek(this.rule.wkst) < dow && wkdy >= 0) || wkdy < 0) { // Initial time is after first day of BYDAY data this.last.day += wkdy; } } else { var dayName = ICAL.Recur.numericDayToIcalDay(this.dtstart.dayOfWeek()); parts.BYDAY = [dayName]; } } if (this.rule.freq == "YEARLY") { for (;;) { this.expand_year_days(this.last.year); if (this.days.length > 0) { break; } this.increment_year(this.rule.interval); } this._nextByYearDay(); } if (this.rule.freq == "MONTHLY" && this.has_by_data("BYDAY")) { var tempLast = null; var initLast = this.last.clone(); var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year); // Check every weekday in BYDAY with relative dow and pos. for (var i in this.by_data.BYDAY) { /* istanbul ignore if */ if (!this.by_data.BYDAY.hasOwnProperty(i)) { continue; } this.last = initLast.clone(); var bydayParts = this.ruleDayOfWeek(this.by_data.BYDAY[i]); var pos = bydayParts[0]; var dow = bydayParts[1]; var dayOfMonth = this.last.nthWeekDay(dow, pos); // If |pos| >= 6, the byday is invalid for a monthly rule. if (pos >= 6 || pos <= -6) { throw new Error("Malformed values in BYDAY part"); } // If a Byday with pos=+/-5 is not in the current month it // must be searched in the next months. if (dayOfMonth > daysInMonth || dayOfMonth <= 0) { // Skip if we have already found a "last" in this month. if (tempLast && tempLast.month == initLast.month) { continue; } while (dayOfMonth > daysInMonth || dayOfMonth <= 0) { this.increment_month(); daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year); dayOfMonth = this.last.nthWeekDay(dow, pos); } } this.last.day = dayOfMonth; if (!tempLast || this.last.compare(tempLast) < 0) { tempLast = this.last.clone(); } } this.last = tempLast.clone(); //XXX: This feels like a hack, but we need to initialize // the BYMONTHDAY case correctly and byDayAndMonthDay handles // this case. It accepts a special flag which will avoid incrementing // the initial value without the flag days that match the start time // would be missed. if (this.has_by_data('BYMONTHDAY')) { this._byDayAndMonthDay(true); } if (this.last.day > daysInMonth || this.last.day == 0) { throw new Error("Malformed values in BYDAY part"); } } else if (this.has_by_data("BYMONTHDAY")) { if (this.last.day < 0) { var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year); this.last.day = daysInMonth + this.last.day + 1; } } }, /** * Retrieve the next occurrence from the iterator. * @return {ICAL.Time} */ next: function icalrecur_iterator_next() { var before = (this.last ? this.last.clone() : null); if ((this.rule.count && this.occurrence_number >= this.rule.count) || (this.rule.until && this.last.compare(this.rule.until) > 0)) { //XXX: right now this is just a flag and has no impact // we can simplify the above case to check for completed later. this.completed = true; return null; } if (this.occurrence_number == 0 && this.last.compare(this.dtstart) >= 0) { // First of all, give the instance that was initialized this.occurrence_number++; return this.last; } var valid; do { valid = 1; switch (this.rule.freq) { case "SECONDLY": this.next_second(); break; case "MINUTELY": this.next_minute(); break; case "HOURLY": this.next_hour(); break; case "DAILY": this.next_day(); break; case "WEEKLY": this.next_week(); break; case "MONTHLY": valid = this.next_month(); break; case "YEARLY": this.next_year(); break; default: return null; } } while (!this.check_contracting_rules() || this.last.compare(this.dtstart) < 0 || !valid); // TODO is this valid? if (this.last.compare(before) == 0) { throw new Error("Same occurrence found twice, protecting " + "you from death by recursion"); } if (this.rule.until && this.last.compare(this.rule.until) > 0) { this.completed = true; return null; } else { this.occurrence_number++; return this.last; } }, next_second: function next_second() { return this.next_generic("BYSECOND", "SECONDLY", "second", "minute"); }, increment_second: function increment_second(inc) { return this.increment_generic(inc, "second", 60, "minute"); }, next_minute: function next_minute() { return this.next_generic("BYMINUTE", "MINUTELY", "minute", "hour", "next_second"); }, increment_minute: function increment_minute(inc) { return this.increment_generic(inc, "minute", 60, "hour"); }, next_hour: function next_hour() { return this.next_generic("BYHOUR", "HOURLY", "hour", "monthday", "next_minute"); }, increment_hour: function increment_hour(inc) { this.increment_generic(inc, "hour", 24, "monthday"); }, next_day: function next_day() { var has_by_day = ("BYDAY" in this.by_data); var this_freq = (this.rule.freq == "DAILY"); if (this.next_hour() == 0) { return 0; } if (this_freq) { this.increment_monthday(this.rule.interval); } else { this.increment_monthday(1); } return 0; }, next_week: function next_week() { var end_of_data = 0; if (this.next_weekday_by_week() == 0) { return end_of_data; } if (this.has_by_data("BYWEEKNO")) { var idx = ++this.by_indices.BYWEEKNO; if (this.by_indices.BYWEEKNO == this.by_data.BYWEEKNO.length) { this.by_indices.BYWEEKNO = 0; end_of_data = 1; } // HACK should be first month of the year this.last.month = 1; this.last.day = 1; var week_no = this.by_data.BYWEEKNO[this.by_indices.BYWEEKNO]; this.last.day += 7 * week_no; if (end_of_data) { this.increment_year(1); } } else { // Jump to the next week this.increment_monthday(7 * this.rule.interval); } return end_of_data; }, /** * Normalize each by day rule for a given year/month. * Takes into account ordering and negative rules * * @private * @param {Number} year Current year. * @param {Number} month Current month. * @param {Array} rules Array of rules. * * @return {Array} sorted and normalized rules. * Negative rules will be expanded to their * correct positive values for easier processing. */ normalizeByMonthDayRules: function(year, month, rules) { var daysInMonth = ICAL.Time.daysInMonth(month, year); // XXX: This is probably bad for performance to allocate // a new array for each month we scan, if possible // we should try to optimize this... var newRules = []; var ruleIdx = 0; var len = rules.length; var rule; for (; ruleIdx < len; ruleIdx++) { rule = rules[ruleIdx]; // if this rule falls outside of given // month discard it. if (Math.abs(rule) > daysInMonth) { continue; } // negative case if (rule < 0) { // we add (not subtract it is a negative number) // one from the rule because 1 === last day of month rule = daysInMonth + (rule + 1); } else if (rule === 0) { // skip zero: it is invalid. continue; } // only add unique items... if (newRules.indexOf(rule) === -1) { newRules.push(rule); } } // unique and sort return newRules.sort(function(a, b) { return a - b; }); }, /** * NOTES: * We are given a list of dates in the month (BYMONTHDAY) (23, etc..) * Also we are given a list of days (BYDAY) (MO, 2SU, etc..) when * both conditions match a given date (this.last.day) iteration stops. * * @private * @param {Boolean=} isInit When given true will not increment the * current day (this.last). */ _byDayAndMonthDay: function(isInit) { var byMonthDay; // setup in initMonth var byDay = this.by_data.BYDAY; var date; var dateIdx = 0; var dateLen; // setup in initMonth var dayLen = byDay.length; // we are not valid by default var dataIsValid = 0; var daysInMonth; var self = this; // we need a copy of this, because a DateTime gets normalized // automatically if the day is out of range. At some points we // set the last day to 0 to start counting. var lastDay = this.last.day; function initMonth() { daysInMonth = ICAL.Time.daysInMonth( self.last.month, self.last.year ); byMonthDay = self.normalizeByMonthDayRules( self.last.year, self.last.month, self.by_data.BYMONTHDAY ); dateLen = byMonthDay.length; // For the case of more than one occurrence in one month // we have to be sure to start searching after the last // found date or at the last BYMONTHDAY, unless we are // initializing the iterator because in this case we have // to consider the last found date too. while (byMonthDay[dateIdx] <= lastDay && !(isInit && byMonthDay[dateIdx] == lastDay) && dateIdx < dateLen - 1) { dateIdx++; } } function nextMonth() { // since the day is incremented at the start // of the loop below, we need to start at 0 lastDay = 0; self.increment_month(); dateIdx = 0; initMonth(); } initMonth(); // should come after initMonth if (isInit) { lastDay -= 1; } // Use a counter to avoid an infinite loop with malformed rules. // Stop checking after 4 years so we consider also a leap year. var monthsCounter = 48; while (!dataIsValid && monthsCounter) { monthsCounter--; // increment the current date. This is really // important otherwise we may fall into the infinite // loop trap. The initial date takes care of the case // where the current date is the date we are looking // for. date = lastDay + 1; if (date > daysInMonth) { nextMonth(); continue; } // find next date var next = byMonthDay[dateIdx++]; // this logic is dependant on the BYMONTHDAYS // being in order (which is done by #normalizeByMonthDayRules) if (next >= date) { // if the next month day is in the future jump to it. lastDay = next; } else { // in this case the 'next' monthday has past // we must move to the month. nextMonth(); continue; } // Now we can loop through the day rules to see // if one matches the current month date. for (var dayIdx = 0; dayIdx < dayLen; dayIdx++) { var parts = this.ruleDayOfWeek(byDay[dayIdx]); var pos = parts[0]; var dow = parts[1]; this.last.day = lastDay; if (this.last.isNthWeekDay(dow, pos)) { // when we find the valid one we can mark // the conditions as met and break the loop. // (Because we have this condition above // it will also break the parent loop). dataIsValid = 1; break; } } // It is completely possible that the combination // cannot be matched in the current month. // When we reach the end of possible combinations // in the current month we iterate to the next one. // since dateIdx is incremented right after getting // "next", we don't need dateLen -1 here. if (!dataIsValid && dateIdx === dateLen) { nextMonth(); continue; } } if (monthsCounter <= 0) { // Checked 4 years without finding a Byday that matches // a Bymonthday. Maybe the rule is not correct. throw new Error("Malformed values in BYDAY combined with BYMONTHDAY parts"); } return dataIsValid; }, next_month: function next_month() { var this_freq = (this.rule.freq == "MONTHLY"); var data_valid = 1; if (this.next_hour() == 0) { return data_valid; } if (this.has_by_data("BYDAY") && this.has_by_data("BYMONTHDAY")) { data_valid = this._byDayAndMonthDay(); } else if (this.has_by_data("BYDAY")) { var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year); var setpos = 0; var setpos_total = 0; if (this.has_by_data("BYSETPOS")) { var last_day = this.last.day; for (var day = 1; day <= daysInMonth; day++) { this.last.day = day; if (this.is_day_in_byday(this.last)) { setpos_total++; if (day <= last_day) { setpos++; } } } this.last.day = last_day; } data_valid = 0; for (var day = this.last.day + 1; day <= daysInMonth; day++) { this.last.day = day; if (this.is_day_in_byday(this.last)) { if (!this.has_by_data("BYSETPOS") || this.check_set_position(++setpos) || this.check_set_position(setpos - setpos_total - 1)) { data_valid = 1; break; } } } if (day > daysInMonth) { this.last.day = 1; this.increment_month(); if (this.is_day_in_byday(this.last)) { if (!this.has_by_data("BYSETPOS") || this.check_set_position(1)) { data_valid = 1; } } else { data_valid = 0; } } } else if (this.has_by_data("BYMONTHDAY")) { this.by_indices.BYMONTHDAY++; if (this.by_indices.BYMONTHDAY >= this.by_data.BYMONTHDAY.length) { this.by_indices.BYMONTHDAY = 0; this.increment_month(); } var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year); var day = this.by_data.BYMONTHDAY[this.by_indices.BYMONTHDAY]; if (day < 0) { day = daysInMonth + day + 1; } if (day > daysInMonth) { this.last.day = 1; data_valid = this.is_day_in_byday(this.last); } else { this.last.day = day; } } else { this.increment_month(); var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year); if (this.by_data.BYMONTHDAY[0] > daysInMonth) { data_valid = 0; } else { this.last.day = this.by_data.BYMONTHDAY[0]; } } return data_valid; }, next_weekday_by_week: function next_weekday_by_week() { var end_of_data = 0; if (this.next_hour() == 0) { return end_of_data; } if (!this.has_by_data("BYDAY")) { return 1; } for (;;) { var tt = new ICAL.Time(); this.by_indices.BYDAY++; if (this.by_indices.BYDAY == Object.keys(this.by_data.BYDAY).length) { this.by_indices.BYDAY = 0; end_of_data = 1; } var coded_day = this.by_data.BYDAY[this.by_indices.BYDAY]; var parts = this.ruleDayOfWeek(coded_day); var dow = parts[1]; dow -= this.rule.wkst; if (dow < 0) { dow += 7; } tt.year = this.last.year; tt.month = this.last.month; tt.day = this.last.day; var startOfWeek = tt.startDoyWeek(this.rule.wkst); if (dow + startOfWeek < 1) { // The selected date is in the previous year if (!end_of_data) { continue; } } var next = ICAL.Time.fromDayOfYear(startOfWeek + dow, this.last.year); /** * The normalization horrors below are due to * the fact that when the year/month/day changes * it can effect the other operations that come after. */ this.last.year = next.year; this.last.month = next.month; this.last.day = next.day; return end_of_data; } }, next_year: function next_year() { if (this.next_hour() == 0) { return 0; } if (++this.days_index == this.days.length) { this.days_index = 0; do { this.increment_year(this.rule.interval); this.expand_year_days(this.last.year); } while (this.days.length == 0); } this._nextByYearDay(); return 1; }, _nextByYearDay: function _nextByYearDay() { var doy = this.days[this.days_index]; var year = this.last.year; if (doy < 1) { // Time.fromDayOfYear(doy, year) indexes relative to the // start of the given year. That is different from the // semantics of BYYEARDAY where negative indexes are an // offset from the end of the given year. doy += 1; year += 1; } var next = ICAL.Time.fromDayOfYear(doy, year); this.last.day = next.day; this.last.month = next.month; }, /** * @param dow (eg: '1TU', '-1MO') * @param {ICAL.Time.weekDay=} aWeekStart The week start weekday * @return [pos, numericDow] (eg: [1, 3]) numericDow is relative to aWeekStart */ ruleDayOfWeek: function ruleDayOfWeek(dow, aWeekStart) { var matches = dow.match(/([+-]?[0-9])?(MO|TU|WE|TH|FR|SA|SU)/); if (matches) { var pos = parseInt(matches[1] || 0, 10); dow = ICAL.Recur.icalDayToNumericDay(matches[2], aWeekStart); return [pos, dow]; } else { return [0, 0]; } }, next_generic: function next_generic(aRuleType, aInterval, aDateAttr, aFollowingAttr, aPreviousIncr) { var has_by_rule = (aRuleType in this.by_data); var this_freq = (this.rule.freq == aInterval); var end_of_data = 0; if (aPreviousIncr && this[aPreviousIncr]() == 0) { return end_of_data; } if (has_by_rule) { this.by_indices[aRuleType]++; var idx = this.by_indices[aRuleType]; var dta = this.by_data[aRuleType]; if (this.by_indices[aRuleType] == dta.length) { this.by_indices[aRuleType] = 0; end_of_data = 1; } this.last[aDateAttr] = dta[this.by_indices[aRuleType]]; } else if (this_freq) { this["increment_" + aDateAttr](this.rule.interval); } if (has_by_rule && end_of_data && this_freq) { this["increment_" + aFollowingAttr](1); } return end_of_data; }, increment_monthday: function increment_monthday(inc) { for (var i = 0; i < inc; i++) { var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year); this.last.day++; if (this.last.day > daysInMonth) { this.last.day -= daysInMonth; this.increment_month(); } } }, increment_month: function increment_month() { this.last.day = 1; if (this.has_by_data("BYMONTH")) { this.by_indices.BYMONTH++; if (this.by_indices.BYMONTH == this.by_data.BYMONTH.length) { this.by_indices.BYMONTH = 0; this.increment_year(1); } this.last.month = this.by_data.BYMONTH[this.by_indices.BYMONTH]; } else { if (this.rule.freq == "MONTHLY") { this.last.month += this.rule.interval; } else { this.last.month++; } this.last.month--; var years = ICAL.helpers.trunc(this.last.month / 12); this.last.month %= 12; this.last.month++; if (years != 0) { this.increment_year(years); } } }, increment_year: function increment_year(inc) { this.last.year += inc; }, increment_generic: function increment_generic(inc, aDateAttr, aFactor, aNextIncrement) { this.last[aDateAttr] += inc; var nextunit = ICAL.helpers.trunc(this.last[aDateAttr] / aFactor); this.last[aDateAttr] %= aFactor; if (nextunit != 0) { this["increment_" + aNextIncrement](nextunit); } }, has_by_data: function has_by_data(aRuleType) { return (aRuleType in this.rule.parts); }, expand_year_days: function expand_year_days(aYear) { var t = new ICAL.Time(); this.days = []; // We need our own copy with a few keys set var parts = {}; var rules = ["BYDAY", "BYWEEKNO", "BYMONTHDAY", "BYMONTH", "BYYEARDAY"]; for (var p in rules) { /* istanbul ignore else */ if (rules.hasOwnProperty(p)) { var part = rules[p]; if (part in this.rule.parts) { parts[part] = this.rule.parts[part]; } } } if ("BYMONTH" in parts && "BYWEEKNO" in parts) { var valid = 1; var validWeeks = {}; t.year = aYear; t.isDate = true; for (var monthIdx = 0; monthIdx < this.by_data.BYMONTH.length; monthIdx++) { var month = this.by_data.BYMONTH[monthIdx]; t.month = month; t.day = 1; var first_week = t.weekNumber(this.rule.wkst); t.day = ICAL.Time.daysInMonth(month, aYear); var last_week = t.weekNumber(this.rule.wkst); for (monthIdx = first_week; monthIdx < last_week; monthIdx++) { validWeeks[monthIdx] = 1; } } for (var weekIdx = 0; weekIdx < this.by_data.BYWEEKNO.length && valid; weekIdx++) { var weekno = this.by_data.BYWEEKNO[weekIdx]; if (weekno < 52) { valid &= validWeeks[weekIdx]; } else { valid = 0; } } if (valid) { delete parts.BYMONTH; } else { delete parts.BYWEEKNO; } } var partCount = Object.keys(parts).length; if (partCount == 0) { var t1 = this.dtstart.clone(); t1.year = this.last.year; this.days.push(t1.dayOfYear()); } else if (partCount == 1 && "BYMONTH" in parts) { for (var monthkey in this.by_data.BYMONTH) { /* istanbul ignore if */ if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) { continue; } var t2 = this.dtstart.clone(); t2.year = aYear; t2.month = this.by_data.BYMONTH[monthkey]; t2.isDate = true; this.days.push(t2.dayOfYear()); } } else if (partCount == 1 && "BYMONTHDAY" in parts) { for (var monthdaykey in this.by_data.BYMONTHDAY) { /* istanbul ignore if */ if (!this.by_data.BYMONTHDAY.hasOwnProperty(monthdaykey)) { continue; } var t3 = this.dtstart.clone(); var day_ = this.by_data.BYMONTHDAY[monthdaykey]; if (day_ < 0) { var daysInMonth = ICAL.Time.daysInMonth(t3.month, aYear); day_ = day_ + daysInMonth + 1; } t3.day = day_; t3.year = aYear; t3.isDate = true; this.days.push(t3.dayOfYear()); } } else if (partCount == 2 && "BYMONTHDAY" in parts && "BYMONTH" in parts) { for (var monthkey in this.by_data.BYMONTH) { /* istanbul ignore if */ if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) { continue; } var month_ = this.by_data.BYMONTH[monthkey]; var daysInMonth = ICAL.Time.daysInMonth(month_, aYear); for (var monthdaykey in this.by_data.BYMONTHDAY) { /* istanbul ignore if */ if (!this.by_data.BYMONTHDAY.hasOwnProperty(monthdaykey)) { continue; } var day_ = this.by_data.BYMONTHDAY[monthdaykey]; if (day_ < 0) { day_ = day_ + daysInMonth + 1; } t.day = day_; t.month = month_; t.year = aYear; t.isDate = true; this.days.push(t.dayOfYear()); } } } else if (partCount == 1 && "BYWEEKNO" in parts) { // TODO unimplemented in libical } else if (partCount == 2 && "BYWEEKNO" in parts && "BYMONTHDAY" in parts) { // TODO unimplemented in libical } else if (partCount == 1 && "BYDAY" in parts) { this.days = this.days.concat(this.expand_by_day(aYear)); } else if (partCount == 2 && "BYDAY" in parts && "BYMONTH" in parts) { for (var monthkey in this.by_data.BYMONTH) { /* istanbul ignore if */ if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) { continue; } var month = this.by_data.BYMONTH[monthkey]; var daysInMonth = ICAL.Time.daysInMonth(month, aYear); t.year = aYear; t.month = this.by_data.BYMONTH[monthkey]; t.day = 1; t.isDate = true; var first_dow = t.dayOfWeek(); var doy_offset = t.dayOfYear() - 1; t.day = daysInMonth; var last_dow = t.dayOfWeek(); if (this.has_by_data("BYSETPOS")) { var set_pos_counter = 0; var by_month_day = []; for (var day = 1; day <= daysInMonth; day++) { t.day = day; if (this.is_day_in_byday(t)) { by_month_day.push(day); } } for (var spIndex = 0; spIndex < by_month_day.length; spIndex++) { if (this.check_set_position(spIndex + 1) || this.check_set_position(spIndex - by_month_day.length)) { this.days.push(doy_offset + by_month_day[spIndex]); } } } else { for (var daycodedkey in this.by_data.BYDAY) { /* istanbul ignore if */ if (!this.by_data.BYDAY.hasOwnProperty(daycodedkey)) { continue; } var coded_day = this.by_data.BYDAY[daycodedkey]; var bydayParts = this.ruleDayOfWeek(coded_day); var pos = bydayParts[0]; var dow = bydayParts[1]; var month_day; var first_matching_day = ((dow + 7 - first_dow) % 7) + 1; var last_matching_day = daysInMonth - ((last_dow + 7 - dow) % 7); if (pos == 0) { for (var day = first_matching_day; day <= daysInMonth; day += 7) { this.days.push(doy_offset + day); } } else if (pos > 0) { month_day = first_matching_day + (pos - 1) * 7; if (month_day <= daysInMonth) { this.days.push(doy_offset + month_day); } } else { month_day = last_matching_day + (pos + 1) * 7; if (month_day > 0) { this.days.push(doy_offset + month_day); } } } } } // Return dates in order of occurrence (1,2,3,...) instead // of by groups of weekdays (1,8,15,...,2,9,16,...). this.days.sort(function(a, b) { return a - b; }); // Comparator function allows to sort numbers. } else if (partCount == 2 && "BYDAY" in parts && "BYMONTHDAY" in parts) { var expandedDays = this.expand_by_day(aYear); for (var daykey in expandedDays) { /* istanbul ignore if */ if (!expandedDays.hasOwnProperty(daykey)) { continue; } var day = expandedDays[daykey]; var tt = ICAL.Time.fromDayOfYear(day, aYear); if (this.by_data.BYMONTHDAY.indexOf(tt.day) >= 0) { this.days.push(day); } } } else if (partCount == 3 && "BYDAY" in parts && "BYMONTHDAY" in parts && "BYMONTH" in parts) { var expandedDays = this.expand_by_day(aYear); for (var daykey in expandedDays) { /* istanbul ignore if */ if (!expandedDays.hasOwnProperty(daykey)) { continue; } var day = expandedDays[daykey]; var tt = ICAL.Time.fromDayOfYear(day, aYear); if (this.by_data.BYMONTH.indexOf(tt.month) >= 0 && this.by_data.BYMONTHDAY.indexOf(tt.day) >= 0) { this.days.push(day); } } } else if (partCount == 2 && "BYDAY" in parts && "BYWEEKNO" in parts) { var expandedDays = this.expand_by_day(aYear); for (var daykey in expandedDays) { /* istanbul ignore if */ if (!expandedDays.hasOwnProperty(daykey)) { continue; } var day = expandedDays[daykey]; var tt = ICAL.Time.fromDayOfYear(day, aYear); var weekno = tt.weekNumber(this.rule.wkst); if (this.by_data.BYWEEKNO.indexOf(weekno)) { this.days.push(day); } } } else if (partCount == 3 && "BYDAY" in parts && "BYWEEKNO" in parts && "BYMONTHDAY" in parts) { // TODO unimplemted in libical } else if (partCount == 1 && "BYYEARDAY" in parts) { this.days = this.days.concat(this.by_data.BYYEARDAY); } else { this.days = []; } return 0; }, expand_by_day: function expand_by_day(aYear) { var days_list = []; var tmp = this.last.clone(); tmp.year = aYear; tmp.month = 1; tmp.day = 1; tmp.isDate = true; var start_dow = tmp.dayOfWeek(); tmp.month = 12; tmp.day = 31; tmp.isDate = true; var end_dow = tmp.dayOfWeek(); var end_year_day = tmp.dayOfYear(); for (var daykey in this.by_data.BYDAY) { /* istanbul ignore if */ if (!this.by_data.BYDAY.hasOwnProperty(daykey)) { continue; } var day = this.by_data.BYDAY[daykey]; var parts = this.ruleDayOfWeek(day); var pos = parts[0]; var dow = parts[1]; if (pos == 0) { var tmp_start_doy = ((dow + 7 - start_dow) % 7) + 1; for (var doy = tmp_start_doy; doy <= end_year_day; doy += 7) { days_list.push(doy); } } else if (pos > 0) { var first; if (dow >= start_dow) { first = dow - start_dow + 1; } else { first = dow - start_dow + 8; } days_list.push(first + (pos - 1) * 7); } else { var last; pos = -pos; if (dow <= end_dow) { last = end_year_day - end_dow + dow; } else { last = end_year_day - end_dow + dow - 7; } days_list.push(last - (pos - 1) * 7); } } return days_list; }, is_day_in_byday: function is_day_in_byday(tt) { for (var daykey in this.by_data.BYDAY) { /* istanbul ignore if */ if (!this.by_data.BYDAY.hasOwnProperty(daykey)) { continue; } var day = this.by_data.BYDAY[daykey]; var parts = this.ruleDayOfWeek(day); var pos = parts[0]; var dow = parts[1]; var this_dow = tt.dayOfWeek(); if ((pos == 0 && dow == this_dow) || (tt.nthWeekDay(dow, pos) == tt.day)) { return 1; } } return 0; }, /** * Checks if given value is in BYSETPOS. * * @private * @param {Numeric} aPos position to check for. * @return {Boolean} false unless BYSETPOS rules exist * and the given value is present in rules. */ check_set_position: function check_set_position(aPos) { if (this.has_by_data('BYSETPOS')) { var idx = this.by_data.BYSETPOS.indexOf(aPos); // negative numbers are not false-y return idx !== -1; } return false; }, sort_byday_rules: function icalrecur_sort_byday_rules(aRules) { for (var i = 0; i < aRules.length; i++) { for (var j = 0; j < i; j++) { var one = this.ruleDayOfWeek(aRules[j], this.rule.wkst)[1]; var two = this.ruleDayOfWeek(aRules[i], this.rule.wkst)[1]; if (one > two) { var tmp = aRules[i]; aRules[i] = aRules[j]; aRules[j] = tmp; } } } }, check_contract_restriction: function check_contract_restriction(aRuleType, v) { var indexMapValue = icalrecur_iterator._indexMap[aRuleType]; var ruleMapValue = icalrecur_iterator._expandMap[this.rule.freq][indexMapValue]; var pass = false; if (aRuleType in this.by_data && ruleMapValue == icalrecur_iterator.CONTRACT) { var ruleType = this.by_data[aRuleType]; for (var bydatakey in ruleType) { /* istanbul ignore else */ if (ruleType.hasOwnProperty(bydatakey)) { if (ruleType[bydatakey] == v) { pass = true; break; } } } } else { // Not a contracting byrule or has no data, test passes pass = true; } return pass; }, check_contracting_rules: function check_contracting_rules() { var dow = this.last.dayOfWeek(); var weekNo = this.last.weekNumber(this.rule.wkst); var doy = this.last.dayOfYear(); return (this.check_contract_restriction("BYSECOND", this.last.second) && this.check_contract_restriction("BYMINUTE", this.last.minute) && this.check_contract_restriction("BYHOUR", this.last.hour) && this.check_contract_restriction("BYDAY", ICAL.Recur.numericDayToIcalDay(dow)) && this.check_contract_restriction("BYWEEKNO", weekNo) && this.check_contract_restriction("BYMONTHDAY", this.last.day) && this.check_contract_restriction("BYMONTH", this.last.month) && this.check_contract_restriction("BYYEARDAY", doy)); }, setup_defaults: function setup_defaults(aRuleType, req, deftime) { var indexMapValue = icalrecur_iterator._indexMap[aRuleType]; var ruleMapValue = icalrecur_iterator._expandMap[this.rule.freq][indexMapValue]; if (ruleMapValue != icalrecur_iterator.CONTRACT) { if (!(aRuleType in this.by_data)) { this.by_data[aRuleType] = [deftime]; } if (this.rule.freq != req) { return this.by_data[aRuleType][0]; } } return deftime; }, /** * Convert iterator into a serialize-able object. Will preserve current * iteration sequence to ensure the seamless continuation of the recurrence * rule. * @return {Object} */ toJSON: function() { var result = Object.create(null); result.initialized = this.initialized; result.rule = this.rule.toJSON(); result.dtstart = this.dtstart.toJSON(); result.by_data = this.by_data; result.days = this.days; result.last = this.last.toJSON(); result.by_indices = this.by_indices; result.occurrence_number = this.occurrence_number; return result; } }; icalrecur_iterator._indexMap = { "BYSECOND": 0, "BYMINUTE": 1, "BYHOUR": 2, "BYDAY": 3, "BYMONTHDAY": 4, "BYYEARDAY": 5, "BYWEEKNO": 6, "BYMONTH": 7, "BYSETPOS": 8 }; icalrecur_iterator._expandMap = { "SECONDLY": [1, 1, 1, 1, 1, 1, 1, 1], "MINUTELY": [2, 1, 1, 1, 1, 1, 1, 1], "HOURLY": [2, 2, 1, 1, 1, 1, 1, 1], "DAILY": [2, 2, 2, 1, 1, 1, 1, 1], "WEEKLY": [2, 2, 2, 2, 3, 3, 1, 1], "MONTHLY": [2, 2, 2, 2, 2, 3, 3, 1], "YEARLY": [2, 2, 2, 2, 2, 2, 2, 2] }; icalrecur_iterator.UNKNOWN = 0; icalrecur_iterator.CONTRACT = 1; icalrecur_iterator.EXPAND = 2; icalrecur_iterator.ILLEGAL = 3; return icalrecur_iterator; }()); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ /** * This symbol is further described later on * @ignore */ ICAL.RecurExpansion = (function() { function formatTime(item) { return ICAL.helpers.formatClassType(item, ICAL.Time); } function compareTime(a, b) { return a.compare(b); } function isRecurringComponent(comp) { return comp.hasProperty('rdate') || comp.hasProperty('rrule') || comp.hasProperty('recurrence-id'); } /** * @classdesc * Primary class for expanding recurring rules. Can take multiple rrules, * rdates, exdate(s) and iterate (in order) over each next occurrence. * * Once initialized this class can also be serialized saved and continue * iteration from the last point. * * NOTE: it is intended that this class is to be used * with ICAL.Event which handles recurrence exceptions. * * @example * // assuming event is a parsed ical component * var event; * * var expand = new ICAL.RecurExpansion({ * component: event, * dtstart: event.getFirstPropertyValue('dtstart') * }); * * // remember there are infinite rules * // so it is a good idea to limit the scope * // of the iterations then resume later on. * * // next is always an ICAL.Time or null * var next; * * while (someCondition && (next = expand.next())) { * // do something with next * } * * // save instance for later * var json = JSON.stringify(expand); * * //... * * // NOTE: if the component's properties have * // changed you will need to rebuild the * // class and start over. This only works * // when the component's recurrence info is the same. * var expand = new ICAL.RecurExpansion(JSON.parse(json)); * * @description * The options object can be filled with the specified initial values. It can * also contain additional members, as a result of serializing a previous * expansion state, as shown in the example. * * @class * @alias ICAL.RecurExpansion * @param {Object} options * Recurrence expansion options * @param {ICAL.Time} options.dtstart * Start time of the event * @param {ICAL.Component=} options.component * Component for expansion, required if not resuming. */ function RecurExpansion(options) { this.ruleDates = []; this.exDates = []; this.fromData(options); } RecurExpansion.prototype = { /** * True when iteration is fully completed. * @type {Boolean} */ complete: false, /** * Array of rrule iterators. * * @type {ICAL.RecurIterator[]} * @private */ ruleIterators: null, /** * Array of rdate instances. * * @type {ICAL.Time[]} * @private */ ruleDates: null, /** * Array of exdate instances. * * @type {ICAL.Time[]} * @private */ exDates: null, /** * Current position in ruleDates array. * @type {Number} * @private */ ruleDateInc: 0, /** * Current position in exDates array * @type {Number} * @private */ exDateInc: 0, /** * Current negative date. * * @type {ICAL.Time} * @private */ exDate: null, /** * Current additional date. * * @type {ICAL.Time} * @private */ ruleDate: null, /** * Start date of recurring rules. * * @type {ICAL.Time} */ dtstart: null, /** * Last expanded time * * @type {ICAL.Time} */ last: null, /** * Initialize the recurrence expansion from the data object. The options * object may also contain additional members, see the * {@link ICAL.RecurExpansion constructor} for more details. * * @param {Object} options * Recurrence expansion options * @param {ICAL.Time} options.dtstart * Start time of the event * @param {ICAL.Component=} options.component * Component for expansion, required if not resuming. */ fromData: function(options) { var start = ICAL.helpers.formatClassType(options.dtstart, ICAL.Time); if (!start) { throw new Error('.dtstart (ICAL.Time) must be given'); } else { this.dtstart = start; } if (options.component) { this._init(options.component); } else { this.last = formatTime(options.last) || start.clone(); if (!options.ruleIterators) { throw new Error('.ruleIterators or .component must be given'); } this.ruleIterators = options.ruleIterators.map(function(item) { return ICAL.helpers.formatClassType(item, ICAL.RecurIterator); }); this.ruleDateInc = options.ruleDateInc; this.exDateInc = options.exDateInc; if (options.ruleDates) { this.ruleDates = options.ruleDates.map(formatTime); this.ruleDate = this.ruleDates[this.ruleDateInc]; } if (options.exDates) { this.exDates = options.exDates.map(formatTime); this.exDate = this.exDates[this.exDateInc]; } if (typeof(options.complete) !== 'undefined') { this.complete = options.complete; } } }, /** * Retrieve the next occurrence in the series. * @return {ICAL.Time} */ next: function() { var iter; var ruleOfDay; var next; var compare; var maxTries = 500; var currentTry = 0; while (true) { if (currentTry++ > maxTries) { throw new Error( 'max tries have occured, rule may be impossible to forfill.' ); } next = this.ruleDate; iter = this._nextRecurrenceIter(this.last); // no more matches // because we increment the rule day or rule // _after_ we choose a value this should be // the only spot where we need to worry about the // end of events. if (!next && !iter) { // there are no more iterators or rdates this.complete = true; break; } // no next rule day or recurrence rule is first. if (!next || (iter && next.compare(iter.last) > 0)) { // must be cloned, recur will reuse the time element. next = iter.last.clone(); // move to next so we can continue iter.next(); } // if the ruleDate is still next increment it. if (this.ruleDate === next) { this._nextRuleDay(); } this.last = next; // check the negative rules if (this.exDate) { compare = this.exDate.compare(this.last); if (compare < 0) { this._nextExDay(); } // if the current rule is excluded skip it. if (compare === 0) { this._nextExDay(); continue; } } //XXX: The spec states that after we resolve the final // list of dates we execute exdate this seems somewhat counter // intuitive to what I have seen most servers do so for now // I exclude based on the original date not the one that may // have been modified by the exception. return this.last; } }, /** * Converts object into a serialize-able format. This format can be passed * back into the expansion to resume iteration. * @return {Object} */ toJSON: function() { function toJSON(item) { return item.toJSON(); } var result = Object.create(null); result.ruleIterators = this.ruleIterators.map(toJSON); if (this.ruleDates) { result.ruleDates = this.ruleDates.map(toJSON); } if (this.exDates) { result.exDates = this.exDates.map(toJSON); } result.ruleDateInc = this.ruleDateInc; result.exDateInc = this.exDateInc; result.last = this.last.toJSON(); result.dtstart = this.dtstart.toJSON(); result.complete = this.complete; return result; }, /** * Extract all dates from the properties in the given component. The * properties will be filtered by the property name. * * @private * @param {ICAL.Component} component The component to search in * @param {String} propertyName The property name to search for * @return {ICAL.Time[]} The extracted dates. */ _extractDates: function(component, propertyName) { function handleProp(prop) { idx = ICAL.helpers.binsearchInsert( result, prop, compareTime ); // ordered insert result.splice(idx, 0, prop); } var result = []; var props = component.getAllProperties(propertyName); var len = props.length; var i = 0; var prop; var idx; for (; i < len; i++) { props[i].getValues().forEach(handleProp); } return result; }, /** * Initialize the recurrence expansion. * * @private * @param {ICAL.Component} component The component to initialize from. */ _init: function(component) { this.ruleIterators = []; this.last = this.dtstart.clone(); // to provide api consistency non-recurring // events can also use the iterator though it will // only return a single time. if (!isRecurringComponent(component)) { this.ruleDate = this.last.clone(); this.complete = true; return; } if (component.hasProperty('rdate')) { this.ruleDates = this._extractDates(component, 'rdate'); // special hack for cases where first rdate is prior // to the start date. We only check for the first rdate. // This is mostly for google's crazy recurring date logic // (contacts birthdays). if ((this.ruleDates[0]) && (this.ruleDates[0].compare(this.dtstart) < 0)) { this.ruleDateInc = 0; this.last = this.ruleDates[0].clone(); } else { this.ruleDateInc = ICAL.helpers.binsearchInsert( this.ruleDates, this.last, compareTime ); } this.ruleDate = this.ruleDates[this.ruleDateInc]; } if (component.hasProperty('rrule')) { var rules = component.getAllProperties('rrule'); var i = 0; var len = rules.length; var rule; var iter; for (; i < len; i++) { rule = rules[i].getFirstValue(); iter = rule.iterator(this.dtstart); this.ruleIterators.push(iter); // increment to the next occurrence so future // calls to next return times beyond the initial iteration. // XXX: I find this suspicious might be a bug? iter.next(); } } if (component.hasProperty('exdate')) { this.exDates = this._extractDates(component, 'exdate'); // if we have a .last day we increment the index to beyond it. this.exDateInc = ICAL.helpers.binsearchInsert( this.exDates, this.last, compareTime ); this.exDate = this.exDates[this.exDateInc]; } }, /** * Advance to the next exdate * @private */ _nextExDay: function() { this.exDate = this.exDates[++this.exDateInc]; }, /** * Advance to the next rule date * @private */ _nextRuleDay: function() { this.ruleDate = this.ruleDates[++this.ruleDateInc]; }, /** * Find and return the recurrence rule with the most recent event and * return it. * * @private * @return {?ICAL.RecurIterator} Found iterator. */ _nextRecurrenceIter: function() { var iters = this.ruleIterators; if (iters.length === 0) { return null; } var len = iters.length; var iter; var iterTime; var iterIdx = 0; var chosenIter; // loop through each iterator for (; iterIdx < len; iterIdx++) { iter = iters[iterIdx]; iterTime = iter.last; // if iteration is complete // then we must exclude it from // the search and remove it. if (iter.completed) { len--; if (iterIdx !== 0) { iterIdx--; } iters.splice(iterIdx, 1); continue; } // find the most recent possible choice if (!chosenIter || chosenIter.last.compare(iterTime) > 0) { // that iterator is saved chosenIter = iter; } } // the chosen iterator is returned but not mutated // this iterator contains the most recent event. return chosenIter; } }; return RecurExpansion; }()); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ /** * This symbol is further described later on * @ignore */ ICAL.Event = (function() { /** * @classdesc * ICAL.js is organized into multiple layers. The bottom layer is a raw jCal * object, followed by the component/property layer. The highest level is the * event representation, which this class is part of. See the * {@tutorial layers} guide for more details. * * @class * @alias ICAL.Event * @param {ICAL.Component=} component The ICAL.Component to base this event on * @param {Object} options Options for this event * @param {Boolean} options.strictExceptions * When true, will verify exceptions are related by their UUID * @param {Array} options.exceptions * Exceptions to this event, either as components or events. If not * specified exceptions will automatically be set in relation of * component's parent */ function Event(component, options) { if (!(component instanceof ICAL.Component)) { options = component; component = null; } if (component) { this.component = component; } else { this.component = new ICAL.Component('vevent'); } this._rangeExceptionCache = Object.create(null); this.exceptions = Object.create(null); this.rangeExceptions = []; if (options && options.strictExceptions) { this.strictExceptions = options.strictExceptions; } if (options && options.exceptions) { options.exceptions.forEach(this.relateException, this); } else if (this.component.parent && !this.isRecurrenceException()) { this.component.parent.getAllSubcomponents('vevent').forEach(function(event) { if (event.hasProperty('recurrence-id')) { this.relateException(event); } }, this); } } Event.prototype = { THISANDFUTURE: 'THISANDFUTURE', /** * List of related event exceptions. * * @type {ICAL.Event[]} */ exceptions: null, /** * When true, will verify exceptions are related by their UUID. * * @type {Boolean} */ strictExceptions: false, /** * Relates a given event exception to this object. If the given component * does not share the UID of this event it cannot be related and will throw * an exception. * * If this component is an exception it cannot have other exceptions * related to it. * * @param {ICAL.Component|ICAL.Event} obj Component or event */ relateException: function(obj) { if (this.isRecurrenceException()) { throw new Error('cannot relate exception to exceptions'); } if (obj instanceof ICAL.Component) { obj = new ICAL.Event(obj); } if (this.strictExceptions && obj.uid !== this.uid) { throw new Error('attempted to relate unrelated exception'); } var id = obj.recurrenceId.toString(); // we don't sort or manage exceptions directly // here the recurrence expander handles that. this.exceptions[id] = obj; // index RANGE=THISANDFUTURE exceptions so we can // look them up later in getOccurrenceDetails. if (obj.modifiesFuture()) { var item = [ obj.recurrenceId.toUnixTime(), id ]; // we keep them sorted so we can find the nearest // value later on... var idx = ICAL.helpers.binsearchInsert( this.rangeExceptions, item, compareRangeException ); this.rangeExceptions.splice(idx, 0, item); } }, /** * Checks if this record is an exception and has the RANGE=THISANDFUTURE * value. * * @return {Boolean} True, when exception is within range */ modifiesFuture: function() { if (!this.component.hasProperty('recurrence-id')) { return false; } var range = this.component.getFirstProperty('recurrence-id').getParameter('range'); return range === this.THISANDFUTURE; }, /** * Finds the range exception nearest to the given date. * * @param {ICAL.Time} time usually an occurrence time of an event * @return {?ICAL.Event} the related event/exception or null */ findRangeException: function(time) { if (!this.rangeExceptions.length) { return null; } var utc = time.toUnixTime(); var idx = ICAL.helpers.binsearchInsert( this.rangeExceptions, [utc], compareRangeException ); idx -= 1; // occurs before if (idx < 0) { return null; } var rangeItem = this.rangeExceptions[idx]; /* istanbul ignore next: sanity check only */ if (utc < rangeItem[0]) { return null; } return rangeItem[1]; }, /** * This object is returned by {@link ICAL.Event#getOccurrenceDetails getOccurrenceDetails} * * @typedef {Object} occurrenceDetails * @memberof ICAL.Event * @property {ICAL.Time} recurrenceId The passed in recurrence id * @property {ICAL.Event} item The occurrence * @property {ICAL.Time} startDate The start of the occurrence * @property {ICAL.Time} endDate The end of the occurrence */ /** * Returns the occurrence details based on its start time. If the * occurrence has an exception will return the details for that exception. * * NOTE: this method is intend to be used in conjunction * with the {@link ICAL.Event#iterator iterator} method. * * @param {ICAL.Time} occurrence time occurrence * @return {ICAL.Event.occurrenceDetails} Information about the occurrence */ getOccurrenceDetails: function(occurrence) { var id = occurrence.toString(); var utcId = occurrence.convertToZone(ICAL.Timezone.utcTimezone).toString(); var item; var result = { //XXX: Clone? recurrenceId: occurrence }; if (id in this.exceptions) { item = result.item = this.exceptions[id]; result.startDate = item.startDate; result.endDate = item.endDate; result.item = item; } else if (utcId in this.exceptions) { item = this.exceptions[utcId]; result.startDate = item.startDate; result.endDate = item.endDate; result.item = item; } else { // range exceptions (RANGE=THISANDFUTURE) have a // lower priority then direct exceptions but // must be accounted for first. Their item is // always the first exception with the range prop. var rangeExceptionId = this.findRangeException( occurrence ); var end; if (rangeExceptionId) { var exception = this.exceptions[rangeExceptionId]; // range exception must modify standard time // by the difference (if any) in start/end times. result.item = exception; var startDiff = this._rangeExceptionCache[rangeExceptionId]; if (!startDiff) { var original = exception.recurrenceId.clone(); var newStart = exception.startDate.clone(); // zones must be same otherwise subtract may be incorrect. original.zone = newStart.zone; startDiff = newStart.subtractDate(original); this._rangeExceptionCache[rangeExceptionId] = startDiff; } var start = occurrence.clone(); start.zone = exception.startDate.zone; start.addDuration(startDiff); end = start.clone(); end.addDuration(exception.duration); result.startDate = start; result.endDate = end; } else { // no range exception standard expansion end = occurrence.clone(); end.addDuration(this.duration); result.endDate = end; result.startDate = occurrence; result.item = this; } } return result; }, /** * Builds a recur expansion instance for a specific point in time (defaults * to startDate). * * @param {ICAL.Time} startTime Starting point for expansion * @return {ICAL.RecurExpansion} Expansion object */ iterator: function(startTime) { return new ICAL.RecurExpansion({ component: this.component, dtstart: startTime || this.startDate }); }, /** * Checks if the event is recurring * * @return {Boolean} True, if event is recurring */ isRecurring: function() { var comp = this.component; return comp.hasProperty('rrule') || comp.hasProperty('rdate'); }, /** * Checks if the event describes a recurrence exception. See * {@tutorial terminology} for details. * * @return {Boolean} True, if the event describes a recurrence exception */ isRecurrenceException: function() { return this.component.hasProperty('recurrence-id'); }, /** * Returns the types of recurrences this event may have. * * Returned as an object with the following possible keys: * * - YEARLY * - MONTHLY * - WEEKLY * - DAILY * - MINUTELY * - SECONDLY * * @return {Object.} * Object of recurrence flags */ getRecurrenceTypes: function() { var rules = this.component.getAllProperties('rrule'); var i = 0; var len = rules.length; var result = Object.create(null); for (; i < len; i++) { var value = rules[i].getFirstValue(); result[value.freq] = true; } return result; }, /** * The uid of this event * @type {String} */ get uid() { return this._firstProp('uid'); }, set uid(value) { this._setProp('uid', value); }, /** * The start date * @type {ICAL.Time} */ get startDate() { return this._firstProp('dtstart'); }, set startDate(value) { this._setTime('dtstart', value); }, /** * The end date. This can be the result directly from the property, or the * end date calculated from start date and duration. Setting the property * will remove any duration properties. * @type {ICAL.Time} */ get endDate() { var endDate = this._firstProp('dtend'); if (!endDate) { var duration = this._firstProp('duration'); endDate = this.startDate.clone(); if (duration) { endDate.addDuration(duration); } else if (endDate.isDate) { endDate.day += 1; } } return endDate; }, set endDate(value) { if (this.component.hasProperty('duration')) { this.component.removeProperty('duration'); } this._setTime('dtend', value); }, /** * The duration. This can be the result directly from the property, or the * duration calculated from start date and end date. Setting the property * will remove any `dtend` properties. * @type {ICAL.Duration} */ get duration() { var duration = this._firstProp('duration'); if (!duration) { return this.endDate.subtractDateTz(this.startDate); } return duration; }, set duration(value) { if (this.component.hasProperty('dtend')) { this.component.removeProperty('dtend'); } this._setProp('duration', value); }, /** * The location of the event. * @type {String} */ get location() { return this._firstProp('location'); }, set location(value) { return this._setProp('location', value); }, /** * The attendees in the event * @type {ICAL.Property[]} * @readonly */ get attendees() { //XXX: This is way lame we should have a better // data structure for this later. return this.component.getAllProperties('attendee'); }, /** * The event summary * @type {String} */ get summary() { return this._firstProp('summary'); }, set summary(value) { this._setProp('summary', value); }, /** * The event description. * @type {String} */ get description() { return this._firstProp('description'); }, set description(value) { this._setProp('description', value); }, /** * The event color from [rfc7986](https://datatracker.ietf.org/doc/html/rfc7986) * @type {String} */ get color() { return this._firstProp('color'); }, set color(value) { this._setProp('color', value); }, /** * The organizer value as an uri. In most cases this is a mailto: uri, but * it can also be something else, like urn:uuid:... * @type {String} */ get organizer() { return this._firstProp('organizer'); }, set organizer(value) { this._setProp('organizer', value); }, /** * The sequence value for this event. Used for scheduling * see {@tutorial terminology}. * @type {Number} */ get sequence() { return this._firstProp('sequence'); }, set sequence(value) { this._setProp('sequence', value); }, /** * The recurrence id for this event. See {@tutorial terminology} for details. * @type {ICAL.Time} */ get recurrenceId() { return this._firstProp('recurrence-id'); }, set recurrenceId(value) { this._setTime('recurrence-id', value); }, /** * Set/update a time property's value. * This will also update the TZID of the property. * * TODO: this method handles the case where we are switching * from a known timezone to an implied timezone (one without TZID). * This does _not_ handle the case of moving between a known * (by TimezoneService) timezone to an unknown timezone... * * We will not add/remove/update the VTIMEZONE subcomponents * leading to invalid ICAL data... * @private * @param {String} propName The property name * @param {ICAL.Time} time The time to set */ _setTime: function(propName, time) { var prop = this.component.getFirstProperty(propName); if (!prop) { prop = new ICAL.Property(propName); this.component.addProperty(prop); } // utc and local don't get a tzid if ( time.zone === ICAL.Timezone.localTimezone || time.zone === ICAL.Timezone.utcTimezone ) { // remove the tzid prop.removeParameter('tzid'); } else { prop.setParameter('tzid', time.zone.tzid); } prop.setValue(time); }, _setProp: function(name, value) { this.component.updatePropertyWithValue(name, value); }, _firstProp: function(name) { return this.component.getFirstPropertyValue(name); }, /** * The string representation of this event. * @return {String} */ toString: function() { return this.component.toString(); } }; function compareRangeException(a, b) { if (a[0] > b[0]) return 1; if (b[0] > a[0]) return -1; return 0; } return Event; }()); /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ /** * This symbol is further described later on * @ignore */ ICAL.ComponentParser = (function() { /** * @classdesc * The ComponentParser is used to process a String or jCal Object, * firing callbacks for various found components, as well as completion. * * @example * var options = { * // when false no events will be emitted for type * parseEvent: true, * parseTimezone: true * }; * * var parser = new ICAL.ComponentParser(options); * * parser.onevent(eventComponent) { * //... * } * * // ontimezone, etc... * * parser.oncomplete = function() { * * }; * * parser.process(stringOrComponent); * * @class * @alias ICAL.ComponentParser * @param {Object=} options Component parser options * @param {Boolean} options.parseEvent Whether events should be parsed * @param {Boolean} options.parseTimezeone Whether timezones should be parsed */ function ComponentParser(options) { if (typeof(options) === 'undefined') { options = {}; } var key; for (key in options) { /* istanbul ignore else */ if (options.hasOwnProperty(key)) { this[key] = options[key]; } } } ComponentParser.prototype = { /** * When true, parse events * * @type {Boolean} */ parseEvent: true, /** * When true, parse timezones * * @type {Boolean} */ parseTimezone: true, /* SAX like events here for reference */ /** * Fired when parsing is complete * @callback */ oncomplete: /* istanbul ignore next */ function() {}, /** * Fired if an error occurs during parsing. * * @callback * @param {Error} err details of error */ onerror: /* istanbul ignore next */ function(err) {}, /** * Fired when a top level component (VTIMEZONE) is found * * @callback * @param {ICAL.Timezone} component Timezone object */ ontimezone: /* istanbul ignore next */ function(component) {}, /** * Fired when a top level component (VEVENT) is found. * * @callback * @param {ICAL.Event} component Top level component */ onevent: /* istanbul ignore next */ function(component) {}, /** * Process a string or parse ical object. This function itself will return * nothing but will start the parsing process. * * Events must be registered prior to calling this method. * * @param {ICAL.Component|String|Object} ical The component to process, * either in its final form, as a jCal Object, or string representation */ process: function(ical) { //TODO: this is sync now in the future we will have a incremental parser. if (typeof(ical) === 'string') { ical = ICAL.parse(ical); } if (!(ical instanceof ICAL.Component)) { ical = new ICAL.Component(ical); } var components = ical.getAllSubcomponents(); var i = 0; var len = components.length; var component; for (; i < len; i++) { component = components[i]; switch (component.name) { case 'vtimezone': if (this.parseTimezone) { var tzid = component.getFirstPropertyValue('tzid'); if (tzid) { this.ontimezone(new ICAL.Timezone({ tzid: tzid, component: component })); } } break; case 'vevent': if (this.parseEvent) { this.onevent(new ICAL.Event(component)); } break; default: continue; } } //XXX: ideally we should do a "nextTick" here // so in all cases this is actually async. this.oncomplete(); } }; return ComponentParser; }()); /***/ }), /***/ "./node_modules/icalzone/dist/index.js": /*!*********************************************!*\ !*** ./node_modules/icalzone/dist/index.js ***! \*********************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getZoneString = exports.getZoneLines = void 0; const zones_1 = __webpack_require__(/*! ./zones */ "./node_modules/icalzone/dist/zones.js"); // This module must be generated with `yarn run build-zones`. function renderZoneSub(data) { const { n, f, t, r, s } = data; return [ `TZNAME:${n}`, `TZOFFSETFROM:${f}`, `TZOFFSETTO:${t || f}`, `DTSTART:${s || zones_1.defaultStart}`, ...(r ? [`RRULE:FREQ=${r.f || 'YEARLY'};BYMONTH=${r.m};BYDAY=${r.d}`] : []), ]; } /** * Tries to resolve a given time zone to iCalendar time zone component * (`VTIMEZONE`) as string array (usually for further processing). * @param zoneName Time zone name (e.g. `America/Los_Angeles`) * @param includeWrapper Set to `false` to avoid including lines for * `BEGIN:VTIMEZONE` and `END:VTIMEZONE`. * @returns Lines of the iCalendar time zone component (`VTIMEZONE`), each line * individually as an array of strings. */ function getZoneLines(zoneName, includeWrapper = true) { const zoneData = zones_1.zonesMap.get(zoneName); if (zoneData) { const { s, d } = zoneData; const lines = [ ...(includeWrapper ? ['BEGIN:VTIMEZONE'] : []), `TZID:${zoneName}`, // `X-LIC-LOCATION:${zoneName}`, // Who uses this? 'BEGIN:STANDARD', ...renderZoneSub(s), 'END:STANDARD', ...(d ? [ 'BEGIN:DAYLIGHT', ...renderZoneSub(d), 'END:DAYLIGHT', ] : []), ...(includeWrapper ? ['END:VTIMEZONE'] : []), ]; return lines; } } exports.getZoneLines = getZoneLines; /** * Tries to resolve a given time zone to iCalendar time zone component * (`VTIMEZONE`) as string. * @param zoneName Time zone name (e.g. `America/Los_Angeles`) * @param includeWrapper Set to `false` to avoid including lines for * `BEGIN:VTIMEZONE` and `END:VTIMEZONE`. * @returns The iCalendar time zone component (`VTIMEZONE`) as string * with `\r\n` line breaks. */ function getZoneString(zoneName, includeWrapper = true) { const lines = getZoneLines(zoneName, includeWrapper); return lines === null || lines === void 0 ? void 0 : lines.join('\r\n'); } exports.getZoneString = getZoneString; /***/ }), /***/ "./node_modules/icalzone/dist/zones.js": /*!*********************************************!*\ !*** ./node_modules/icalzone/dist/zones.js ***! \*********************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.zonesMap = exports.defaultStart = void 0; exports.defaultStart = "19700101T000000"; exports.zonesMap = new Map([ [ "Africa/Abidjan", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Africa/Accra", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Africa/Addis_Ababa", { "s": { "f": "+0300", "n": "EAT" } } ], [ "Africa/Algiers", { "s": { "f": "+0100", "n": "CET" } } ], [ "Africa/Asmara", { "s": { "f": "+0300", "n": "EAT" } } ], [ "Africa/Bamako", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Africa/Bangui", { "s": { "f": "+0100", "n": "WAT" } } ], [ "Africa/Banjul", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Africa/Bissau", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Africa/Blantyre", { "s": { "f": "+0200", "n": "CAT" } } ], [ "Africa/Brazzaville", { "s": { "f": "+0100", "n": "WAT" } } ], [ "Africa/Bujumbura", { "s": { "f": "+0200", "n": "CAT" } } ], [ "Africa/Cairo", { "s": { "f": "+0200", "n": "EET" } } ], [ "Africa/Casablanca", { "s": { "f": "+0100", "n": "+01" } } ], [ "Africa/Ceuta", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Africa/Conakry", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Africa/Dakar", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Africa/Dar_es_Salaam", { "s": { "f": "+0300", "n": "EAT" } } ], [ "Africa/Djibouti", { "s": { "f": "+0300", "n": "EAT" } } ], [ "Africa/Douala", { "s": { "f": "+0100", "n": "WAT" } } ], [ "Africa/El_Aaiun", { "s": { "f": "+0100", "n": "+01" } } ], [ "Africa/Freetown", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Africa/Gaborone", { "s": { "f": "+0200", "n": "CAT" } } ], [ "Africa/Harare", { "s": { "f": "+0200", "n": "CAT" } } ], [ "Africa/Johannesburg", { "s": { "f": "+0200", "n": "SAST" } } ], [ "Africa/Juba", { "s": { "f": "+0300", "n": "EAT" } } ], [ "Africa/Kampala", { "s": { "f": "+0300", "n": "EAT" } } ], [ "Africa/Khartoum", { "s": { "f": "+0200", "n": "CAT" } } ], [ "Africa/Kigali", { "s": { "f": "+0200", "n": "CAT" } } ], [ "Africa/Kinshasa", { "s": { "f": "+0100", "n": "WAT" } } ], [ "Africa/Lagos", { "s": { "f": "+0100", "n": "WAT" } } ], [ "Africa/Libreville", { "s": { "f": "+0100", "n": "WAT" } } ], [ "Africa/Lome", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Africa/Luanda", { "s": { "f": "+0100", "n": "WAT" } } ], [ "Africa/Lubumbashi", { "s": { "f": "+0200", "n": "CAT" } } ], [ "Africa/Lusaka", { "s": { "f": "+0200", "n": "CAT" } } ], [ "Africa/Malabo", { "s": { "f": "+0100", "n": "WAT" } } ], [ "Africa/Maputo", { "s": { "f": "+0200", "n": "CAT" } } ], [ "Africa/Maseru", { "s": { "f": "+0200", "n": "SAST" } } ], [ "Africa/Mbabane", { "s": { "f": "+0200", "n": "SAST" } } ], [ "Africa/Mogadishu", { "s": { "f": "+0300", "n": "EAT" } } ], [ "Africa/Monrovia", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Africa/Nairobi", { "s": { "f": "+0300", "n": "EAT" } } ], [ "Africa/Ndjamena", { "s": { "f": "+0100", "n": "WAT" } } ], [ "Africa/Niamey", { "s": { "f": "+0100", "n": "WAT" } } ], [ "Africa/Nouakchott", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Africa/Ouagadougou", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Africa/Porto-Novo", { "s": { "f": "+0100", "n": "WAT" } } ], [ "Africa/Sao_Tome", { "s": { "f": "+0100", "n": "WAT" } } ], [ "Africa/Tripoli", { "s": { "f": "+0200", "n": "EET" } } ], [ "Africa/Tunis", { "s": { "f": "+0100", "n": "CET" } } ], [ "Africa/Windhoek", { "s": { "f": "+0200", "n": "CAT" } } ], [ "America/Adak", { "s": { "f": "-0900", "t": "-1000", "n": "HST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-1000", "t": "-0900", "n": "HDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Anchorage", { "s": { "f": "-0800", "t": "-0900", "n": "AKST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0900", "t": "-0800", "n": "AKDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Anguilla", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Antigua", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Araguaina", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Argentina/Buenos_Aires", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Argentina/Catamarca", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Argentina/Cordoba", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Argentina/Jujuy", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Argentina/La_Rioja", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Argentina/Mendoza", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Argentina/Rio_Gallegos", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Argentina/Salta", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Argentina/San_Juan", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Argentina/San_Luis", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Argentina/Tucuman", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Argentina/Ushuaia", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Aruba", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Asuncion", { "s": { "f": "-0300", "t": "-0400", "n": "-04", "s": "19700322T000000", "r": { "m": 3, "d": "4SU" } }, "d": { "f": "-0400", "t": "-0300", "n": "-03", "s": "19701004T000000", "r": { "m": 10, "d": "1SU" } } } ], [ "America/Atikokan", { "s": { "f": "-0500", "n": "EST" } } ], [ "America/Bahia_Banderas", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700405T020000", "r": { "m": 4, "d": "1SU" } } } ], [ "America/Bahia", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Barbados", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Belem", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Belize", { "s": { "f": "-0600", "n": "CST" } } ], [ "America/Blanc-Sablon", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Boa_Vista", { "s": { "f": "-0400", "n": "-04" } } ], [ "America/Bogota", { "s": { "f": "-0500", "n": "-05" } } ], [ "America/Boise", { "s": { "f": "-0600", "t": "-0700", "n": "MST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0700", "t": "-0600", "n": "MDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Cambridge_Bay", { "s": { "f": "-0600", "t": "-0700", "n": "MST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0700", "t": "-0600", "n": "MDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Campo_Grande", { "s": { "f": "-0400", "n": "-04", "s": "19700215T000000", "r": { "m": 2, "d": "3SU" } }, "d": { "f": "-0400", "t": "-0300", "n": "-03", "s": "19701101T000000", "r": { "m": 11, "d": "1SU" } } } ], [ "America/Cancun", { "s": { "f": "-0500", "n": "EST" } } ], [ "America/Caracas", { "s": { "f": "-0400", "n": "-04" } } ], [ "America/Cayenne", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Cayman", { "s": { "f": "-0500", "n": "EST" } } ], [ "America/Chicago", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Chihuahua", { "s": { "f": "-0600", "t": "-0700", "n": "MST", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "-0700", "t": "-0600", "n": "MDT", "s": "19700405T020000", "r": { "m": 4, "d": "1SU" } } } ], [ "America/Costa_Rica", { "s": { "f": "-0600", "n": "CST" } } ], [ "America/Creston", { "s": { "f": "-0700", "n": "MST" } } ], [ "America/Cuiaba", { "s": { "f": "-0400", "n": "-04", "s": "19700215T000000", "r": { "m": 2, "d": "3SU" } }, "d": { "f": "-0400", "t": "-0300", "n": "-03", "s": "19701101T000000", "r": { "m": 11, "d": "1SU" } } } ], [ "America/Curacao", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Danmarkshavn", { "s": { "f": "+0000", "n": "GMT" } } ], [ "America/Dawson_Creek", { "s": { "f": "-0700", "n": "MST" } } ], [ "America/Dawson", { "s": { "f": "-0700", "t": "-0800", "n": "PST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0800", "t": "-0700", "n": "PDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Denver", { "s": { "f": "-0600", "t": "-0700", "n": "MST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0700", "t": "-0600", "n": "MDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Detroit", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Dominica", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Edmonton", { "s": { "f": "-0600", "t": "-0700", "n": "MST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0700", "t": "-0600", "n": "MDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Eirunepe", { "s": { "f": "-0500", "n": "-05" } } ], [ "America/El_Salvador", { "s": { "f": "-0600", "n": "CST" } } ], [ "America/Fort_Nelson", { "s": { "f": "-0700", "n": "MST" } } ], [ "America/Fortaleza", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Glace_Bay", { "s": { "f": "-0300", "t": "-0400", "n": "AST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0400", "t": "-0300", "n": "ADT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Godthab", { "s": { "f": "-0200", "t": "-0300", "n": "-03", "s": "19701024T230000", "r": { "m": 10, "d": "-1SA" } }, "d": { "f": "-0300", "t": "-0200", "n": "-02", "s": "19700328T220000", "r": { "m": 3, "d": "-1SA" } } } ], [ "America/Goose_Bay", { "s": { "f": "-0300", "t": "-0400", "n": "AST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0400", "t": "-0300", "n": "ADT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Grand_Turk", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Grenada", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Guadeloupe", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Guatemala", { "s": { "f": "-0600", "n": "CST" } } ], [ "America/Guayaquil", { "s": { "f": "-0500", "n": "-05" } } ], [ "America/Guyana", { "s": { "f": "-0400", "n": "-04" } } ], [ "America/Halifax", { "s": { "f": "-0300", "t": "-0400", "n": "AST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0400", "t": "-0300", "n": "ADT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Havana", { "s": { "f": "-0400", "t": "-0500", "n": "CST", "s": "19701101T010000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "CDT", "s": "19700308T000000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Hermosillo", { "s": { "f": "-0700", "n": "MST" } } ], [ "America/Indiana/Indianapolis", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Indiana/Knox", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Indiana/Marengo", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Indiana/Petersburg", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Indiana/Tell_City", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Indiana/Vevay", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Indiana/Vincennes", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Indiana/Winamac", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Inuvik", { "s": { "f": "-0600", "t": "-0700", "n": "MST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0700", "t": "-0600", "n": "MDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Iqaluit", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Jamaica", { "s": { "f": "-0500", "n": "EST" } } ], [ "America/Juneau", { "s": { "f": "-0800", "t": "-0900", "n": "AKST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0900", "t": "-0800", "n": "AKDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Kentucky/Louisville", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Kentucky/Monticello", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Kralendijk", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/La_Paz", { "s": { "f": "-0400", "n": "-04" } } ], [ "America/Lima", { "s": { "f": "-0500", "n": "-05" } } ], [ "America/Los_Angeles", { "s": { "f": "-0700", "t": "-0800", "n": "PST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0800", "t": "-0700", "n": "PDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Lower_Princes", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Maceio", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Managua", { "s": { "f": "-0600", "n": "CST" } } ], [ "America/Manaus", { "s": { "f": "-0400", "n": "-04" } } ], [ "America/Marigot", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Martinique", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Matamoros", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Mazatlan", { "s": { "f": "-0600", "t": "-0700", "n": "MST", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "-0700", "t": "-0600", "n": "MDT", "s": "19700405T020000", "r": { "m": 4, "d": "1SU" } } } ], [ "America/Menominee", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Merida", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700405T020000", "r": { "m": 4, "d": "1SU" } } } ], [ "America/Metlakatla", { "s": { "f": "-0800", "t": "-0900", "n": "AKST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0900", "t": "-0800", "n": "AKDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Mexico_City", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700405T020000", "r": { "m": 4, "d": "1SU" } } } ], [ "America/Miquelon", { "s": { "f": "-0200", "t": "-0300", "n": "-03", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0300", "t": "-0200", "n": "-02", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Moncton", { "s": { "f": "-0300", "t": "-0400", "n": "AST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0400", "t": "-0300", "n": "ADT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Monterrey", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700405T020000", "r": { "m": 4, "d": "1SU" } } } ], [ "America/Montevideo", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Montserrat", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Nassau", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/New_York", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Nipigon", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Nome", { "s": { "f": "-0800", "t": "-0900", "n": "AKST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0900", "t": "-0800", "n": "AKDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Noronha", { "s": { "f": "-0200", "n": "-02" } } ], [ "America/North_Dakota/Beulah", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/North_Dakota/Center", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/North_Dakota/New_Salem", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Ojinaga", { "s": { "f": "-0600", "t": "-0700", "n": "MST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0700", "t": "-0600", "n": "MDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Panama", { "s": { "f": "-0500", "n": "EST" } } ], [ "America/Pangnirtung", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Paramaribo", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Phoenix", { "s": { "f": "-0700", "n": "MST" } } ], [ "America/Port_of_Spain", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Port-au-Prince", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Porto_Velho", { "s": { "f": "-0400", "n": "-04" } } ], [ "America/Puerto_Rico", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Punta_Arenas", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Rainy_River", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Rankin_Inlet", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Recife", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Regina", { "s": { "f": "-0600", "n": "CST" } } ], [ "America/Resolute", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Rio_Branco", { "s": { "f": "-0500", "n": "-05" } } ], [ "America/Santarem", { "s": { "f": "-0300", "n": "-03" } } ], [ "America/Santiago", { "s": { "f": "-0300", "t": "-0400", "n": "-04", "s": "19700405T000000", "r": { "m": 4, "d": "1SU" } }, "d": { "f": "-0400", "t": "-0300", "n": "-03", "s": "19700906T000000", "r": { "m": 9, "d": "1SU" } } } ], [ "America/Santo_Domingo", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Sao_Paulo", { "s": { "f": "-0300", "n": "-03", "s": "19700215T000000", "r": { "m": 2, "d": "3SU" } }, "d": { "f": "-0300", "t": "-0200", "n": "-02", "s": "19701101T000000", "r": { "m": 11, "d": "1SU" } } } ], [ "America/Scoresbysund", { "s": { "f": "+0000", "t": "-0100", "n": "-01", "s": "19701025T010000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "-0100", "t": "+0000", "n": "+00", "s": "19700329T000000", "r": { "m": 3, "d": "-1SU" } } } ], [ "America/Sitka", { "s": { "f": "-0800", "t": "-0900", "n": "AKST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0900", "t": "-0800", "n": "AKDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/St_Barthelemy", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/St_Johns", { "s": { "f": "-0230", "t": "-0330", "n": "NST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0330", "t": "-0230", "n": "NDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/St_Kitts", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/St_Lucia", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/St_Thomas", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/St_Vincent", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Swift_Current", { "s": { "f": "-0600", "n": "CST" } } ], [ "America/Tegucigalpa", { "s": { "f": "-0600", "n": "CST" } } ], [ "America/Thule", { "s": { "f": "-0300", "t": "-0400", "n": "AST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0400", "t": "-0300", "n": "ADT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Thunder_Bay", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Tijuana", { "s": { "f": "-0700", "t": "-0800", "n": "PST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0800", "t": "-0700", "n": "PDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Toronto", { "s": { "f": "-0400", "t": "-0500", "n": "EST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0500", "t": "-0400", "n": "EDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Tortola", { "s": { "f": "-0400", "n": "AST" } } ], [ "America/Vancouver", { "s": { "f": "-0700", "t": "-0800", "n": "PST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0800", "t": "-0700", "n": "PDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Whitehorse", { "s": { "f": "-0700", "t": "-0800", "n": "PST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0800", "t": "-0700", "n": "PDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Winnipeg", { "s": { "f": "-0500", "t": "-0600", "n": "CST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0600", "t": "-0500", "n": "CDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Yakutat", { "s": { "f": "-0800", "t": "-0900", "n": "AKST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0900", "t": "-0800", "n": "AKDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "America/Yellowknife", { "s": { "f": "-0600", "t": "-0700", "n": "MST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0700", "t": "-0600", "n": "MDT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "Antarctica/Casey", { "s": { "f": "+0800", "n": "+08" } } ], [ "Antarctica/Davis", { "s": { "f": "+0700", "n": "+07" } } ], [ "Antarctica/DumontDUrville", { "s": { "f": "+1000", "n": "+10" } } ], [ "Antarctica/Macquarie", { "s": { "f": "+1100", "n": "+11" } } ], [ "Antarctica/Mawson", { "s": { "f": "+0500", "n": "+05" } } ], [ "Antarctica/McMurdo", { "s": { "f": "+1300", "t": "+1200", "n": "NZST", "s": "19700405T030000", "r": { "m": 4, "d": "1SU" } }, "d": { "f": "+1200", "t": "+1300", "n": "NZDT", "s": "19700927T020000", "r": { "m": 9, "d": "-1SU" } } } ], [ "Antarctica/Palmer", { "s": { "f": "-0300", "n": "-03" } } ], [ "Antarctica/Rothera", { "s": { "f": "-0300", "n": "-03" } } ], [ "Antarctica/Syowa", { "s": { "f": "+0300", "n": "+03" } } ], [ "Antarctica/Troll", { "s": { "f": "+0200", "t": "+0000", "n": "+00", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0000", "t": "+0200", "n": "+02", "s": "19700329T010000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Antarctica/Vostok", { "s": { "f": "+0600", "n": "+06" } } ], [ "Arctic/Longyearbyen", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Asia/Aden", { "s": { "f": "+0300", "n": "+03" } } ], [ "Asia/Almaty", { "s": { "f": "+0600", "n": "+06" } } ], [ "Asia/Amman", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701030T010000", "r": { "m": 10, "d": "-1FR" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700326T235959", "r": { "m": 3, "d": "-1TH" } } } ], [ "Asia/Anadyr", { "s": { "f": "+1200", "n": "+12" } } ], [ "Asia/Aqtau", { "s": { "f": "+0500", "n": "+05" } } ], [ "Asia/Aqtobe", { "s": { "f": "+0500", "n": "+05" } } ], [ "Asia/Ashgabat", { "s": { "f": "+0500", "n": "+05" } } ], [ "Asia/Atyrau", { "s": { "f": "+0500", "n": "+05" } } ], [ "Asia/Baghdad", { "s": { "f": "+0300", "n": "+03" } } ], [ "Asia/Bahrain", { "s": { "f": "+0300", "n": "+03" } } ], [ "Asia/Baku", { "s": { "f": "+0400", "n": "+04" } } ], [ "Asia/Bangkok", { "s": { "f": "+0700", "n": "+07" } } ], [ "Asia/Barnaul", { "s": { "f": "+0700", "n": "+07" } } ], [ "Asia/Beirut", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T000000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T000000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Asia/Bishkek", { "s": { "f": "+0600", "n": "+06" } } ], [ "Asia/Brunei", { "s": { "f": "+0800", "n": "+08" } } ], [ "Asia/Chita", { "s": { "f": "+0900", "n": "+09" } } ], [ "Asia/Choibalsan", { "s": { "f": "+0800", "n": "+08" } } ], [ "Asia/Colombo", { "s": { "f": "+0530", "n": "+0530" } } ], [ "Asia/Damascus", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701030T000000", "r": { "m": 10, "d": "-1FR" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700327T000000", "r": { "m": 3, "d": "-1FR" } } } ], [ "Asia/Dhaka", { "s": { "f": "+0600", "n": "+06" } } ], [ "Asia/Dili", { "s": { "f": "+0900", "n": "+09" } } ], [ "Asia/Dubai", { "s": { "f": "+0400", "n": "+04" } } ], [ "Asia/Dushanbe", { "s": { "f": "+0500", "n": "+05" } } ], [ "Asia/Famagusta", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T040000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T030000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Asia/Gaza", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701031T010000", "r": { "m": 10, "d": "-1SA" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700328T010000", "r": { "m": 3, "d": "4SA" } } } ], [ "Asia/Hebron", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701031T010000", "r": { "m": 10, "d": "-1SA" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700328T010000", "r": { "m": 3, "d": "4SA" } } } ], [ "Asia/Ho_Chi_Minh", { "s": { "f": "+0700", "n": "+07" } } ], [ "Asia/Hong_Kong", { "s": { "f": "+0800", "n": "HKT" } } ], [ "Asia/Hovd", { "s": { "f": "+0700", "n": "+07" } } ], [ "Asia/Irkutsk", { "s": { "f": "+0800", "n": "+08" } } ], [ "Asia/Istanbul", { "s": { "f": "+0300", "n": "+03" } } ], [ "Asia/Jakarta", { "s": { "f": "+0700", "n": "WIB" } } ], [ "Asia/Jayapura", { "s": { "f": "+0900", "n": "WIT" } } ], [ "Asia/Jerusalem", { "s": { "f": "+0300", "t": "+0200", "n": "IST", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "IDT", "s": "19700327T020000", "r": { "m": 3, "d": "-1FR" } } } ], [ "Asia/Kabul", { "s": { "f": "+0430", "n": "+0430" } } ], [ "Asia/Kamchatka", { "s": { "f": "+1200", "n": "+12" } } ], [ "Asia/Karachi", { "s": { "f": "+0500", "n": "PKT" } } ], [ "Asia/Kathmandu", { "s": { "f": "+0545", "n": "+0545" } } ], [ "Asia/Khandyga", { "s": { "f": "+0900", "n": "+09" } } ], [ "Asia/Kolkata", { "s": { "f": "+0530", "n": "IST" } } ], [ "Asia/Krasnoyarsk", { "s": { "f": "+0700", "n": "+07" } } ], [ "Asia/Kuala_Lumpur", { "s": { "f": "+0800", "n": "+08" } } ], [ "Asia/Kuching", { "s": { "f": "+0800", "n": "+08" } } ], [ "Asia/Kuwait", { "s": { "f": "+0300", "n": "+03" } } ], [ "Asia/Macau", { "s": { "f": "+0800", "n": "CST" } } ], [ "Asia/Magadan", { "s": { "f": "+1100", "n": "+11" } } ], [ "Asia/Makassar", { "s": { "f": "+0800", "n": "WITA" } } ], [ "Asia/Manila", { "s": { "f": "+0800", "n": "PST" } } ], [ "Asia/Muscat", { "s": { "f": "+0400", "n": "+04" } } ], [ "Asia/Nicosia", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T040000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T030000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Asia/Novokuznetsk", { "s": { "f": "+0700", "n": "+07" } } ], [ "Asia/Novosibirsk", { "s": { "f": "+0700", "n": "+07" } } ], [ "Asia/Omsk", { "s": { "f": "+0600", "n": "+06" } } ], [ "Asia/Oral", { "s": { "f": "+0500", "n": "+05" } } ], [ "Asia/Phnom_Penh", { "s": { "f": "+0700", "n": "+07" } } ], [ "Asia/Pontianak", { "s": { "f": "+0700", "n": "WIB" } } ], [ "Asia/Pyongyang", { "s": { "f": "+0900", "n": "KST" } } ], [ "Asia/Qatar", { "s": { "f": "+0300", "n": "+03" } } ], [ "Asia/Qyzylorda", { "s": { "f": "+0600", "n": "+06" } } ], [ "Asia/Riyadh", { "s": { "f": "+0300", "n": "+03" } } ], [ "Asia/Sakhalin", { "s": { "f": "+1100", "n": "+11" } } ], [ "Asia/Samarkand", { "s": { "f": "+0500", "n": "+05" } } ], [ "Asia/Seoul", { "s": { "f": "+0900", "n": "KST" } } ], [ "Asia/Shanghai", { "s": { "f": "+0800", "n": "CST" } } ], [ "Asia/Singapore", { "s": { "f": "+0800", "n": "+08" } } ], [ "Asia/Srednekolymsk", { "s": { "f": "+1100", "n": "+11" } } ], [ "Asia/Taipei", { "s": { "f": "+0800", "n": "CST" } } ], [ "Asia/Tashkent", { "s": { "f": "+0500", "n": "+05" } } ], [ "Asia/Tbilisi", { "s": { "f": "+0400", "n": "+04" } } ], [ "Asia/Tehran", { "s": { "f": "+0430", "t": "+0330", "n": "+0330", "s": "19700921T000000", "r": { "m": 9, "d": "3SU" } }, "d": { "f": "+0330", "t": "+0430", "n": "+0430", "s": "19700321T000000", "r": { "m": 3, "d": "3SU" } } } ], [ "Asia/Thimphu", { "s": { "f": "+0600", "n": "+06" } } ], [ "Asia/Tokyo", { "s": { "f": "+0900", "n": "JST" } } ], [ "Asia/Tomsk", { "s": { "f": "+0700", "n": "+07" } } ], [ "Asia/Ulaanbaatar", { "s": { "f": "+0800", "n": "+08" } } ], [ "Asia/Urumqi", { "s": { "f": "+0600", "n": "+06" } } ], [ "Asia/Ust-Nera", { "s": { "f": "+1000", "n": "+10" } } ], [ "Asia/Vientiane", { "s": { "f": "+0700", "n": "+07" } } ], [ "Asia/Vladivostok", { "s": { "f": "+1000", "n": "+10" } } ], [ "Asia/Yakutsk", { "s": { "f": "+0900", "n": "+09" } } ], [ "Asia/Yangon", { "s": { "f": "+0630", "n": "+0630" } } ], [ "Asia/Yekaterinburg", { "s": { "f": "+0500", "n": "+05" } } ], [ "Asia/Yerevan", { "s": { "f": "+0400", "n": "+04" } } ], [ "Atlantic/Azores", { "s": { "f": "+0000", "t": "-0100", "n": "-01", "s": "19701025T010000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "-0100", "t": "+0000", "n": "+00", "s": "19700329T000000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Atlantic/Bermuda", { "s": { "f": "-0300", "t": "-0400", "n": "AST", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } }, "d": { "f": "-0400", "t": "-0300", "n": "ADT", "s": "19700308T020000", "r": { "m": 3, "d": "2SU" } } } ], [ "Atlantic/Canary", { "s": { "f": "+0100", "t": "+0000", "n": "WET", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0000", "t": "+0100", "n": "WEST", "s": "19700329T010000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Atlantic/Cape_Verde", { "s": { "f": "-0100", "n": "-01" } } ], [ "Atlantic/Faroe", { "s": { "f": "+0100", "t": "+0000", "n": "WET", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0000", "t": "+0100", "n": "WEST", "s": "19700329T010000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Atlantic/Madeira", { "s": { "f": "+0100", "t": "+0000", "n": "WET", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0000", "t": "+0100", "n": "WEST", "s": "19700329T010000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Atlantic/Reykjavik", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Atlantic/South_Georgia", { "s": { "f": "-0200", "n": "-02" } } ], [ "Atlantic/St_Helena", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Atlantic/Stanley", { "s": { "f": "-0300", "n": "-03" } } ], [ "Australia/Adelaide", { "s": { "f": "+1030", "t": "+0930", "n": "ACST", "s": "19700405T030000", "r": { "m": 4, "d": "1SU" } }, "d": { "f": "+0930", "t": "+1030", "n": "ACDT", "s": "19701004T020000", "r": { "m": 10, "d": "1SU" } } } ], [ "Australia/Brisbane", { "s": { "f": "+1000", "n": "AEST" } } ], [ "Australia/Broken_Hill", { "s": { "f": "+1030", "t": "+0930", "n": "ACST", "s": "19700405T030000", "r": { "m": 4, "d": "1SU" } }, "d": { "f": "+0930", "t": "+1030", "n": "ACDT", "s": "19701004T020000", "r": { "m": 10, "d": "1SU" } } } ], [ "Australia/Currie", { "s": { "f": "+1100", "t": "+1000", "n": "AEST", "s": "19700405T030000", "r": { "m": 4, "d": "1SU" } }, "d": { "f": "+1000", "t": "+1100", "n": "AEDT", "s": "19701004T020000", "r": { "m": 10, "d": "1SU" } } } ], [ "Australia/Darwin", { "s": { "f": "+0930", "n": "ACST" } } ], [ "Australia/Eucla", { "s": { "f": "+0845", "n": "+0845" } } ], [ "Australia/Hobart", { "s": { "f": "+1100", "t": "+1000", "n": "AEST", "s": "19700405T030000", "r": { "m": 4, "d": "1SU" } }, "d": { "f": "+1000", "t": "+1100", "n": "AEDT", "s": "19701004T020000", "r": { "m": 10, "d": "1SU" } } } ], [ "Australia/Lindeman", { "s": { "f": "+1000", "n": "AEST" } } ], [ "Australia/Lord_Howe", { "s": { "f": "+1100", "t": "+1030", "n": "+1030", "s": "19700405T020000", "r": { "m": 4, "d": "1SU" } }, "d": { "f": "+1030", "t": "+1100", "n": "+11", "s": "19701004T020000", "r": { "m": 10, "d": "1SU" } } } ], [ "Australia/Melbourne", { "s": { "f": "+1100", "t": "+1000", "n": "AEST", "s": "19700405T030000", "r": { "m": 4, "d": "1SU" } }, "d": { "f": "+1000", "t": "+1100", "n": "AEDT", "s": "19701004T020000", "r": { "m": 10, "d": "1SU" } } } ], [ "Australia/Perth", { "s": { "f": "+0800", "n": "AWST" } } ], [ "Australia/Sydney", { "s": { "f": "+1100", "t": "+1000", "n": "AEST", "s": "19700405T030000", "r": { "m": 4, "d": "1SU" } }, "d": { "f": "+1000", "t": "+1100", "n": "AEDT", "s": "19701004T020000", "r": { "m": 10, "d": "1SU" } } } ], [ "Etc/GMT-0", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Etc/GMT-1", { "s": { "f": "-0100", "n": "-01" } } ], [ "Etc/GMT-10", { "s": { "f": "-1000", "n": "-10" } } ], [ "Etc/GMT-11", { "s": { "f": "-1100", "n": "-11" } } ], [ "Etc/GMT-12", { "s": { "f": "-1200", "n": "-12" } } ], [ "Etc/GMT-2", { "s": { "f": "-0200", "n": "-02" } } ], [ "Etc/GMT-3", { "s": { "f": "-0300", "n": "-03" } } ], [ "Etc/GMT-4", { "s": { "f": "-0400", "n": "-04" } } ], [ "Etc/GMT-5", { "s": { "f": "-0500", "n": "-05" } } ], [ "Etc/GMT-6", { "s": { "f": "-0600", "n": "-06" } } ], [ "Etc/GMT-7", { "s": { "f": "-0700", "n": "-07" } } ], [ "Etc/GMT-8", { "s": { "f": "-0800", "n": "-08" } } ], [ "Etc/GMT-9", { "s": { "f": "-0900", "n": "-09" } } ], [ "Etc/GMT", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Etc/GMT+0", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Etc/GMT+1", { "s": { "f": "+0100", "n": "+01" } } ], [ "Etc/GMT+10", { "s": { "f": "+1000", "n": "+10" } } ], [ "Etc/GMT+11", { "s": { "f": "+1100", "n": "+11" } } ], [ "Etc/GMT+12", { "s": { "f": "+1200", "n": "+12" } } ], [ "Etc/GMT+13", { "s": { "f": "+1300", "n": "+13" } } ], [ "Etc/GMT+14", { "s": { "f": "+1400", "n": "+14" } } ], [ "Etc/GMT+2", { "s": { "f": "+0200", "n": "+02" } } ], [ "Etc/GMT+3", { "s": { "f": "+0300", "n": "+03" } } ], [ "Etc/GMT+4", { "s": { "f": "+0400", "n": "+04" } } ], [ "Etc/GMT+5", { "s": { "f": "+0500", "n": "+05" } } ], [ "Etc/GMT+6", { "s": { "f": "+0600", "n": "+06" } } ], [ "Etc/GMT+7", { "s": { "f": "+0700", "n": "+07" } } ], [ "Etc/GMT+8", { "s": { "f": "+0800", "n": "+08" } } ], [ "Etc/GMT+9", { "s": { "f": "+0900", "n": "+09" } } ], [ "Etc/GMT0", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Etc/Greenwich", { "s": { "f": "+0000", "n": "GMT" } } ], [ "Etc/UCT", { "s": { "f": "+0000", "n": "UCT" } } ], [ "Etc/Universal", { "s": { "f": "+0000", "n": "UTC" } } ], [ "Etc/UTC", { "s": { "f": "+0000", "n": "UTC" } } ], [ "Etc/Zulu", { "s": { "f": "+0000", "n": "UTC" } } ], [ "Europe/Amsterdam", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Andorra", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Astrakhan", { "s": { "f": "+0400", "n": "+04" } } ], [ "Europe/Athens", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T040000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T030000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Belgrade", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Berlin", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Bratislava", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Brussels", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Bucharest", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T040000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T030000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Budapest", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Busingen", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Chisinau", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Copenhagen", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Dublin", { "s": { "f": "+0100", "t": "+0000", "n": "GMT", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0000", "t": "+0100", "n": "IST", "s": "19700329T010000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Gibraltar", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Guernsey", { "s": { "f": "+0100", "t": "+0000", "n": "GMT", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0000", "t": "+0100", "n": "BST", "s": "19700329T010000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Helsinki", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T040000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T030000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Isle_of_Man", { "s": { "f": "+0100", "t": "+0000", "n": "GMT", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0000", "t": "+0100", "n": "BST", "s": "19700329T010000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Istanbul", { "s": { "f": "+0300", "n": "+03" } } ], [ "Europe/Jersey", { "s": { "f": "+0100", "t": "+0000", "n": "GMT", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0000", "t": "+0100", "n": "BST", "s": "19700329T010000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Kaliningrad", { "s": { "f": "+0200", "n": "EET" } } ], [ "Europe/Kiev", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T040000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T030000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Kirov", { "s": { "f": "+0300", "n": "+03" } } ], [ "Europe/Lisbon", { "s": { "f": "+0100", "t": "+0000", "n": "WET", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0000", "t": "+0100", "n": "WEST", "s": "19700329T010000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Ljubljana", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/London", { "s": { "f": "+0100", "t": "+0000", "n": "GMT", "s": "19701025T020000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0000", "t": "+0100", "n": "BST", "s": "19700329T010000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Luxembourg", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Madrid", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Malta", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Mariehamn", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T040000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T030000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Minsk", { "s": { "f": "+0300", "n": "+03" } } ], [ "Europe/Monaco", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Moscow", { "s": { "f": "+0300", "n": "MSK" } } ], [ "Europe/Nicosia", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T040000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T030000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Oslo", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Paris", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Podgorica", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Prague", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Riga", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T040000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T030000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Rome", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Samara", { "s": { "f": "+0400", "n": "+04" } } ], [ "Europe/San_Marino", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Sarajevo", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Saratov", { "s": { "f": "+0400", "n": "+04" } } ], [ "Europe/Simferopol", { "s": { "f": "+0300", "n": "MSK" } } ], [ "Europe/Skopje", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Sofia", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T040000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T030000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Stockholm", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Tallinn", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T040000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T030000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Tirane", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Ulyanovsk", { "s": { "f": "+0400", "n": "+04" } } ], [ "Europe/Uzhgorod", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T040000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T030000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Vaduz", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Vatican", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Vienna", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Vilnius", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T040000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T030000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Volgograd", { "s": { "f": "+0400", "n": "+04" } } ], [ "Europe/Warsaw", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Zagreb", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Zaporozhye", { "s": { "f": "+0300", "t": "+0200", "n": "EET", "s": "19701025T040000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0200", "t": "+0300", "n": "EEST", "s": "19700329T030000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Europe/Zurich", { "s": { "f": "+0200", "t": "+0100", "n": "CET", "s": "19701025T030000", "r": { "m": 10, "d": "-1SU" } }, "d": { "f": "+0100", "t": "+0200", "n": "CEST", "s": "19700329T020000", "r": { "m": 3, "d": "-1SU" } } } ], [ "Indian/Antananarivo", { "s": { "f": "+0300", "n": "EAT" } } ], [ "Indian/Chagos", { "s": { "f": "+0600", "n": "+06" } } ], [ "Indian/Christmas", { "s": { "f": "+0700", "n": "+07" } } ], [ "Indian/Cocos", { "s": { "f": "+0630", "n": "+0630" } } ], [ "Indian/Comoro", { "s": { "f": "+0300", "n": "EAT" } } ], [ "Indian/Kerguelen", { "s": { "f": "+0500", "n": "+05" } } ], [ "Indian/Mahe", { "s": { "f": "+0400", "n": "+04" } } ], [ "Indian/Maldives", { "s": { "f": "+0500", "n": "+05" } } ], [ "Indian/Mauritius", { "s": { "f": "+0400", "n": "+04" } } ], [ "Indian/Mayotte", { "s": { "f": "+0300", "n": "EAT" } } ], [ "Indian/Reunion", { "s": { "f": "+0400", "n": "+04" } } ], [ "Pacific/Apia", { "s": { "f": "+1400", "t": "+1300", "n": "+13", "s": "19700405T040000", "r": { "m": 4, "d": "1SU" } }, "d": { "f": "+1300", "t": "+1400", "n": "+14", "s": "19700927T030000", "r": { "m": 9, "d": "-1SU" } } } ], [ "Pacific/Auckland", { "s": { "f": "+1300", "t": "+1200", "n": "NZST", "s": "19700405T030000", "r": { "m": 4, "d": "1SU" } }, "d": { "f": "+1200", "t": "+1300", "n": "NZDT", "s": "19700927T020000", "r": { "m": 9, "d": "-1SU" } } } ], [ "Pacific/Bougainville", { "s": { "f": "+1100", "n": "+11" } } ], [ "Pacific/Chatham", { "s": { "f": "+1345", "t": "+1245", "n": "+1245", "s": "19700405T034500", "r": { "m": 4, "d": "1SU" } }, "d": { "f": "+1245", "t": "+1345", "n": "+1345", "s": "19700927T024500", "r": { "m": 9, "d": "-1SU" } } } ], [ "Pacific/Chuuk", { "s": { "f": "+1000", "n": "+10" } } ], [ "Pacific/Easter", { "s": { "f": "-0500", "t": "-0600", "n": "-06", "s": "19700404T220000", "r": { "m": 4, "d": "1SA" } }, "d": { "f": "-0600", "t": "-0500", "n": "-05", "s": "19700905T220000", "r": { "m": 9, "d": "1SA" } } } ], [ "Pacific/Efate", { "s": { "f": "+1100", "n": "+11" } } ], [ "Pacific/Enderbury", { "s": { "f": "+1300", "n": "+13" } } ], [ "Pacific/Fakaofo", { "s": { "f": "+1300", "n": "+13" } } ], [ "Pacific/Fiji", { "s": { "f": "+1300", "t": "+1200", "n": "+12", "s": "19700118T030000", "r": { "m": 1, "d": "-2SU" } }, "d": { "f": "+1200", "t": "+1300", "n": "+13", "s": "19701101T020000", "r": { "m": 11, "d": "1SU" } } } ], [ "Pacific/Funafuti", { "s": { "f": "+1200", "n": "+12" } } ], [ "Pacific/Galapagos", { "s": { "f": "-0600", "n": "-06" } } ], [ "Pacific/Gambier", { "s": { "f": "-0900", "n": "-09" } } ], [ "Pacific/Guadalcanal", { "s": { "f": "+1100", "n": "+11" } } ], [ "Pacific/Guam", { "s": { "f": "+1000", "n": "ChST" } } ], [ "Pacific/Honolulu", { "s": { "f": "-1000", "n": "HST" } } ], [ "Pacific/Kiritimati", { "s": { "f": "+1400", "n": "+14" } } ], [ "Pacific/Kosrae", { "s": { "f": "+1100", "n": "+11" } } ], [ "Pacific/Kwajalein", { "s": { "f": "+1200", "n": "+12" } } ], [ "Pacific/Majuro", { "s": { "f": "+1200", "n": "+12" } } ], [ "Pacific/Marquesas", { "s": { "f": "-0930", "n": "-0930" } } ], [ "Pacific/Midway", { "s": { "f": "-1100", "n": "SST" } } ], [ "Pacific/Nauru", { "s": { "f": "+1200", "n": "+12" } } ], [ "Pacific/Niue", { "s": { "f": "-1100", "n": "-11" } } ], [ "Pacific/Norfolk", { "s": { "f": "+1100", "n": "+11" } } ], [ "Pacific/Noumea", { "s": { "f": "+1100", "n": "+11" } } ], [ "Pacific/Pago_Pago", { "s": { "f": "-1100", "n": "SST" } } ], [ "Pacific/Palau", { "s": { "f": "+0900", "n": "+09" } } ], [ "Pacific/Pitcairn", { "s": { "f": "-0800", "n": "-08" } } ], [ "Pacific/Pohnpei", { "s": { "f": "+1100", "n": "+11" } } ], [ "Pacific/Port_Moresby", { "s": { "f": "+1000", "n": "+10" } } ], [ "Pacific/Rarotonga", { "s": { "f": "-1000", "n": "-10" } } ], [ "Pacific/Saipan", { "s": { "f": "+1000", "n": "ChST" } } ], [ "Pacific/Tahiti", { "s": { "f": "-1000", "n": "-10" } } ], [ "Pacific/Tarawa", { "s": { "f": "+1200", "n": "+12" } } ], [ "Pacific/Tongatapu", { "s": { "f": "+1300", "n": "+13" } } ], [ "Pacific/Wake", { "s": { "f": "+1200", "n": "+12" } } ], [ "Pacific/Wallis", { "s": { "f": "+1200", "n": "+12" } } ] ]); /***/ }), /***/ "./node_modules/ieee754/index.js": /*!***************************************!*\ !*** ./node_modules/ieee754/index.js ***! \***************************************/ /***/ ((__unused_webpack_module, exports) => { /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ exports.read = function (buffer, offset, isLE, mLen, nBytes) { var e, m var eLen = (nBytes * 8) - mLen - 1 var eMax = (1 << eLen) - 1 var eBias = eMax >> 1 var nBits = -7 var i = isLE ? (nBytes - 1) : 0 var d = isLE ? -1 : 1 var s = buffer[offset + i] i += d e = s & ((1 << (-nBits)) - 1) s >>= (-nBits) nBits += eLen for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} m = e & ((1 << (-nBits)) - 1) e >>= (-nBits) nBits += mLen for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} if (e === 0) { e = 1 - eBias } else if (e === eMax) { return m ? NaN : ((s ? -1 : 1) * Infinity) } else { m = m + Math.pow(2, mLen) e = e - eBias } return (s ? -1 : 1) * m * Math.pow(2, e - mLen) } exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { var e, m, c var eLen = (nBytes * 8) - mLen - 1 var eMax = (1 << eLen) - 1 var eBias = eMax >> 1 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) var i = isLE ? 0 : (nBytes - 1) var d = isLE ? 1 : -1 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 value = Math.abs(value) if (isNaN(value) || value === Infinity) { m = isNaN(value) ? 1 : 0 e = eMax } else { e = Math.floor(Math.log(value) / Math.LN2) if (value * (c = Math.pow(2, -e)) < 1) { e-- c *= 2 } if (e + eBias >= 1) { value += rt / c } else { value += rt * Math.pow(2, 1 - eBias) } if (value * c >= 2) { e++ c /= 2 } if (e + eBias >= eMax) { m = 0 e = eMax } else if (e + eBias >= 1) { m = ((value * c) - 1) * Math.pow(2, mLen) e = e + eBias } else { m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) e = 0 } } for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} e = (e << mLen) | m eLen += mLen for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} buffer[offset + i - d] |= s * 128 } /***/ }), /***/ "./node_modules/inline-style-parser/index.js": /*!***************************************************!*\ !*** ./node_modules/inline-style-parser/index.js ***! \***************************************************/ /***/ ((module) => { // http://www.w3.org/TR/CSS21/grammar.html // https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027 var COMMENT_REGEX = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//g; var NEWLINE_REGEX = /\n/g; var WHITESPACE_REGEX = /^\s*/; // declaration var PROPERTY_REGEX = /^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/; var COLON_REGEX = /^:\s*/; var VALUE_REGEX = /^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/; var SEMICOLON_REGEX = /^[;\s]*/; // https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill var TRIM_REGEX = /^\s+|\s+$/g; // strings var NEWLINE = '\n'; var FORWARD_SLASH = '/'; var ASTERISK = '*'; var EMPTY_STRING = ''; // types var TYPE_COMMENT = 'comment'; var TYPE_DECLARATION = 'declaration'; /** * @param {String} style * @param {Object} [options] * @return {Object[]} * @throws {TypeError} * @throws {Error} */ module.exports = function(style, options) { if (typeof style !== 'string') { throw new TypeError('First argument must be a string'); } if (!style) return []; options = options || {}; /** * Positional. */ var lineno = 1; var column = 1; /** * Update lineno and column based on `str`. * * @param {String} str */ function updatePosition(str) { var lines = str.match(NEWLINE_REGEX); if (lines) lineno += lines.length; var i = str.lastIndexOf(NEWLINE); column = ~i ? str.length - i : column + str.length; } /** * Mark position and patch `node.position`. * * @return {Function} */ function position() { var start = { line: lineno, column: column }; return function(node) { node.position = new Position(start); whitespace(); return node; }; } /** * Store position information for a node. * * @constructor * @property {Object} start * @property {Object} end * @property {undefined|String} source */ function Position(start) { this.start = start; this.end = { line: lineno, column: column }; this.source = options.source; } /** * Non-enumerable source string. */ Position.prototype.content = style; var errorsList = []; /** * Error `msg`. * * @param {String} msg * @throws {Error} */ function error(msg) { var err = new Error( options.source + ':' + lineno + ':' + column + ': ' + msg ); err.reason = msg; err.filename = options.source; err.line = lineno; err.column = column; err.source = style; if (options.silent) { errorsList.push(err); } else { throw err; } } /** * Match `re` and return captures. * * @param {RegExp} re * @return {undefined|Array} */ function match(re) { var m = re.exec(style); if (!m) return; var str = m[0]; updatePosition(str); style = style.slice(str.length); return m; } /** * Parse whitespace. */ function whitespace() { match(WHITESPACE_REGEX); } /** * Parse comments. * * @param {Object[]} [rules] * @return {Object[]} */ function comments(rules) { var c; rules = rules || []; while ((c = comment())) { if (c !== false) { rules.push(c); } } return rules; } /** * Parse comment. * * @return {Object} * @throws {Error} */ function comment() { var pos = position(); if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return; var i = 2; while ( EMPTY_STRING != style.charAt(i) && (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1)) ) { ++i; } i += 2; if (EMPTY_STRING === style.charAt(i - 1)) { return error('End of comment missing'); } var str = style.slice(2, i - 2); column += 2; updatePosition(str); style = style.slice(i); column += 2; return pos({ type: TYPE_COMMENT, comment: str }); } /** * Parse declaration. * * @return {Object} * @throws {Error} */ function declaration() { var pos = position(); // prop var prop = match(PROPERTY_REGEX); if (!prop) return; comment(); // : if (!match(COLON_REGEX)) return error("property missing ':'"); // val var val = match(VALUE_REGEX); var ret = pos({ type: TYPE_DECLARATION, property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)), value: val ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING)) : EMPTY_STRING }); // ; match(SEMICOLON_REGEX); return ret; } /** * Parse declarations. * * @return {Object[]} */ function declarations() { var decls = []; comments(decls); // declarations var decl; while ((decl = declaration())) { if (decl !== false) { decls.push(decl); comments(decls); } } return decls; } whitespace(); return declarations(); }; /** * Trim `str`. * * @param {String} str * @return {String} */ function trim(str) { return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING; } /***/ }), /***/ "./node_modules/is-buffer/index.js": /*!*****************************************!*\ !*** ./node_modules/is-buffer/index.js ***! \*****************************************/ /***/ ((module) => { /*! * Determine if an object is a Buffer * * @author Feross Aboukhadijeh * @license MIT */ // The _isBuffer check is for Safari 5-7 support, because it's missing // Object.prototype.constructor. Remove this eventually module.exports = function (obj) { return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer) } function isBuffer (obj) { return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) } // For Node v0.10 support. Remove this eventually. function isSlowBuffer (obj) { return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) } /***/ }), /***/ "./node_modules/jstz/dist/jstz.js": /*!****************************************!*\ !*** ./node_modules/jstz/dist/jstz.js ***! \****************************************/ /***/ ((module, exports, __webpack_require__) => { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root) {/*global exports, Intl*/ /** * This script gives you the zone info key representing your device's time zone setting. * * @name jsTimezoneDetect * @version 1.0.6 * @author Jon Nylander * @license MIT License - https://bitbucket.org/pellepim/jstimezonedetect/src/default/LICENCE.txt * * For usage and examples, visit: * http://pellepim.bitbucket.org/jstz/ * * Copyright (c) Jon Nylander */ /** * Namespace to hold all the code for timezone detection. */ var jstz = (function () { 'use strict'; var HEMISPHERE_SOUTH = 's', consts = { DAY: 86400000, HOUR: 3600000, MINUTE: 60000, SECOND: 1000, BASELINE_YEAR: 2014, MAX_SCORE: 864000000, // 10 days AMBIGUITIES: { 'America/Denver': ['America/Mazatlan'], 'Europe/London': ['Africa/Casablanca'], 'America/Chicago': ['America/Mexico_City'], 'America/Asuncion': ['America/Campo_Grande', 'America/Santiago'], 'America/Montevideo': ['America/Sao_Paulo', 'America/Santiago'], // Europe/Minsk should not be in this list... but Windows. 'Asia/Beirut': ['Asia/Amman', 'Asia/Jerusalem', 'Europe/Helsinki', 'Asia/Damascus', 'Africa/Cairo', 'Asia/Gaza', 'Europe/Minsk'], 'Pacific/Auckland': ['Pacific/Fiji'], 'America/Los_Angeles': ['America/Santa_Isabel'], 'America/New_York': ['America/Havana'], 'America/Halifax': ['America/Goose_Bay'], 'America/Godthab': ['America/Miquelon'], 'Asia/Dubai': ['Asia/Yerevan'], 'Asia/Jakarta': ['Asia/Krasnoyarsk'], 'Asia/Shanghai': ['Asia/Irkutsk', 'Australia/Perth'], 'Australia/Sydney': ['Australia/Lord_Howe'], 'Asia/Tokyo': ['Asia/Yakutsk'], 'Asia/Dhaka': ['Asia/Omsk'], // In the real world Yerevan is not ambigous for Baku... but Windows. 'Asia/Baku': ['Asia/Yerevan'], 'Australia/Brisbane': ['Asia/Vladivostok'], 'Pacific/Noumea': ['Asia/Vladivostok'], 'Pacific/Majuro': ['Asia/Kamchatka', 'Pacific/Fiji'], 'Pacific/Tongatapu': ['Pacific/Apia'], 'Asia/Baghdad': ['Europe/Minsk', 'Europe/Moscow'], 'Asia/Karachi': ['Asia/Yekaterinburg'], 'Africa/Johannesburg': ['Asia/Gaza', 'Africa/Cairo'] } }, /** * Gets the offset in minutes from UTC for a certain date. * @param {Date} date * @returns {Number} */ get_date_offset = function get_date_offset(date) { var offset = -date.getTimezoneOffset(); return (offset !== null ? offset : 0); }, /** * This function does some basic calculations to create information about * the user's timezone. It uses REFERENCE_YEAR as a solid year for which * the script has been tested rather than depend on the year set by the * client device. * * Returns a key that can be used to do lookups in jstz.olson.timezones. * eg: "720,1,2". * * @returns {String} */ lookup_key = function lookup_key() { var january_offset = get_date_offset(new Date(consts.BASELINE_YEAR, 0, 2)), june_offset = get_date_offset(new Date(consts.BASELINE_YEAR, 5, 2)), diff = january_offset - june_offset; if (diff < 0) { return january_offset + ",1"; } else if (diff > 0) { return june_offset + ",1," + HEMISPHERE_SOUTH; } return january_offset + ",0"; }, /** * Tries to get the time zone key directly from the operating system for those * environments that support the ECMAScript Internationalization API. */ get_from_internationalization_api = function get_from_internationalization_api() { var format, timezone; if (typeof Intl === "undefined" || typeof Intl.DateTimeFormat === "undefined") { return; } format = Intl.DateTimeFormat(); if (typeof format === "undefined" || typeof format.resolvedOptions === "undefined") { return; } timezone = format.resolvedOptions().timeZone; if (timezone && (timezone.indexOf("/") > -1 || timezone === 'UTC') && timezone.indexOf("Etc") != 0) { return timezone; } }, /** * Starting point for getting all the DST rules for a specific year * for the current timezone (as described by the client system). * * Returns an object with start and end attributes, or false if no * DST rules were found for the year. * * @param year * @returns {Object} || {Boolean} */ dst_dates = function dst_dates(year) { var yearstart = new Date(year, 0, 1, 0, 0, 1, 0).getTime(); var yearend = new Date(year, 12, 31, 23, 59, 59).getTime(); var current = yearstart; var offset = (new Date(current)).getTimezoneOffset(); var dst_start = null; var dst_end = null; while (current < yearend - 86400000) { var dateToCheck = new Date(current); var dateToCheckOffset = dateToCheck.getTimezoneOffset(); if (dateToCheckOffset !== offset) { if (dateToCheckOffset < offset) { dst_start = dateToCheck; } if (dateToCheckOffset > offset) { dst_end = dateToCheck; } offset = dateToCheckOffset; } current += 86400000; } if (dst_start && dst_end) { return { s: find_dst_fold(dst_start).getTime(), e: find_dst_fold(dst_end).getTime() }; } return false; }, /** * Probably completely unnecessary function that recursively finds the * exact (to the second) time when a DST rule was changed. * * @param a_date - The candidate Date. * @param padding - integer specifying the padding to allow around the candidate * date for finding the fold. * @param iterator - integer specifying how many milliseconds to iterate while * searching for the fold. * * @returns {Date} */ find_dst_fold = function find_dst_fold(a_date, padding, iterator) { if (typeof padding === 'undefined') { padding = consts.DAY; iterator = consts.HOUR; } var date_start = new Date(a_date.getTime() - padding).getTime(); var date_end = a_date.getTime() + padding; var offset = new Date(date_start).getTimezoneOffset(); var current = date_start; var dst_change = null; while (current < date_end - iterator) { var dateToCheck = new Date(current); var dateToCheckOffset = dateToCheck.getTimezoneOffset(); if (dateToCheckOffset !== offset) { dst_change = dateToCheck; break; } current += iterator; } if (padding === consts.DAY) { return find_dst_fold(dst_change, consts.HOUR, consts.MINUTE); } if (padding === consts.HOUR) { return find_dst_fold(dst_change, consts.MINUTE, consts.SECOND); } return dst_change; }, windows7_adaptations = function windows7_adaptions(rule_list, preliminary_timezone, score, sample) { if (score !== 'N/A') { return score; } if (preliminary_timezone === 'Asia/Beirut') { if (sample.name === 'Africa/Cairo') { if (rule_list[6].s === 1398376800000 && rule_list[6].e === 1411678800000) { return 0; } } if (sample.name === 'Asia/Jerusalem') { if (rule_list[6].s === 1395964800000 && rule_list[6].e === 1411858800000) { return 0; } } } else if (preliminary_timezone === 'America/Santiago') { if (sample.name === 'America/Asuncion') { if (rule_list[6].s === 1412481600000 && rule_list[6].e === 1397358000000) { return 0; } } if (sample.name === 'America/Campo_Grande') { if (rule_list[6].s === 1413691200000 && rule_list[6].e === 1392519600000) { return 0; } } } else if (preliminary_timezone === 'America/Montevideo') { if (sample.name === 'America/Sao_Paulo') { if (rule_list[6].s === 1413687600000 && rule_list[6].e === 1392516000000) { return 0; } } } else if (preliminary_timezone === 'Pacific/Auckland') { if (sample.name === 'Pacific/Fiji') { if (rule_list[6].s === 1414245600000 && rule_list[6].e === 1396101600000) { return 0; } } } return score; }, /** * Takes the DST rules for the current timezone, and proceeds to find matches * in the jstz.olson.dst_rules.zones array. * * Compares samples to the current timezone on a scoring basis. * * Candidates are ruled immediately if either the candidate or the current zone * has a DST rule where the other does not. * * Candidates are ruled out immediately if the current zone has a rule that is * outside the DST scope of the candidate. * * Candidates are included for scoring if the current zones rules fall within the * span of the samples rules. * * Low score is best, the score is calculated by summing up the differences in DST * rules and if the consts.MAX_SCORE is overreached the candidate is ruled out. * * Yah follow? :) * * @param rule_list * @param preliminary_timezone * @returns {*} */ best_dst_match = function best_dst_match(rule_list, preliminary_timezone) { var score_sample = function score_sample(sample) { var score = 0; for (var j = 0; j < rule_list.length; j++) { // Both sample and current time zone report DST during the year. if (!!sample.rules[j] && !!rule_list[j]) { // The current time zone's DST rules are inside the sample's. Include. if (rule_list[j].s >= sample.rules[j].s && rule_list[j].e <= sample.rules[j].e) { score = 0; score += Math.abs(rule_list[j].s - sample.rules[j].s); score += Math.abs(sample.rules[j].e - rule_list[j].e); // The current time zone's DST rules are outside the sample's. Discard. } else { score = 'N/A'; break; } // The max score has been reached. Discard. if (score > consts.MAX_SCORE) { score = 'N/A'; break; } } } score = windows7_adaptations(rule_list, preliminary_timezone, score, sample); return score; }; var scoreboard = {}; var dst_zones = jstz.olson.dst_rules.zones; var dst_zones_length = dst_zones.length; var ambiguities = consts.AMBIGUITIES[preliminary_timezone]; for (var i = 0; i < dst_zones_length; i++) { var sample = dst_zones[i]; var score = score_sample(dst_zones[i]); if (score !== 'N/A') { scoreboard[sample.name] = score; } } for (var tz in scoreboard) { if (scoreboard.hasOwnProperty(tz)) { for (var j = 0; j < ambiguities.length; j++) { if (ambiguities[j] === tz) { return tz; } } } } return preliminary_timezone; }, /** * Takes the preliminary_timezone as detected by lookup_key(). * * Builds up the current timezones DST rules for the years defined * in the jstz.olson.dst_rules.years array. * * If there are no DST occurences for those years, immediately returns * the preliminary timezone. Otherwise proceeds and tries to solve * ambiguities. * * @param preliminary_timezone * @returns {String} timezone_name */ get_by_dst = function get_by_dst(preliminary_timezone) { var get_rules = function get_rules() { var rule_list = []; for (var i = 0; i < jstz.olson.dst_rules.years.length; i++) { var year_rules = dst_dates(jstz.olson.dst_rules.years[i]); rule_list.push(year_rules); } return rule_list; }; var check_has_dst = function check_has_dst(rules) { for (var i = 0; i < rules.length; i++) { if (rules[i] !== false) { return true; } } return false; }; var rules = get_rules(); var has_dst = check_has_dst(rules); if (has_dst) { return best_dst_match(rules, preliminary_timezone); } return preliminary_timezone; }, /** * Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary. * * Returns an object with one function ".name()" * * @returns Object */ determine = function determine() { var preliminary_tz = get_from_internationalization_api(); if (!preliminary_tz) { preliminary_tz = jstz.olson.timezones[lookup_key()]; if (typeof consts.AMBIGUITIES[preliminary_tz] !== 'undefined') { preliminary_tz = get_by_dst(preliminary_tz); } } return { name: function () { return preliminary_tz; }, stdTimezoneOffset : function () { // negative to match what (new Date).getTimezoneOffset() will return return -lookup_key().split(',')[0]; }, timezoneOffset : function () { // negative to match what (new Date).getTimezoneOffset() will return return -get_date_offset(new Date()) } }; }; return { determine: determine }; }()); jstz.olson = jstz.olson || {}; /** * The keys in this dictionary are comma separated as such: * * First the offset compared to UTC time in minutes. * * Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it * does. * * Thirdly an optional 's' signifies that the timezone is in the southern hemisphere, * only interesting for timezones with DST. * * The mapped arrays is used for constructing the jstz.TimeZone object from within * jstz.determine(); */ jstz.olson.timezones = { '-720,0': 'Etc/GMT+12', '-660,0': 'Pacific/Pago_Pago', '-660,1,s': 'Pacific/Apia', // Why? Because windows... cry! '-600,1': 'America/Adak', '-600,0': 'Pacific/Honolulu', '-570,0': 'Pacific/Marquesas', '-540,0': 'Pacific/Gambier', '-540,1': 'America/Anchorage', '-480,1': 'America/Los_Angeles', '-480,0': 'Pacific/Pitcairn', '-420,0': 'America/Phoenix', '-420,1': 'America/Denver', '-360,0': 'America/Guatemala', '-360,1': 'America/Chicago', '-360,1,s': 'Pacific/Easter', '-300,0': 'America/Bogota', '-300,1': 'America/New_York', '-270,0': 'America/Caracas', '-240,1': 'America/Halifax', '-240,0': 'America/Santo_Domingo', '-240,1,s': 'America/Asuncion', '-210,1': 'America/St_Johns', '-180,1': 'America/Godthab', '-180,0': 'America/Argentina/Buenos_Aires', '-180,1,s': 'America/Montevideo', '-120,0': 'America/Noronha', '-120,1': 'America/Noronha', '-60,1': 'Atlantic/Azores', '-60,0': 'Atlantic/Cape_Verde', '0,0': 'UTC', '0,1': 'Europe/London', '60,1': 'Europe/Berlin', '60,0': 'Africa/Lagos', '60,1,s': 'Africa/Windhoek', '120,1': 'Asia/Beirut', '120,0': 'Africa/Johannesburg', '180,0': 'Asia/Baghdad', '180,1': 'Europe/Moscow', '210,1': 'Asia/Tehran', '240,0': 'Asia/Dubai', '240,1': 'Asia/Baku', '270,0': 'Asia/Kabul', '300,1': 'Asia/Yekaterinburg', '300,0': 'Asia/Karachi', '330,0': 'Asia/Kolkata', '345,0': 'Asia/Kathmandu', '360,0': 'Asia/Dhaka', '360,1': 'Asia/Omsk', '390,0': 'Asia/Rangoon', '420,1': 'Asia/Krasnoyarsk', '420,0': 'Asia/Jakarta', '480,0': 'Asia/Shanghai', '480,1': 'Asia/Irkutsk', '525,0': 'Australia/Eucla', '525,1,s': 'Australia/Eucla', '540,1': 'Asia/Yakutsk', '540,0': 'Asia/Tokyo', '570,0': 'Australia/Darwin', '570,1,s': 'Australia/Adelaide', '600,0': 'Australia/Brisbane', '600,1': 'Asia/Vladivostok', '600,1,s': 'Australia/Sydney', '630,1,s': 'Australia/Lord_Howe', '660,1': 'Asia/Kamchatka', '660,0': 'Pacific/Noumea', '690,0': 'Pacific/Norfolk', '720,1,s': 'Pacific/Auckland', '720,0': 'Pacific/Majuro', '765,1,s': 'Pacific/Chatham', '780,0': 'Pacific/Tongatapu', '780,1,s': 'Pacific/Apia', '840,0': 'Pacific/Kiritimati' }; /* Build time: 2015-11-02 13:01:00Z Build by invoking python utilities/dst.py generate */ jstz.olson.dst_rules = { "years": [ 2008, 2009, 2010, 2011, 2012, 2013, 2014 ], "zones": [ { "name": "Africa/Cairo", "rules": [ { "e": 1219957200000, "s": 1209074400000 }, { "e": 1250802000000, "s": 1240524000000 }, { "e": 1285880400000, "s": 1284069600000 }, false, false, false, { "e": 1411678800000, "s": 1406844000000 } ] }, { "name": "Africa/Casablanca", "rules": [ { "e": 1220223600000, "s": 1212278400000 }, { "e": 1250809200000, "s": 1243814400000 }, { "e": 1281222000000, "s": 1272758400000 }, { "e": 1312066800000, "s": 1301788800000 }, { "e": 1348970400000, "s": 1345428000000 }, { "e": 1382839200000, "s": 1376100000000 }, { "e": 1414288800000, "s": 1406944800000 } ] }, { "name": "America/Asuncion", "rules": [ { "e": 1205031600000, "s": 1224388800000 }, { "e": 1236481200000, "s": 1255838400000 }, { "e": 1270954800000, "s": 1286078400000 }, { "e": 1302404400000, "s": 1317528000000 }, { "e": 1333854000000, "s": 1349582400000 }, { "e": 1364094000000, "s": 1381032000000 }, { "e": 1395543600000, "s": 1412481600000 } ] }, { "name": "America/Campo_Grande", "rules": [ { "e": 1203217200000, "s": 1224388800000 }, { "e": 1234666800000, "s": 1255838400000 }, { "e": 1266721200000, "s": 1287288000000 }, { "e": 1298170800000, "s": 1318737600000 }, { "e": 1330225200000, "s": 1350792000000 }, { "e": 1361070000000, "s": 1382241600000 }, { "e": 1392519600000, "s": 1413691200000 } ] }, { "name": "America/Goose_Bay", "rules": [ { "e": 1225594860000, "s": 1205035260000 }, { "e": 1257044460000, "s": 1236484860000 }, { "e": 1289098860000, "s": 1268539260000 }, { "e": 1320555600000, "s": 1299988860000 }, { "e": 1352005200000, "s": 1331445600000 }, { "e": 1383454800000, "s": 1362895200000 }, { "e": 1414904400000, "s": 1394344800000 } ] }, { "name": "America/Havana", "rules": [ { "e": 1224997200000, "s": 1205643600000 }, { "e": 1256446800000, "s": 1236488400000 }, { "e": 1288501200000, "s": 1268542800000 }, { "e": 1321160400000, "s": 1300597200000 }, { "e": 1352005200000, "s": 1333256400000 }, { "e": 1383454800000, "s": 1362891600000 }, { "e": 1414904400000, "s": 1394341200000 } ] }, { "name": "America/Mazatlan", "rules": [ { "e": 1225008000000, "s": 1207472400000 }, { "e": 1256457600000, "s": 1238922000000 }, { "e": 1288512000000, "s": 1270371600000 }, { "e": 1319961600000, "s": 1301821200000 }, { "e": 1351411200000, "s": 1333270800000 }, { "e": 1382860800000, "s": 1365325200000 }, { "e": 1414310400000, "s": 1396774800000 } ] }, { "name": "America/Mexico_City", "rules": [ { "e": 1225004400000, "s": 1207468800000 }, { "e": 1256454000000, "s": 1238918400000 }, { "e": 1288508400000, "s": 1270368000000 }, { "e": 1319958000000, "s": 1301817600000 }, { "e": 1351407600000, "s": 1333267200000 }, { "e": 1382857200000, "s": 1365321600000 }, { "e": 1414306800000, "s": 1396771200000 } ] }, { "name": "America/Miquelon", "rules": [ { "e": 1225598400000, "s": 1205038800000 }, { "e": 1257048000000, "s": 1236488400000 }, { "e": 1289102400000, "s": 1268542800000 }, { "e": 1320552000000, "s": 1299992400000 }, { "e": 1352001600000, "s": 1331442000000 }, { "e": 1383451200000, "s": 1362891600000 }, { "e": 1414900800000, "s": 1394341200000 } ] }, { "name": "America/Santa_Isabel", "rules": [ { "e": 1225011600000, "s": 1207476000000 }, { "e": 1256461200000, "s": 1238925600000 }, { "e": 1288515600000, "s": 1270375200000 }, { "e": 1319965200000, "s": 1301824800000 }, { "e": 1351414800000, "s": 1333274400000 }, { "e": 1382864400000, "s": 1365328800000 }, { "e": 1414314000000, "s": 1396778400000 } ] }, { "name": "America/Santiago", "rules": [ { "e": 1206846000000, "s": 1223784000000 }, { "e": 1237086000000, "s": 1255233600000 }, { "e": 1270350000000, "s": 1286683200000 }, { "e": 1304823600000, "s": 1313899200000 }, { "e": 1335668400000, "s": 1346558400000 }, { "e": 1367118000000, "s": 1378612800000 }, { "e": 1398567600000, "s": 1410062400000 } ] }, { "name": "America/Sao_Paulo", "rules": [ { "e": 1203213600000, "s": 1224385200000 }, { "e": 1234663200000, "s": 1255834800000 }, { "e": 1266717600000, "s": 1287284400000 }, { "e": 1298167200000, "s": 1318734000000 }, { "e": 1330221600000, "s": 1350788400000 }, { "e": 1361066400000, "s": 1382238000000 }, { "e": 1392516000000, "s": 1413687600000 } ] }, { "name": "Asia/Amman", "rules": [ { "e": 1225404000000, "s": 1206655200000 }, { "e": 1256853600000, "s": 1238104800000 }, { "e": 1288303200000, "s": 1269554400000 }, { "e": 1319752800000, "s": 1301608800000 }, false, false, { "e": 1414706400000, "s": 1395957600000 } ] }, { "name": "Asia/Damascus", "rules": [ { "e": 1225486800000, "s": 1207260000000 }, { "e": 1256850000000, "s": 1238104800000 }, { "e": 1288299600000, "s": 1270159200000 }, { "e": 1319749200000, "s": 1301608800000 }, { "e": 1351198800000, "s": 1333058400000 }, { "e": 1382648400000, "s": 1364508000000 }, { "e": 1414702800000, "s": 1395957600000 } ] }, { "name": "Asia/Dubai", "rules": [ false, false, false, false, false, false, false ] }, { "name": "Asia/Gaza", "rules": [ { "e": 1219957200000, "s": 1206655200000 }, { "e": 1252015200000, "s": 1238104800000 }, { "e": 1281474000000, "s": 1269640860000 }, { "e": 1312146000000, "s": 1301608860000 }, { "e": 1348178400000, "s": 1333058400000 }, { "e": 1380229200000, "s": 1364508000000 }, { "e": 1414098000000, "s": 1395957600000 } ] }, { "name": "Asia/Irkutsk", "rules": [ { "e": 1224957600000, "s": 1206813600000 }, { "e": 1256407200000, "s": 1238263200000 }, { "e": 1288461600000, "s": 1269712800000 }, false, false, false, false ] }, { "name": "Asia/Jerusalem", "rules": [ { "e": 1223161200000, "s": 1206662400000 }, { "e": 1254006000000, "s": 1238112000000 }, { "e": 1284246000000, "s": 1269561600000 }, { "e": 1317510000000, "s": 1301616000000 }, { "e": 1348354800000, "s": 1333065600000 }, { "e": 1382828400000, "s": 1364515200000 }, { "e": 1414278000000, "s": 1395964800000 } ] }, { "name": "Asia/Kamchatka", "rules": [ { "e": 1224943200000, "s": 1206799200000 }, { "e": 1256392800000, "s": 1238248800000 }, { "e": 1288450800000, "s": 1269698400000 }, false, false, false, false ] }, { "name": "Asia/Krasnoyarsk", "rules": [ { "e": 1224961200000, "s": 1206817200000 }, { "e": 1256410800000, "s": 1238266800000 }, { "e": 1288465200000, "s": 1269716400000 }, false, false, false, false ] }, { "name": "Asia/Omsk", "rules": [ { "e": 1224964800000, "s": 1206820800000 }, { "e": 1256414400000, "s": 1238270400000 }, { "e": 1288468800000, "s": 1269720000000 }, false, false, false, false ] }, { "name": "Asia/Vladivostok", "rules": [ { "e": 1224950400000, "s": 1206806400000 }, { "e": 1256400000000, "s": 1238256000000 }, { "e": 1288454400000, "s": 1269705600000 }, false, false, false, false ] }, { "name": "Asia/Yakutsk", "rules": [ { "e": 1224954000000, "s": 1206810000000 }, { "e": 1256403600000, "s": 1238259600000 }, { "e": 1288458000000, "s": 1269709200000 }, false, false, false, false ] }, { "name": "Asia/Yekaterinburg", "rules": [ { "e": 1224968400000, "s": 1206824400000 }, { "e": 1256418000000, "s": 1238274000000 }, { "e": 1288472400000, "s": 1269723600000 }, false, false, false, false ] }, { "name": "Asia/Yerevan", "rules": [ { "e": 1224972000000, "s": 1206828000000 }, { "e": 1256421600000, "s": 1238277600000 }, { "e": 1288476000000, "s": 1269727200000 }, { "e": 1319925600000, "s": 1301176800000 }, false, false, false ] }, { "name": "Australia/Lord_Howe", "rules": [ { "e": 1207407600000, "s": 1223134200000 }, { "e": 1238857200000, "s": 1254583800000 }, { "e": 1270306800000, "s": 1286033400000 }, { "e": 1301756400000, "s": 1317483000000 }, { "e": 1333206000000, "s": 1349537400000 }, { "e": 1365260400000, "s": 1380987000000 }, { "e": 1396710000000, "s": 1412436600000 } ] }, { "name": "Australia/Perth", "rules": [ { "e": 1206813600000, "s": 1224957600000 }, false, false, false, false, false, false ] }, { "name": "Europe/Helsinki", "rules": [ { "e": 1224982800000, "s": 1206838800000 }, { "e": 1256432400000, "s": 1238288400000 }, { "e": 1288486800000, "s": 1269738000000 }, { "e": 1319936400000, "s": 1301187600000 }, { "e": 1351386000000, "s": 1332637200000 }, { "e": 1382835600000, "s": 1364691600000 }, { "e": 1414285200000, "s": 1396141200000 } ] }, { "name": "Europe/Minsk", "rules": [ { "e": 1224979200000, "s": 1206835200000 }, { "e": 1256428800000, "s": 1238284800000 }, { "e": 1288483200000, "s": 1269734400000 }, false, false, false, false ] }, { "name": "Europe/Moscow", "rules": [ { "e": 1224975600000, "s": 1206831600000 }, { "e": 1256425200000, "s": 1238281200000 }, { "e": 1288479600000, "s": 1269730800000 }, false, false, false, false ] }, { "name": "Pacific/Apia", "rules": [ false, false, false, { "e": 1301752800000, "s": 1316872800000 }, { "e": 1333202400000, "s": 1348927200000 }, { "e": 1365256800000, "s": 1380376800000 }, { "e": 1396706400000, "s": 1411826400000 } ] }, { "name": "Pacific/Fiji", "rules": [ false, false, { "e": 1269698400000, "s": 1287842400000 }, { "e": 1327154400000, "s": 1319292000000 }, { "e": 1358604000000, "s": 1350741600000 }, { "e": 1390050000000, "s": 1382796000000 }, { "e": 1421503200000, "s": 1414850400000 } ] }, { "name": "Europe/London", "rules": [ { "e": 1224982800000, "s": 1206838800000 }, { "e": 1256432400000, "s": 1238288400000 }, { "e": 1288486800000, "s": 1269738000000 }, { "e": 1319936400000, "s": 1301187600000 }, { "e": 1351386000000, "s": 1332637200000 }, { "e": 1382835600000, "s": 1364691600000 }, { "e": 1414285200000, "s": 1396141200000 } ] } ] }; if ( true && typeof module.exports !== 'undefined') { module.exports = jstz; } else if (( true && __webpack_require__.amdD !== null) && (__webpack_require__.amdO != null)) { !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { return jstz; }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else { if (typeof root === 'undefined') { window.jstz = jstz; } else { root.jstz = jstz; } } }()); /***/ }), /***/ "./node_modules/jstz/index.js": /*!************************************!*\ !*** ./node_modules/jstz/index.js ***! \************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { module.exports = __webpack_require__(/*! ./dist/jstz.js */ "./node_modules/jstz/dist/jstz.js"); /***/ }), /***/ "./node_modules/linkify-string/dist/linkify-string.es.js": /*!***************************************************************!*\ !*** ./node_modules/linkify-string/dist/linkify-string.es.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ linkifyStr) /* harmony export */ }); /* harmony import */ var linkifyjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! linkifyjs */ "./node_modules/linkifyjs/dist/linkify.es.js"); /** Convert strings of text into linkable HTML text */ function escapeText(text) { return text.replace(/&/g, '&').replace(//g, '>'); } function escapeAttr(href) { return href.replace(/"/g, '"'); } function attributesToString(attributes) { var result = []; for (var attr in attributes) { var val = attributes[attr] + ''; result.push(attr + "=\"" + escapeAttr(val) + "\""); } return result.join(' '); } function defaultRender(_ref) { var tagName = _ref.tagName, attributes = _ref.attributes, content = _ref.content; return "<" + tagName + " " + attributesToString(attributes) + ">" + escapeText(content) + ""; } /** * Convert a plan text string to an HTML string with links. Expects that the * given strings does not contain any HTML entities. Use the linkify-html * interface if you need to parse HTML entities. * * @param {string} str string to linkify * @param {import('linkifyjs').Opts} [opts] overridable options * @returns {string} */ function linkifyStr(str, opts) { if (opts === void 0) { opts = {}; } opts = new linkifyjs__WEBPACK_IMPORTED_MODULE_0__.Options(opts, defaultRender); var tokens = (0,linkifyjs__WEBPACK_IMPORTED_MODULE_0__.tokenize)(str); var result = []; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (token.t === 'nl' && opts.get('nl2br')) { result.push('
\n'); } else if (!token.isLink || !opts.check(token)) { result.push(escapeText(token.toString())); } else { result.push(opts.render(token)); } } return result.join(''); } if (!String.prototype.linkify) { Object.defineProperty(String.prototype, 'linkify', { writable: false, value: function linkify(options) { return linkifyStr(this, options); } }); } /***/ }), /***/ "./node_modules/linkifyjs/dist/linkify.es.js": /*!***************************************************!*\ !*** ./node_modules/linkifyjs/dist/linkify.es.js ***! \***************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ MultiToken: () => (/* binding */ MultiToken), /* harmony export */ Options: () => (/* binding */ Options), /* harmony export */ State: () => (/* binding */ State), /* harmony export */ createTokenClass: () => (/* binding */ createTokenClass), /* harmony export */ find: () => (/* binding */ find), /* harmony export */ init: () => (/* binding */ init), /* harmony export */ multi: () => (/* binding */ multi), /* harmony export */ options: () => (/* binding */ options), /* harmony export */ regexp: () => (/* binding */ regexp), /* harmony export */ registerCustomProtocol: () => (/* binding */ registerCustomProtocol), /* harmony export */ registerPlugin: () => (/* binding */ registerPlugin), /* harmony export */ registerTokenPlugin: () => (/* binding */ registerTokenPlugin), /* harmony export */ reset: () => (/* binding */ reset), /* harmony export */ stringToArray: () => (/* binding */ stringToArray), /* harmony export */ test: () => (/* binding */ test), /* harmony export */ tokenize: () => (/* binding */ tokenize) /* harmony export */ }); // THIS FILE IS AUTOMATICALLY GENERATED DO NOT EDIT DIRECTLY // See update-tlds.js for encoding/decoding format // https://data.iana.org/TLD/tlds-alpha-by-domain.txt const encodedTlds = 'aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4vianca6w0s2x0a2z0ure5ba0by2idu3namex3narepublic11d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2ntley5rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0cast4mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dabur3d1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0ardian6cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6logistics9properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3ncaster6d0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2psy3ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2tura4vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9dnavy5lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0america6xi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0a1b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp2w2ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4finity6ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2'; // Internationalized domain names containing non-ASCII const encodedUtlds = 'ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2'; /** * @template A * @template B * @param {A} target * @param {B} properties * @return {A & B} */ const assign = (target, properties) => { for (const key in properties) { target[key] = properties[key]; } return target; }; /** * Finite State Machine generation utilities */ /** * @template T * @typedef {{ [group: string]: T[] }} Collections */ /** * @typedef {{ [group: string]: true }} Flags */ // Keys in scanner Collections instances const numeric = 'numeric'; const ascii = 'ascii'; const alpha = 'alpha'; const asciinumeric = 'asciinumeric'; const alphanumeric = 'alphanumeric'; const domain = 'domain'; const emoji = 'emoji'; const scheme = 'scheme'; const slashscheme = 'slashscheme'; const whitespace = 'whitespace'; /** * @template T * @param {string} name * @param {Collections} groups to register in * @returns {T[]} Current list of tokens in the given collection */ function registerGroup(name, groups) { if (!(name in groups)) { groups[name] = []; } return groups[name]; } /** * @template T * @param {T} t token to add * @param {Collections} groups * @param {Flags} flags */ function addToGroups(t, flags, groups) { if (flags[numeric]) { flags[asciinumeric] = true; flags[alphanumeric] = true; } if (flags[ascii]) { flags[asciinumeric] = true; flags[alpha] = true; } if (flags[asciinumeric]) { flags[alphanumeric] = true; } if (flags[alpha]) { flags[alphanumeric] = true; } if (flags[alphanumeric]) { flags[domain] = true; } if (flags[emoji]) { flags[domain] = true; } for (const k in flags) { const group = registerGroup(k, groups); if (group.indexOf(t) < 0) { group.push(t); } } } /** * @template T * @param {T} t token to check * @param {Collections} groups * @returns {Flags} group flags that contain this token */ function flagsForToken(t, groups) { const result = {}; for (const c in groups) { if (groups[c].indexOf(t) >= 0) { result[c] = true; } } return result; } /** * @template T * @typedef {null | T } Transition */ /** * Define a basic state machine state. j is the list of character transitions, * jr is the list of regex-match transitions, jd is the default state to * transition to t is the accepting token type, if any. If this is the terminal * state, then it does not emit a token. * * The template type T represents the type of the token this state accepts. This * should be a string (such as of the token exports in `text.js`) or a * MultiToken subclass (from `multi.js`) * * @template T * @param {T} [token] Token that this state emits */ function State(token) { if (token === void 0) { token = null; } // this.n = null; // DEBUG: State name /** @type {{ [input: string]: State }} j */ this.j = {}; // IMPLEMENTATION 1 // this.j = []; // IMPLEMENTATION 2 /** @type {[RegExp, State][]} jr */ this.jr = []; /** @type {?State} jd */ this.jd = null; /** @type {?T} t */ this.t = token; } /** * Scanner token groups * @type Collections */ State.groups = {}; State.prototype = { accepts() { return !!this.t; }, /** * Follow an existing transition from the given input to the next state. * Does not mutate. * @param {string} input character or token type to transition on * @returns {?State} the next state, if any */ go(input) { const state = this; const nextState = state.j[input]; if (nextState) { return nextState; } for (let i = 0; i < state.jr.length; i++) { const regex = state.jr[i][0]; const nextState = state.jr[i][1]; // note: might be empty to prevent default jump if (nextState && regex.test(input)) { return nextState; } } // Nowhere left to jump! Return default, if any return state.jd; }, /** * Whether the state has a transition for the given input. Set the second * argument to true to only look for an exact match (and not a default or * regular-expression-based transition) * @param {string} input * @param {boolean} exactOnly */ has(input, exactOnly) { if (exactOnly === void 0) { exactOnly = false; } return exactOnly ? input in this.j : !!this.go(input); }, /** * Short for "transition all"; create a transition from the array of items * in the given list to the same final resulting state. * @param {string | string[]} inputs Group of inputs to transition on * @param {Transition | State} [next] Transition options * @param {Flags} [flags] Collections flags to add token to * @param {Collections} [groups] Master list of token groups */ ta(inputs, next, flags, groups) { for (let i = 0; i < inputs.length; i++) { this.tt(inputs[i], next, flags, groups); } }, /** * Short for "take regexp transition"; defines a transition for this state * when it encounters a token which matches the given regular expression * @param {RegExp} regexp Regular expression transition (populate first) * @param {T | State} [next] Transition options * @param {Flags} [flags] Collections flags to add token to * @param {Collections} [groups] Master list of token groups * @returns {State} taken after the given input */ tr(regexp, next, flags, groups) { groups = groups || State.groups; let nextState; if (next && next.j) { nextState = next; } else { // Token with maybe token groups nextState = new State(next); if (flags && groups) { addToGroups(next, flags, groups); } } this.jr.push([regexp, nextState]); return nextState; }, /** * Short for "take transitions", will take as many sequential transitions as * the length of the given input and returns the * resulting final state. * @param {string | string[]} input * @param {T | State} [next] Transition options * @param {Flags} [flags] Collections flags to add token to * @param {Collections} [groups] Master list of token groups * @returns {State} taken after the given input */ ts(input, next, flags, groups) { let state = this; const len = input.length; if (!len) { return state; } for (let i = 0; i < len - 1; i++) { state = state.tt(input[i]); } return state.tt(input[len - 1], next, flags, groups); }, /** * Short for "take transition", this is a method for building/working with * state machines. * * If a state already exists for the given input, returns it. * * If a token is specified, that state will emit that token when reached by * the linkify engine. * * If no state exists, it will be initialized with some default transitions * that resemble existing default transitions. * * If a state is given for the second argument, that state will be * transitioned to on the given input regardless of what that input * previously did. * * Specify a token group flags to define groups that this token belongs to. * The token will be added to corresponding entires in the given groups * object. * * @param {string} input character, token type to transition on * @param {T | State} [next] Transition options * @param {Flags} [flags] Collections flags to add token to * @param {Collections} [groups] Master list of groups * @returns {State} taken after the given input */ tt(input, next, flags, groups) { groups = groups || State.groups; const state = this; // Check if existing state given, just a basic transition if (next && next.j) { state.j[input] = next; return next; } const t = next; // Take the transition with the usual default mechanisms and use that as // a template for creating the next state let nextState, templateState = state.go(input); if (templateState) { nextState = new State(); assign(nextState.j, templateState.j); nextState.jr.push.apply(nextState.jr, templateState.jr); nextState.jd = templateState.jd; nextState.t = templateState.t; } else { nextState = new State(); } if (t) { // Ensure newly token is in the same groups as the old token if (groups) { if (nextState.t && typeof nextState.t === 'string') { const allFlags = assign(flagsForToken(nextState.t, groups), flags); addToGroups(t, allFlags, groups); } else if (flags) { addToGroups(t, flags, groups); } } nextState.t = t; // overwrite anything that was previously there } state.j[input] = nextState; return nextState; } }; // Helper functions to improve minification (not exported outside linkifyjs module) /** * @template T * @param {State} state * @param {string | string[]} input * @param {Flags} [flags] * @param {Collections} [groups] */ const ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups); /** * @template T * @param {State} state * @param {RegExp} regexp * @param {T | State} [next] * @param {Flags} [flags] * @param {Collections} [groups] */ const tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups); /** * @template T * @param {State} state * @param {string | string[]} input * @param {T | State} [next] * @param {Flags} [flags] * @param {Collections} [groups] */ const ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups); /** * @template T * @param {State} state * @param {string} input * @param {T | State} [next] * @param {Collections} [groups] * @param {Flags} [flags] */ const tt = (state, input, next, flags, groups) => state.tt(input, next, flags, groups); /****************************************************************************** Text Tokens Identifiers for token outputs from the regexp scanner ******************************************************************************/ // A valid web domain token const WORD = 'WORD'; // only contains a-z const UWORD = 'UWORD'; // contains letters other than a-z, used for IDN // Special case of word const LOCALHOST = 'LOCALHOST'; // Valid top-level domain, special case of WORD (see tlds.js) const TLD = 'TLD'; // Valid IDN TLD, special case of UWORD (see tlds.js) const UTLD = 'UTLD'; // The scheme portion of a web URI protocol. Supported types include: `mailto`, // `file`, and user-defined custom protocols. Limited to schemes that contain // only letters const SCHEME = 'SCHEME'; // Similar to SCHEME, except makes distinction for schemes that must always be // followed by `://`, not just `:`. Supported types include `http`, `https`, // `ftp`, `ftps` const SLASH_SCHEME = 'SLASH_SCHEME'; // Any sequence of digits 0-9 const NUM = 'NUM'; // Any number of consecutive whitespace characters that are not newline const WS = 'WS'; // New line (unix style) const NL$1 = 'NL'; // \n // Opening/closing bracket classes // TODO: Rename OPEN -> LEFT and CLOSE -> RIGHT in v5 to fit with Unicode names // Also rename angle brackes to LESSTHAN and GREATER THAN const OPENBRACE = 'OPENBRACE'; // { const CLOSEBRACE = 'CLOSEBRACE'; // } const OPENBRACKET = 'OPENBRACKET'; // [ const CLOSEBRACKET = 'CLOSEBRACKET'; // ] const OPENPAREN = 'OPENPAREN'; // ( const CLOSEPAREN = 'CLOSEPAREN'; // ) const OPENANGLEBRACKET = 'OPENANGLEBRACKET'; // < const CLOSEANGLEBRACKET = 'CLOSEANGLEBRACKET'; // > const FULLWIDTHLEFTPAREN = 'FULLWIDTHLEFTPAREN'; // ( const FULLWIDTHRIGHTPAREN = 'FULLWIDTHRIGHTPAREN'; // ) const LEFTCORNERBRACKET = 'LEFTCORNERBRACKET'; // 「 const RIGHTCORNERBRACKET = 'RIGHTCORNERBRACKET'; // 」 const LEFTWHITECORNERBRACKET = 'LEFTWHITECORNERBRACKET'; // 『 const RIGHTWHITECORNERBRACKET = 'RIGHTWHITECORNERBRACKET'; // 』 const FULLWIDTHLESSTHAN = 'FULLWIDTHLESSTHAN'; // < const FULLWIDTHGREATERTHAN = 'FULLWIDTHGREATERTHAN'; // > // Various symbols const AMPERSAND = 'AMPERSAND'; // & const APOSTROPHE = 'APOSTROPHE'; // ' const ASTERISK = 'ASTERISK'; // * const AT = 'AT'; // @ const BACKSLASH = 'BACKSLASH'; // \ const BACKTICK = 'BACKTICK'; // ` const CARET = 'CARET'; // ^ const COLON = 'COLON'; // : const COMMA = 'COMMA'; // , const DOLLAR = 'DOLLAR'; // $ const DOT = 'DOT'; // . const EQUALS = 'EQUALS'; // = const EXCLAMATION = 'EXCLAMATION'; // ! const HYPHEN = 'HYPHEN'; // - const PERCENT = 'PERCENT'; // % const PIPE = 'PIPE'; // | const PLUS = 'PLUS'; // + const POUND = 'POUND'; // # const QUERY = 'QUERY'; // ? const QUOTE = 'QUOTE'; // " const SEMI = 'SEMI'; // ; const SLASH = 'SLASH'; // / const TILDE = 'TILDE'; // ~ const UNDERSCORE = 'UNDERSCORE'; // _ // Emoji symbol const EMOJI$1 = 'EMOJI'; // Default token - anything that is not one of the above const SYM = 'SYM'; var tk = /*#__PURE__*/Object.freeze({ __proto__: null, WORD: WORD, UWORD: UWORD, LOCALHOST: LOCALHOST, TLD: TLD, UTLD: UTLD, SCHEME: SCHEME, SLASH_SCHEME: SLASH_SCHEME, NUM: NUM, WS: WS, NL: NL$1, OPENBRACE: OPENBRACE, CLOSEBRACE: CLOSEBRACE, OPENBRACKET: OPENBRACKET, CLOSEBRACKET: CLOSEBRACKET, OPENPAREN: OPENPAREN, CLOSEPAREN: CLOSEPAREN, OPENANGLEBRACKET: OPENANGLEBRACKET, CLOSEANGLEBRACKET: CLOSEANGLEBRACKET, FULLWIDTHLEFTPAREN: FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN: FULLWIDTHRIGHTPAREN, LEFTCORNERBRACKET: LEFTCORNERBRACKET, RIGHTCORNERBRACKET: RIGHTCORNERBRACKET, LEFTWHITECORNERBRACKET: LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET: RIGHTWHITECORNERBRACKET, FULLWIDTHLESSTHAN: FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN: FULLWIDTHGREATERTHAN, AMPERSAND: AMPERSAND, APOSTROPHE: APOSTROPHE, ASTERISK: ASTERISK, AT: AT, BACKSLASH: BACKSLASH, BACKTICK: BACKTICK, CARET: CARET, COLON: COLON, COMMA: COMMA, DOLLAR: DOLLAR, DOT: DOT, EQUALS: EQUALS, EXCLAMATION: EXCLAMATION, HYPHEN: HYPHEN, PERCENT: PERCENT, PIPE: PIPE, PLUS: PLUS, POUND: POUND, QUERY: QUERY, QUOTE: QUOTE, SEMI: SEMI, SLASH: SLASH, TILDE: TILDE, UNDERSCORE: UNDERSCORE, EMOJI: EMOJI$1, SYM: SYM }); // Note that these two Unicode ones expand into a really big one with Babel const ASCII_LETTER = /[a-z]/; const LETTER = /\p{L}/u; // Any Unicode character with letter data type const EMOJI = /\p{Emoji}/u; // Any Unicode emoji character const EMOJI_VARIATION$1 = /\ufe0f/; const DIGIT = /\d/; const SPACE = /\s/; var regexp = /*#__PURE__*/Object.freeze({ __proto__: null, ASCII_LETTER: ASCII_LETTER, LETTER: LETTER, EMOJI: EMOJI, EMOJI_VARIATION: EMOJI_VARIATION$1, DIGIT: DIGIT, SPACE: SPACE }); /** The scanner provides an interface that takes a string of text as input, and outputs an array of tokens instances that can be used for easy URL parsing. */ const NL = '\n'; // New line character const EMOJI_VARIATION = '\ufe0f'; // Variation selector, follows heart and others const EMOJI_JOINER = '\u200d'; // zero-width joiner let tlds = null, utlds = null; // don't change so only have to be computed once /** * Scanner output token: * - `t` is the token name (e.g., 'NUM', 'EMOJI', 'TLD') * - `v` is the value of the token (e.g., '123', '❤️', 'com') * - `s` is the start index of the token in the original string * - `e` is the end index of the token in the original string * @typedef {{t: string, v: string, s: number, e: number}} Token */ /** * @template T * @typedef {{ [collection: string]: T[] }} Collections */ /** * Initialize the scanner character-based state machine for the given start * state * @param {[string, boolean][]} customSchemes List of custom schemes, where each * item is a length-2 tuple with the first element set to the string scheme, and * the second element set to `true` if the `://` after the scheme is optional */ function init$2(customSchemes) { if (customSchemes === void 0) { customSchemes = []; } // Frequently used states (name argument removed during minification) /** @type Collections */ const groups = {}; // of tokens State.groups = groups; /** @type State */ const Start = new State(); if (tlds == null) { tlds = decodeTlds(encodedTlds); } if (utlds == null) { utlds = decodeTlds(encodedUtlds); } // States for special URL symbols that accept immediately after start tt(Start, "'", APOSTROPHE); tt(Start, '{', OPENBRACE); tt(Start, '}', CLOSEBRACE); tt(Start, '[', OPENBRACKET); tt(Start, ']', CLOSEBRACKET); tt(Start, '(', OPENPAREN); tt(Start, ')', CLOSEPAREN); tt(Start, '<', OPENANGLEBRACKET); tt(Start, '>', CLOSEANGLEBRACKET); tt(Start, '(', FULLWIDTHLEFTPAREN); tt(Start, ')', FULLWIDTHRIGHTPAREN); tt(Start, '「', LEFTCORNERBRACKET); tt(Start, '」', RIGHTCORNERBRACKET); tt(Start, '『', LEFTWHITECORNERBRACKET); tt(Start, '』', RIGHTWHITECORNERBRACKET); tt(Start, '<', FULLWIDTHLESSTHAN); tt(Start, '>', FULLWIDTHGREATERTHAN); tt(Start, '&', AMPERSAND); tt(Start, '*', ASTERISK); tt(Start, '@', AT); tt(Start, '`', BACKTICK); tt(Start, '^', CARET); tt(Start, ':', COLON); tt(Start, ',', COMMA); tt(Start, '$', DOLLAR); tt(Start, '.', DOT); tt(Start, '=', EQUALS); tt(Start, '!', EXCLAMATION); tt(Start, '-', HYPHEN); tt(Start, '%', PERCENT); tt(Start, '|', PIPE); tt(Start, '+', PLUS); tt(Start, '#', POUND); tt(Start, '?', QUERY); tt(Start, '"', QUOTE); tt(Start, '/', SLASH); tt(Start, ';', SEMI); tt(Start, '~', TILDE); tt(Start, '_', UNDERSCORE); tt(Start, '\\', BACKSLASH); const Num = tr(Start, DIGIT, NUM, { [numeric]: true }); tr(Num, DIGIT, Num); // State which emits a word token const Word = tr(Start, ASCII_LETTER, WORD, { [ascii]: true }); tr(Word, ASCII_LETTER, Word); // Same as previous, but specific to non-fsm.ascii alphabet words const UWord = tr(Start, LETTER, UWORD, { [alpha]: true }); tr(UWord, ASCII_LETTER); // Non-accepting tr(UWord, LETTER, UWord); // Whitespace jumps // Tokens of only non-newline whitespace are arbitrarily long // If any whitespace except newline, more whitespace! const Ws = tr(Start, SPACE, WS, { [whitespace]: true }); tt(Start, NL, NL$1, { [whitespace]: true }); tt(Ws, NL); // non-accepting state to avoid mixing whitespaces tr(Ws, SPACE, Ws); // Emoji tokens. They are not grouped by the scanner except in cases where a // zero-width joiner is present const Emoji = tr(Start, EMOJI, EMOJI$1, { [emoji]: true }); tr(Emoji, EMOJI, Emoji); tt(Emoji, EMOJI_VARIATION, Emoji); // tt(Start, EMOJI_VARIATION, Emoji); // This one is sketchy const EmojiJoiner = tt(Emoji, EMOJI_JOINER); tr(EmojiJoiner, EMOJI, Emoji); // tt(EmojiJoiner, EMOJI_VARIATION, Emoji); // also sketchy // Generates states for top-level domains // Note that this is most accurate when tlds are in alphabetical order const wordjr = [[ASCII_LETTER, Word]]; const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord]]; for (let i = 0; i < tlds.length; i++) { fastts(Start, tlds[i], TLD, WORD, wordjr); } for (let i = 0; i < utlds.length; i++) { fastts(Start, utlds[i], UTLD, UWORD, uwordjr); } addToGroups(TLD, { tld: true, ascii: true }, groups); addToGroups(UTLD, { utld: true, alpha: true }, groups); // Collect the states generated by different protocols. NOTE: If any new TLDs // get added that are also protocols, set the token to be the same as the // protocol to ensure parsing works as expected. fastts(Start, 'file', SCHEME, WORD, wordjr); fastts(Start, 'mailto', SCHEME, WORD, wordjr); fastts(Start, 'http', SLASH_SCHEME, WORD, wordjr); fastts(Start, 'https', SLASH_SCHEME, WORD, wordjr); fastts(Start, 'ftp', SLASH_SCHEME, WORD, wordjr); fastts(Start, 'ftps', SLASH_SCHEME, WORD, wordjr); addToGroups(SCHEME, { scheme: true, ascii: true }, groups); addToGroups(SLASH_SCHEME, { slashscheme: true, ascii: true }, groups); // Register custom schemes. Assumes each scheme is asciinumeric with hyphens customSchemes = customSchemes.sort((a, b) => a[0] > b[0] ? 1 : -1); for (let i = 0; i < customSchemes.length; i++) { const sch = customSchemes[i][0]; const optionalSlashSlash = customSchemes[i][1]; const flags = optionalSlashSlash ? { [scheme]: true } : { [slashscheme]: true }; if (sch.indexOf('-') >= 0) { flags[domain] = true; } else if (!ASCII_LETTER.test(sch)) { flags[numeric] = true; // numbers only } else if (DIGIT.test(sch)) { flags[asciinumeric] = true; } else { flags[ascii] = true; } ts(Start, sch, sch, flags); } // Localhost token ts(Start, 'localhost', LOCALHOST, { ascii: true }); // Set default transition for start state (some symbol) Start.jd = new State(SYM); return { start: Start, tokens: assign({ groups }, tk) }; } /** Given a string, returns an array of TOKEN instances representing the composition of that string. @method run @param {State} start scanner starting state @param {string} str input string to scan @return {Token[]} list of tokens, each with a type and value */ function run$1(start, str) { // State machine is not case sensitive, so input is tokenized in lowercased // form (still returns regular case). Uses selective `toLowerCase` because // lowercasing the entire string causes the length and character position to // vary in some non-English strings with V8-based runtimes. const iterable = stringToArray(str.replace(/[A-Z]/g, c => c.toLowerCase())); const charCount = iterable.length; // <= len if there are emojis, etc const tokens = []; // return value // cursor through the string itself, accounting for characters that have // width with length 2 such as emojis let cursor = 0; // Cursor through the array-representation of the string let charCursor = 0; // Tokenize the string while (charCursor < charCount) { let state = start; let nextState = null; let tokenLength = 0; let latestAccepting = null; let sinceAccepts = -1; let charsSinceAccepts = -1; while (charCursor < charCount && (nextState = state.go(iterable[charCursor]))) { state = nextState; // Keep track of the latest accepting state if (state.accepts()) { sinceAccepts = 0; charsSinceAccepts = 0; latestAccepting = state; } else if (sinceAccepts >= 0) { sinceAccepts += iterable[charCursor].length; charsSinceAccepts++; } tokenLength += iterable[charCursor].length; cursor += iterable[charCursor].length; charCursor++; } // Roll back to the latest accepting state cursor -= sinceAccepts; charCursor -= charsSinceAccepts; tokenLength -= sinceAccepts; // No more jumps, just make a new token from the last accepting one tokens.push({ t: latestAccepting.t, // token type/name v: str.slice(cursor - tokenLength, cursor), // string value s: cursor - tokenLength, // start index e: cursor // end index (excluding) }); } return tokens; } /** * Convert a String to an Array of characters, taking into account that some * characters like emojis take up two string indexes. * * Adapted from core-js (MIT license) * https://github.com/zloirock/core-js/blob/2d69cf5f99ab3ea3463c395df81e5a15b68f49d9/packages/core-js/internals/string-multibyte.js * * @function stringToArray * @param {string} str * @returns {string[]} */ function stringToArray(str) { const result = []; const len = str.length; let index = 0; while (index < len) { let first = str.charCodeAt(index); let second; let char = first < 0xd800 || first > 0xdbff || index + 1 === len || (second = str.charCodeAt(index + 1)) < 0xdc00 || second > 0xdfff ? str[index] // single character : str.slice(index, index + 2); // two-index characters result.push(char); index += char.length; } return result; } /** * Fast version of ts function for when transition defaults are well known * @param {State} state * @param {string} input * @param {string} t * @param {string} defaultt * @param {[RegExp, State][]} jr * @returns {State} */ function fastts(state, input, t, defaultt, jr) { let next; const len = input.length; for (let i = 0; i < len - 1; i++) { const char = input[i]; if (state.j[char]) { next = state.j[char]; } else { next = new State(defaultt); next.jr = jr.slice(); state.j[char] = next; } state = next; } next = new State(t); next.jr = jr.slice(); state.j[input[len - 1]] = next; return next; } /** * Converts a string of Top-Level Domain names encoded in update-tlds.js back * into a list of strings. * @param {str} encoded encoded TLDs string * @returns {str[]} original TLDs list */ function decodeTlds(encoded) { const words = []; const stack = []; let i = 0; let digits = '0123456789'; while (i < encoded.length) { let popDigitCount = 0; while (digits.indexOf(encoded[i + popDigitCount]) >= 0) { popDigitCount++; // encountered some digits, have to pop to go one level up trie } if (popDigitCount > 0) { words.push(stack.join('')); // whatever preceded the pop digits must be a word for (let popCount = parseInt(encoded.substring(i, i + popDigitCount), 10); popCount > 0; popCount--) { stack.pop(); } i += popDigitCount; } else { stack.push(encoded[i]); // drop down a level into the trie i++; } } return words; } /** * An object where each key is a valid DOM Event Name such as `click` or `focus` * and each value is an event handler function. * * https://developer.mozilla.org/en-US/docs/Web/API/Element#events * @typedef {?{ [event: string]: Function }} EventListeners */ /** * All formatted properties required to render a link, including `tagName`, * `attributes`, `content` and `eventListeners`. * @typedef {{ tagName: any, attributes: {[attr: string]: any}, content: string, * eventListeners: EventListeners }} IntermediateRepresentation */ /** * Specify either an object described by the template type `O` or a function. * * The function takes a string value (usually the link's href attribute), the * link type (`'url'`, `'hashtag`', etc.) and an internal token representation * of the link. It should return an object of the template type `O` * @template O * @typedef {O | ((value: string, type: string, token: MultiToken) => O)} OptObj */ /** * Specify either a function described by template type `F` or an object. * * Each key in the object should be a link type (`'url'`, `'hashtag`', etc.). Each * value should be a function with template type `F` that is called when the * corresponding link type is encountered. * @template F * @typedef {F | { [type: string]: F}} OptFn */ /** * Specify either a value with template type `V`, a function that returns `V` or * an object where each value resolves to `V`. * * The function takes a string value (usually the link's href attribute), the * link type (`'url'`, `'hashtag`', etc.) and an internal token representation * of the link. It should return an object of the template type `V` * * For the object, each key should be a link type (`'url'`, `'hashtag`', etc.). * Each value should either have type `V` or a function that returns V. This * function similarly takes a string value and a token. * * Example valid types for `Opt`: * * ```js * 'hello' * (value, type, token) => 'world' * { url: 'hello', email: (value, token) => 'world'} * ``` * @template V * @typedef {V | ((value: string, type: string, token: MultiToken) => V) | { [type: string]: V | ((value: string, token: MultiToken) => V) }} Opt */ /** * See available options: https://linkify.js.org/docs/options.html * @typedef {{ * defaultProtocol?: string, * events?: OptObj, * format?: Opt, * formatHref?: Opt, * nl2br?: boolean, * tagName?: Opt, * target?: Opt, * rel?: Opt, * validate?: Opt, * truncate?: Opt, * className?: Opt, * attributes?: OptObj<({ [attr: string]: any })>, * ignoreTags?: string[], * render?: OptFn<((ir: IntermediateRepresentation) => any)> * }} Opts */ /** * @type Required */ const defaults = { defaultProtocol: 'http', events: null, format: noop, formatHref: noop, nl2br: false, tagName: 'a', target: null, rel: null, validate: true, truncate: Infinity, className: null, attributes: null, ignoreTags: [], render: null }; /** * Utility class for linkify interfaces to apply specified * {@link Opts formatting and rendering options}. * * @param {Opts | Options} [opts] Option value overrides. * @param {(ir: IntermediateRepresentation) => any} [defaultRender] (For * internal use) default render function that determines how to generate an * HTML element based on a link token's derived tagName, attributes and HTML. * Similar to render option */ function Options(opts, defaultRender) { if (defaultRender === void 0) { defaultRender = null; } let o = assign({}, defaults); if (opts) { o = assign(o, opts instanceof Options ? opts.o : opts); } // Ensure all ignored tags are uppercase const ignoredTags = o.ignoreTags; const uppercaseIgnoredTags = []; for (let i = 0; i < ignoredTags.length; i++) { uppercaseIgnoredTags.push(ignoredTags[i].toUpperCase()); } /** @protected */ this.o = o; if (defaultRender) { this.defaultRender = defaultRender; } this.ignoreTags = uppercaseIgnoredTags; } Options.prototype = { o: defaults, /** * @type string[] */ ignoreTags: [], /** * @param {IntermediateRepresentation} ir * @returns {any} */ defaultRender(ir) { return ir; }, /** * Returns true or false based on whether a token should be displayed as a * link based on the user options. * @param {MultiToken} token * @returns {boolean} */ check(token) { return this.get('validate', token.toString(), token); }, // Private methods /** * Resolve an option's value based on the value of the option and the given * params. If operator and token are specified and the target option is * callable, automatically calls the function with the given argument. * @template {keyof Opts} K * @param {K} key Name of option to use * @param {string} [operator] will be passed to the target option if it's a * function. If not specified, RAW function value gets returned * @param {MultiToken} [token] The token from linkify.tokenize * @returns {Opts[K] | any} */ get(key, operator, token) { const isCallable = operator != null; let option = this.o[key]; if (!option) { return option; } if (typeof option === 'object') { option = token.t in option ? option[token.t] : defaults[key]; if (typeof option === 'function' && isCallable) { option = option(operator, token); } } else if (typeof option === 'function' && isCallable) { option = option(operator, token.t, token); } return option; }, /** * @template {keyof Opts} L * @param {L} key Name of options object to use * @param {string} [operator] * @param {MultiToken} [token] * @returns {Opts[L] | any} */ getObj(key, operator, token) { let obj = this.o[key]; if (typeof obj === 'function' && operator != null) { obj = obj(operator, token.t, token); } return obj; }, /** * Convert the given token to a rendered element that may be added to the * calling-interface's DOM * @param {MultiToken} token Token to render to an HTML element * @returns {any} Render result; e.g., HTML string, DOM element, React * Component, etc. */ render(token) { const ir = token.render(this); // intermediate representation const renderFn = this.get('render', null, token) || this.defaultRender; return renderFn(ir, token.t, token); } }; function noop(val) { return val; } var options = /*#__PURE__*/Object.freeze({ __proto__: null, defaults: defaults, Options: Options, assign: assign }); /****************************************************************************** Multi-Tokens Tokens composed of arrays of TextTokens ******************************************************************************/ /** * @param {string} value * @param {Token[]} tokens */ function MultiToken(value, tokens) { this.t = 'token'; this.v = value; this.tk = tokens; } /** * Abstract class used for manufacturing tokens of text tokens. That is rather * than the value for a token being a small string of text, it's value an array * of text tokens. * * Used for grouping together URLs, emails, hashtags, and other potential * creations. * @class MultiToken * @property {string} t * @property {string} v * @property {Token[]} tk * @abstract */ MultiToken.prototype = { isLink: false, /** * Return the string this token represents. * @return {string} */ toString() { return this.v; }, /** * What should the value for this token be in the `href` HTML attribute? * Returns the `.toString` value by default. * @param {string} [scheme] * @return {string} */ toHref(scheme) { return this.toString(); }, /** * @param {Options} options Formatting options * @returns {string} */ toFormattedString(options) { const val = this.toString(); const truncate = options.get('truncate', val, this); const formatted = options.get('format', val, this); return truncate && formatted.length > truncate ? formatted.substring(0, truncate) + '…' : formatted; }, /** * * @param {Options} options * @returns {string} */ toFormattedHref(options) { return options.get('formatHref', this.toHref(options.get('defaultProtocol')), this); }, /** * The start index of this token in the original input string * @returns {number} */ startIndex() { return this.tk[0].s; }, /** * The end index of this token in the original input string (up to this * index but not including it) * @returns {number} */ endIndex() { return this.tk[this.tk.length - 1].e; }, /** Returns an object of relevant values for this token, which includes keys * type - Kind of token ('url', 'email', etc.) * value - Original text * href - The value that should be added to the anchor tag's href attribute @method toObject @param {string} [protocol] `'http'` by default */ toObject(protocol) { if (protocol === void 0) { protocol = defaults.defaultProtocol; } return { type: this.t, value: this.toString(), isLink: this.isLink, href: this.toHref(protocol), start: this.startIndex(), end: this.endIndex() }; }, /** * * @param {Options} options Formatting option */ toFormattedObject(options) { return { type: this.t, value: this.toFormattedString(options), isLink: this.isLink, href: this.toFormattedHref(options), start: this.startIndex(), end: this.endIndex() }; }, /** * Whether this token should be rendered as a link according to the given options * @param {Options} options * @returns {boolean} */ validate(options) { return options.get('validate', this.toString(), this); }, /** * Return an object that represents how this link should be rendered. * @param {Options} options Formattinng options */ render(options) { const token = this; const href = this.toHref(options.get('defaultProtocol')); const formattedHref = options.get('formatHref', href, this); const tagName = options.get('tagName', href, token); const content = this.toFormattedString(options); const attributes = {}; const className = options.get('className', href, token); const target = options.get('target', href, token); const rel = options.get('rel', href, token); const attrs = options.getObj('attributes', href, token); const eventListeners = options.getObj('events', href, token); attributes.href = formattedHref; if (className) { attributes.class = className; } if (target) { attributes.target = target; } if (rel) { attributes.rel = rel; } if (attrs) { assign(attributes, attrs); } return { tagName, attributes, content, eventListeners }; } }; /** * Create a new token that can be emitted by the parser state machine * @param {string} type readable type of the token * @param {object} props properties to assign or override, including isLink = true or false * @returns {new (value: string, tokens: Token[]) => MultiToken} new token class */ function createTokenClass(type, props) { class Token extends MultiToken { constructor(value, tokens) { super(value, tokens); this.t = type; } } for (const p in props) { Token.prototype[p] = props[p]; } Token.t = type; return Token; } /** Represents a list of tokens making up a valid email address */ const Email = createTokenClass('email', { isLink: true, toHref() { return 'mailto:' + this.toString(); } }); /** Represents some plain text */ const Text = createTokenClass('text'); /** Multi-linebreak token - represents a line break @class Nl */ const Nl = createTokenClass('nl'); /** Represents a list of text tokens making up a valid URL @class Url */ const Url = createTokenClass('url', { isLink: true, /** Lowercases relevant parts of the domain and adds the protocol if required. Note that this will not escape unsafe HTML characters in the URL. @param {string} [scheme] default scheme (e.g., 'https') @return {string} the full href */ toHref(scheme) { if (scheme === void 0) { scheme = defaults.defaultProtocol; } // Check if already has a prefix scheme return this.hasProtocol() ? this.v : `${scheme}://${this.v}`; }, /** * Check whether this URL token has a protocol * @return {boolean} */ hasProtocol() { const tokens = this.tk; return tokens.length >= 2 && tokens[0].t !== LOCALHOST && tokens[1].t === COLON; } }); var multi = /*#__PURE__*/Object.freeze({ __proto__: null, MultiToken: MultiToken, Base: MultiToken, createTokenClass: createTokenClass, Email: Email, Text: Text, Nl: Nl, Url: Url }); /** Not exactly parser, more like the second-stage scanner (although we can theoretically hotswap the code here with a real parser in the future... but for a little URL-finding utility abstract syntax trees may be a little overkill). URL format: http://en.wikipedia.org/wiki/URI_scheme Email format: http://en.wikipedia.org/wiki/EmailAddress (links to RFC in reference) @module linkify @submodule parser @main run */ const makeState = arg => new State(arg); /** * Generate the parser multi token-based state machine * @param {{ groups: Collections }} tokens */ function init$1(_ref) { let { groups } = _ref; // Types of characters the URL can definitely end in const qsAccepting = groups.domain.concat([AMPERSAND, ASTERISK, AT, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, NUM, PERCENT, PIPE, PLUS, POUND, SLASH, SYM, TILDE, UNDERSCORE]); // Types of tokens that can follow a URL and be part of the query string // but cannot be the very last characters // Characters that cannot appear in the URL at all should be excluded const qsNonAccepting = [APOSTROPHE, COLON, COMMA, DOT, EXCLAMATION, QUERY, QUOTE, SEMI, OPENANGLEBRACKET, CLOSEANGLEBRACKET, OPENBRACE, CLOSEBRACE, CLOSEBRACKET, OPENBRACKET, OPENPAREN, CLOSEPAREN, FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN, LEFTCORNERBRACKET, RIGHTCORNERBRACKET, LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET, FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN]; // For addresses without the mailto prefix // Tokens allowed in the localpart of the email const localpartAccepting = [AMPERSAND, APOSTROPHE, ASTERISK, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, OPENBRACE, CLOSEBRACE, PERCENT, PIPE, PLUS, POUND, QUERY, SLASH, SYM, TILDE, UNDERSCORE]; // The universal starting state. /** * @type State */ const Start = makeState(); const Localpart = tt(Start, TILDE); // Local part of the email address ta(Localpart, localpartAccepting, Localpart); ta(Localpart, groups.domain, Localpart); const Domain = makeState(), Scheme = makeState(), SlashScheme = makeState(); ta(Start, groups.domain, Domain); // parsed string ends with a potential domain name (A) ta(Start, groups.scheme, Scheme); // e.g., 'mailto' ta(Start, groups.slashscheme, SlashScheme); // e.g., 'http' ta(Domain, localpartAccepting, Localpart); ta(Domain, groups.domain, Domain); const LocalpartAt = tt(Domain, AT); // Local part of the email address plus @ tt(Localpart, AT, LocalpartAt); // close to an email address now // Local part of an email address can be e.g. 'http' or 'mailto' tt(Scheme, AT, LocalpartAt); tt(SlashScheme, AT, LocalpartAt); const LocalpartDot = tt(Localpart, DOT); // Local part of the email address plus '.' (localpart cannot end in .) ta(LocalpartDot, localpartAccepting, Localpart); ta(LocalpartDot, groups.domain, Localpart); const EmailDomain = makeState(); ta(LocalpartAt, groups.domain, EmailDomain); // parsed string starts with local email info + @ with a potential domain name ta(EmailDomain, groups.domain, EmailDomain); const EmailDomainDot = tt(EmailDomain, DOT); // domain followed by DOT ta(EmailDomainDot, groups.domain, EmailDomain); const Email$1 = makeState(Email); // Possible email address (could have more tlds) ta(EmailDomainDot, groups.tld, Email$1); ta(EmailDomainDot, groups.utld, Email$1); tt(LocalpartAt, LOCALHOST, Email$1); // Hyphen can jump back to a domain name const EmailDomainHyphen = tt(EmailDomain, HYPHEN); // parsed string starts with local email info + @ with a potential domain name ta(EmailDomainHyphen, groups.domain, EmailDomain); ta(Email$1, groups.domain, EmailDomain); tt(Email$1, DOT, EmailDomainDot); tt(Email$1, HYPHEN, EmailDomainHyphen); // Final possible email states const EmailColon = tt(Email$1, COLON); // URL followed by colon (potential port number here) /*const EmailColonPort = */ ta(EmailColon, groups.numeric, Email); // URL followed by colon and port number // Account for dots and hyphens. Hyphens are usually parts of domain names // (but not TLDs) const DomainHyphen = tt(Domain, HYPHEN); // domain followed by hyphen const DomainDot = tt(Domain, DOT); // domain followed by DOT ta(DomainHyphen, groups.domain, Domain); ta(DomainDot, localpartAccepting, Localpart); ta(DomainDot, groups.domain, Domain); const DomainDotTld = makeState(Url); // Simplest possible URL with no query string ta(DomainDot, groups.tld, DomainDotTld); ta(DomainDot, groups.utld, DomainDotTld); ta(DomainDotTld, groups.domain, Domain); ta(DomainDotTld, localpartAccepting, Localpart); tt(DomainDotTld, DOT, DomainDot); tt(DomainDotTld, HYPHEN, DomainHyphen); tt(DomainDotTld, AT, LocalpartAt); const DomainDotTldColon = tt(DomainDotTld, COLON); // URL followed by colon (potential port number here) const DomainDotTldColonPort = makeState(Url); // TLD followed by a port number ta(DomainDotTldColon, groups.numeric, DomainDotTldColonPort); // Long URL with optional port and maybe query string const Url$1 = makeState(Url); // URL with extra symbols at the end, followed by an opening bracket const UrlNonaccept = makeState(); // URL followed by some symbols (will not be part of the final URL) // Query strings ta(Url$1, qsAccepting, Url$1); ta(Url$1, qsNonAccepting, UrlNonaccept); ta(UrlNonaccept, qsAccepting, Url$1); ta(UrlNonaccept, qsNonAccepting, UrlNonaccept); // Become real URLs after `SLASH` or `COLON NUM SLASH` // Here works with or without scheme:// prefix tt(DomainDotTld, SLASH, Url$1); tt(DomainDotTldColonPort, SLASH, Url$1); // Note that domains that begin with schemes are treated slighly differently const SchemeColon = tt(Scheme, COLON); // e.g., 'mailto:' const SlashSchemeColon = tt(SlashScheme, COLON); // e.g., 'http:' const SlashSchemeColonSlash = tt(SlashSchemeColon, SLASH); // e.g., 'http:/' const UriPrefix = tt(SlashSchemeColonSlash, SLASH); // e.g., 'http://' // Scheme states can transition to domain states ta(Scheme, groups.domain, Domain); tt(Scheme, DOT, DomainDot); tt(Scheme, HYPHEN, DomainHyphen); ta(SlashScheme, groups.domain, Domain); tt(SlashScheme, DOT, DomainDot); tt(SlashScheme, HYPHEN, DomainHyphen); // Force URL with scheme prefix followed by anything sane ta(SchemeColon, groups.domain, Url$1); tt(SchemeColon, SLASH, Url$1); ta(UriPrefix, groups.domain, Url$1); ta(UriPrefix, qsAccepting, Url$1); tt(UriPrefix, SLASH, Url$1); const bracketPairs = [[OPENBRACE, CLOSEBRACE], // {} [OPENBRACKET, CLOSEBRACKET], // [] [OPENPAREN, CLOSEPAREN], // () [OPENANGLEBRACKET, CLOSEANGLEBRACKET], // <> [FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN], // () [LEFTCORNERBRACKET, RIGHTCORNERBRACKET], // 「」 [LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET], // 『』 [FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN] // <> ]; for (let i = 0; i < bracketPairs.length; i++) { const [OPEN, CLOSE] = bracketPairs[i]; const UrlOpen = tt(Url$1, OPEN); // URL followed by open bracket // Continue not accepting for open brackets tt(UrlNonaccept, OPEN, UrlOpen); // Closing bracket component. This character WILL be included in the URL tt(UrlOpen, CLOSE, Url$1); // URL that beings with an opening bracket, followed by a symbols. // Note that the final state can still be `UrlOpen` (if the URL has a // single opening bracket for some reason). const UrlOpenQ = makeState(Url); ta(UrlOpen, qsAccepting, UrlOpenQ); const UrlOpenSyms = makeState(); // UrlOpen followed by some symbols it cannot end it ta(UrlOpen, qsNonAccepting); // URL that begins with an opening bracket, followed by some symbols ta(UrlOpenQ, qsAccepting, UrlOpenQ); ta(UrlOpenQ, qsNonAccepting, UrlOpenSyms); ta(UrlOpenSyms, qsAccepting, UrlOpenQ); ta(UrlOpenSyms, qsNonAccepting, UrlOpenSyms); // Close brace/bracket to become regular URL tt(UrlOpenQ, CLOSE, Url$1); tt(UrlOpenSyms, CLOSE, Url$1); } tt(Start, LOCALHOST, DomainDotTld); // localhost is a valid URL state tt(Start, NL$1, Nl); // single new line return { start: Start, tokens: tk }; } /** * Run the parser state machine on a list of scanned string-based tokens to * create a list of multi tokens, each of which represents a URL, email address, * plain text, etc. * * @param {State} start parser start state * @param {string} input the original input used to generate the given tokens * @param {Token[]} tokens list of scanned tokens * @returns {MultiToken[]} */ function run(start, input, tokens) { let len = tokens.length; let cursor = 0; let multis = []; let textTokens = []; while (cursor < len) { let state = start; let secondState = null; let nextState = null; let multiLength = 0; let latestAccepting = null; let sinceAccepts = -1; while (cursor < len && !(secondState = state.go(tokens[cursor].t))) { // Starting tokens with nowhere to jump to. // Consider these to be just plain text textTokens.push(tokens[cursor++]); } while (cursor < len && (nextState = secondState || state.go(tokens[cursor].t))) { // Get the next state secondState = null; state = nextState; // Keep track of the latest accepting state if (state.accepts()) { sinceAccepts = 0; latestAccepting = state; } else if (sinceAccepts >= 0) { sinceAccepts++; } cursor++; multiLength++; } if (sinceAccepts < 0) { // No accepting state was found, part of a regular text token add // the first text token to the text tokens array and try again from // the next cursor -= multiLength; if (cursor < len) { textTokens.push(tokens[cursor]); cursor++; } } else { // Accepting state! // First close off the textTokens (if available) if (textTokens.length > 0) { multis.push(initMultiToken(Text, input, textTokens)); textTokens = []; } // Roll back to the latest accepting state cursor -= sinceAccepts; multiLength -= sinceAccepts; // Create a new multitoken const Multi = latestAccepting.t; const subtokens = tokens.slice(cursor - multiLength, cursor); multis.push(initMultiToken(Multi, input, subtokens)); } } // Finally close off the textTokens (if available) if (textTokens.length > 0) { multis.push(initMultiToken(Text, input, textTokens)); } return multis; } /** * Utility function for instantiating a new multitoken with all the relevant * fields during parsing. * @param {new (value: string, tokens: Token[]) => MultiToken} Multi class to instantiate * @param {string} input original input string * @param {Token[]} tokens consecutive tokens scanned from input string * @returns {MultiToken} */ function initMultiToken(Multi, input, tokens) { const startIdx = tokens[0].s; const endIdx = tokens[tokens.length - 1].e; const value = input.slice(startIdx, endIdx); return new Multi(value, tokens); } const warn = typeof console !== 'undefined' && console && console.warn || (() => {}); const warnAdvice = 'until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.'; // Side-effect initialization state const INIT = { scanner: null, parser: null, tokenQueue: [], pluginQueue: [], customSchemes: [], initialized: false }; /** * @typedef {{ * start: State, * tokens: { groups: Collections } & typeof tk * }} ScannerInit */ /** * @typedef {{ * start: State, * tokens: typeof multi * }} ParserInit */ /** * @typedef {(arg: { scanner: ScannerInit }) => void} TokenPlugin */ /** * @typedef {(arg: { scanner: ScannerInit, parser: ParserInit }) => void} Plugin */ /** * De-register all plugins and reset the internal state-machine. Used for * testing; not required in practice. * @private */ function reset() { State.groups = {}; INIT.scanner = null; INIT.parser = null; INIT.tokenQueue = []; INIT.pluginQueue = []; INIT.customSchemes = []; INIT.initialized = false; } /** * Register a token plugin to allow the scanner to recognize additional token * types before the parser state machine is constructed from the results. * @param {string} name of plugin to register * @param {TokenPlugin} plugin function that accepts the scanner state machine * and available scanner tokens and collections and extends the state machine to * recognize additional tokens or groups. */ function registerTokenPlugin(name, plugin) { if (typeof plugin !== 'function') { throw new Error(`linkifyjs: Invalid token plugin ${plugin} (expects function)`); } for (let i = 0; i < INIT.tokenQueue.length; i++) { if (name === INIT.tokenQueue[i][0]) { warn(`linkifyjs: token plugin "${name}" already registered - will be overwritten`); INIT.tokenQueue[i] = [name, plugin]; return; } } INIT.tokenQueue.push([name, plugin]); if (INIT.initialized) { warn(`linkifyjs: already initialized - will not register token plugin "${name}" ${warnAdvice}`); } } /** * Register a linkify plugin * @param {string} name of plugin to register * @param {Plugin} plugin function that accepts the parser state machine and * extends the parser to recognize additional link types */ function registerPlugin(name, plugin) { if (typeof plugin !== 'function') { throw new Error(`linkifyjs: Invalid plugin ${plugin} (expects function)`); } for (let i = 0; i < INIT.pluginQueue.length; i++) { if (name === INIT.pluginQueue[i][0]) { warn(`linkifyjs: plugin "${name}" already registered - will be overwritten`); INIT.pluginQueue[i] = [name, plugin]; return; } } INIT.pluginQueue.push([name, plugin]); if (INIT.initialized) { warn(`linkifyjs: already initialized - will not register plugin "${name}" ${warnAdvice}`); } } /** * Detect URLs with the following additional protocol. Anything with format * "protocol://..." will be considered a link. If `optionalSlashSlash` is set to * `true`, anything with format "protocol:..." will be considered a link. * @param {string} protocol * @param {boolean} [optionalSlashSlash] */ function registerCustomProtocol(scheme, optionalSlashSlash) { if (optionalSlashSlash === void 0) { optionalSlashSlash = false; } if (INIT.initialized) { warn(`linkifyjs: already initialized - will not register custom scheme "${scheme}" ${warnAdvice}`); } if (!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(scheme)) { throw new Error(`linkifyjs: incorrect scheme format. 1. Must only contain digits, lowercase ASCII letters or "-" 2. Cannot start or end with "-" 3. "-" cannot repeat`); } INIT.customSchemes.push([scheme, optionalSlashSlash]); } /** * Initialize the linkify state machine. Called automatically the first time * linkify is called on a string, but may be called manually as well. */ function init() { // Initialize scanner state machine and plugins INIT.scanner = init$2(INIT.customSchemes); for (let i = 0; i < INIT.tokenQueue.length; i++) { INIT.tokenQueue[i][1]({ scanner: INIT.scanner }); } // Initialize parser state machine and plugins INIT.parser = init$1(INIT.scanner.tokens); for (let i = 0; i < INIT.pluginQueue.length; i++) { INIT.pluginQueue[i][1]({ scanner: INIT.scanner, parser: INIT.parser }); } INIT.initialized = true; } /** * Parse a string into tokens that represent linkable and non-linkable sub-components * @param {string} str * @return {MultiToken[]} tokens */ function tokenize(str) { if (!INIT.initialized) { init(); } return run(INIT.parser.start, str, run$1(INIT.scanner.start, str)); } /** * Find a list of linkable items in the given string. * @param {string} str string to find links in * @param {string | Opts} [type] either formatting options or specific type of * links to find, e.g., 'url' or 'email' * @param {Opts} [opts] formatting options for final output. Cannot be specified * if opts already provided in `type` argument */ function find(str, type, opts) { if (type === void 0) { type = null; } if (opts === void 0) { opts = null; } if (type && typeof type === 'object') { if (opts) { throw Error(`linkifyjs: Invalid link type ${type}; must be a string`); } opts = type; type = null; } const options = new Options(opts); const tokens = tokenize(str); const filtered = []; for (let i = 0; i < tokens.length; i++) { const token = tokens[i]; if (token.isLink && (!type || token.t === type) && options.check(token)) { filtered.push(token.toFormattedObject(options)); } } return filtered; } /** * Is the given string valid linkable text of some sort. Note that this does not * trim the text for you. * * Optionally pass in a second `type` param, which is the type of link to test * for. * * For example, * * linkify.test(str, 'email'); * * Returns `true` if str is a valid email. * @param {string} str string to test for links * @param {string} [type] optional specific link type to look for * @returns boolean true/false */ function test(str, type) { if (type === void 0) { type = null; } const tokens = tokenize(str); return tokens.length === 1 && tokens[0].isLink && (!type || tokens[0].t === type); } /***/ }), /***/ "./node_modules/lodash.get/index.js": /*!******************************************!*\ !*** ./node_modules/lodash.get/index.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { /** * lodash (Custom Build) * Build: `lodash modularize exports="npm" -o ./` * Copyright jQuery Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ /** Used as the `TypeError` message for "Functions" methods. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** `Object#toString` result references. */ var funcTag = '[object Function]', genTag = '[object GeneratorFunction]', symbolTag = '[object Symbol]'; /** Used to match property names within property paths. */ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, reLeadingDot = /^\./, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; /** Used to match backslashes in property paths. */ var reEscapeChar = /\\(\\)?/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g; /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function('return this')(); /** * Gets the value at `key` of `object`. * * @private * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function getValue(object, key) { return object == null ? undefined : object[key]; } /** * Checks if `value` is a host object in IE < 9. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a host object, else `false`. */ function isHostObject(value) { // Many host objects are `Object` objects that can coerce to strings // despite having improperly defined `toString` methods. var result = false; if (value != null && typeof value.toString != 'function') { try { result = !!(value + ''); } catch (e) {} } return result; } /** Used for built-in method references. */ var arrayProto = Array.prototype, funcProto = Function.prototype, objectProto = Object.prototype; /** Used to detect overreaching core-js shims. */ var coreJsData = root['__core-js_shared__']; /** Used to detect methods masquerading as native. */ var maskSrcKey = (function() { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); return uid ? ('Symbol(src)_1.' + uid) : ''; }()); /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var objectToString = objectProto.toString; /** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' ); /** Built-in value references. */ var Symbol = root.Symbol, splice = arrayProto.splice; /* Built-in method references that are verified to be native. */ var Map = getNative(root, 'Map'), nativeCreate = getNative(Object, 'create'); /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * Creates a hash object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Hash(entries) { var index = -1, length = entries ? entries.length : 0; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } /** * Removes all key-value entries from the hash. * * @private * @name clear * @memberOf Hash */ function hashClear() { this.__data__ = nativeCreate ? nativeCreate(null) : {}; } /** * Removes `key` and its value from the hash. * * @private * @name delete * @memberOf Hash * @param {Object} hash The hash to modify. * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function hashDelete(key) { return this.has(key) && delete this.__data__[key]; } /** * Gets the hash value for `key`. * * @private * @name get * @memberOf Hash * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function hashGet(key) { var data = this.__data__; if (nativeCreate) { var result = data[key]; return result === HASH_UNDEFINED ? undefined : result; } return hasOwnProperty.call(data, key) ? data[key] : undefined; } /** * Checks if a hash value for `key` exists. * * @private * @name has * @memberOf Hash * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function hashHas(key) { var data = this.__data__; return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); } /** * Sets the hash `key` to `value`. * * @private * @name set * @memberOf Hash * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the hash instance. */ function hashSet(key, value) { var data = this.__data__; data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; return this; } // Add methods to `Hash`. Hash.prototype.clear = hashClear; Hash.prototype['delete'] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; /** * Creates an list cache object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function ListCache(entries) { var index = -1, length = entries ? entries.length : 0; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } /** * Removes all key-value entries from the list cache. * * @private * @name clear * @memberOf ListCache */ function listCacheClear() { this.__data__ = []; } /** * Removes `key` and its value from the list cache. * * @private * @name delete * @memberOf ListCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function listCacheDelete(key) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } return true; } /** * Gets the list cache value for `key`. * * @private * @name get * @memberOf ListCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function listCacheGet(key) { var data = this.__data__, index = assocIndexOf(data, key); return index < 0 ? undefined : data[index][1]; } /** * Checks if a list cache value for `key` exists. * * @private * @name has * @memberOf ListCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function listCacheHas(key) { return assocIndexOf(this.__data__, key) > -1; } /** * Sets the list cache `key` to `value`. * * @private * @name set * @memberOf ListCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the list cache instance. */ function listCacheSet(key, value) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { data.push([key, value]); } else { data[index][1] = value; } return this; } // Add methods to `ListCache`. ListCache.prototype.clear = listCacheClear; ListCache.prototype['delete'] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; /** * Creates a map cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function MapCache(entries) { var index = -1, length = entries ? entries.length : 0; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } /** * Removes all key-value entries from the map. * * @private * @name clear * @memberOf MapCache */ function mapCacheClear() { this.__data__ = { 'hash': new Hash, 'map': new (Map || ListCache), 'string': new Hash }; } /** * Removes `key` and its value from the map. * * @private * @name delete * @memberOf MapCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function mapCacheDelete(key) { return getMapData(this, key)['delete'](key); } /** * Gets the map value for `key`. * * @private * @name get * @memberOf MapCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function mapCacheGet(key) { return getMapData(this, key).get(key); } /** * Checks if a map value for `key` exists. * * @private * @name has * @memberOf MapCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function mapCacheHas(key) { return getMapData(this, key).has(key); } /** * Sets the map `key` to `value`. * * @private * @name set * @memberOf MapCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the map cache instance. */ function mapCacheSet(key, value) { getMapData(this, key).set(key, value); return this; } // Add methods to `MapCache`. MapCache.prototype.clear = mapCacheClear; MapCache.prototype['delete'] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; /** * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private * @param {Array} array The array to inspect. * @param {*} key The key to search for. * @returns {number} Returns the index of the matched value, else `-1`. */ function assocIndexOf(array, key) { var length = array.length; while (length--) { if (eq(array[length][0], key)) { return length; } } return -1; } /** * The base implementation of `_.get` without support for default values. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @returns {*} Returns the resolved value. */ function baseGet(object, path) { path = isKey(path, object) ? [path] : castPath(path); var index = 0, length = path.length; while (object != null && index < length) { object = object[toKey(path[index++])]; } return (index && index == length) ? object : undefined; } /** * The base implementation of `_.isNative` without bad shim checks. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */ function baseIsNative(value) { if (!isObject(value) || isMasked(value)) { return false; } var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */ function baseToString(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } /** * Casts `value` to a path array if it's not one. * * @private * @param {*} value The value to inspect. * @returns {Array} Returns the cast property path array. */ function castPath(value) { return isArray(value) ? value : stringToPath(value); } /** * Gets the data for `map`. * * @private * @param {Object} map The map to query. * @param {string} key The reference key. * @returns {*} Returns the map data. */ function getMapData(map, key) { var data = map.__data__; return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; } /** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ function getNative(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : undefined; } /** * Checks if `value` is a property name and not a property path. * * @private * @param {*} value The value to check. * @param {Object} [object] The object to query keys on. * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ function isKey(value, object) { if (isArray(value)) { return false; } var type = typeof value; if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || (object != null && value in Object(object)); } /** * Checks if `value` is suitable for use as unique object key. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ function isKeyable(value) { var type = typeof value; return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') ? (value !== '__proto__') : (value === null); } /** * Checks if `func` has its source masked. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ function isMasked(func) { return !!maskSrcKey && (maskSrcKey in func); } /** * Converts `string` to a property path array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the property path array. */ var stringToPath = memoize(function(string) { string = toString(string); var result = []; if (reLeadingDot.test(string)) { result.push(''); } string.replace(rePropName, function(match, number, quote, string) { result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); }); return result; }); /** * Converts `value` to a string key if it's not a string or symbol. * * @private * @param {*} value The value to inspect. * @returns {string|symbol} Returns the key. */ function toKey(value) { if (typeof value == 'string' || isSymbol(value)) { return value; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } /** * Converts `func` to its source code. * * @private * @param {Function} func The function to process. * @returns {string} Returns the source code. */ function toSource(func) { if (func != null) { try { return funcToString.call(func); } catch (e) {} try { return (func + ''); } catch (e) {} } return ''; } /** * Creates a function that memoizes the result of `func`. If `resolver` is * provided, it determines the cache key for storing the result based on the * arguments provided to the memoized function. By default, the first argument * provided to the memoized function is used as the map cache key. The `func` * is invoked with the `this` binding of the memoized function. * * **Note:** The cache is exposed as the `cache` property on the memoized * function. Its creation may be customized by replacing the `_.memoize.Cache` * constructor with one whose instances implement the * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) * method interface of `delete`, `get`, `has`, and `set`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to have its output memoized. * @param {Function} [resolver] The function to resolve the cache key. * @returns {Function} Returns the new memoized function. * @example * * var object = { 'a': 1, 'b': 2 }; * var other = { 'c': 3, 'd': 4 }; * * var values = _.memoize(_.values); * values(object); * // => [1, 2] * * values(other); * // => [3, 4] * * object.a = 2; * values(object); * // => [1, 2] * * // Modify the result cache. * values.cache.set(object, ['a', 'b']); * values(object); * // => ['a', 'b'] * * // Replace `_.memoize.Cache`. * _.memoize.Cache = WeakMap; */ function memoize(func, resolver) { if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { throw new TypeError(FUNC_ERROR_TEXT); } var memoized = function() { var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key)) { return cache.get(key); } var result = func.apply(this, args); memoized.cache = cache.set(key, result); return result; }; memoized.cache = new (memoize.Cache || MapCache); return memoized; } // Assign cache to `_.memoize`. memoize.Cache = MapCache; /** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.eq(object, object); * // => true * * _.eq(object, other); * // => false * * _.eq('a', 'a'); * // => true * * _.eq('a', Object('a')); * // => false * * _.eq(NaN, NaN); * // => true */ function eq(value, other) { return value === other || (value !== value && other !== other); } /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray = Array.isArray; /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction(value) { // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 8-9 which returns 'object' for typed array and other constructors. var tag = isObject(value) ? objectToString.call(value) : ''; return tag == funcTag || tag == genTag; } /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject(value) { var type = typeof value; return !!value && (type == 'object' || type == 'function'); } /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return !!value && typeof value == 'object'; } /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol(value) { return typeof value == 'symbol' || (isObjectLike(value) && objectToString.call(value) == symbolTag); } /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to process. * @returns {string} Returns the string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(value); } /** * Gets the value at `path` of `object`. If the resolved value is * `undefined`, the `defaultValue` is returned in its place. * * @static * @memberOf _ * @since 3.7.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @param {*} [defaultValue] The value returned for `undefined` resolved values. * @returns {*} Returns the resolved value. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }] }; * * _.get(object, 'a[0].b.c'); * // => 3 * * _.get(object, ['a', '0', 'b', 'c']); * // => 3 * * _.get(object, 'a.b.c', 'default'); * // => 'default' */ function get(object, path, defaultValue) { var result = object == null ? undefined : baseGet(object, path); return result === undefined ? defaultValue : result; } module.exports = get; /***/ }), /***/ "./node_modules/lodash/_DataView.js": /*!******************************************!*\ !*** ./node_modules/lodash/_DataView.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"), root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); /* Built-in method references that are verified to be native. */ var DataView = getNative(root, 'DataView'); module.exports = DataView; /***/ }), /***/ "./node_modules/lodash/_Hash.js": /*!**************************************!*\ !*** ./node_modules/lodash/_Hash.js ***! \**************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var hashClear = __webpack_require__(/*! ./_hashClear */ "./node_modules/lodash/_hashClear.js"), hashDelete = __webpack_require__(/*! ./_hashDelete */ "./node_modules/lodash/_hashDelete.js"), hashGet = __webpack_require__(/*! ./_hashGet */ "./node_modules/lodash/_hashGet.js"), hashHas = __webpack_require__(/*! ./_hashHas */ "./node_modules/lodash/_hashHas.js"), hashSet = __webpack_require__(/*! ./_hashSet */ "./node_modules/lodash/_hashSet.js"); /** * Creates a hash object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Hash(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `Hash`. Hash.prototype.clear = hashClear; Hash.prototype['delete'] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; module.exports = Hash; /***/ }), /***/ "./node_modules/lodash/_ListCache.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_ListCache.js ***! \*******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var listCacheClear = __webpack_require__(/*! ./_listCacheClear */ "./node_modules/lodash/_listCacheClear.js"), listCacheDelete = __webpack_require__(/*! ./_listCacheDelete */ "./node_modules/lodash/_listCacheDelete.js"), listCacheGet = __webpack_require__(/*! ./_listCacheGet */ "./node_modules/lodash/_listCacheGet.js"), listCacheHas = __webpack_require__(/*! ./_listCacheHas */ "./node_modules/lodash/_listCacheHas.js"), listCacheSet = __webpack_require__(/*! ./_listCacheSet */ "./node_modules/lodash/_listCacheSet.js"); /** * Creates an list cache object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function ListCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `ListCache`. ListCache.prototype.clear = listCacheClear; ListCache.prototype['delete'] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; module.exports = ListCache; /***/ }), /***/ "./node_modules/lodash/_Map.js": /*!*************************************!*\ !*** ./node_modules/lodash/_Map.js ***! \*************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"), root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); /* Built-in method references that are verified to be native. */ var Map = getNative(root, 'Map'); module.exports = Map; /***/ }), /***/ "./node_modules/lodash/_MapCache.js": /*!******************************************!*\ !*** ./node_modules/lodash/_MapCache.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var mapCacheClear = __webpack_require__(/*! ./_mapCacheClear */ "./node_modules/lodash/_mapCacheClear.js"), mapCacheDelete = __webpack_require__(/*! ./_mapCacheDelete */ "./node_modules/lodash/_mapCacheDelete.js"), mapCacheGet = __webpack_require__(/*! ./_mapCacheGet */ "./node_modules/lodash/_mapCacheGet.js"), mapCacheHas = __webpack_require__(/*! ./_mapCacheHas */ "./node_modules/lodash/_mapCacheHas.js"), mapCacheSet = __webpack_require__(/*! ./_mapCacheSet */ "./node_modules/lodash/_mapCacheSet.js"); /** * Creates a map cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function MapCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `MapCache`. MapCache.prototype.clear = mapCacheClear; MapCache.prototype['delete'] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; module.exports = MapCache; /***/ }), /***/ "./node_modules/lodash/_Promise.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_Promise.js ***! \*****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"), root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); /* Built-in method references that are verified to be native. */ var Promise = getNative(root, 'Promise'); module.exports = Promise; /***/ }), /***/ "./node_modules/lodash/_Set.js": /*!*************************************!*\ !*** ./node_modules/lodash/_Set.js ***! \*************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"), root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); /* Built-in method references that are verified to be native. */ var Set = getNative(root, 'Set'); module.exports = Set; /***/ }), /***/ "./node_modules/lodash/_SetCache.js": /*!******************************************!*\ !*** ./node_modules/lodash/_SetCache.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var MapCache = __webpack_require__(/*! ./_MapCache */ "./node_modules/lodash/_MapCache.js"), setCacheAdd = __webpack_require__(/*! ./_setCacheAdd */ "./node_modules/lodash/_setCacheAdd.js"), setCacheHas = __webpack_require__(/*! ./_setCacheHas */ "./node_modules/lodash/_setCacheHas.js"); /** * * Creates an array cache object to store unique values. * * @private * @constructor * @param {Array} [values] The values to cache. */ function SetCache(values) { var index = -1, length = values == null ? 0 : values.length; this.__data__ = new MapCache; while (++index < length) { this.add(values[index]); } } // Add methods to `SetCache`. SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; SetCache.prototype.has = setCacheHas; module.exports = SetCache; /***/ }), /***/ "./node_modules/lodash/_Stack.js": /*!***************************************!*\ !*** ./node_modules/lodash/_Stack.js ***! \***************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"), stackClear = __webpack_require__(/*! ./_stackClear */ "./node_modules/lodash/_stackClear.js"), stackDelete = __webpack_require__(/*! ./_stackDelete */ "./node_modules/lodash/_stackDelete.js"), stackGet = __webpack_require__(/*! ./_stackGet */ "./node_modules/lodash/_stackGet.js"), stackHas = __webpack_require__(/*! ./_stackHas */ "./node_modules/lodash/_stackHas.js"), stackSet = __webpack_require__(/*! ./_stackSet */ "./node_modules/lodash/_stackSet.js"); /** * Creates a stack cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Stack(entries) { var data = this.__data__ = new ListCache(entries); this.size = data.size; } // Add methods to `Stack`. Stack.prototype.clear = stackClear; Stack.prototype['delete'] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; module.exports = Stack; /***/ }), /***/ "./node_modules/lodash/_Symbol.js": /*!****************************************!*\ !*** ./node_modules/lodash/_Symbol.js ***! \****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); /** Built-in value references. */ var Symbol = root.Symbol; module.exports = Symbol; /***/ }), /***/ "./node_modules/lodash/_Uint8Array.js": /*!********************************************!*\ !*** ./node_modules/lodash/_Uint8Array.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); /** Built-in value references. */ var Uint8Array = root.Uint8Array; module.exports = Uint8Array; /***/ }), /***/ "./node_modules/lodash/_WeakMap.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_WeakMap.js ***! \*****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"), root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); /* Built-in method references that are verified to be native. */ var WeakMap = getNative(root, 'WeakMap'); module.exports = WeakMap; /***/ }), /***/ "./node_modules/lodash/_apply.js": /*!***************************************!*\ !*** ./node_modules/lodash/_apply.js ***! \***************************************/ /***/ ((module) => { /** * A faster alternative to `Function#apply`, this function invokes `func` * with the `this` binding of `thisArg` and the arguments of `args`. * * @private * @param {Function} func The function to invoke. * @param {*} thisArg The `this` binding of `func`. * @param {Array} args The arguments to invoke `func` with. * @returns {*} Returns the result of `func`. */ function apply(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } module.exports = apply; /***/ }), /***/ "./node_modules/lodash/_arrayFilter.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_arrayFilter.js ***! \*********************************************/ /***/ ((module) => { /** * A specialized version of `_.filter` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {Array} Returns the new filtered array. */ function arrayFilter(array, predicate) { var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; while (++index < length) { var value = array[index]; if (predicate(value, index, array)) { result[resIndex++] = value; } } return result; } module.exports = arrayFilter; /***/ }), /***/ "./node_modules/lodash/_arrayIncludes.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_arrayIncludes.js ***! \***********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseIndexOf = __webpack_require__(/*! ./_baseIndexOf */ "./node_modules/lodash/_baseIndexOf.js"); /** * A specialized version of `_.includes` for arrays without support for * specifying an index to search from. * * @private * @param {Array} [array] The array to inspect. * @param {*} target The value to search for. * @returns {boolean} Returns `true` if `target` is found, else `false`. */ function arrayIncludes(array, value) { var length = array == null ? 0 : array.length; return !!length && baseIndexOf(array, value, 0) > -1; } module.exports = arrayIncludes; /***/ }), /***/ "./node_modules/lodash/_arrayIncludesWith.js": /*!***************************************************!*\ !*** ./node_modules/lodash/_arrayIncludesWith.js ***! \***************************************************/ /***/ ((module) => { /** * This function is like `arrayIncludes` except that it accepts a comparator. * * @private * @param {Array} [array] The array to inspect. * @param {*} target The value to search for. * @param {Function} comparator The comparator invoked per element. * @returns {boolean} Returns `true` if `target` is found, else `false`. */ function arrayIncludesWith(array, value, comparator) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (comparator(value, array[index])) { return true; } } return false; } module.exports = arrayIncludesWith; /***/ }), /***/ "./node_modules/lodash/_arrayLikeKeys.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_arrayLikeKeys.js ***! \***********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseTimes = __webpack_require__(/*! ./_baseTimes */ "./node_modules/lodash/_baseTimes.js"), isArguments = __webpack_require__(/*! ./isArguments */ "./node_modules/lodash/isArguments.js"), isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), isBuffer = __webpack_require__(/*! ./isBuffer */ "./node_modules/lodash/isBuffer.js"), isIndex = __webpack_require__(/*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"), isTypedArray = __webpack_require__(/*! ./isTypedArray */ "./node_modules/lodash/isTypedArray.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Creates an array of the enumerable property names of the array-like `value`. * * @private * @param {*} value The value to query. * @param {boolean} inherited Specify returning inherited property names. * @returns {Array} Returns the array of property names. */ function arrayLikeKeys(value, inherited) { var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode. key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers. (isBuff && (key == 'offset' || key == 'parent')) || // PhantomJS 2 has enumerable non-index properties on typed arrays. (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || // Skip index properties. isIndex(key, length) ))) { result.push(key); } } return result; } module.exports = arrayLikeKeys; /***/ }), /***/ "./node_modules/lodash/_arrayMap.js": /*!******************************************!*\ !*** ./node_modules/lodash/_arrayMap.js ***! \******************************************/ /***/ ((module) => { /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } module.exports = arrayMap; /***/ }), /***/ "./node_modules/lodash/_arrayPush.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_arrayPush.js ***! \*******************************************/ /***/ ((module) => { /** * Appends the elements of `values` to `array`. * * @private * @param {Array} array The array to modify. * @param {Array} values The values to append. * @returns {Array} Returns `array`. */ function arrayPush(array, values) { var index = -1, length = values.length, offset = array.length; while (++index < length) { array[offset + index] = values[index]; } return array; } module.exports = arrayPush; /***/ }), /***/ "./node_modules/lodash/_arraySome.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_arraySome.js ***! \*******************************************/ /***/ ((module) => { /** * A specialized version of `_.some` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {boolean} Returns `true` if any element passes the predicate check, * else `false`. */ function arraySome(array, predicate) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (predicate(array[index], index, array)) { return true; } } return false; } module.exports = arraySome; /***/ }), /***/ "./node_modules/lodash/_assignMergeValue.js": /*!**************************************************!*\ !*** ./node_modules/lodash/_assignMergeValue.js ***! \**************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseAssignValue = __webpack_require__(/*! ./_baseAssignValue */ "./node_modules/lodash/_baseAssignValue.js"), eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js"); /** * This function is like `assignValue` except that it doesn't assign * `undefined` values. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function assignMergeValue(object, key, value) { if ((value !== undefined && !eq(object[key], value)) || (value === undefined && !(key in object))) { baseAssignValue(object, key, value); } } module.exports = assignMergeValue; /***/ }), /***/ "./node_modules/lodash/_assignValue.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_assignValue.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseAssignValue = __webpack_require__(/*! ./_baseAssignValue */ "./node_modules/lodash/_baseAssignValue.js"), eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Assigns `value` to `key` of `object` if the existing value is not equivalent * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function assignValue(object, key, value) { var objValue = object[key]; if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || (value === undefined && !(key in object))) { baseAssignValue(object, key, value); } } module.exports = assignValue; /***/ }), /***/ "./node_modules/lodash/_assocIndexOf.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_assocIndexOf.js ***! \**********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js"); /** * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private * @param {Array} array The array to inspect. * @param {*} key The key to search for. * @returns {number} Returns the index of the matched value, else `-1`. */ function assocIndexOf(array, key) { var length = array.length; while (length--) { if (eq(array[length][0], key)) { return length; } } return -1; } module.exports = assocIndexOf; /***/ }), /***/ "./node_modules/lodash/_baseAssignValue.js": /*!*************************************************!*\ !*** ./node_modules/lodash/_baseAssignValue.js ***! \*************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var defineProperty = __webpack_require__(/*! ./_defineProperty */ "./node_modules/lodash/_defineProperty.js"); /** * The base implementation of `assignValue` and `assignMergeValue` without * value checks. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function baseAssignValue(object, key, value) { if (key == '__proto__' && defineProperty) { defineProperty(object, key, { 'configurable': true, 'enumerable': true, 'value': value, 'writable': true }); } else { object[key] = value; } } module.exports = baseAssignValue; /***/ }), /***/ "./node_modules/lodash/_baseCreate.js": /*!********************************************!*\ !*** ./node_modules/lodash/_baseCreate.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"); /** Built-in value references. */ var objectCreate = Object.create; /** * The base implementation of `_.create` without support for assigning * properties to the created object. * * @private * @param {Object} proto The object to inherit from. * @returns {Object} Returns the new object. */ var baseCreate = (function() { function object() {} return function(proto) { if (!isObject(proto)) { return {}; } if (objectCreate) { return objectCreate(proto); } object.prototype = proto; var result = new object; object.prototype = undefined; return result; }; }()); module.exports = baseCreate; /***/ }), /***/ "./node_modules/lodash/_baseEach.js": /*!******************************************!*\ !*** ./node_modules/lodash/_baseEach.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseForOwn = __webpack_require__(/*! ./_baseForOwn */ "./node_modules/lodash/_baseForOwn.js"), createBaseEach = __webpack_require__(/*! ./_createBaseEach */ "./node_modules/lodash/_createBaseEach.js"); /** * The base implementation of `_.forEach` without support for iteratee shorthands. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array|Object} Returns `collection`. */ var baseEach = createBaseEach(baseForOwn); module.exports = baseEach; /***/ }), /***/ "./node_modules/lodash/_baseFindIndex.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_baseFindIndex.js ***! \***********************************************/ /***/ ((module) => { /** * The base implementation of `_.findIndex` and `_.findLastIndex` without * support for iteratee shorthands. * * @private * @param {Array} array The array to inspect. * @param {Function} predicate The function invoked per iteration. * @param {number} fromIndex The index to search from. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseFindIndex(array, predicate, fromIndex, fromRight) { var length = array.length, index = fromIndex + (fromRight ? 1 : -1); while ((fromRight ? index-- : ++index < length)) { if (predicate(array[index], index, array)) { return index; } } return -1; } module.exports = baseFindIndex; /***/ }), /***/ "./node_modules/lodash/_baseFlatten.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_baseFlatten.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var arrayPush = __webpack_require__(/*! ./_arrayPush */ "./node_modules/lodash/_arrayPush.js"), isFlattenable = __webpack_require__(/*! ./_isFlattenable */ "./node_modules/lodash/_isFlattenable.js"); /** * The base implementation of `_.flatten` with support for restricting flattening. * * @private * @param {Array} array The array to flatten. * @param {number} depth The maximum recursion depth. * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. * @param {Array} [result=[]] The initial result value. * @returns {Array} Returns the new flattened array. */ function baseFlatten(array, depth, predicate, isStrict, result) { var index = -1, length = array.length; predicate || (predicate = isFlattenable); result || (result = []); while (++index < length) { var value = array[index]; if (depth > 0 && predicate(value)) { if (depth > 1) { // Recursively flatten arrays (susceptible to call stack limits). baseFlatten(value, depth - 1, predicate, isStrict, result); } else { arrayPush(result, value); } } else if (!isStrict) { result[result.length] = value; } } return result; } module.exports = baseFlatten; /***/ }), /***/ "./node_modules/lodash/_baseFor.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_baseFor.js ***! \*****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var createBaseFor = __webpack_require__(/*! ./_createBaseFor */ "./node_modules/lodash/_createBaseFor.js"); /** * The base implementation of `baseForOwn` which iterates over `object` * properties returned by `keysFunc` and invokes `iteratee` for each property. * Iteratee functions may exit iteration early by explicitly returning `false`. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */ var baseFor = createBaseFor(); module.exports = baseFor; /***/ }), /***/ "./node_modules/lodash/_baseForOwn.js": /*!********************************************!*\ !*** ./node_modules/lodash/_baseForOwn.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseFor = __webpack_require__(/*! ./_baseFor */ "./node_modules/lodash/_baseFor.js"), keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js"); /** * The base implementation of `_.forOwn` without support for iteratee shorthands. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Object} Returns `object`. */ function baseForOwn(object, iteratee) { return object && baseFor(object, iteratee, keys); } module.exports = baseForOwn; /***/ }), /***/ "./node_modules/lodash/_baseGet.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_baseGet.js ***! \*****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"), toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js"); /** * The base implementation of `_.get` without support for default values. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @returns {*} Returns the resolved value. */ function baseGet(object, path) { path = castPath(path, object); var index = 0, length = path.length; while (object != null && index < length) { object = object[toKey(path[index++])]; } return (index && index == length) ? object : undefined; } module.exports = baseGet; /***/ }), /***/ "./node_modules/lodash/_baseGetAllKeys.js": /*!************************************************!*\ !*** ./node_modules/lodash/_baseGetAllKeys.js ***! \************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var arrayPush = __webpack_require__(/*! ./_arrayPush */ "./node_modules/lodash/_arrayPush.js"), isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"); /** * The base implementation of `getAllKeys` and `getAllKeysIn` which uses * `keysFunc` and `symbolsFunc` to get the enumerable property names and * symbols of `object`. * * @private * @param {Object} object The object to query. * @param {Function} keysFunc The function to get the keys of `object`. * @param {Function} symbolsFunc The function to get the symbols of `object`. * @returns {Array} Returns the array of property names and symbols. */ function baseGetAllKeys(object, keysFunc, symbolsFunc) { var result = keysFunc(object); return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); } module.exports = baseGetAllKeys; /***/ }), /***/ "./node_modules/lodash/_baseGetTag.js": /*!********************************************!*\ !*** ./node_modules/lodash/_baseGetTag.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), getRawTag = __webpack_require__(/*! ./_getRawTag */ "./node_modules/lodash/_getRawTag.js"), objectToString = __webpack_require__(/*! ./_objectToString */ "./node_modules/lodash/_objectToString.js"); /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return (symToStringTag && symToStringTag in Object(value)) ? getRawTag(value) : objectToString(value); } module.exports = baseGetTag; /***/ }), /***/ "./node_modules/lodash/_baseHasIn.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_baseHasIn.js ***! \*******************************************/ /***/ ((module) => { /** * The base implementation of `_.hasIn` without support for deep paths. * * @private * @param {Object} [object] The object to query. * @param {Array|string} key The key to check. * @returns {boolean} Returns `true` if `key` exists, else `false`. */ function baseHasIn(object, key) { return object != null && key in Object(object); } module.exports = baseHasIn; /***/ }), /***/ "./node_modules/lodash/_baseIndexOf.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_baseIndexOf.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseFindIndex = __webpack_require__(/*! ./_baseFindIndex */ "./node_modules/lodash/_baseFindIndex.js"), baseIsNaN = __webpack_require__(/*! ./_baseIsNaN */ "./node_modules/lodash/_baseIsNaN.js"), strictIndexOf = __webpack_require__(/*! ./_strictIndexOf */ "./node_modules/lodash/_strictIndexOf.js"); /** * The base implementation of `_.indexOf` without `fromIndex` bounds checks. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseIndexOf(array, value, fromIndex) { return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); } module.exports = baseIndexOf; /***/ }), /***/ "./node_modules/lodash/_baseIsArguments.js": /*!*************************************************!*\ !*** ./node_modules/lodash/_baseIsArguments.js ***! \*************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var argsTag = '[object Arguments]'; /** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */ function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag; } module.exports = baseIsArguments; /***/ }), /***/ "./node_modules/lodash/_baseIsEqual.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_baseIsEqual.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseIsEqualDeep = __webpack_require__(/*! ./_baseIsEqualDeep */ "./node_modules/lodash/_baseIsEqualDeep.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); /** * The base implementation of `_.isEqual` which supports partial comparisons * and tracks traversed objects. * * @private * @param {*} value The value to compare. * @param {*} other The other value to compare. * @param {boolean} bitmask The bitmask flags. * 1 - Unordered comparison * 2 - Partial comparison * @param {Function} [customizer] The function to customize comparisons. * @param {Object} [stack] Tracks traversed `value` and `other` objects. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. */ function baseIsEqual(value, other, bitmask, customizer, stack) { if (value === other) { return true; } if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); } module.exports = baseIsEqual; /***/ }), /***/ "./node_modules/lodash/_baseIsEqualDeep.js": /*!*************************************************!*\ !*** ./node_modules/lodash/_baseIsEqualDeep.js ***! \*************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var Stack = __webpack_require__(/*! ./_Stack */ "./node_modules/lodash/_Stack.js"), equalArrays = __webpack_require__(/*! ./_equalArrays */ "./node_modules/lodash/_equalArrays.js"), equalByTag = __webpack_require__(/*! ./_equalByTag */ "./node_modules/lodash/_equalByTag.js"), equalObjects = __webpack_require__(/*! ./_equalObjects */ "./node_modules/lodash/_equalObjects.js"), getTag = __webpack_require__(/*! ./_getTag */ "./node_modules/lodash/_getTag.js"), isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), isBuffer = __webpack_require__(/*! ./isBuffer */ "./node_modules/lodash/isBuffer.js"), isTypedArray = __webpack_require__(/*! ./isTypedArray */ "./node_modules/lodash/isTypedArray.js"); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1; /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', objectTag = '[object Object]'; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * A specialized version of `baseIsEqual` for arrays and objects which performs * deep comparisons and tracks traversed objects enabling objects with circular * references to be compared. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} [stack] Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other); objTag = objTag == argsTag ? objectTag : objTag; othTag = othTag == argsTag ? objectTag : othTag; var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; if (isSameTag && isBuffer(object)) { if (!isBuffer(other)) { return false; } objIsArr = true; objIsObj = false; } if (isSameTag && !objIsObj) { stack || (stack = new Stack); return (objIsArr || isTypedArray(object)) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); } if (!(bitmask & COMPARE_PARTIAL_FLAG)) { var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); if (objIsWrapped || othIsWrapped) { var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; stack || (stack = new Stack); return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); } } if (!isSameTag) { return false; } stack || (stack = new Stack); return equalObjects(object, other, bitmask, customizer, equalFunc, stack); } module.exports = baseIsEqualDeep; /***/ }), /***/ "./node_modules/lodash/_baseIsMatch.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_baseIsMatch.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var Stack = __webpack_require__(/*! ./_Stack */ "./node_modules/lodash/_Stack.js"), baseIsEqual = __webpack_require__(/*! ./_baseIsEqual */ "./node_modules/lodash/_baseIsEqual.js"); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** * The base implementation of `_.isMatch` without support for iteratee shorthands. * * @private * @param {Object} object The object to inspect. * @param {Object} source The object of property values to match. * @param {Array} matchData The property names, values, and compare flags to match. * @param {Function} [customizer] The function to customize comparisons. * @returns {boolean} Returns `true` if `object` is a match, else `false`. */ function baseIsMatch(object, source, matchData, customizer) { var index = matchData.length, length = index, noCustomizer = !customizer; if (object == null) { return !length; } object = Object(object); while (index--) { var data = matchData[index]; if ((noCustomizer && data[2]) ? data[1] !== object[data[0]] : !(data[0] in object) ) { return false; } } while (++index < length) { data = matchData[index]; var key = data[0], objValue = object[key], srcValue = data[1]; if (noCustomizer && data[2]) { if (objValue === undefined && !(key in object)) { return false; } } else { var stack = new Stack; if (customizer) { var result = customizer(objValue, srcValue, key, object, source, stack); } if (!(result === undefined ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result )) { return false; } } } return true; } module.exports = baseIsMatch; /***/ }), /***/ "./node_modules/lodash/_baseIsNaN.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_baseIsNaN.js ***! \*******************************************/ /***/ ((module) => { /** * The base implementation of `_.isNaN` without support for number objects. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. */ function baseIsNaN(value) { return value !== value; } module.exports = baseIsNaN; /***/ }), /***/ "./node_modules/lodash/_baseIsNative.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_baseIsNative.js ***! \**********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isFunction = __webpack_require__(/*! ./isFunction */ "./node_modules/lodash/isFunction.js"), isMasked = __webpack_require__(/*! ./_isMasked */ "./node_modules/lodash/_isMasked.js"), isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), toSource = __webpack_require__(/*! ./_toSource */ "./node_modules/lodash/_toSource.js"); /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** Used for built-in method references. */ var funcProto = Function.prototype, objectProto = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' ); /** * The base implementation of `_.isNative` without bad shim checks. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */ function baseIsNative(value) { if (!isObject(value) || isMasked(value)) { return false; } var pattern = isFunction(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } module.exports = baseIsNative; /***/ }), /***/ "./node_modules/lodash/_baseIsTypedArray.js": /*!**************************************************!*\ !*** ./node_modules/lodash/_baseIsTypedArray.js ***! \**************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), isLength = __webpack_require__(/*! ./isLength */ "./node_modules/lodash/isLength.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', mapTag = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', weakMapTag = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; /** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; /** * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */ function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } module.exports = baseIsTypedArray; /***/ }), /***/ "./node_modules/lodash/_baseIteratee.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_baseIteratee.js ***! \**********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseMatches = __webpack_require__(/*! ./_baseMatches */ "./node_modules/lodash/_baseMatches.js"), baseMatchesProperty = __webpack_require__(/*! ./_baseMatchesProperty */ "./node_modules/lodash/_baseMatchesProperty.js"), identity = __webpack_require__(/*! ./identity */ "./node_modules/lodash/identity.js"), isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), property = __webpack_require__(/*! ./property */ "./node_modules/lodash/property.js"); /** * The base implementation of `_.iteratee`. * * @private * @param {*} [value=_.identity] The value to convert to an iteratee. * @returns {Function} Returns the iteratee. */ function baseIteratee(value) { // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. if (typeof value == 'function') { return value; } if (value == null) { return identity; } if (typeof value == 'object') { return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); } return property(value); } module.exports = baseIteratee; /***/ }), /***/ "./node_modules/lodash/_baseKeys.js": /*!******************************************!*\ !*** ./node_modules/lodash/_baseKeys.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isPrototype = __webpack_require__(/*! ./_isPrototype */ "./node_modules/lodash/_isPrototype.js"), nativeKeys = __webpack_require__(/*! ./_nativeKeys */ "./node_modules/lodash/_nativeKeys.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty.call(object, key) && key != 'constructor') { result.push(key); } } return result; } module.exports = baseKeys; /***/ }), /***/ "./node_modules/lodash/_baseKeysIn.js": /*!********************************************!*\ !*** ./node_modules/lodash/_baseKeysIn.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), isPrototype = __webpack_require__(/*! ./_isPrototype */ "./node_modules/lodash/_isPrototype.js"), nativeKeysIn = __webpack_require__(/*! ./_nativeKeysIn */ "./node_modules/lodash/_nativeKeysIn.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeysIn(object) { if (!isObject(object)) { return nativeKeysIn(object); } var isProto = isPrototype(object), result = []; for (var key in object) { if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { result.push(key); } } return result; } module.exports = baseKeysIn; /***/ }), /***/ "./node_modules/lodash/_baseMap.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_baseMap.js ***! \*****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseEach = __webpack_require__(/*! ./_baseEach */ "./node_modules/lodash/_baseEach.js"), isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"); /** * The base implementation of `_.map` without support for iteratee shorthands. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function baseMap(collection, iteratee) { var index = -1, result = isArrayLike(collection) ? Array(collection.length) : []; baseEach(collection, function(value, key, collection) { result[++index] = iteratee(value, key, collection); }); return result; } module.exports = baseMap; /***/ }), /***/ "./node_modules/lodash/_baseMatches.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_baseMatches.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseIsMatch = __webpack_require__(/*! ./_baseIsMatch */ "./node_modules/lodash/_baseIsMatch.js"), getMatchData = __webpack_require__(/*! ./_getMatchData */ "./node_modules/lodash/_getMatchData.js"), matchesStrictComparable = __webpack_require__(/*! ./_matchesStrictComparable */ "./node_modules/lodash/_matchesStrictComparable.js"); /** * The base implementation of `_.matches` which doesn't clone `source`. * * @private * @param {Object} source The object of property values to match. * @returns {Function} Returns the new spec function. */ function baseMatches(source) { var matchData = getMatchData(source); if (matchData.length == 1 && matchData[0][2]) { return matchesStrictComparable(matchData[0][0], matchData[0][1]); } return function(object) { return object === source || baseIsMatch(object, source, matchData); }; } module.exports = baseMatches; /***/ }), /***/ "./node_modules/lodash/_baseMatchesProperty.js": /*!*****************************************************!*\ !*** ./node_modules/lodash/_baseMatchesProperty.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseIsEqual = __webpack_require__(/*! ./_baseIsEqual */ "./node_modules/lodash/_baseIsEqual.js"), get = __webpack_require__(/*! ./get */ "./node_modules/lodash/get.js"), hasIn = __webpack_require__(/*! ./hasIn */ "./node_modules/lodash/hasIn.js"), isKey = __webpack_require__(/*! ./_isKey */ "./node_modules/lodash/_isKey.js"), isStrictComparable = __webpack_require__(/*! ./_isStrictComparable */ "./node_modules/lodash/_isStrictComparable.js"), matchesStrictComparable = __webpack_require__(/*! ./_matchesStrictComparable */ "./node_modules/lodash/_matchesStrictComparable.js"), toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js"); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. * * @private * @param {string} path The path of the property to get. * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */ function baseMatchesProperty(path, srcValue) { if (isKey(path) && isStrictComparable(srcValue)) { return matchesStrictComparable(toKey(path), srcValue); } return function(object) { var objValue = get(object, path); return (objValue === undefined && objValue === srcValue) ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); }; } module.exports = baseMatchesProperty; /***/ }), /***/ "./node_modules/lodash/_baseMerge.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_baseMerge.js ***! \*******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var Stack = __webpack_require__(/*! ./_Stack */ "./node_modules/lodash/_Stack.js"), assignMergeValue = __webpack_require__(/*! ./_assignMergeValue */ "./node_modules/lodash/_assignMergeValue.js"), baseFor = __webpack_require__(/*! ./_baseFor */ "./node_modules/lodash/_baseFor.js"), baseMergeDeep = __webpack_require__(/*! ./_baseMergeDeep */ "./node_modules/lodash/_baseMergeDeep.js"), isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), keysIn = __webpack_require__(/*! ./keysIn */ "./node_modules/lodash/keysIn.js"), safeGet = __webpack_require__(/*! ./_safeGet */ "./node_modules/lodash/_safeGet.js"); /** * The base implementation of `_.merge` without support for multiple sources. * * @private * @param {Object} object The destination object. * @param {Object} source The source object. * @param {number} srcIndex The index of `source`. * @param {Function} [customizer] The function to customize merged values. * @param {Object} [stack] Tracks traversed source values and their merged * counterparts. */ function baseMerge(object, source, srcIndex, customizer, stack) { if (object === source) { return; } baseFor(source, function(srcValue, key) { stack || (stack = new Stack); if (isObject(srcValue)) { baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); } else { var newValue = customizer ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) : undefined; if (newValue === undefined) { newValue = srcValue; } assignMergeValue(object, key, newValue); } }, keysIn); } module.exports = baseMerge; /***/ }), /***/ "./node_modules/lodash/_baseMergeDeep.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_baseMergeDeep.js ***! \***********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var assignMergeValue = __webpack_require__(/*! ./_assignMergeValue */ "./node_modules/lodash/_assignMergeValue.js"), cloneBuffer = __webpack_require__(/*! ./_cloneBuffer */ "./node_modules/lodash/_cloneBuffer.js"), cloneTypedArray = __webpack_require__(/*! ./_cloneTypedArray */ "./node_modules/lodash/_cloneTypedArray.js"), copyArray = __webpack_require__(/*! ./_copyArray */ "./node_modules/lodash/_copyArray.js"), initCloneObject = __webpack_require__(/*! ./_initCloneObject */ "./node_modules/lodash/_initCloneObject.js"), isArguments = __webpack_require__(/*! ./isArguments */ "./node_modules/lodash/isArguments.js"), isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), isArrayLikeObject = __webpack_require__(/*! ./isArrayLikeObject */ "./node_modules/lodash/isArrayLikeObject.js"), isBuffer = __webpack_require__(/*! ./isBuffer */ "./node_modules/lodash/isBuffer.js"), isFunction = __webpack_require__(/*! ./isFunction */ "./node_modules/lodash/isFunction.js"), isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), isPlainObject = __webpack_require__(/*! ./isPlainObject */ "./node_modules/lodash/isPlainObject.js"), isTypedArray = __webpack_require__(/*! ./isTypedArray */ "./node_modules/lodash/isTypedArray.js"), safeGet = __webpack_require__(/*! ./_safeGet */ "./node_modules/lodash/_safeGet.js"), toPlainObject = __webpack_require__(/*! ./toPlainObject */ "./node_modules/lodash/toPlainObject.js"); /** * A specialized version of `baseMerge` for arrays and objects which performs * deep merges and tracks traversed objects enabling objects with circular * references to be merged. * * @private * @param {Object} object The destination object. * @param {Object} source The source object. * @param {string} key The key of the value to merge. * @param {number} srcIndex The index of `source`. * @param {Function} mergeFunc The function to merge values. * @param {Function} [customizer] The function to customize assigned values. * @param {Object} [stack] Tracks traversed source values and their merged * counterparts. */ function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue); if (stacked) { assignMergeValue(object, key, stacked); return; } var newValue = customizer ? customizer(objValue, srcValue, (key + ''), object, source, stack) : undefined; var isCommon = newValue === undefined; if (isCommon) { var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue); newValue = srcValue; if (isArr || isBuff || isTyped) { if (isArray(objValue)) { newValue = objValue; } else if (isArrayLikeObject(objValue)) { newValue = copyArray(objValue); } else if (isBuff) { isCommon = false; newValue = cloneBuffer(srcValue, true); } else if (isTyped) { isCommon = false; newValue = cloneTypedArray(srcValue, true); } else { newValue = []; } } else if (isPlainObject(srcValue) || isArguments(srcValue)) { newValue = objValue; if (isArguments(objValue)) { newValue = toPlainObject(objValue); } else if (!isObject(objValue) || isFunction(objValue)) { newValue = initCloneObject(srcValue); } } else { isCommon = false; } } if (isCommon) { // Recursively merge objects and arrays (susceptible to call stack limits). stack.set(srcValue, newValue); mergeFunc(newValue, srcValue, srcIndex, customizer, stack); stack['delete'](srcValue); } assignMergeValue(object, key, newValue); } module.exports = baseMergeDeep; /***/ }), /***/ "./node_modules/lodash/_baseOrderBy.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_baseOrderBy.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"), baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js"), baseIteratee = __webpack_require__(/*! ./_baseIteratee */ "./node_modules/lodash/_baseIteratee.js"), baseMap = __webpack_require__(/*! ./_baseMap */ "./node_modules/lodash/_baseMap.js"), baseSortBy = __webpack_require__(/*! ./_baseSortBy */ "./node_modules/lodash/_baseSortBy.js"), baseUnary = __webpack_require__(/*! ./_baseUnary */ "./node_modules/lodash/_baseUnary.js"), compareMultiple = __webpack_require__(/*! ./_compareMultiple */ "./node_modules/lodash/_compareMultiple.js"), identity = __webpack_require__(/*! ./identity */ "./node_modules/lodash/identity.js"), isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"); /** * The base implementation of `_.orderBy` without param guards. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. * @param {string[]} orders The sort orders of `iteratees`. * @returns {Array} Returns the new sorted array. */ function baseOrderBy(collection, iteratees, orders) { if (iteratees.length) { iteratees = arrayMap(iteratees, function(iteratee) { if (isArray(iteratee)) { return function(value) { return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); } } return iteratee; }); } else { iteratees = [identity]; } var index = -1; iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); var result = baseMap(collection, function(value, key, collection) { var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); }); return { 'criteria': criteria, 'index': ++index, 'value': value }; }); return baseSortBy(result, function(object, other) { return compareMultiple(object, other, orders); }); } module.exports = baseOrderBy; /***/ }), /***/ "./node_modules/lodash/_basePick.js": /*!******************************************!*\ !*** ./node_modules/lodash/_basePick.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var basePickBy = __webpack_require__(/*! ./_basePickBy */ "./node_modules/lodash/_basePickBy.js"), hasIn = __webpack_require__(/*! ./hasIn */ "./node_modules/lodash/hasIn.js"); /** * The base implementation of `_.pick` without support for individual * property identifiers. * * @private * @param {Object} object The source object. * @param {string[]} paths The property paths to pick. * @returns {Object} Returns the new object. */ function basePick(object, paths) { return basePickBy(object, paths, function(value, path) { return hasIn(object, path); }); } module.exports = basePick; /***/ }), /***/ "./node_modules/lodash/_basePickBy.js": /*!********************************************!*\ !*** ./node_modules/lodash/_basePickBy.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js"), baseSet = __webpack_require__(/*! ./_baseSet */ "./node_modules/lodash/_baseSet.js"), castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"); /** * The base implementation of `_.pickBy` without support for iteratee shorthands. * * @private * @param {Object} object The source object. * @param {string[]} paths The property paths to pick. * @param {Function} predicate The function invoked per property. * @returns {Object} Returns the new object. */ function basePickBy(object, paths, predicate) { var index = -1, length = paths.length, result = {}; while (++index < length) { var path = paths[index], value = baseGet(object, path); if (predicate(value, path)) { baseSet(result, castPath(path, object), value); } } return result; } module.exports = basePickBy; /***/ }), /***/ "./node_modules/lodash/_baseProperty.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_baseProperty.js ***! \**********************************************/ /***/ ((module) => { /** * The base implementation of `_.property` without support for deep paths. * * @private * @param {string} key The key of the property to get. * @returns {Function} Returns the new accessor function. */ function baseProperty(key) { return function(object) { return object == null ? undefined : object[key]; }; } module.exports = baseProperty; /***/ }), /***/ "./node_modules/lodash/_basePropertyDeep.js": /*!**************************************************!*\ !*** ./node_modules/lodash/_basePropertyDeep.js ***! \**************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js"); /** * A specialized version of `baseProperty` which supports deep paths. * * @private * @param {Array|string} path The path of the property to get. * @returns {Function} Returns the new accessor function. */ function basePropertyDeep(path) { return function(object) { return baseGet(object, path); }; } module.exports = basePropertyDeep; /***/ }), /***/ "./node_modules/lodash/_baseRest.js": /*!******************************************!*\ !*** ./node_modules/lodash/_baseRest.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var identity = __webpack_require__(/*! ./identity */ "./node_modules/lodash/identity.js"), overRest = __webpack_require__(/*! ./_overRest */ "./node_modules/lodash/_overRest.js"), setToString = __webpack_require__(/*! ./_setToString */ "./node_modules/lodash/_setToString.js"); /** * The base implementation of `_.rest` which doesn't validate or coerce arguments. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @returns {Function} Returns the new function. */ function baseRest(func, start) { return setToString(overRest(func, start, identity), func + ''); } module.exports = baseRest; /***/ }), /***/ "./node_modules/lodash/_baseSet.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_baseSet.js ***! \*****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var assignValue = __webpack_require__(/*! ./_assignValue */ "./node_modules/lodash/_assignValue.js"), castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"), isIndex = __webpack_require__(/*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"), isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js"); /** * The base implementation of `_.set`. * * @private * @param {Object} object The object to modify. * @param {Array|string} path The path of the property to set. * @param {*} value The value to set. * @param {Function} [customizer] The function to customize path creation. * @returns {Object} Returns `object`. */ function baseSet(object, path, value, customizer) { if (!isObject(object)) { return object; } path = castPath(path, object); var index = -1, length = path.length, lastIndex = length - 1, nested = object; while (nested != null && ++index < length) { var key = toKey(path[index]), newValue = value; if (key === '__proto__' || key === 'constructor' || key === 'prototype') { return object; } if (index != lastIndex) { var objValue = nested[key]; newValue = customizer ? customizer(objValue, key, nested) : undefined; if (newValue === undefined) { newValue = isObject(objValue) ? objValue : (isIndex(path[index + 1]) ? [] : {}); } } assignValue(nested, key, newValue); nested = nested[key]; } return object; } module.exports = baseSet; /***/ }), /***/ "./node_modules/lodash/_baseSetToString.js": /*!*************************************************!*\ !*** ./node_modules/lodash/_baseSetToString.js ***! \*************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var constant = __webpack_require__(/*! ./constant */ "./node_modules/lodash/constant.js"), defineProperty = __webpack_require__(/*! ./_defineProperty */ "./node_modules/lodash/_defineProperty.js"), identity = __webpack_require__(/*! ./identity */ "./node_modules/lodash/identity.js"); /** * The base implementation of `setToString` without support for hot loop shorting. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ var baseSetToString = !defineProperty ? identity : function(func, string) { return defineProperty(func, 'toString', { 'configurable': true, 'enumerable': false, 'value': constant(string), 'writable': true }); }; module.exports = baseSetToString; /***/ }), /***/ "./node_modules/lodash/_baseSortBy.js": /*!********************************************!*\ !*** ./node_modules/lodash/_baseSortBy.js ***! \********************************************/ /***/ ((module) => { /** * The base implementation of `_.sortBy` which uses `comparer` to define the * sort order of `array` and replaces criteria objects with their corresponding * values. * * @private * @param {Array} array The array to sort. * @param {Function} comparer The function to define sort order. * @returns {Array} Returns `array`. */ function baseSortBy(array, comparer) { var length = array.length; array.sort(comparer); while (length--) { array[length] = array[length].value; } return array; } module.exports = baseSortBy; /***/ }), /***/ "./node_modules/lodash/_baseTimes.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_baseTimes.js ***! \*******************************************/ /***/ ((module) => { /** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. * * @private * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */ function baseTimes(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } module.exports = baseTimes; /***/ }), /***/ "./node_modules/lodash/_baseToString.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_baseToString.js ***! \**********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"), isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */ function baseToString(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } if (isArray(value)) { // Recursively convert values (susceptible to call stack limits). return arrayMap(value, baseToString) + ''; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } module.exports = baseToString; /***/ }), /***/ "./node_modules/lodash/_baseUnary.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_baseUnary.js ***! \*******************************************/ /***/ ((module) => { /** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ function baseUnary(func) { return function(value) { return func(value); }; } module.exports = baseUnary; /***/ }), /***/ "./node_modules/lodash/_baseUniq.js": /*!******************************************!*\ !*** ./node_modules/lodash/_baseUniq.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var SetCache = __webpack_require__(/*! ./_SetCache */ "./node_modules/lodash/_SetCache.js"), arrayIncludes = __webpack_require__(/*! ./_arrayIncludes */ "./node_modules/lodash/_arrayIncludes.js"), arrayIncludesWith = __webpack_require__(/*! ./_arrayIncludesWith */ "./node_modules/lodash/_arrayIncludesWith.js"), cacheHas = __webpack_require__(/*! ./_cacheHas */ "./node_modules/lodash/_cacheHas.js"), createSet = __webpack_require__(/*! ./_createSet */ "./node_modules/lodash/_createSet.js"), setToArray = __webpack_require__(/*! ./_setToArray */ "./node_modules/lodash/_setToArray.js"); /** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200; /** * The base implementation of `_.uniqBy` without support for iteratee shorthands. * * @private * @param {Array} array The array to inspect. * @param {Function} [iteratee] The iteratee invoked per element. * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new duplicate free array. */ function baseUniq(array, iteratee, comparator) { var index = -1, includes = arrayIncludes, length = array.length, isCommon = true, result = [], seen = result; if (comparator) { isCommon = false; includes = arrayIncludesWith; } else if (length >= LARGE_ARRAY_SIZE) { var set = iteratee ? null : createSet(array); if (set) { return setToArray(set); } isCommon = false; includes = cacheHas; seen = new SetCache; } else { seen = iteratee ? [] : result; } outer: while (++index < length) { var value = array[index], computed = iteratee ? iteratee(value) : value; value = (comparator || value !== 0) ? value : 0; if (isCommon && computed === computed) { var seenIndex = seen.length; while (seenIndex--) { if (seen[seenIndex] === computed) { continue outer; } } if (iteratee) { seen.push(computed); } result.push(value); } else if (!includes(seen, computed, comparator)) { if (seen !== result) { seen.push(computed); } result.push(value); } } return result; } module.exports = baseUniq; /***/ }), /***/ "./node_modules/lodash/_cacheHas.js": /*!******************************************!*\ !*** ./node_modules/lodash/_cacheHas.js ***! \******************************************/ /***/ ((module) => { /** * Checks if a `cache` value for `key` exists. * * @private * @param {Object} cache The cache to query. * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function cacheHas(cache, key) { return cache.has(key); } module.exports = cacheHas; /***/ }), /***/ "./node_modules/lodash/_castPath.js": /*!******************************************!*\ !*** ./node_modules/lodash/_castPath.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), isKey = __webpack_require__(/*! ./_isKey */ "./node_modules/lodash/_isKey.js"), stringToPath = __webpack_require__(/*! ./_stringToPath */ "./node_modules/lodash/_stringToPath.js"), toString = __webpack_require__(/*! ./toString */ "./node_modules/lodash/toString.js"); /** * Casts `value` to a path array if it's not one. * * @private * @param {*} value The value to inspect. * @param {Object} [object] The object to query keys on. * @returns {Array} Returns the cast property path array. */ function castPath(value, object) { if (isArray(value)) { return value; } return isKey(value, object) ? [value] : stringToPath(toString(value)); } module.exports = castPath; /***/ }), /***/ "./node_modules/lodash/_cloneArrayBuffer.js": /*!**************************************************!*\ !*** ./node_modules/lodash/_cloneArrayBuffer.js ***! \**************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var Uint8Array = __webpack_require__(/*! ./_Uint8Array */ "./node_modules/lodash/_Uint8Array.js"); /** * Creates a clone of `arrayBuffer`. * * @private * @param {ArrayBuffer} arrayBuffer The array buffer to clone. * @returns {ArrayBuffer} Returns the cloned array buffer. */ function cloneArrayBuffer(arrayBuffer) { var result = new arrayBuffer.constructor(arrayBuffer.byteLength); new Uint8Array(result).set(new Uint8Array(arrayBuffer)); return result; } module.exports = cloneArrayBuffer; /***/ }), /***/ "./node_modules/lodash/_cloneBuffer.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_cloneBuffer.js ***! \*********************************************/ /***/ ((module, exports, __webpack_require__) => { /* module decorator */ module = __webpack_require__.nmd(module); var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined, allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; /** * Creates a clone of `buffer`. * * @private * @param {Buffer} buffer The buffer to clone. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Buffer} Returns the cloned buffer. */ function cloneBuffer(buffer, isDeep) { if (isDeep) { return buffer.slice(); } var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); buffer.copy(result); return result; } module.exports = cloneBuffer; /***/ }), /***/ "./node_modules/lodash/_cloneTypedArray.js": /*!*************************************************!*\ !*** ./node_modules/lodash/_cloneTypedArray.js ***! \*************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var cloneArrayBuffer = __webpack_require__(/*! ./_cloneArrayBuffer */ "./node_modules/lodash/_cloneArrayBuffer.js"); /** * Creates a clone of `typedArray`. * * @private * @param {Object} typedArray The typed array to clone. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the cloned typed array. */ function cloneTypedArray(typedArray, isDeep) { var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); } module.exports = cloneTypedArray; /***/ }), /***/ "./node_modules/lodash/_compareAscending.js": /*!**************************************************!*\ !*** ./node_modules/lodash/_compareAscending.js ***! \**************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); /** * Compares values to sort them in ascending order. * * @private * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {number} Returns the sort order indicator for `value`. */ function compareAscending(value, other) { if (value !== other) { var valIsDefined = value !== undefined, valIsNull = value === null, valIsReflexive = value === value, valIsSymbol = isSymbol(value); var othIsDefined = other !== undefined, othIsNull = other === null, othIsReflexive = other === other, othIsSymbol = isSymbol(other); if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || (valIsNull && othIsDefined && othIsReflexive) || (!valIsDefined && othIsReflexive) || !valIsReflexive) { return 1; } if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || (othIsNull && valIsDefined && valIsReflexive) || (!othIsDefined && valIsReflexive) || !othIsReflexive) { return -1; } } return 0; } module.exports = compareAscending; /***/ }), /***/ "./node_modules/lodash/_compareMultiple.js": /*!*************************************************!*\ !*** ./node_modules/lodash/_compareMultiple.js ***! \*************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var compareAscending = __webpack_require__(/*! ./_compareAscending */ "./node_modules/lodash/_compareAscending.js"); /** * Used by `_.orderBy` to compare multiple properties of a value to another * and stable sort them. * * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, * specify an order of "desc" for descending or "asc" for ascending sort order * of corresponding values. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {boolean[]|string[]} orders The order to sort by for each property. * @returns {number} Returns the sort order indicator for `object`. */ function compareMultiple(object, other, orders) { var index = -1, objCriteria = object.criteria, othCriteria = other.criteria, length = objCriteria.length, ordersLength = orders.length; while (++index < length) { var result = compareAscending(objCriteria[index], othCriteria[index]); if (result) { if (index >= ordersLength) { return result; } var order = orders[index]; return result * (order == 'desc' ? -1 : 1); } } // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications // that causes it, under certain circumstances, to provide the same value for // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 // for more details. // // This also ensures a stable sort in V8 and other engines. // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. return object.index - other.index; } module.exports = compareMultiple; /***/ }), /***/ "./node_modules/lodash/_copyArray.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_copyArray.js ***! \*******************************************/ /***/ ((module) => { /** * Copies the values of `source` to `array`. * * @private * @param {Array} source The array to copy values from. * @param {Array} [array=[]] The array to copy values to. * @returns {Array} Returns `array`. */ function copyArray(source, array) { var index = -1, length = source.length; array || (array = Array(length)); while (++index < length) { array[index] = source[index]; } return array; } module.exports = copyArray; /***/ }), /***/ "./node_modules/lodash/_copyObject.js": /*!********************************************!*\ !*** ./node_modules/lodash/_copyObject.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var assignValue = __webpack_require__(/*! ./_assignValue */ "./node_modules/lodash/_assignValue.js"), baseAssignValue = __webpack_require__(/*! ./_baseAssignValue */ "./node_modules/lodash/_baseAssignValue.js"); /** * Copies properties of `source` to `object`. * * @private * @param {Object} source The object to copy properties from. * @param {Array} props The property identifiers to copy. * @param {Object} [object={}] The object to copy properties to. * @param {Function} [customizer] The function to customize copied values. * @returns {Object} Returns `object`. */ function copyObject(source, props, object, customizer) { var isNew = !object; object || (object = {}); var index = -1, length = props.length; while (++index < length) { var key = props[index]; var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined; if (newValue === undefined) { newValue = source[key]; } if (isNew) { baseAssignValue(object, key, newValue); } else { assignValue(object, key, newValue); } } return object; } module.exports = copyObject; /***/ }), /***/ "./node_modules/lodash/_coreJsData.js": /*!********************************************!*\ !*** ./node_modules/lodash/_coreJsData.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); /** Used to detect overreaching core-js shims. */ var coreJsData = root['__core-js_shared__']; module.exports = coreJsData; /***/ }), /***/ "./node_modules/lodash/_createAssigner.js": /*!************************************************!*\ !*** ./node_modules/lodash/_createAssigner.js ***! \************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseRest = __webpack_require__(/*! ./_baseRest */ "./node_modules/lodash/_baseRest.js"), isIterateeCall = __webpack_require__(/*! ./_isIterateeCall */ "./node_modules/lodash/_isIterateeCall.js"); /** * Creates a function like `_.assign`. * * @private * @param {Function} assigner The function to assign values. * @returns {Function} Returns the new assigner function. */ function createAssigner(assigner) { return baseRest(function(object, sources) { var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined, guard = length > 2 ? sources[2] : undefined; customizer = (assigner.length > 3 && typeof customizer == 'function') ? (length--, customizer) : undefined; if (guard && isIterateeCall(sources[0], sources[1], guard)) { customizer = length < 3 ? undefined : customizer; length = 1; } object = Object(object); while (++index < length) { var source = sources[index]; if (source) { assigner(object, source, index, customizer); } } return object; }); } module.exports = createAssigner; /***/ }), /***/ "./node_modules/lodash/_createBaseEach.js": /*!************************************************!*\ !*** ./node_modules/lodash/_createBaseEach.js ***! \************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"); /** * Creates a `baseEach` or `baseEachRight` function. * * @private * @param {Function} eachFunc The function to iterate over a collection. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ function createBaseEach(eachFunc, fromRight) { return function(collection, iteratee) { if (collection == null) { return collection; } if (!isArrayLike(collection)) { return eachFunc(collection, iteratee); } var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection); while ((fromRight ? index-- : ++index < length)) { if (iteratee(iterable[index], index, iterable) === false) { break; } } return collection; }; } module.exports = createBaseEach; /***/ }), /***/ "./node_modules/lodash/_createBaseFor.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_createBaseFor.js ***! \***********************************************/ /***/ ((module) => { /** * Creates a base function for methods like `_.forIn` and `_.forOwn`. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ function createBaseFor(fromRight) { return function(object, iteratee, keysFunc) { var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; while (length--) { var key = props[fromRight ? length : ++index]; if (iteratee(iterable[key], key, iterable) === false) { break; } } return object; }; } module.exports = createBaseFor; /***/ }), /***/ "./node_modules/lodash/_createSet.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_createSet.js ***! \*******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var Set = __webpack_require__(/*! ./_Set */ "./node_modules/lodash/_Set.js"), noop = __webpack_require__(/*! ./noop */ "./node_modules/lodash/noop.js"), setToArray = __webpack_require__(/*! ./_setToArray */ "./node_modules/lodash/_setToArray.js"); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** * Creates a set object of `values`. * * @private * @param {Array} values The values to add to the set. * @returns {Object} Returns the new set. */ var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { return new Set(values); }; module.exports = createSet; /***/ }), /***/ "./node_modules/lodash/_defineProperty.js": /*!************************************************!*\ !*** ./node_modules/lodash/_defineProperty.js ***! \************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"); var defineProperty = (function() { try { var func = getNative(Object, 'defineProperty'); func({}, '', {}); return func; } catch (e) {} }()); module.exports = defineProperty; /***/ }), /***/ "./node_modules/lodash/_equalArrays.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_equalArrays.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var SetCache = __webpack_require__(/*! ./_SetCache */ "./node_modules/lodash/_SetCache.js"), arraySome = __webpack_require__(/*! ./_arraySome */ "./node_modules/lodash/_arraySome.js"), cacheHas = __webpack_require__(/*! ./_cacheHas */ "./node_modules/lodash/_cacheHas.js"); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** * A specialized version of `baseIsEqualDeep` for arrays with support for * partial deep comparisons. * * @private * @param {Array} array The array to compare. * @param {Array} other The other array to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `array` and `other` objects. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. */ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } // Check that cyclic values are equal. var arrStacked = stack.get(array); var othStacked = stack.get(other); if (arrStacked && othStacked) { return arrStacked == other && othStacked == array; } var index = -1, result = true, seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; stack.set(array, other); stack.set(other, array); // Ignore non-index properties. while (++index < arrLength) { var arrValue = array[index], othValue = other[index]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); } if (compared !== undefined) { if (compared) { continue; } result = false; break; } // Recursively compare arrays (susceptible to call stack limits). if (seen) { if (!arraySome(other, function(othValue, othIndex) { if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { return seen.push(othIndex); } })) { result = false; break; } } else if (!( arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack) )) { result = false; break; } } stack['delete'](array); stack['delete'](other); return result; } module.exports = equalArrays; /***/ }), /***/ "./node_modules/lodash/_equalByTag.js": /*!********************************************!*\ !*** ./node_modules/lodash/_equalByTag.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), Uint8Array = __webpack_require__(/*! ./_Uint8Array */ "./node_modules/lodash/_Uint8Array.js"), eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js"), equalArrays = __webpack_require__(/*! ./_equalArrays */ "./node_modules/lodash/_equalArrays.js"), mapToArray = __webpack_require__(/*! ./_mapToArray */ "./node_modules/lodash/_mapToArray.js"), setToArray = __webpack_require__(/*! ./_setToArray */ "./node_modules/lodash/_setToArray.js"); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** `Object#toString` result references. */ var boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', mapTag = '[object Map]', numberTag = '[object Number]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', symbolTag = '[object Symbol]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]'; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; /** * A specialized version of `baseIsEqualDeep` for comparing objects of * the same `toStringTag`. * * **Note:** This function only supports comparing values with tags of * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {string} tag The `toStringTag` of the objects to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { switch (tag) { case dataViewTag: if ((object.byteLength != other.byteLength) || (object.byteOffset != other.byteOffset)) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag: if ((object.byteLength != other.byteLength) || !equalFunc(new Uint8Array(object), new Uint8Array(other))) { return false; } return true; case boolTag: case dateTag: case numberTag: // Coerce booleans to `1` or `0` and dates to milliseconds. // Invalid dates are coerced to `NaN`. return eq(+object, +other); case errorTag: return object.name == other.name && object.message == other.message; case regexpTag: case stringTag: // Coerce regexes to strings and treat strings, primitives and objects, // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring // for more details. return object == (other + ''); case mapTag: var convert = mapToArray; case setTag: var isPartial = bitmask & COMPARE_PARTIAL_FLAG; convert || (convert = setToArray); if (object.size != other.size && !isPartial) { return false; } // Assume cyclic values are equal. var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits). stack.set(object, other); var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); stack['delete'](object); return result; case symbolTag: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } module.exports = equalByTag; /***/ }), /***/ "./node_modules/lodash/_equalObjects.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_equalObjects.js ***! \**********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var getAllKeys = __webpack_require__(/*! ./_getAllKeys */ "./node_modules/lodash/_getAllKeys.js"); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * A specialized version of `baseIsEqualDeep` for objects with support for * partial deep comparisons. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index = objLength; while (index--) { var key = objProps[index]; if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { return false; } } // Check that cyclic values are equal. var objStacked = stack.get(object); var othStacked = stack.get(other); if (objStacked && othStacked) { return objStacked == other && othStacked == object; } var result = true; stack.set(object, other); stack.set(other, object); var skipCtor = isPartial; while (++index < objLength) { key = objProps[index]; var objValue = object[key], othValue = other[key]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); } // Recursively compare objects (susceptible to call stack limits). if (!(compared === undefined ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) : compared )) { result = false; break; } skipCtor || (skipCtor = key == 'constructor'); } if (result && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal. if (objCtor != othCtor && ('constructor' in object && 'constructor' in other) && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) { result = false; } } stack['delete'](object); stack['delete'](other); return result; } module.exports = equalObjects; /***/ }), /***/ "./node_modules/lodash/_flatRest.js": /*!******************************************!*\ !*** ./node_modules/lodash/_flatRest.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var flatten = __webpack_require__(/*! ./flatten */ "./node_modules/lodash/flatten.js"), overRest = __webpack_require__(/*! ./_overRest */ "./node_modules/lodash/_overRest.js"), setToString = __webpack_require__(/*! ./_setToString */ "./node_modules/lodash/_setToString.js"); /** * A specialized version of `baseRest` which flattens the rest array. * * @private * @param {Function} func The function to apply a rest parameter to. * @returns {Function} Returns the new function. */ function flatRest(func) { return setToString(overRest(func, undefined, flatten), func + ''); } module.exports = flatRest; /***/ }), /***/ "./node_modules/lodash/_freeGlobal.js": /*!********************************************!*\ !*** ./node_modules/lodash/_freeGlobal.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g; module.exports = freeGlobal; /***/ }), /***/ "./node_modules/lodash/_getAllKeys.js": /*!********************************************!*\ !*** ./node_modules/lodash/_getAllKeys.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseGetAllKeys = __webpack_require__(/*! ./_baseGetAllKeys */ "./node_modules/lodash/_baseGetAllKeys.js"), getSymbols = __webpack_require__(/*! ./_getSymbols */ "./node_modules/lodash/_getSymbols.js"), keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js"); /** * Creates an array of own enumerable property names and symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names and symbols. */ function getAllKeys(object) { return baseGetAllKeys(object, keys, getSymbols); } module.exports = getAllKeys; /***/ }), /***/ "./node_modules/lodash/_getMapData.js": /*!********************************************!*\ !*** ./node_modules/lodash/_getMapData.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isKeyable = __webpack_require__(/*! ./_isKeyable */ "./node_modules/lodash/_isKeyable.js"); /** * Gets the data for `map`. * * @private * @param {Object} map The map to query. * @param {string} key The reference key. * @returns {*} Returns the map data. */ function getMapData(map, key) { var data = map.__data__; return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; } module.exports = getMapData; /***/ }), /***/ "./node_modules/lodash/_getMatchData.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_getMatchData.js ***! \**********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isStrictComparable = __webpack_require__(/*! ./_isStrictComparable */ "./node_modules/lodash/_isStrictComparable.js"), keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js"); /** * Gets the property names, values, and compare flags of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the match data of `object`. */ function getMatchData(object) { var result = keys(object), length = result.length; while (length--) { var key = result[length], value = object[key]; result[length] = [key, value, isStrictComparable(value)]; } return result; } module.exports = getMatchData; /***/ }), /***/ "./node_modules/lodash/_getNative.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_getNative.js ***! \*******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseIsNative = __webpack_require__(/*! ./_baseIsNative */ "./node_modules/lodash/_baseIsNative.js"), getValue = __webpack_require__(/*! ./_getValue */ "./node_modules/lodash/_getValue.js"); /** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ function getNative(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : undefined; } module.exports = getNative; /***/ }), /***/ "./node_modules/lodash/_getPrototype.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_getPrototype.js ***! \**********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var overArg = __webpack_require__(/*! ./_overArg */ "./node_modules/lodash/_overArg.js"); /** Built-in value references. */ var getPrototype = overArg(Object.getPrototypeOf, Object); module.exports = getPrototype; /***/ }), /***/ "./node_modules/lodash/_getRawTag.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_getRawTag.js ***! \*******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } module.exports = getRawTag; /***/ }), /***/ "./node_modules/lodash/_getSymbols.js": /*!********************************************!*\ !*** ./node_modules/lodash/_getSymbols.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var arrayFilter = __webpack_require__(/*! ./_arrayFilter */ "./node_modules/lodash/_arrayFilter.js"), stubArray = __webpack_require__(/*! ./stubArray */ "./node_modules/lodash/stubArray.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Built-in value references. */ var propertyIsEnumerable = objectProto.propertyIsEnumerable; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeGetSymbols = Object.getOwnPropertySymbols; /** * Creates an array of the own enumerable symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */ var getSymbols = !nativeGetSymbols ? stubArray : function(object) { if (object == null) { return []; } object = Object(object); return arrayFilter(nativeGetSymbols(object), function(symbol) { return propertyIsEnumerable.call(object, symbol); }); }; module.exports = getSymbols; /***/ }), /***/ "./node_modules/lodash/_getTag.js": /*!****************************************!*\ !*** ./node_modules/lodash/_getTag.js ***! \****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var DataView = __webpack_require__(/*! ./_DataView */ "./node_modules/lodash/_DataView.js"), Map = __webpack_require__(/*! ./_Map */ "./node_modules/lodash/_Map.js"), Promise = __webpack_require__(/*! ./_Promise */ "./node_modules/lodash/_Promise.js"), Set = __webpack_require__(/*! ./_Set */ "./node_modules/lodash/_Set.js"), WeakMap = __webpack_require__(/*! ./_WeakMap */ "./node_modules/lodash/_WeakMap.js"), baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), toSource = __webpack_require__(/*! ./_toSource */ "./node_modules/lodash/_toSource.js"); /** `Object#toString` result references. */ var mapTag = '[object Map]', objectTag = '[object Object]', promiseTag = '[object Promise]', setTag = '[object Set]', weakMapTag = '[object WeakMap]'; var dataViewTag = '[object DataView]'; /** Used to detect maps, sets, and weakmaps. */ var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map), promiseCtorString = toSource(Promise), setCtorString = toSource(Set), weakMapCtorString = toSource(WeakMap); /** * Gets the `toStringTag` of `value`. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ var getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || (Map && getTag(new Map) != mapTag) || (Promise && getTag(Promise.resolve()) != promiseTag) || (Set && getTag(new Set) != setTag) || (WeakMap && getTag(new WeakMap) != weakMapTag)) { getTag = function(value) { var result = baseGetTag(value), Ctor = result == objectTag ? value.constructor : undefined, ctorString = Ctor ? toSource(Ctor) : ''; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag; case mapCtorString: return mapTag; case promiseCtorString: return promiseTag; case setCtorString: return setTag; case weakMapCtorString: return weakMapTag; } } return result; }; } module.exports = getTag; /***/ }), /***/ "./node_modules/lodash/_getValue.js": /*!******************************************!*\ !*** ./node_modules/lodash/_getValue.js ***! \******************************************/ /***/ ((module) => { /** * Gets the value at `key` of `object`. * * @private * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function getValue(object, key) { return object == null ? undefined : object[key]; } module.exports = getValue; /***/ }), /***/ "./node_modules/lodash/_hasPath.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_hasPath.js ***! \*****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"), isArguments = __webpack_require__(/*! ./isArguments */ "./node_modules/lodash/isArguments.js"), isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), isIndex = __webpack_require__(/*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"), isLength = __webpack_require__(/*! ./isLength */ "./node_modules/lodash/isLength.js"), toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js"); /** * Checks if `path` exists on `object`. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @param {Function} hasFunc The function to check properties. * @returns {boolean} Returns `true` if `path` exists, else `false`. */ function hasPath(object, path, hasFunc) { path = castPath(path, object); var index = -1, length = path.length, result = false; while (++index < length) { var key = toKey(path[index]); if (!(result = object != null && hasFunc(object, key))) { break; } object = object[key]; } if (result || ++index != length) { return result; } length = object == null ? 0 : object.length; return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); } module.exports = hasPath; /***/ }), /***/ "./node_modules/lodash/_hashClear.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_hashClear.js ***! \*******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); /** * Removes all key-value entries from the hash. * * @private * @name clear * @memberOf Hash */ function hashClear() { this.__data__ = nativeCreate ? nativeCreate(null) : {}; this.size = 0; } module.exports = hashClear; /***/ }), /***/ "./node_modules/lodash/_hashDelete.js": /*!********************************************!*\ !*** ./node_modules/lodash/_hashDelete.js ***! \********************************************/ /***/ ((module) => { /** * Removes `key` and its value from the hash. * * @private * @name delete * @memberOf Hash * @param {Object} hash The hash to modify. * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function hashDelete(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } module.exports = hashDelete; /***/ }), /***/ "./node_modules/lodash/_hashGet.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_hashGet.js ***! \*****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Gets the hash value for `key`. * * @private * @name get * @memberOf Hash * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function hashGet(key) { var data = this.__data__; if (nativeCreate) { var result = data[key]; return result === HASH_UNDEFINED ? undefined : result; } return hasOwnProperty.call(data, key) ? data[key] : undefined; } module.exports = hashGet; /***/ }), /***/ "./node_modules/lodash/_hashHas.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_hashHas.js ***! \*****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Checks if a hash value for `key` exists. * * @private * @name has * @memberOf Hash * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function hashHas(key) { var data = this.__data__; return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); } module.exports = hashHas; /***/ }), /***/ "./node_modules/lodash/_hashSet.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_hashSet.js ***! \*****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** * Sets the hash `key` to `value`. * * @private * @name set * @memberOf Hash * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the hash instance. */ function hashSet(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; return this; } module.exports = hashSet; /***/ }), /***/ "./node_modules/lodash/_initCloneObject.js": /*!*************************************************!*\ !*** ./node_modules/lodash/_initCloneObject.js ***! \*************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseCreate = __webpack_require__(/*! ./_baseCreate */ "./node_modules/lodash/_baseCreate.js"), getPrototype = __webpack_require__(/*! ./_getPrototype */ "./node_modules/lodash/_getPrototype.js"), isPrototype = __webpack_require__(/*! ./_isPrototype */ "./node_modules/lodash/_isPrototype.js"); /** * Initializes an object clone. * * @private * @param {Object} object The object to clone. * @returns {Object} Returns the initialized clone. */ function initCloneObject(object) { return (typeof object.constructor == 'function' && !isPrototype(object)) ? baseCreate(getPrototype(object)) : {}; } module.exports = initCloneObject; /***/ }), /***/ "./node_modules/lodash/_isFlattenable.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_isFlattenable.js ***! \***********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), isArguments = __webpack_require__(/*! ./isArguments */ "./node_modules/lodash/isArguments.js"), isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"); /** Built-in value references. */ var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; /** * Checks if `value` is a flattenable `arguments` object or array. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. */ function isFlattenable(value) { return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); } module.exports = isFlattenable; /***/ }), /***/ "./node_modules/lodash/_isIndex.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_isIndex.js ***! \*****************************************/ /***/ ((module) => { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ function isIndex(value, length) { var type = typeof value; length = length == null ? MAX_SAFE_INTEGER : length; return !!length && (type == 'number' || (type != 'symbol' && reIsUint.test(value))) && (value > -1 && value % 1 == 0 && value < length); } module.exports = isIndex; /***/ }), /***/ "./node_modules/lodash/_isIterateeCall.js": /*!************************************************!*\ !*** ./node_modules/lodash/_isIterateeCall.js ***! \************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js"), isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"), isIndex = __webpack_require__(/*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"), isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"); /** * Checks if the given arguments are from an iteratee call. * * @private * @param {*} value The potential iteratee value argument. * @param {*} index The potential iteratee index or key argument. * @param {*} object The potential iteratee object argument. * @returns {boolean} Returns `true` if the arguments are from an iteratee call, * else `false`. */ function isIterateeCall(value, index, object) { if (!isObject(object)) { return false; } var type = typeof index; if (type == 'number' ? (isArrayLike(object) && isIndex(index, object.length)) : (type == 'string' && index in object) ) { return eq(object[index], value); } return false; } module.exports = isIterateeCall; /***/ }), /***/ "./node_modules/lodash/_isKey.js": /*!***************************************!*\ !*** ./node_modules/lodash/_isKey.js ***! \***************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"), isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); /** Used to match property names within property paths. */ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/; /** * Checks if `value` is a property name and not a property path. * * @private * @param {*} value The value to check. * @param {Object} [object] The object to query keys on. * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ function isKey(value, object) { if (isArray(value)) { return false; } var type = typeof value; if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || (object != null && value in Object(object)); } module.exports = isKey; /***/ }), /***/ "./node_modules/lodash/_isKeyable.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_isKeyable.js ***! \*******************************************/ /***/ ((module) => { /** * Checks if `value` is suitable for use as unique object key. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ function isKeyable(value) { var type = typeof value; return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') ? (value !== '__proto__') : (value === null); } module.exports = isKeyable; /***/ }), /***/ "./node_modules/lodash/_isMasked.js": /*!******************************************!*\ !*** ./node_modules/lodash/_isMasked.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var coreJsData = __webpack_require__(/*! ./_coreJsData */ "./node_modules/lodash/_coreJsData.js"); /** Used to detect methods masquerading as native. */ var maskSrcKey = (function() { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); return uid ? ('Symbol(src)_1.' + uid) : ''; }()); /** * Checks if `func` has its source masked. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ function isMasked(func) { return !!maskSrcKey && (maskSrcKey in func); } module.exports = isMasked; /***/ }), /***/ "./node_modules/lodash/_isPrototype.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_isPrototype.js ***! \*********************************************/ /***/ ((module) => { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ function isPrototype(value) { var Ctor = value && value.constructor, proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; return value === proto; } module.exports = isPrototype; /***/ }), /***/ "./node_modules/lodash/_isStrictComparable.js": /*!****************************************************!*\ !*** ./node_modules/lodash/_isStrictComparable.js ***! \****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"); /** * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` if suitable for strict * equality comparisons, else `false`. */ function isStrictComparable(value) { return value === value && !isObject(value); } module.exports = isStrictComparable; /***/ }), /***/ "./node_modules/lodash/_listCacheClear.js": /*!************************************************!*\ !*** ./node_modules/lodash/_listCacheClear.js ***! \************************************************/ /***/ ((module) => { /** * Removes all key-value entries from the list cache. * * @private * @name clear * @memberOf ListCache */ function listCacheClear() { this.__data__ = []; this.size = 0; } module.exports = listCacheClear; /***/ }), /***/ "./node_modules/lodash/_listCacheDelete.js": /*!*************************************************!*\ !*** ./node_modules/lodash/_listCacheDelete.js ***! \*************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); /** Used for built-in method references. */ var arrayProto = Array.prototype; /** Built-in value references. */ var splice = arrayProto.splice; /** * Removes `key` and its value from the list cache. * * @private * @name delete * @memberOf ListCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function listCacheDelete(key) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } module.exports = listCacheDelete; /***/ }), /***/ "./node_modules/lodash/_listCacheGet.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_listCacheGet.js ***! \**********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); /** * Gets the list cache value for `key`. * * @private * @name get * @memberOf ListCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function listCacheGet(key) { var data = this.__data__, index = assocIndexOf(data, key); return index < 0 ? undefined : data[index][1]; } module.exports = listCacheGet; /***/ }), /***/ "./node_modules/lodash/_listCacheHas.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_listCacheHas.js ***! \**********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); /** * Checks if a list cache value for `key` exists. * * @private * @name has * @memberOf ListCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function listCacheHas(key) { return assocIndexOf(this.__data__, key) > -1; } module.exports = listCacheHas; /***/ }), /***/ "./node_modules/lodash/_listCacheSet.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_listCacheSet.js ***! \**********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); /** * Sets the list cache `key` to `value`. * * @private * @name set * @memberOf ListCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the list cache instance. */ function listCacheSet(key, value) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { ++this.size; data.push([key, value]); } else { data[index][1] = value; } return this; } module.exports = listCacheSet; /***/ }), /***/ "./node_modules/lodash/_mapCacheClear.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_mapCacheClear.js ***! \***********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var Hash = __webpack_require__(/*! ./_Hash */ "./node_modules/lodash/_Hash.js"), ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"), Map = __webpack_require__(/*! ./_Map */ "./node_modules/lodash/_Map.js"); /** * Removes all key-value entries from the map. * * @private * @name clear * @memberOf MapCache */ function mapCacheClear() { this.size = 0; this.__data__ = { 'hash': new Hash, 'map': new (Map || ListCache), 'string': new Hash }; } module.exports = mapCacheClear; /***/ }), /***/ "./node_modules/lodash/_mapCacheDelete.js": /*!************************************************!*\ !*** ./node_modules/lodash/_mapCacheDelete.js ***! \************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); /** * Removes `key` and its value from the map. * * @private * @name delete * @memberOf MapCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function mapCacheDelete(key) { var result = getMapData(this, key)['delete'](key); this.size -= result ? 1 : 0; return result; } module.exports = mapCacheDelete; /***/ }), /***/ "./node_modules/lodash/_mapCacheGet.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_mapCacheGet.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); /** * Gets the map value for `key`. * * @private * @name get * @memberOf MapCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function mapCacheGet(key) { return getMapData(this, key).get(key); } module.exports = mapCacheGet; /***/ }), /***/ "./node_modules/lodash/_mapCacheHas.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_mapCacheHas.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); /** * Checks if a map value for `key` exists. * * @private * @name has * @memberOf MapCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function mapCacheHas(key) { return getMapData(this, key).has(key); } module.exports = mapCacheHas; /***/ }), /***/ "./node_modules/lodash/_mapCacheSet.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_mapCacheSet.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); /** * Sets the map `key` to `value`. * * @private * @name set * @memberOf MapCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the map cache instance. */ function mapCacheSet(key, value) { var data = getMapData(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } module.exports = mapCacheSet; /***/ }), /***/ "./node_modules/lodash/_mapToArray.js": /*!********************************************!*\ !*** ./node_modules/lodash/_mapToArray.js ***! \********************************************/ /***/ ((module) => { /** * Converts `map` to its key-value pairs. * * @private * @param {Object} map The map to convert. * @returns {Array} Returns the key-value pairs. */ function mapToArray(map) { var index = -1, result = Array(map.size); map.forEach(function(value, key) { result[++index] = [key, value]; }); return result; } module.exports = mapToArray; /***/ }), /***/ "./node_modules/lodash/_matchesStrictComparable.js": /*!*********************************************************!*\ !*** ./node_modules/lodash/_matchesStrictComparable.js ***! \*********************************************************/ /***/ ((module) => { /** * A specialized version of `matchesProperty` for source values suitable * for strict equality comparisons, i.e. `===`. * * @private * @param {string} key The key of the property to get. * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */ function matchesStrictComparable(key, srcValue) { return function(object) { if (object == null) { return false; } return object[key] === srcValue && (srcValue !== undefined || (key in Object(object))); }; } module.exports = matchesStrictComparable; /***/ }), /***/ "./node_modules/lodash/_memoizeCapped.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_memoizeCapped.js ***! \***********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var memoize = __webpack_require__(/*! ./memoize */ "./node_modules/lodash/memoize.js"); /** Used as the maximum memoize cache size. */ var MAX_MEMOIZE_SIZE = 500; /** * A specialized version of `_.memoize` which clears the memoized function's * cache when it exceeds `MAX_MEMOIZE_SIZE`. * * @private * @param {Function} func The function to have its output memoized. * @returns {Function} Returns the new memoized function. */ function memoizeCapped(func) { var result = memoize(func, function(key) { if (cache.size === MAX_MEMOIZE_SIZE) { cache.clear(); } return key; }); var cache = result.cache; return result; } module.exports = memoizeCapped; /***/ }), /***/ "./node_modules/lodash/_nativeCreate.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_nativeCreate.js ***! \**********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"); /* Built-in method references that are verified to be native. */ var nativeCreate = getNative(Object, 'create'); module.exports = nativeCreate; /***/ }), /***/ "./node_modules/lodash/_nativeKeys.js": /*!********************************************!*\ !*** ./node_modules/lodash/_nativeKeys.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var overArg = __webpack_require__(/*! ./_overArg */ "./node_modules/lodash/_overArg.js"); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeKeys = overArg(Object.keys, Object); module.exports = nativeKeys; /***/ }), /***/ "./node_modules/lodash/_nativeKeysIn.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_nativeKeysIn.js ***! \**********************************************/ /***/ ((module) => { /** * This function is like * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * except that it includes inherited enumerable properties. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function nativeKeysIn(object) { var result = []; if (object != null) { for (var key in Object(object)) { result.push(key); } } return result; } module.exports = nativeKeysIn; /***/ }), /***/ "./node_modules/lodash/_nodeUtil.js": /*!******************************************!*\ !*** ./node_modules/lodash/_nodeUtil.js ***! \******************************************/ /***/ ((module, exports, __webpack_require__) => { /* module decorator */ module = __webpack_require__.nmd(module); var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./node_modules/lodash/_freeGlobal.js"); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process; /** Used to access faster Node.js helpers. */ var nodeUtil = (function() { try { // Use `util.types` for Node.js 10+. var types = freeModule && freeModule.require && freeModule.require('util').types; if (types) { return types; } // Legacy `process.binding('util')` for Node.js < 10. return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }()); module.exports = nodeUtil; /***/ }), /***/ "./node_modules/lodash/_objectToString.js": /*!************************************************!*\ !*** ./node_modules/lodash/_objectToString.js ***! \************************************************/ /***/ ((module) => { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return nativeObjectToString.call(value); } module.exports = objectToString; /***/ }), /***/ "./node_modules/lodash/_overArg.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_overArg.js ***! \*****************************************/ /***/ ((module) => { /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } module.exports = overArg; /***/ }), /***/ "./node_modules/lodash/_overRest.js": /*!******************************************!*\ !*** ./node_modules/lodash/_overRest.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var apply = __webpack_require__(/*! ./_apply */ "./node_modules/lodash/_apply.js"); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max; /** * A specialized version of `baseRest` which transforms the rest array. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @param {Function} transform The rest array transform. * @returns {Function} Returns the new function. */ function overRest(func, start, transform) { start = nativeMax(start === undefined ? (func.length - 1) : start, 0); return function() { var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array(length); while (++index < length) { array[index] = args[start + index]; } index = -1; var otherArgs = Array(start + 1); while (++index < start) { otherArgs[index] = args[index]; } otherArgs[start] = transform(array); return apply(func, this, otherArgs); }; } module.exports = overRest; /***/ }), /***/ "./node_modules/lodash/_root.js": /*!**************************************!*\ !*** ./node_modules/lodash/_root.js ***! \**************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./node_modules/lodash/_freeGlobal.js"); /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function('return this')(); module.exports = root; /***/ }), /***/ "./node_modules/lodash/_safeGet.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_safeGet.js ***! \*****************************************/ /***/ ((module) => { /** * Gets the value at `key`, unless `key` is "__proto__" or "constructor". * * @private * @param {Object} object The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function safeGet(object, key) { if (key === 'constructor' && typeof object[key] === 'function') { return; } if (key == '__proto__') { return; } return object[key]; } module.exports = safeGet; /***/ }), /***/ "./node_modules/lodash/_setCacheAdd.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_setCacheAdd.js ***! \*********************************************/ /***/ ((module) => { /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** * Adds `value` to the array cache. * * @private * @name add * @memberOf SetCache * @alias push * @param {*} value The value to cache. * @returns {Object} Returns the cache instance. */ function setCacheAdd(value) { this.__data__.set(value, HASH_UNDEFINED); return this; } module.exports = setCacheAdd; /***/ }), /***/ "./node_modules/lodash/_setCacheHas.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_setCacheHas.js ***! \*********************************************/ /***/ ((module) => { /** * Checks if `value` is in the array cache. * * @private * @name has * @memberOf SetCache * @param {*} value The value to search for. * @returns {number} Returns `true` if `value` is found, else `false`. */ function setCacheHas(value) { return this.__data__.has(value); } module.exports = setCacheHas; /***/ }), /***/ "./node_modules/lodash/_setToArray.js": /*!********************************************!*\ !*** ./node_modules/lodash/_setToArray.js ***! \********************************************/ /***/ ((module) => { /** * Converts `set` to an array of its values. * * @private * @param {Object} set The set to convert. * @returns {Array} Returns the values. */ function setToArray(set) { var index = -1, result = Array(set.size); set.forEach(function(value) { result[++index] = value; }); return result; } module.exports = setToArray; /***/ }), /***/ "./node_modules/lodash/_setToString.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_setToString.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseSetToString = __webpack_require__(/*! ./_baseSetToString */ "./node_modules/lodash/_baseSetToString.js"), shortOut = __webpack_require__(/*! ./_shortOut */ "./node_modules/lodash/_shortOut.js"); /** * Sets the `toString` method of `func` to return `string`. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ var setToString = shortOut(baseSetToString); module.exports = setToString; /***/ }), /***/ "./node_modules/lodash/_shortOut.js": /*!******************************************!*\ !*** ./node_modules/lodash/_shortOut.js ***! \******************************************/ /***/ ((module) => { /** Used to detect hot functions by number of calls within a span of milliseconds. */ var HOT_COUNT = 800, HOT_SPAN = 16; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeNow = Date.now; /** * Creates a function that'll short out and invoke `identity` instead * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` * milliseconds. * * @private * @param {Function} func The function to restrict. * @returns {Function} Returns the new shortable function. */ function shortOut(func) { var count = 0, lastCalled = 0; return function() { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { return arguments[0]; } } else { count = 0; } return func.apply(undefined, arguments); }; } module.exports = shortOut; /***/ }), /***/ "./node_modules/lodash/_stackClear.js": /*!********************************************!*\ !*** ./node_modules/lodash/_stackClear.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"); /** * Removes all key-value entries from the stack. * * @private * @name clear * @memberOf Stack */ function stackClear() { this.__data__ = new ListCache; this.size = 0; } module.exports = stackClear; /***/ }), /***/ "./node_modules/lodash/_stackDelete.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_stackDelete.js ***! \*********************************************/ /***/ ((module) => { /** * Removes `key` and its value from the stack. * * @private * @name delete * @memberOf Stack * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function stackDelete(key) { var data = this.__data__, result = data['delete'](key); this.size = data.size; return result; } module.exports = stackDelete; /***/ }), /***/ "./node_modules/lodash/_stackGet.js": /*!******************************************!*\ !*** ./node_modules/lodash/_stackGet.js ***! \******************************************/ /***/ ((module) => { /** * Gets the stack value for `key`. * * @private * @name get * @memberOf Stack * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function stackGet(key) { return this.__data__.get(key); } module.exports = stackGet; /***/ }), /***/ "./node_modules/lodash/_stackHas.js": /*!******************************************!*\ !*** ./node_modules/lodash/_stackHas.js ***! \******************************************/ /***/ ((module) => { /** * Checks if a stack value for `key` exists. * * @private * @name has * @memberOf Stack * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function stackHas(key) { return this.__data__.has(key); } module.exports = stackHas; /***/ }), /***/ "./node_modules/lodash/_stackSet.js": /*!******************************************!*\ !*** ./node_modules/lodash/_stackSet.js ***! \******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"), Map = __webpack_require__(/*! ./_Map */ "./node_modules/lodash/_Map.js"), MapCache = __webpack_require__(/*! ./_MapCache */ "./node_modules/lodash/_MapCache.js"); /** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200; /** * Sets the stack `key` to `value`. * * @private * @name set * @memberOf Stack * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the stack cache instance. */ function stackSet(key, value) { var data = this.__data__; if (data instanceof ListCache) { var pairs = data.__data__; if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { pairs.push([key, value]); this.size = ++data.size; return this; } data = this.__data__ = new MapCache(pairs); } data.set(key, value); this.size = data.size; return this; } module.exports = stackSet; /***/ }), /***/ "./node_modules/lodash/_strictIndexOf.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_strictIndexOf.js ***! \***********************************************/ /***/ ((module) => { /** * A specialized version of `_.indexOf` which performs strict equality * comparisons of values, i.e. `===`. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function strictIndexOf(array, value, fromIndex) { var index = fromIndex - 1, length = array.length; while (++index < length) { if (array[index] === value) { return index; } } return -1; } module.exports = strictIndexOf; /***/ }), /***/ "./node_modules/lodash/_stringToPath.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_stringToPath.js ***! \**********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var memoizeCapped = __webpack_require__(/*! ./_memoizeCapped */ "./node_modules/lodash/_memoizeCapped.js"); /** Used to match property names within property paths. */ var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; /** Used to match backslashes in property paths. */ var reEscapeChar = /\\(\\)?/g; /** * Converts `string` to a property path array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the property path array. */ var stringToPath = memoizeCapped(function(string) { var result = []; if (string.charCodeAt(0) === 46 /* . */) { result.push(''); } string.replace(rePropName, function(match, number, quote, subString) { result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); }); return result; }); module.exports = stringToPath; /***/ }), /***/ "./node_modules/lodash/_toKey.js": /*!***************************************!*\ !*** ./node_modules/lodash/_toKey.js ***! \***************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** * Converts `value` to a string key if it's not a string or symbol. * * @private * @param {*} value The value to inspect. * @returns {string|symbol} Returns the key. */ function toKey(value) { if (typeof value == 'string' || isSymbol(value)) { return value; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } module.exports = toKey; /***/ }), /***/ "./node_modules/lodash/_toSource.js": /*!******************************************!*\ !*** ./node_modules/lodash/_toSource.js ***! \******************************************/ /***/ ((module) => { /** Used for built-in method references. */ var funcProto = Function.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** * Converts `func` to its source code. * * @private * @param {Function} func The function to convert. * @returns {string} Returns the source code. */ function toSource(func) { if (func != null) { try { return funcToString.call(func); } catch (e) {} try { return (func + ''); } catch (e) {} } return ''; } module.exports = toSource; /***/ }), /***/ "./node_modules/lodash/constant.js": /*!*****************************************!*\ !*** ./node_modules/lodash/constant.js ***! \*****************************************/ /***/ ((module) => { /** * Creates a function that returns `value`. * * @static * @memberOf _ * @since 2.4.0 * @category Util * @param {*} value The value to return from the new function. * @returns {Function} Returns the new constant function. * @example * * var objects = _.times(2, _.constant({ 'a': 1 })); * * console.log(objects); * // => [{ 'a': 1 }, { 'a': 1 }] * * console.log(objects[0] === objects[1]); * // => true */ function constant(value) { return function() { return value; }; } module.exports = constant; /***/ }), /***/ "./node_modules/lodash/eq.js": /*!***********************************!*\ !*** ./node_modules/lodash/eq.js ***! \***********************************/ /***/ ((module) => { /** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.eq(object, object); * // => true * * _.eq(object, other); * // => false * * _.eq('a', 'a'); * // => true * * _.eq('a', Object('a')); * // => false * * _.eq(NaN, NaN); * // => true */ function eq(value, other) { return value === other || (value !== value && other !== other); } module.exports = eq; /***/ }), /***/ "./node_modules/lodash/flatten.js": /*!****************************************!*\ !*** ./node_modules/lodash/flatten.js ***! \****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseFlatten = __webpack_require__(/*! ./_baseFlatten */ "./node_modules/lodash/_baseFlatten.js"); /** * Flattens `array` a single level deep. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to flatten. * @returns {Array} Returns the new flattened array. * @example * * _.flatten([1, [2, [3, [4]], 5]]); * // => [1, 2, [3, [4]], 5] */ function flatten(array) { var length = array == null ? 0 : array.length; return length ? baseFlatten(array, 1) : []; } module.exports = flatten; /***/ }), /***/ "./node_modules/lodash/get.js": /*!************************************!*\ !*** ./node_modules/lodash/get.js ***! \************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js"); /** * Gets the value at `path` of `object`. If the resolved value is * `undefined`, the `defaultValue` is returned in its place. * * @static * @memberOf _ * @since 3.7.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @param {*} [defaultValue] The value returned for `undefined` resolved values. * @returns {*} Returns the resolved value. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }] }; * * _.get(object, 'a[0].b.c'); * // => 3 * * _.get(object, ['a', '0', 'b', 'c']); * // => 3 * * _.get(object, 'a.b.c', 'default'); * // => 'default' */ function get(object, path, defaultValue) { var result = object == null ? undefined : baseGet(object, path); return result === undefined ? defaultValue : result; } module.exports = get; /***/ }), /***/ "./node_modules/lodash/hasIn.js": /*!**************************************!*\ !*** ./node_modules/lodash/hasIn.js ***! \**************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseHasIn = __webpack_require__(/*! ./_baseHasIn */ "./node_modules/lodash/_baseHasIn.js"), hasPath = __webpack_require__(/*! ./_hasPath */ "./node_modules/lodash/_hasPath.js"); /** * Checks if `path` is a direct or inherited property of `object`. * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @returns {boolean} Returns `true` if `path` exists, else `false`. * @example * * var object = _.create({ 'a': _.create({ 'b': 2 }) }); * * _.hasIn(object, 'a'); * // => true * * _.hasIn(object, 'a.b'); * // => true * * _.hasIn(object, ['a', 'b']); * // => true * * _.hasIn(object, 'b'); * // => false */ function hasIn(object, path) { return object != null && hasPath(object, path, baseHasIn); } module.exports = hasIn; /***/ }), /***/ "./node_modules/lodash/identity.js": /*!*****************************************!*\ !*** ./node_modules/lodash/identity.js ***! \*****************************************/ /***/ ((module) => { /** * This method returns the first argument it receives. * * @static * @since 0.1.0 * @memberOf _ * @category Util * @param {*} value Any value. * @returns {*} Returns `value`. * @example * * var object = { 'a': 1 }; * * console.log(_.identity(object) === object); * // => true */ function identity(value) { return value; } module.exports = identity; /***/ }), /***/ "./node_modules/lodash/isArguments.js": /*!********************************************!*\ !*** ./node_modules/lodash/isArguments.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseIsArguments = __webpack_require__(/*! ./_baseIsArguments */ "./node_modules/lodash/_baseIsArguments.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Built-in value references. */ var propertyIsEnumerable = objectProto.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; module.exports = isArguments; /***/ }), /***/ "./node_modules/lodash/isArray.js": /*!****************************************!*\ !*** ./node_modules/lodash/isArray.js ***! \****************************************/ /***/ ((module) => { /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray = Array.isArray; module.exports = isArray; /***/ }), /***/ "./node_modules/lodash/isArrayLike.js": /*!********************************************!*\ !*** ./node_modules/lodash/isArrayLike.js ***! \********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isFunction = __webpack_require__(/*! ./isFunction */ "./node_modules/lodash/isFunction.js"), isLength = __webpack_require__(/*! ./isLength */ "./node_modules/lodash/isLength.js"); /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */ function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } module.exports = isArrayLike; /***/ }), /***/ "./node_modules/lodash/isArrayLikeObject.js": /*!**************************************************!*\ !*** ./node_modules/lodash/isArrayLikeObject.js ***! \**************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); /** * This method is like `_.isArrayLike` except that it also checks if `value` * is an object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array-like object, * else `false`. * @example * * _.isArrayLikeObject([1, 2, 3]); * // => true * * _.isArrayLikeObject(document.body.children); * // => true * * _.isArrayLikeObject('abc'); * // => false * * _.isArrayLikeObject(_.noop); * // => false */ function isArrayLikeObject(value) { return isObjectLike(value) && isArrayLike(value); } module.exports = isArrayLikeObject; /***/ }), /***/ "./node_modules/lodash/isBuffer.js": /*!*****************************************!*\ !*** ./node_modules/lodash/isBuffer.js ***! \*****************************************/ /***/ ((module, exports, __webpack_require__) => { /* module decorator */ module = __webpack_require__.nmd(module); var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"), stubFalse = __webpack_require__(/*! ./stubFalse */ "./node_modules/lodash/stubFalse.js"); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; /** * Checks if `value` is a buffer. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * * _.isBuffer(new Buffer(2)); * // => true * * _.isBuffer(new Uint8Array(2)); * // => false */ var isBuffer = nativeIsBuffer || stubFalse; module.exports = isBuffer; /***/ }), /***/ "./node_modules/lodash/isEqual.js": /*!****************************************!*\ !*** ./node_modules/lodash/isEqual.js ***! \****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseIsEqual = __webpack_require__(/*! ./_baseIsEqual */ "./node_modules/lodash/_baseIsEqual.js"); /** * Performs a deep comparison between two values to determine if they are * equivalent. * * **Note:** This method supports comparing arrays, array buffers, booleans, * date objects, error objects, maps, numbers, `Object` objects, regexes, * sets, strings, symbols, and typed arrays. `Object` objects are compared * by their own, not inherited, enumerable properties. Functions and DOM * nodes are compared by strict equality, i.e. `===`. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.isEqual(object, other); * // => true * * object === other; * // => false */ function isEqual(value, other) { return baseIsEqual(value, other); } module.exports = isEqual; /***/ }), /***/ "./node_modules/lodash/isFunction.js": /*!*******************************************!*\ !*** ./node_modules/lodash/isFunction.js ***! \*******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"); /** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]', proxyTag = '[object Proxy]'; /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction(value) { if (!isObject(value)) { return false; } // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag = baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } module.exports = isFunction; /***/ }), /***/ "./node_modules/lodash/isLength.js": /*!*****************************************!*\ !*** ./node_modules/lodash/isLength.js ***! \*****************************************/ /***/ ((module) => { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */ function isLength(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } module.exports = isLength; /***/ }), /***/ "./node_modules/lodash/isObject.js": /*!*****************************************!*\ !*** ./node_modules/lodash/isObject.js ***! \*****************************************/ /***/ ((module) => { /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject(value) { var type = typeof value; return value != null && (type == 'object' || type == 'function'); } module.exports = isObject; /***/ }), /***/ "./node_modules/lodash/isObjectLike.js": /*!*********************************************!*\ !*** ./node_modules/lodash/isObjectLike.js ***! \*********************************************/ /***/ ((module) => { /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && typeof value == 'object'; } module.exports = isObjectLike; /***/ }), /***/ "./node_modules/lodash/isPlainObject.js": /*!**********************************************!*\ !*** ./node_modules/lodash/isPlainObject.js ***! \**********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), getPrototype = __webpack_require__(/*! ./_getPrototype */ "./node_modules/lodash/_getPrototype.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var objectTag = '[object Object]'; /** Used for built-in method references. */ var funcProto = Function.prototype, objectProto = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Used to infer the `Object` constructor. */ var objectCtorString = funcToString.call(Object); /** * Checks if `value` is a plain object, that is, an object created by the * `Object` constructor or one with a `[[Prototype]]` of `null`. * * @static * @memberOf _ * @since 0.8.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. * @example * * function Foo() { * this.a = 1; * } * * _.isPlainObject(new Foo); * // => false * * _.isPlainObject([1, 2, 3]); * // => false * * _.isPlainObject({ 'x': 0, 'y': 0 }); * // => true * * _.isPlainObject(Object.create(null)); * // => true */ function isPlainObject(value) { if (!isObjectLike(value) || baseGetTag(value) != objectTag) { return false; } var proto = getPrototype(value); if (proto === null) { return true; } var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; } module.exports = isPlainObject; /***/ }), /***/ "./node_modules/lodash/isSymbol.js": /*!*****************************************!*\ !*** ./node_modules/lodash/isSymbol.js ***! \*****************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol(value) { return typeof value == 'symbol' || (isObjectLike(value) && baseGetTag(value) == symbolTag); } module.exports = isSymbol; /***/ }), /***/ "./node_modules/lodash/isTypedArray.js": /*!*********************************************!*\ !*** ./node_modules/lodash/isTypedArray.js ***! \*********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var baseIsTypedArray = __webpack_require__(/*! ./_baseIsTypedArray */ "./node_modules/lodash/_baseIsTypedArray.js"), baseUnary = __webpack_require__(/*! ./_baseUnary */ "./node_modules/lodash/_baseUnary.js"), nodeUtil = __webpack_require__(/*! ./_nodeUtil */ "./node_modules/lodash/_nodeUtil.js"); /* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; /** * Checks if `value` is classified as a typed array. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * * _.isTypedArray(new Uint8Array); * // => true * * _.isTypedArray([]); * // => false */ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; module.exports = isTypedArray; /***/ }), /***/ "./node_modules/lodash/keys.js": /*!*************************************!*\ !*** ./node_modules/lodash/keys.js ***! \*************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var arrayLikeKeys = __webpack_require__(/*! ./_arrayLikeKeys */ "./node_modules/lodash/_arrayLikeKeys.js"), baseKeys = __webpack_require__(/*! ./_baseKeys */ "./node_modules/lodash/_baseKeys.js"), isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"); /** * Creates an array of the own enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. See the * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * for more details. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keys(new Foo); * // => ['a', 'b'] (iteration order is not guaranteed) * * _.keys('hi'); * // => ['0', '1'] */ function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } module.exports = keys; /***/ }), /***/ "./node_modules/lodash/keysIn.js": /*!***************************************!*\ !*** ./node_modules/lodash/keysIn.js ***! \***************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var arrayLikeKeys = __webpack_require__(/*! ./_arrayLikeKeys */ "./node_modules/lodash/_arrayLikeKeys.js"), baseKeysIn = __webpack_require__(/*! ./_baseKeysIn */ "./node_modules/lodash/_baseKeysIn.js"), isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"); /** * Creates an array of the own and inherited enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @memberOf _ * @since 3.0.0 * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keysIn(new Foo); * // => ['a', 'b', 'c'] (iteration order is not guaranteed) */ function keysIn(object) { return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); } module.exports = keysIn; /***/ }), /***/ "./node_modules/lodash/lodash.js": /*!***************************************!*\ !*** ./node_modules/lodash/lodash.js ***! \***************************************/ /***/ (function(module, exports, __webpack_require__) { /* module decorator */ module = __webpack_require__.nmd(module); var __WEBPACK_AMD_DEFINE_RESULT__;/** * @license * Lodash * Copyright OpenJS Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ ;(function() { /** Used as a safe reference for `undefined` in pre-ES5 environments. */ var undefined; /** Used as the semantic version number. */ var VERSION = '4.17.21'; /** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200; /** Error message constants. */ var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', FUNC_ERROR_TEXT = 'Expected a function', INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`'; /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used as the maximum memoize cache size. */ var MAX_MEMOIZE_SIZE = 500; /** Used as the internal argument placeholder. */ var PLACEHOLDER = '__lodash_placeholder__'; /** Used to compose bitmasks for cloning. */ var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4; /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** Used to compose bitmasks for function metadata. */ var WRAP_BIND_FLAG = 1, WRAP_BIND_KEY_FLAG = 2, WRAP_CURRY_BOUND_FLAG = 4, WRAP_CURRY_FLAG = 8, WRAP_CURRY_RIGHT_FLAG = 16, WRAP_PARTIAL_FLAG = 32, WRAP_PARTIAL_RIGHT_FLAG = 64, WRAP_ARY_FLAG = 128, WRAP_REARG_FLAG = 256, WRAP_FLIP_FLAG = 512; /** Used as default options for `_.truncate`. */ var DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = '...'; /** Used to detect hot functions by number of calls within a span of milliseconds. */ var HOT_COUNT = 800, HOT_SPAN = 16; /** Used to indicate the type of lazy iteratees. */ var LAZY_FILTER_FLAG = 1, LAZY_MAP_FLAG = 2, LAZY_WHILE_FLAG = 3; /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0, MAX_SAFE_INTEGER = 9007199254740991, MAX_INTEGER = 1.7976931348623157e+308, NAN = 0 / 0; /** Used as references for the maximum length and index of an array. */ var MAX_ARRAY_LENGTH = 4294967295, MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; /** Used to associate wrap methods with their bit flags. */ var wrapFlags = [ ['ary', WRAP_ARY_FLAG], ['bind', WRAP_BIND_FLAG], ['bindKey', WRAP_BIND_KEY_FLAG], ['curry', WRAP_CURRY_FLAG], ['curryRight', WRAP_CURRY_RIGHT_FLAG], ['flip', WRAP_FLIP_FLAG], ['partial', WRAP_PARTIAL_FLAG], ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], ['rearg', WRAP_REARG_FLAG] ]; /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', asyncTag = '[object AsyncFunction]', boolTag = '[object Boolean]', dateTag = '[object Date]', domExcTag = '[object DOMException]', errorTag = '[object Error]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]', mapTag = '[object Map]', numberTag = '[object Number]', nullTag = '[object Null]', objectTag = '[object Object]', promiseTag = '[object Promise]', proxyTag = '[object Proxy]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', symbolTag = '[object Symbol]', undefinedTag = '[object Undefined]', weakMapTag = '[object WeakMap]', weakSetTag = '[object WeakSet]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; /** Used to match empty string literals in compiled template source. */ var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; /** Used to match HTML entities and HTML characters. */ var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, reUnescapedHtml = /[&<>"']/g, reHasEscapedHtml = RegExp(reEscapedHtml.source), reHasUnescapedHtml = RegExp(reUnescapedHtml.source); /** Used to match template delimiters. */ var reEscape = /<%-([\s\S]+?)%>/g, reEvaluate = /<%([\s\S]+?)%>/g, reInterpolate = /<%=([\s\S]+?)%>/g; /** Used to match property names within property paths. */ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, reHasRegExpChar = RegExp(reRegExpChar.source); /** Used to match leading whitespace. */ var reTrimStart = /^\s+/; /** Used to match a single whitespace character. */ var reWhitespace = /\s/; /** Used to match wrap detail comments. */ var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, reSplitDetails = /,? & /; /** Used to match words composed of alphanumeric characters. */ var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; /** * Used to validate the `validate` option in `_.template` variable. * * Forbids characters which could potentially change the meaning of the function argument definition: * - "()," (modification of function parameters) * - "=" (default value) * - "[]{}" (destructuring of function parameters) * - "/" (beginning of a comment) * - whitespace */ var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; /** Used to match backslashes in property paths. */ var reEscapeChar = /\\(\\)?/g; /** * Used to match * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). */ var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; /** Used to match `RegExp` flags from their coerced string values. */ var reFlags = /\w*$/; /** Used to detect bad signed hexadecimal string values. */ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; /** Used to detect binary string values. */ var reIsBinary = /^0b[01]+$/i; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** Used to detect octal string values. */ var reIsOctal = /^0o[0-7]+$/i; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** Used to match Latin Unicode letters (excluding mathematical operators). */ var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; /** Used to ensure capturing order of template delimiters. */ var reNoMatch = /($^)/; /** Used to match unescaped characters in compiled string literals. */ var reUnescapedString = /['\n\r\u2028\u2029\\]/g; /** Used to compose unicode character classes. */ var rsAstralRange = '\\ud800-\\udfff', rsComboMarksRange = '\\u0300-\\u036f', reComboHalfMarksRange = '\\ufe20-\\ufe2f', rsComboSymbolsRange = '\\u20d0-\\u20ff', rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsDingbatRange = '\\u2700-\\u27bf', rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', rsPunctuationRange = '\\u2000-\\u206f', rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', rsVarRange = '\\ufe0e\\ufe0f', rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; /** Used to compose unicode capture groups. */ var rsApos = "['\u2019]", rsAstral = '[' + rsAstralRange + ']', rsBreak = '[' + rsBreakRange + ']', rsCombo = '[' + rsComboRange + ']', rsDigits = '\\d+', rsDingbat = '[' + rsDingbatRange + ']', rsLower = '[' + rsLowerRange + ']', rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', rsFitz = '\\ud83c[\\udffb-\\udfff]', rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', rsNonAstral = '[^' + rsAstralRange + ']', rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', rsUpper = '[' + rsUpperRange + ']', rsZWJ = '\\u200d'; /** Used to compose unicode regexes. */ var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', reOptMod = rsModifier + '?', rsOptVar = '[' + rsVarRange + ']?', rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; /** Used to match apostrophes. */ var reApos = RegExp(rsApos, 'g'); /** * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). */ var reComboMark = RegExp(rsCombo, 'g'); /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); /** Used to match complex or compound words. */ var reUnicodeWord = RegExp([ rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, rsUpper + '+' + rsOptContrUpper, rsOrdUpper, rsOrdLower, rsDigits, rsEmoji ].join('|'), 'g'); /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); /** Used to detect strings that need a more robust regexp to match words. */ var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; /** Used to assign default `context` object properties. */ var contextProps = [ 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' ]; /** Used to make template sourceURLs easier to identify. */ var templateCounter = -1; /** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; /** Used to identify `toStringTag` values supported by `_.clone`. */ var cloneableTags = {}; cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false; /** Used to map Latin Unicode letters to basic Latin letters. */ var deburredLetters = { // Latin-1 Supplement block. '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', '\xc7': 'C', '\xe7': 'c', '\xd0': 'D', '\xf0': 'd', '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', '\xd1': 'N', '\xf1': 'n', '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', '\xc6': 'Ae', '\xe6': 'ae', '\xde': 'Th', '\xfe': 'th', '\xdf': 'ss', // Latin Extended-A block. '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', '\u0134': 'J', '\u0135': 'j', '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', '\u0163': 't', '\u0165': 't', '\u0167': 't', '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', '\u0174': 'W', '\u0175': 'w', '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', '\u0132': 'IJ', '\u0133': 'ij', '\u0152': 'Oe', '\u0153': 'oe', '\u0149': "'n", '\u017f': 's' }; /** Used to map characters to HTML entities. */ var htmlEscapes = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }; /** Used to map HTML entities to characters. */ var htmlUnescapes = { '&': '&', '<': '<', '>': '>', '"': '"', ''': "'" }; /** Used to escape characters for inclusion in compiled string literals. */ var stringEscapes = { '\\': '\\', "'": "'", '\n': 'n', '\r': 'r', '\u2028': 'u2028', '\u2029': 'u2029' }; /** Built-in method references without a dependency on `root`. */ var freeParseFloat = parseFloat, freeParseInt = parseInt; /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g; /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function('return this')(); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process; /** Used to access faster Node.js helpers. */ var nodeUtil = (function() { try { // Use `util.types` for Node.js 10+. var types = freeModule && freeModule.require && freeModule.require('util').types; if (types) { return types; } // Legacy `process.binding('util')` for Node.js < 10. return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }()); /* Node.js helper references. */ var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, nodeIsDate = nodeUtil && nodeUtil.isDate, nodeIsMap = nodeUtil && nodeUtil.isMap, nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, nodeIsSet = nodeUtil && nodeUtil.isSet, nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; /*--------------------------------------------------------------------------*/ /** * A faster alternative to `Function#apply`, this function invokes `func` * with the `this` binding of `thisArg` and the arguments of `args`. * * @private * @param {Function} func The function to invoke. * @param {*} thisArg The `this` binding of `func`. * @param {Array} args The arguments to invoke `func` with. * @returns {*} Returns the result of `func`. */ function apply(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } /** * A specialized version of `baseAggregator` for arrays. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} setter The function to set `accumulator` values. * @param {Function} iteratee The iteratee to transform keys. * @param {Object} accumulator The initial aggregated object. * @returns {Function} Returns `accumulator`. */ function arrayAggregator(array, setter, iteratee, accumulator) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { var value = array[index]; setter(accumulator, value, iteratee(value), array); } return accumulator; } /** * A specialized version of `_.forEach` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns `array`. */ function arrayEach(array, iteratee) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (iteratee(array[index], index, array) === false) { break; } } return array; } /** * A specialized version of `_.forEachRight` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns `array`. */ function arrayEachRight(array, iteratee) { var length = array == null ? 0 : array.length; while (length--) { if (iteratee(array[length], length, array) === false) { break; } } return array; } /** * A specialized version of `_.every` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {boolean} Returns `true` if all elements pass the predicate check, * else `false`. */ function arrayEvery(array, predicate) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (!predicate(array[index], index, array)) { return false; } } return true; } /** * A specialized version of `_.filter` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {Array} Returns the new filtered array. */ function arrayFilter(array, predicate) { var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; while (++index < length) { var value = array[index]; if (predicate(value, index, array)) { result[resIndex++] = value; } } return result; } /** * A specialized version of `_.includes` for arrays without support for * specifying an index to search from. * * @private * @param {Array} [array] The array to inspect. * @param {*} target The value to search for. * @returns {boolean} Returns `true` if `target` is found, else `false`. */ function arrayIncludes(array, value) { var length = array == null ? 0 : array.length; return !!length && baseIndexOf(array, value, 0) > -1; } /** * This function is like `arrayIncludes` except that it accepts a comparator. * * @private * @param {Array} [array] The array to inspect. * @param {*} target The value to search for. * @param {Function} comparator The comparator invoked per element. * @returns {boolean} Returns `true` if `target` is found, else `false`. */ function arrayIncludesWith(array, value, comparator) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (comparator(value, array[index])) { return true; } } return false; } /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } /** * Appends the elements of `values` to `array`. * * @private * @param {Array} array The array to modify. * @param {Array} values The values to append. * @returns {Array} Returns `array`. */ function arrayPush(array, values) { var index = -1, length = values.length, offset = array.length; while (++index < length) { array[offset + index] = values[index]; } return array; } /** * A specialized version of `_.reduce` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {*} [accumulator] The initial value. * @param {boolean} [initAccum] Specify using the first element of `array` as * the initial value. * @returns {*} Returns the accumulated value. */ function arrayReduce(array, iteratee, accumulator, initAccum) { var index = -1, length = array == null ? 0 : array.length; if (initAccum && length) { accumulator = array[++index]; } while (++index < length) { accumulator = iteratee(accumulator, array[index], index, array); } return accumulator; } /** * A specialized version of `_.reduceRight` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {*} [accumulator] The initial value. * @param {boolean} [initAccum] Specify using the last element of `array` as * the initial value. * @returns {*} Returns the accumulated value. */ function arrayReduceRight(array, iteratee, accumulator, initAccum) { var length = array == null ? 0 : array.length; if (initAccum && length) { accumulator = array[--length]; } while (length--) { accumulator = iteratee(accumulator, array[length], length, array); } return accumulator; } /** * A specialized version of `_.some` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {boolean} Returns `true` if any element passes the predicate check, * else `false`. */ function arraySome(array, predicate) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (predicate(array[index], index, array)) { return true; } } return false; } /** * Gets the size of an ASCII `string`. * * @private * @param {string} string The string inspect. * @returns {number} Returns the string size. */ var asciiSize = baseProperty('length'); /** * Converts an ASCII `string` to an array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the converted array. */ function asciiToArray(string) { return string.split(''); } /** * Splits an ASCII `string` into an array of its words. * * @private * @param {string} The string to inspect. * @returns {Array} Returns the words of `string`. */ function asciiWords(string) { return string.match(reAsciiWord) || []; } /** * The base implementation of methods like `_.findKey` and `_.findLastKey`, * without support for iteratee shorthands, which iterates over `collection` * using `eachFunc`. * * @private * @param {Array|Object} collection The collection to inspect. * @param {Function} predicate The function invoked per iteration. * @param {Function} eachFunc The function to iterate over `collection`. * @returns {*} Returns the found element or its key, else `undefined`. */ function baseFindKey(collection, predicate, eachFunc) { var result; eachFunc(collection, function(value, key, collection) { if (predicate(value, key, collection)) { result = key; return false; } }); return result; } /** * The base implementation of `_.findIndex` and `_.findLastIndex` without * support for iteratee shorthands. * * @private * @param {Array} array The array to inspect. * @param {Function} predicate The function invoked per iteration. * @param {number} fromIndex The index to search from. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseFindIndex(array, predicate, fromIndex, fromRight) { var length = array.length, index = fromIndex + (fromRight ? 1 : -1); while ((fromRight ? index-- : ++index < length)) { if (predicate(array[index], index, array)) { return index; } } return -1; } /** * The base implementation of `_.indexOf` without `fromIndex` bounds checks. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseIndexOf(array, value, fromIndex) { return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); } /** * This function is like `baseIndexOf` except that it accepts a comparator. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @param {Function} comparator The comparator invoked per element. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseIndexOfWith(array, value, fromIndex, comparator) { var index = fromIndex - 1, length = array.length; while (++index < length) { if (comparator(array[index], value)) { return index; } } return -1; } /** * The base implementation of `_.isNaN` without support for number objects. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. */ function baseIsNaN(value) { return value !== value; } /** * The base implementation of `_.mean` and `_.meanBy` without support for * iteratee shorthands. * * @private * @param {Array} array The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {number} Returns the mean. */ function baseMean(array, iteratee) { var length = array == null ? 0 : array.length; return length ? (baseSum(array, iteratee) / length) : NAN; } /** * The base implementation of `_.property` without support for deep paths. * * @private * @param {string} key The key of the property to get. * @returns {Function} Returns the new accessor function. */ function baseProperty(key) { return function(object) { return object == null ? undefined : object[key]; }; } /** * The base implementation of `_.propertyOf` without support for deep paths. * * @private * @param {Object} object The object to query. * @returns {Function} Returns the new accessor function. */ function basePropertyOf(object) { return function(key) { return object == null ? undefined : object[key]; }; } /** * The base implementation of `_.reduce` and `_.reduceRight`, without support * for iteratee shorthands, which iterates over `collection` using `eachFunc`. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {*} accumulator The initial value. * @param {boolean} initAccum Specify using the first or last element of * `collection` as the initial value. * @param {Function} eachFunc The function to iterate over `collection`. * @returns {*} Returns the accumulated value. */ function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { eachFunc(collection, function(value, index, collection) { accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection); }); return accumulator; } /** * The base implementation of `_.sortBy` which uses `comparer` to define the * sort order of `array` and replaces criteria objects with their corresponding * values. * * @private * @param {Array} array The array to sort. * @param {Function} comparer The function to define sort order. * @returns {Array} Returns `array`. */ function baseSortBy(array, comparer) { var length = array.length; array.sort(comparer); while (length--) { array[length] = array[length].value; } return array; } /** * The base implementation of `_.sum` and `_.sumBy` without support for * iteratee shorthands. * * @private * @param {Array} array The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {number} Returns the sum. */ function baseSum(array, iteratee) { var result, index = -1, length = array.length; while (++index < length) { var current = iteratee(array[index]); if (current !== undefined) { result = result === undefined ? current : (result + current); } } return result; } /** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. * * @private * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */ function baseTimes(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } /** * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array * of key-value pairs for `object` corresponding to the property names of `props`. * * @private * @param {Object} object The object to query. * @param {Array} props The property names to get values for. * @returns {Object} Returns the key-value pairs. */ function baseToPairs(object, props) { return arrayMap(props, function(key) { return [key, object[key]]; }); } /** * The base implementation of `_.trim`. * * @private * @param {string} string The string to trim. * @returns {string} Returns the trimmed string. */ function baseTrim(string) { return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string; } /** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ function baseUnary(func) { return function(value) { return func(value); }; } /** * The base implementation of `_.values` and `_.valuesIn` which creates an * array of `object` property values corresponding to the property names * of `props`. * * @private * @param {Object} object The object to query. * @param {Array} props The property names to get values for. * @returns {Object} Returns the array of property values. */ function baseValues(object, props) { return arrayMap(props, function(key) { return object[key]; }); } /** * Checks if a `cache` value for `key` exists. * * @private * @param {Object} cache The cache to query. * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function cacheHas(cache, key) { return cache.has(key); } /** * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol * that is not found in the character symbols. * * @private * @param {Array} strSymbols The string symbols to inspect. * @param {Array} chrSymbols The character symbols to find. * @returns {number} Returns the index of the first unmatched string symbol. */ function charsStartIndex(strSymbols, chrSymbols) { var index = -1, length = strSymbols.length; while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} return index; } /** * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol * that is not found in the character symbols. * * @private * @param {Array} strSymbols The string symbols to inspect. * @param {Array} chrSymbols The character symbols to find. * @returns {number} Returns the index of the last unmatched string symbol. */ function charsEndIndex(strSymbols, chrSymbols) { var index = strSymbols.length; while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} return index; } /** * Gets the number of `placeholder` occurrences in `array`. * * @private * @param {Array} array The array to inspect. * @param {*} placeholder The placeholder to search for. * @returns {number} Returns the placeholder count. */ function countHolders(array, placeholder) { var length = array.length, result = 0; while (length--) { if (array[length] === placeholder) { ++result; } } return result; } /** * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A * letters to basic Latin letters. * * @private * @param {string} letter The matched letter to deburr. * @returns {string} Returns the deburred letter. */ var deburrLetter = basePropertyOf(deburredLetters); /** * Used by `_.escape` to convert characters to HTML entities. * * @private * @param {string} chr The matched character to escape. * @returns {string} Returns the escaped character. */ var escapeHtmlChar = basePropertyOf(htmlEscapes); /** * Used by `_.template` to escape characters for inclusion in compiled string literals. * * @private * @param {string} chr The matched character to escape. * @returns {string} Returns the escaped character. */ function escapeStringChar(chr) { return '\\' + stringEscapes[chr]; } /** * Gets the value at `key` of `object`. * * @private * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function getValue(object, key) { return object == null ? undefined : object[key]; } /** * Checks if `string` contains Unicode symbols. * * @private * @param {string} string The string to inspect. * @returns {boolean} Returns `true` if a symbol is found, else `false`. */ function hasUnicode(string) { return reHasUnicode.test(string); } /** * Checks if `string` contains a word composed of Unicode symbols. * * @private * @param {string} string The string to inspect. * @returns {boolean} Returns `true` if a word is found, else `false`. */ function hasUnicodeWord(string) { return reHasUnicodeWord.test(string); } /** * Converts `iterator` to an array. * * @private * @param {Object} iterator The iterator to convert. * @returns {Array} Returns the converted array. */ function iteratorToArray(iterator) { var data, result = []; while (!(data = iterator.next()).done) { result.push(data.value); } return result; } /** * Converts `map` to its key-value pairs. * * @private * @param {Object} map The map to convert. * @returns {Array} Returns the key-value pairs. */ function mapToArray(map) { var index = -1, result = Array(map.size); map.forEach(function(value, key) { result[++index] = [key, value]; }); return result; } /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } /** * Replaces all `placeholder` elements in `array` with an internal placeholder * and returns an array of their indexes. * * @private * @param {Array} array The array to modify. * @param {*} placeholder The placeholder to replace. * @returns {Array} Returns the new array of placeholder indexes. */ function replaceHolders(array, placeholder) { var index = -1, length = array.length, resIndex = 0, result = []; while (++index < length) { var value = array[index]; if (value === placeholder || value === PLACEHOLDER) { array[index] = PLACEHOLDER; result[resIndex++] = index; } } return result; } /** * Converts `set` to an array of its values. * * @private * @param {Object} set The set to convert. * @returns {Array} Returns the values. */ function setToArray(set) { var index = -1, result = Array(set.size); set.forEach(function(value) { result[++index] = value; }); return result; } /** * Converts `set` to its value-value pairs. * * @private * @param {Object} set The set to convert. * @returns {Array} Returns the value-value pairs. */ function setToPairs(set) { var index = -1, result = Array(set.size); set.forEach(function(value) { result[++index] = [value, value]; }); return result; } /** * A specialized version of `_.indexOf` which performs strict equality * comparisons of values, i.e. `===`. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function strictIndexOf(array, value, fromIndex) { var index = fromIndex - 1, length = array.length; while (++index < length) { if (array[index] === value) { return index; } } return -1; } /** * A specialized version of `_.lastIndexOf` which performs strict equality * comparisons of values, i.e. `===`. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function strictLastIndexOf(array, value, fromIndex) { var index = fromIndex + 1; while (index--) { if (array[index] === value) { return index; } } return index; } /** * Gets the number of symbols in `string`. * * @private * @param {string} string The string to inspect. * @returns {number} Returns the string size. */ function stringSize(string) { return hasUnicode(string) ? unicodeSize(string) : asciiSize(string); } /** * Converts `string` to an array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the converted array. */ function stringToArray(string) { return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string); } /** * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace * character of `string`. * * @private * @param {string} string The string to inspect. * @returns {number} Returns the index of the last non-whitespace character. */ function trimmedEndIndex(string) { var index = string.length; while (index-- && reWhitespace.test(string.charAt(index))) {} return index; } /** * Used by `_.unescape` to convert HTML entities to characters. * * @private * @param {string} chr The matched character to unescape. * @returns {string} Returns the unescaped character. */ var unescapeHtmlChar = basePropertyOf(htmlUnescapes); /** * Gets the size of a Unicode `string`. * * @private * @param {string} string The string inspect. * @returns {number} Returns the string size. */ function unicodeSize(string) { var result = reUnicode.lastIndex = 0; while (reUnicode.test(string)) { ++result; } return result; } /** * Converts a Unicode `string` to an array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the converted array. */ function unicodeToArray(string) { return string.match(reUnicode) || []; } /** * Splits a Unicode `string` into an array of its words. * * @private * @param {string} The string to inspect. * @returns {Array} Returns the words of `string`. */ function unicodeWords(string) { return string.match(reUnicodeWord) || []; } /*--------------------------------------------------------------------------*/ /** * Create a new pristine `lodash` function using the `context` object. * * @static * @memberOf _ * @since 1.1.0 * @category Util * @param {Object} [context=root] The context object. * @returns {Function} Returns a new `lodash` function. * @example * * _.mixin({ 'foo': _.constant('foo') }); * * var lodash = _.runInContext(); * lodash.mixin({ 'bar': lodash.constant('bar') }); * * _.isFunction(_.foo); * // => true * _.isFunction(_.bar); * // => false * * lodash.isFunction(lodash.foo); * // => false * lodash.isFunction(lodash.bar); * // => true * * // Create a suped-up `defer` in Node.js. * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; */ var runInContext = (function runInContext(context) { context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); /** Built-in constructor references. */ var Array = context.Array, Date = context.Date, Error = context.Error, Function = context.Function, Math = context.Math, Object = context.Object, RegExp = context.RegExp, String = context.String, TypeError = context.TypeError; /** Used for built-in method references. */ var arrayProto = Array.prototype, funcProto = Function.prototype, objectProto = Object.prototype; /** Used to detect overreaching core-js shims. */ var coreJsData = context['__core-js_shared__']; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Used to generate unique IDs. */ var idCounter = 0; /** Used to detect methods masquerading as native. */ var maskSrcKey = (function() { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); return uid ? ('Symbol(src)_1.' + uid) : ''; }()); /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** Used to infer the `Object` constructor. */ var objectCtorString = funcToString.call(Object); /** Used to restore the original `_` reference in `_.noConflict`. */ var oldDash = root._; /** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' ); /** Built-in value references. */ var Buffer = moduleExports ? context.Buffer : undefined, Symbol = context.Symbol, Uint8Array = context.Uint8Array, allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, getPrototype = overArg(Object.getPrototypeOf, Object), objectCreate = Object.create, propertyIsEnumerable = objectProto.propertyIsEnumerable, splice = arrayProto.splice, spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, symIterator = Symbol ? Symbol.iterator : undefined, symToStringTag = Symbol ? Symbol.toStringTag : undefined; var defineProperty = (function() { try { var func = getNative(Object, 'defineProperty'); func({}, '', {}); return func; } catch (e) {} }()); /** Mocked built-ins. */ var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, ctxNow = Date && Date.now !== root.Date.now && Date.now, ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeCeil = Math.ceil, nativeFloor = Math.floor, nativeGetSymbols = Object.getOwnPropertySymbols, nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, nativeIsFinite = context.isFinite, nativeJoin = arrayProto.join, nativeKeys = overArg(Object.keys, Object), nativeMax = Math.max, nativeMin = Math.min, nativeNow = Date.now, nativeParseInt = context.parseInt, nativeRandom = Math.random, nativeReverse = arrayProto.reverse; /* Built-in method references that are verified to be native. */ var DataView = getNative(context, 'DataView'), Map = getNative(context, 'Map'), Promise = getNative(context, 'Promise'), Set = getNative(context, 'Set'), WeakMap = getNative(context, 'WeakMap'), nativeCreate = getNative(Object, 'create'); /** Used to store function metadata. */ var metaMap = WeakMap && new WeakMap; /** Used to lookup unminified function names. */ var realNames = {}; /** Used to detect maps, sets, and weakmaps. */ var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map), promiseCtorString = toSource(Promise), setCtorString = toSource(Set), weakMapCtorString = toSource(WeakMap); /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /*------------------------------------------------------------------------*/ /** * Creates a `lodash` object which wraps `value` to enable implicit method * chain sequences. Methods that operate on and return arrays, collections, * and functions can be chained together. Methods that retrieve a single value * or may return a primitive value will automatically end the chain sequence * and return the unwrapped value. Otherwise, the value must be unwrapped * with `_#value`. * * Explicit chain sequences, which must be unwrapped with `_#value`, may be * enabled using `_.chain`. * * The execution of chained methods is lazy, that is, it's deferred until * `_#value` is implicitly or explicitly called. * * Lazy evaluation allows several methods to support shortcut fusion. * Shortcut fusion is an optimization to merge iteratee calls; this avoids * the creation of intermediate arrays and can greatly reduce the number of * iteratee executions. Sections of a chain sequence qualify for shortcut * fusion if the section is applied to an array and iteratees accept only * one argument. The heuristic for whether a section qualifies for shortcut * fusion is subject to change. * * Chaining is supported in custom builds as long as the `_#value` method is * directly or indirectly included in the build. * * In addition to lodash methods, wrappers have `Array` and `String` methods. * * The wrapper `Array` methods are: * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` * * The wrapper `String` methods are: * `replace` and `split` * * The wrapper methods that support shortcut fusion are: * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` * * The chainable wrapper methods are: * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, * `zipObject`, `zipObjectDeep`, and `zipWith` * * The wrapper methods that are **not** chainable by default are: * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, * `upperFirst`, `value`, and `words` * * @name _ * @constructor * @category Seq * @param {*} value The value to wrap in a `lodash` instance. * @returns {Object} Returns the new `lodash` wrapper instance. * @example * * function square(n) { * return n * n; * } * * var wrapped = _([1, 2, 3]); * * // Returns an unwrapped value. * wrapped.reduce(_.add); * // => 6 * * // Returns a wrapped value. * var squares = wrapped.map(square); * * _.isArray(squares); * // => false * * _.isArray(squares.value()); * // => true */ function lodash(value) { if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { if (value instanceof LodashWrapper) { return value; } if (hasOwnProperty.call(value, '__wrapped__')) { return wrapperClone(value); } } return new LodashWrapper(value); } /** * The base implementation of `_.create` without support for assigning * properties to the created object. * * @private * @param {Object} proto The object to inherit from. * @returns {Object} Returns the new object. */ var baseCreate = (function() { function object() {} return function(proto) { if (!isObject(proto)) { return {}; } if (objectCreate) { return objectCreate(proto); } object.prototype = proto; var result = new object; object.prototype = undefined; return result; }; }()); /** * The function whose prototype chain sequence wrappers inherit from. * * @private */ function baseLodash() { // No operation performed. } /** * The base constructor for creating `lodash` wrapper objects. * * @private * @param {*} value The value to wrap. * @param {boolean} [chainAll] Enable explicit method chain sequences. */ function LodashWrapper(value, chainAll) { this.__wrapped__ = value; this.__actions__ = []; this.__chain__ = !!chainAll; this.__index__ = 0; this.__values__ = undefined; } /** * By default, the template delimiters used by lodash are like those in * embedded Ruby (ERB) as well as ES2015 template strings. Change the * following template settings to use alternative delimiters. * * @static * @memberOf _ * @type {Object} */ lodash.templateSettings = { /** * Used to detect `data` property values to be HTML-escaped. * * @memberOf _.templateSettings * @type {RegExp} */ 'escape': reEscape, /** * Used to detect code to be evaluated. * * @memberOf _.templateSettings * @type {RegExp} */ 'evaluate': reEvaluate, /** * Used to detect `data` property values to inject. * * @memberOf _.templateSettings * @type {RegExp} */ 'interpolate': reInterpolate, /** * Used to reference the data object in the template text. * * @memberOf _.templateSettings * @type {string} */ 'variable': '', /** * Used to import variables into the compiled template. * * @memberOf _.templateSettings * @type {Object} */ 'imports': { /** * A reference to the `lodash` function. * * @memberOf _.templateSettings.imports * @type {Function} */ '_': lodash } }; // Ensure wrappers are instances of `baseLodash`. lodash.prototype = baseLodash.prototype; lodash.prototype.constructor = lodash; LodashWrapper.prototype = baseCreate(baseLodash.prototype); LodashWrapper.prototype.constructor = LodashWrapper; /*------------------------------------------------------------------------*/ /** * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. * * @private * @constructor * @param {*} value The value to wrap. */ function LazyWrapper(value) { this.__wrapped__ = value; this.__actions__ = []; this.__dir__ = 1; this.__filtered__ = false; this.__iteratees__ = []; this.__takeCount__ = MAX_ARRAY_LENGTH; this.__views__ = []; } /** * Creates a clone of the lazy wrapper object. * * @private * @name clone * @memberOf LazyWrapper * @returns {Object} Returns the cloned `LazyWrapper` object. */ function lazyClone() { var result = new LazyWrapper(this.__wrapped__); result.__actions__ = copyArray(this.__actions__); result.__dir__ = this.__dir__; result.__filtered__ = this.__filtered__; result.__iteratees__ = copyArray(this.__iteratees__); result.__takeCount__ = this.__takeCount__; result.__views__ = copyArray(this.__views__); return result; } /** * Reverses the direction of lazy iteration. * * @private * @name reverse * @memberOf LazyWrapper * @returns {Object} Returns the new reversed `LazyWrapper` object. */ function lazyReverse() { if (this.__filtered__) { var result = new LazyWrapper(this); result.__dir__ = -1; result.__filtered__ = true; } else { result = this.clone(); result.__dir__ *= -1; } return result; } /** * Extracts the unwrapped value from its lazy wrapper. * * @private * @name value * @memberOf LazyWrapper * @returns {*} Returns the unwrapped value. */ function lazyValue() { var array = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray(array), isRight = dir < 0, arrLength = isArr ? array.length : 0, view = getView(0, arrLength, this.__views__), start = view.start, end = view.end, length = end - start, index = isRight ? end : (start - 1), iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin(length, this.__takeCount__); if (!isArr || (!isRight && arrLength == length && takeCount == length)) { return baseWrapperValue(array, this.__actions__); } var result = []; outer: while (length-- && resIndex < takeCount) { index += dir; var iterIndex = -1, value = array[index]; while (++iterIndex < iterLength) { var data = iteratees[iterIndex], iteratee = data.iteratee, type = data.type, computed = iteratee(value); if (type == LAZY_MAP_FLAG) { value = computed; } else if (!computed) { if (type == LAZY_FILTER_FLAG) { continue outer; } else { break outer; } } } result[resIndex++] = value; } return result; } // Ensure `LazyWrapper` is an instance of `baseLodash`. LazyWrapper.prototype = baseCreate(baseLodash.prototype); LazyWrapper.prototype.constructor = LazyWrapper; /*------------------------------------------------------------------------*/ /** * Creates a hash object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Hash(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } /** * Removes all key-value entries from the hash. * * @private * @name clear * @memberOf Hash */ function hashClear() { this.__data__ = nativeCreate ? nativeCreate(null) : {}; this.size = 0; } /** * Removes `key` and its value from the hash. * * @private * @name delete * @memberOf Hash * @param {Object} hash The hash to modify. * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function hashDelete(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } /** * Gets the hash value for `key`. * * @private * @name get * @memberOf Hash * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function hashGet(key) { var data = this.__data__; if (nativeCreate) { var result = data[key]; return result === HASH_UNDEFINED ? undefined : result; } return hasOwnProperty.call(data, key) ? data[key] : undefined; } /** * Checks if a hash value for `key` exists. * * @private * @name has * @memberOf Hash * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function hashHas(key) { var data = this.__data__; return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); } /** * Sets the hash `key` to `value`. * * @private * @name set * @memberOf Hash * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the hash instance. */ function hashSet(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; return this; } // Add methods to `Hash`. Hash.prototype.clear = hashClear; Hash.prototype['delete'] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; /*------------------------------------------------------------------------*/ /** * Creates an list cache object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function ListCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } /** * Removes all key-value entries from the list cache. * * @private * @name clear * @memberOf ListCache */ function listCacheClear() { this.__data__ = []; this.size = 0; } /** * Removes `key` and its value from the list cache. * * @private * @name delete * @memberOf ListCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function listCacheDelete(key) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } /** * Gets the list cache value for `key`. * * @private * @name get * @memberOf ListCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function listCacheGet(key) { var data = this.__data__, index = assocIndexOf(data, key); return index < 0 ? undefined : data[index][1]; } /** * Checks if a list cache value for `key` exists. * * @private * @name has * @memberOf ListCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function listCacheHas(key) { return assocIndexOf(this.__data__, key) > -1; } /** * Sets the list cache `key` to `value`. * * @private * @name set * @memberOf ListCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the list cache instance. */ function listCacheSet(key, value) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { ++this.size; data.push([key, value]); } else { data[index][1] = value; } return this; } // Add methods to `ListCache`. ListCache.prototype.clear = listCacheClear; ListCache.prototype['delete'] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; /*------------------------------------------------------------------------*/ /** * Creates a map cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function MapCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } /** * Removes all key-value entries from the map. * * @private * @name clear * @memberOf MapCache */ function mapCacheClear() { this.size = 0; this.__data__ = { 'hash': new Hash, 'map': new (Map || ListCache), 'string': new Hash }; } /** * Removes `key` and its value from the map. * * @private * @name delete * @memberOf MapCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function mapCacheDelete(key) { var result = getMapData(this, key)['delete'](key); this.size -= result ? 1 : 0; return result; } /** * Gets the map value for `key`. * * @private * @name get * @memberOf MapCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function mapCacheGet(key) { return getMapData(this, key).get(key); } /** * Checks if a map value for `key` exists. * * @private * @name has * @memberOf MapCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function mapCacheHas(key) { return getMapData(this, key).has(key); } /** * Sets the map `key` to `value`. * * @private * @name set * @memberOf MapCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the map cache instance. */ function mapCacheSet(key, value) { var data = getMapData(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } // Add methods to `MapCache`. MapCache.prototype.clear = mapCacheClear; MapCache.prototype['delete'] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; /*------------------------------------------------------------------------*/ /** * * Creates an array cache object to store unique values. * * @private * @constructor * @param {Array} [values] The values to cache. */ function SetCache(values) { var index = -1, length = values == null ? 0 : values.length; this.__data__ = new MapCache; while (++index < length) { this.add(values[index]); } } /** * Adds `value` to the array cache. * * @private * @name add * @memberOf SetCache * @alias push * @param {*} value The value to cache. * @returns {Object} Returns the cache instance. */ function setCacheAdd(value) { this.__data__.set(value, HASH_UNDEFINED); return this; } /** * Checks if `value` is in the array cache. * * @private * @name has * @memberOf SetCache * @param {*} value The value to search for. * @returns {number} Returns `true` if `value` is found, else `false`. */ function setCacheHas(value) { return this.__data__.has(value); } // Add methods to `SetCache`. SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; SetCache.prototype.has = setCacheHas; /*------------------------------------------------------------------------*/ /** * Creates a stack cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Stack(entries) { var data = this.__data__ = new ListCache(entries); this.size = data.size; } /** * Removes all key-value entries from the stack. * * @private * @name clear * @memberOf Stack */ function stackClear() { this.__data__ = new ListCache; this.size = 0; } /** * Removes `key` and its value from the stack. * * @private * @name delete * @memberOf Stack * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function stackDelete(key) { var data = this.__data__, result = data['delete'](key); this.size = data.size; return result; } /** * Gets the stack value for `key`. * * @private * @name get * @memberOf Stack * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function stackGet(key) { return this.__data__.get(key); } /** * Checks if a stack value for `key` exists. * * @private * @name has * @memberOf Stack * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function stackHas(key) { return this.__data__.has(key); } /** * Sets the stack `key` to `value`. * * @private * @name set * @memberOf Stack * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the stack cache instance. */ function stackSet(key, value) { var data = this.__data__; if (data instanceof ListCache) { var pairs = data.__data__; if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { pairs.push([key, value]); this.size = ++data.size; return this; } data = this.__data__ = new MapCache(pairs); } data.set(key, value); this.size = data.size; return this; } // Add methods to `Stack`. Stack.prototype.clear = stackClear; Stack.prototype['delete'] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; /*------------------------------------------------------------------------*/ /** * Creates an array of the enumerable property names of the array-like `value`. * * @private * @param {*} value The value to query. * @param {boolean} inherited Specify returning inherited property names. * @returns {Array} Returns the array of property names. */ function arrayLikeKeys(value, inherited) { var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode. key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers. (isBuff && (key == 'offset' || key == 'parent')) || // PhantomJS 2 has enumerable non-index properties on typed arrays. (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || // Skip index properties. isIndex(key, length) ))) { result.push(key); } } return result; } /** * A specialized version of `_.sample` for arrays. * * @private * @param {Array} array The array to sample. * @returns {*} Returns the random element. */ function arraySample(array) { var length = array.length; return length ? array[baseRandom(0, length - 1)] : undefined; } /** * A specialized version of `_.sampleSize` for arrays. * * @private * @param {Array} array The array to sample. * @param {number} n The number of elements to sample. * @returns {Array} Returns the random elements. */ function arraySampleSize(array, n) { return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); } /** * A specialized version of `_.shuffle` for arrays. * * @private * @param {Array} array The array to shuffle. * @returns {Array} Returns the new shuffled array. */ function arrayShuffle(array) { return shuffleSelf(copyArray(array)); } /** * This function is like `assignValue` except that it doesn't assign * `undefined` values. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function assignMergeValue(object, key, value) { if ((value !== undefined && !eq(object[key], value)) || (value === undefined && !(key in object))) { baseAssignValue(object, key, value); } } /** * Assigns `value` to `key` of `object` if the existing value is not equivalent * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function assignValue(object, key, value) { var objValue = object[key]; if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || (value === undefined && !(key in object))) { baseAssignValue(object, key, value); } } /** * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private * @param {Array} array The array to inspect. * @param {*} key The key to search for. * @returns {number} Returns the index of the matched value, else `-1`. */ function assocIndexOf(array, key) { var length = array.length; while (length--) { if (eq(array[length][0], key)) { return length; } } return -1; } /** * Aggregates elements of `collection` on `accumulator` with keys transformed * by `iteratee` and values set by `setter`. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} setter The function to set `accumulator` values. * @param {Function} iteratee The iteratee to transform keys. * @param {Object} accumulator The initial aggregated object. * @returns {Function} Returns `accumulator`. */ function baseAggregator(collection, setter, iteratee, accumulator) { baseEach(collection, function(value, key, collection) { setter(accumulator, value, iteratee(value), collection); }); return accumulator; } /** * The base implementation of `_.assign` without support for multiple sources * or `customizer` functions. * * @private * @param {Object} object The destination object. * @param {Object} source The source object. * @returns {Object} Returns `object`. */ function baseAssign(object, source) { return object && copyObject(source, keys(source), object); } /** * The base implementation of `_.assignIn` without support for multiple sources * or `customizer` functions. * * @private * @param {Object} object The destination object. * @param {Object} source The source object. * @returns {Object} Returns `object`. */ function baseAssignIn(object, source) { return object && copyObject(source, keysIn(source), object); } /** * The base implementation of `assignValue` and `assignMergeValue` without * value checks. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function baseAssignValue(object, key, value) { if (key == '__proto__' && defineProperty) { defineProperty(object, key, { 'configurable': true, 'enumerable': true, 'value': value, 'writable': true }); } else { object[key] = value; } } /** * The base implementation of `_.at` without support for individual paths. * * @private * @param {Object} object The object to iterate over. * @param {string[]} paths The property paths to pick. * @returns {Array} Returns the picked elements. */ function baseAt(object, paths) { var index = -1, length = paths.length, result = Array(length), skip = object == null; while (++index < length) { result[index] = skip ? undefined : get(object, paths[index]); } return result; } /** * The base implementation of `_.clamp` which doesn't coerce arguments. * * @private * @param {number} number The number to clamp. * @param {number} [lower] The lower bound. * @param {number} upper The upper bound. * @returns {number} Returns the clamped number. */ function baseClamp(number, lower, upper) { if (number === number) { if (upper !== undefined) { number = number <= upper ? number : upper; } if (lower !== undefined) { number = number >= lower ? number : lower; } } return number; } /** * The base implementation of `_.clone` and `_.cloneDeep` which tracks * traversed objects. * * @private * @param {*} value The value to clone. * @param {boolean} bitmask The bitmask flags. * 1 - Deep clone * 2 - Flatten inherited properties * 4 - Clone symbols * @param {Function} [customizer] The function to customize cloning. * @param {string} [key] The key of `value`. * @param {Object} [object] The parent object of `value`. * @param {Object} [stack] Tracks traversed objects and their clone counterparts. * @returns {*} Returns the cloned value. */ function baseClone(value, bitmask, customizer, key, object, stack) { var result, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG; if (customizer) { result = object ? customizer(value, key, object, stack) : customizer(value); } if (result !== undefined) { return result; } if (!isObject(value)) { return value; } var isArr = isArray(value); if (isArr) { result = initCloneArray(value); if (!isDeep) { return copyArray(value, result); } } else { var tag = getTag(value), isFunc = tag == funcTag || tag == genTag; if (isBuffer(value)) { return cloneBuffer(value, isDeep); } if (tag == objectTag || tag == argsTag || (isFunc && !object)) { result = (isFlat || isFunc) ? {} : initCloneObject(value); if (!isDeep) { return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value)); } } else { if (!cloneableTags[tag]) { return object ? value : {}; } result = initCloneByTag(value, tag, isDeep); } } // Check for circular references and return its corresponding clone. stack || (stack = new Stack); var stacked = stack.get(value); if (stacked) { return stacked; } stack.set(value, result); if (isSet(value)) { value.forEach(function(subValue) { result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); }); } else if (isMap(value)) { value.forEach(function(subValue, key) { result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); }); } var keysFunc = isFull ? (isFlat ? getAllKeysIn : getAllKeys) : (isFlat ? keysIn : keys); var props = isArr ? undefined : keysFunc(value); arrayEach(props || value, function(subValue, key) { if (props) { key = subValue; subValue = value[key]; } // Recursively populate clone (susceptible to call stack limits). assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); }); return result; } /** * The base implementation of `_.conforms` which doesn't clone `source`. * * @private * @param {Object} source The object of property predicates to conform to. * @returns {Function} Returns the new spec function. */ function baseConforms(source) { var props = keys(source); return function(object) { return baseConformsTo(object, source, props); }; } /** * The base implementation of `_.conformsTo` which accepts `props` to check. * * @private * @param {Object} object The object to inspect. * @param {Object} source The object of property predicates to conform to. * @returns {boolean} Returns `true` if `object` conforms, else `false`. */ function baseConformsTo(object, source, props) { var length = props.length; if (object == null) { return !length; } object = Object(object); while (length--) { var key = props[length], predicate = source[key], value = object[key]; if ((value === undefined && !(key in object)) || !predicate(value)) { return false; } } return true; } /** * The base implementation of `_.delay` and `_.defer` which accepts `args` * to provide to `func`. * * @private * @param {Function} func The function to delay. * @param {number} wait The number of milliseconds to delay invocation. * @param {Array} args The arguments to provide to `func`. * @returns {number|Object} Returns the timer id or timeout object. */ function baseDelay(func, wait, args) { if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } return setTimeout(function() { func.apply(undefined, args); }, wait); } /** * The base implementation of methods like `_.difference` without support * for excluding multiple arrays or iteratee shorthands. * * @private * @param {Array} array The array to inspect. * @param {Array} values The values to exclude. * @param {Function} [iteratee] The iteratee invoked per element. * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new array of filtered values. */ function baseDifference(array, values, iteratee, comparator) { var index = -1, includes = arrayIncludes, isCommon = true, length = array.length, result = [], valuesLength = values.length; if (!length) { return result; } if (iteratee) { values = arrayMap(values, baseUnary(iteratee)); } if (comparator) { includes = arrayIncludesWith; isCommon = false; } else if (values.length >= LARGE_ARRAY_SIZE) { includes = cacheHas; isCommon = false; values = new SetCache(values); } outer: while (++index < length) { var value = array[index], computed = iteratee == null ? value : iteratee(value); value = (comparator || value !== 0) ? value : 0; if (isCommon && computed === computed) { var valuesIndex = valuesLength; while (valuesIndex--) { if (values[valuesIndex] === computed) { continue outer; } } result.push(value); } else if (!includes(values, computed, comparator)) { result.push(value); } } return result; } /** * The base implementation of `_.forEach` without support for iteratee shorthands. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array|Object} Returns `collection`. */ var baseEach = createBaseEach(baseForOwn); /** * The base implementation of `_.forEachRight` without support for iteratee shorthands. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array|Object} Returns `collection`. */ var baseEachRight = createBaseEach(baseForOwnRight, true); /** * The base implementation of `_.every` without support for iteratee shorthands. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {boolean} Returns `true` if all elements pass the predicate check, * else `false` */ function baseEvery(collection, predicate) { var result = true; baseEach(collection, function(value, index, collection) { result = !!predicate(value, index, collection); return result; }); return result; } /** * The base implementation of methods like `_.max` and `_.min` which accepts a * `comparator` to determine the extremum value. * * @private * @param {Array} array The array to iterate over. * @param {Function} iteratee The iteratee invoked per iteration. * @param {Function} comparator The comparator used to compare values. * @returns {*} Returns the extremum value. */ function baseExtremum(array, iteratee, comparator) { var index = -1, length = array.length; while (++index < length) { var value = array[index], current = iteratee(value); if (current != null && (computed === undefined ? (current === current && !isSymbol(current)) : comparator(current, computed) )) { var computed = current, result = value; } } return result; } /** * The base implementation of `_.fill` without an iteratee call guard. * * @private * @param {Array} array The array to fill. * @param {*} value The value to fill `array` with. * @param {number} [start=0] The start position. * @param {number} [end=array.length] The end position. * @returns {Array} Returns `array`. */ function baseFill(array, value, start, end) { var length = array.length; start = toInteger(start); if (start < 0) { start = -start > length ? 0 : (length + start); } end = (end === undefined || end > length) ? length : toInteger(end); if (end < 0) { end += length; } end = start > end ? 0 : toLength(end); while (start < end) { array[start++] = value; } return array; } /** * The base implementation of `_.filter` without support for iteratee shorthands. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {Array} Returns the new filtered array. */ function baseFilter(collection, predicate) { var result = []; baseEach(collection, function(value, index, collection) { if (predicate(value, index, collection)) { result.push(value); } }); return result; } /** * The base implementation of `_.flatten` with support for restricting flattening. * * @private * @param {Array} array The array to flatten. * @param {number} depth The maximum recursion depth. * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. * @param {Array} [result=[]] The initial result value. * @returns {Array} Returns the new flattened array. */ function baseFlatten(array, depth, predicate, isStrict, result) { var index = -1, length = array.length; predicate || (predicate = isFlattenable); result || (result = []); while (++index < length) { var value = array[index]; if (depth > 0 && predicate(value)) { if (depth > 1) { // Recursively flatten arrays (susceptible to call stack limits). baseFlatten(value, depth - 1, predicate, isStrict, result); } else { arrayPush(result, value); } } else if (!isStrict) { result[result.length] = value; } } return result; } /** * The base implementation of `baseForOwn` which iterates over `object` * properties returned by `keysFunc` and invokes `iteratee` for each property. * Iteratee functions may exit iteration early by explicitly returning `false`. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */ var baseFor = createBaseFor(); /** * This function is like `baseFor` except that it iterates over properties * in the opposite order. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */ var baseForRight = createBaseFor(true); /** * The base implementation of `_.forOwn` without support for iteratee shorthands. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Object} Returns `object`. */ function baseForOwn(object, iteratee) { return object && baseFor(object, iteratee, keys); } /** * The base implementation of `_.forOwnRight` without support for iteratee shorthands. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Object} Returns `object`. */ function baseForOwnRight(object, iteratee) { return object && baseForRight(object, iteratee, keys); } /** * The base implementation of `_.functions` which creates an array of * `object` function property names filtered from `props`. * * @private * @param {Object} object The object to inspect. * @param {Array} props The property names to filter. * @returns {Array} Returns the function names. */ function baseFunctions(object, props) { return arrayFilter(props, function(key) { return isFunction(object[key]); }); } /** * The base implementation of `_.get` without support for default values. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @returns {*} Returns the resolved value. */ function baseGet(object, path) { path = castPath(path, object); var index = 0, length = path.length; while (object != null && index < length) { object = object[toKey(path[index++])]; } return (index && index == length) ? object : undefined; } /** * The base implementation of `getAllKeys` and `getAllKeysIn` which uses * `keysFunc` and `symbolsFunc` to get the enumerable property names and * symbols of `object`. * * @private * @param {Object} object The object to query. * @param {Function} keysFunc The function to get the keys of `object`. * @param {Function} symbolsFunc The function to get the symbols of `object`. * @returns {Array} Returns the array of property names and symbols. */ function baseGetAllKeys(object, keysFunc, symbolsFunc) { var result = keysFunc(object); return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); } /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return (symToStringTag && symToStringTag in Object(value)) ? getRawTag(value) : objectToString(value); } /** * The base implementation of `_.gt` which doesn't coerce arguments. * * @private * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if `value` is greater than `other`, * else `false`. */ function baseGt(value, other) { return value > other; } /** * The base implementation of `_.has` without support for deep paths. * * @private * @param {Object} [object] The object to query. * @param {Array|string} key The key to check. * @returns {boolean} Returns `true` if `key` exists, else `false`. */ function baseHas(object, key) { return object != null && hasOwnProperty.call(object, key); } /** * The base implementation of `_.hasIn` without support for deep paths. * * @private * @param {Object} [object] The object to query. * @param {Array|string} key The key to check. * @returns {boolean} Returns `true` if `key` exists, else `false`. */ function baseHasIn(object, key) { return object != null && key in Object(object); } /** * The base implementation of `_.inRange` which doesn't coerce arguments. * * @private * @param {number} number The number to check. * @param {number} start The start of the range. * @param {number} end The end of the range. * @returns {boolean} Returns `true` if `number` is in the range, else `false`. */ function baseInRange(number, start, end) { return number >= nativeMin(start, end) && number < nativeMax(start, end); } /** * The base implementation of methods like `_.intersection`, without support * for iteratee shorthands, that accepts an array of arrays to inspect. * * @private * @param {Array} arrays The arrays to inspect. * @param {Function} [iteratee] The iteratee invoked per element. * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new array of shared values. */ function baseIntersection(arrays, iteratee, comparator) { var includes = comparator ? arrayIncludesWith : arrayIncludes, length = arrays[0].length, othLength = arrays.length, othIndex = othLength, caches = Array(othLength), maxLength = Infinity, result = []; while (othIndex--) { var array = arrays[othIndex]; if (othIndex && iteratee) { array = arrayMap(array, baseUnary(iteratee)); } maxLength = nativeMin(array.length, maxLength); caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) ? new SetCache(othIndex && array) : undefined; } array = arrays[0]; var index = -1, seen = caches[0]; outer: while (++index < length && result.length < maxLength) { var value = array[index], computed = iteratee ? iteratee(value) : value; value = (comparator || value !== 0) ? value : 0; if (!(seen ? cacheHas(seen, computed) : includes(result, computed, comparator) )) { othIndex = othLength; while (--othIndex) { var cache = caches[othIndex]; if (!(cache ? cacheHas(cache, computed) : includes(arrays[othIndex], computed, comparator)) ) { continue outer; } } if (seen) { seen.push(computed); } result.push(value); } } return result; } /** * The base implementation of `_.invert` and `_.invertBy` which inverts * `object` with values transformed by `iteratee` and set by `setter`. * * @private * @param {Object} object The object to iterate over. * @param {Function} setter The function to set `accumulator` values. * @param {Function} iteratee The iteratee to transform values. * @param {Object} accumulator The initial inverted object. * @returns {Function} Returns `accumulator`. */ function baseInverter(object, setter, iteratee, accumulator) { baseForOwn(object, function(value, key, object) { setter(accumulator, iteratee(value), key, object); }); return accumulator; } /** * The base implementation of `_.invoke` without support for individual * method arguments. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path of the method to invoke. * @param {Array} args The arguments to invoke the method with. * @returns {*} Returns the result of the invoked method. */ function baseInvoke(object, path, args) { path = castPath(path, object); object = parent(object, path); var func = object == null ? object : object[toKey(last(path))]; return func == null ? undefined : apply(func, object, args); } /** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */ function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag; } /** * The base implementation of `_.isArrayBuffer` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. */ function baseIsArrayBuffer(value) { return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; } /** * The base implementation of `_.isDate` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a date object, else `false`. */ function baseIsDate(value) { return isObjectLike(value) && baseGetTag(value) == dateTag; } /** * The base implementation of `_.isEqual` which supports partial comparisons * and tracks traversed objects. * * @private * @param {*} value The value to compare. * @param {*} other The other value to compare. * @param {boolean} bitmask The bitmask flags. * 1 - Unordered comparison * 2 - Partial comparison * @param {Function} [customizer] The function to customize comparisons. * @param {Object} [stack] Tracks traversed `value` and `other` objects. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. */ function baseIsEqual(value, other, bitmask, customizer, stack) { if (value === other) { return true; } if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); } /** * A specialized version of `baseIsEqual` for arrays and objects which performs * deep comparisons and tracks traversed objects enabling objects with circular * references to be compared. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} [stack] Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other); objTag = objTag == argsTag ? objectTag : objTag; othTag = othTag == argsTag ? objectTag : othTag; var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; if (isSameTag && isBuffer(object)) { if (!isBuffer(other)) { return false; } objIsArr = true; objIsObj = false; } if (isSameTag && !objIsObj) { stack || (stack = new Stack); return (objIsArr || isTypedArray(object)) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); } if (!(bitmask & COMPARE_PARTIAL_FLAG)) { var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); if (objIsWrapped || othIsWrapped) { var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; stack || (stack = new Stack); return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); } } if (!isSameTag) { return false; } stack || (stack = new Stack); return equalObjects(object, other, bitmask, customizer, equalFunc, stack); } /** * The base implementation of `_.isMap` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a map, else `false`. */ function baseIsMap(value) { return isObjectLike(value) && getTag(value) == mapTag; } /** * The base implementation of `_.isMatch` without support for iteratee shorthands. * * @private * @param {Object} object The object to inspect. * @param {Object} source The object of property values to match. * @param {Array} matchData The property names, values, and compare flags to match. * @param {Function} [customizer] The function to customize comparisons. * @returns {boolean} Returns `true` if `object` is a match, else `false`. */ function baseIsMatch(object, source, matchData, customizer) { var index = matchData.length, length = index, noCustomizer = !customizer; if (object == null) { return !length; } object = Object(object); while (index--) { var data = matchData[index]; if ((noCustomizer && data[2]) ? data[1] !== object[data[0]] : !(data[0] in object) ) { return false; } } while (++index < length) { data = matchData[index]; var key = data[0], objValue = object[key], srcValue = data[1]; if (noCustomizer && data[2]) { if (objValue === undefined && !(key in object)) { return false; } } else { var stack = new Stack; if (customizer) { var result = customizer(objValue, srcValue, key, object, source, stack); } if (!(result === undefined ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result )) { return false; } } } return true; } /** * The base implementation of `_.isNative` without bad shim checks. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */ function baseIsNative(value) { if (!isObject(value) || isMasked(value)) { return false; } var pattern = isFunction(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } /** * The base implementation of `_.isRegExp` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. */ function baseIsRegExp(value) { return isObjectLike(value) && baseGetTag(value) == regexpTag; } /** * The base implementation of `_.isSet` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a set, else `false`. */ function baseIsSet(value) { return isObjectLike(value) && getTag(value) == setTag; } /** * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */ function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } /** * The base implementation of `_.iteratee`. * * @private * @param {*} [value=_.identity] The value to convert to an iteratee. * @returns {Function} Returns the iteratee. */ function baseIteratee(value) { // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. if (typeof value == 'function') { return value; } if (value == null) { return identity; } if (typeof value == 'object') { return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); } return property(value); } /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty.call(object, key) && key != 'constructor') { result.push(key); } } return result; } /** * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeysIn(object) { if (!isObject(object)) { return nativeKeysIn(object); } var isProto = isPrototype(object), result = []; for (var key in object) { if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { result.push(key); } } return result; } /** * The base implementation of `_.lt` which doesn't coerce arguments. * * @private * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if `value` is less than `other`, * else `false`. */ function baseLt(value, other) { return value < other; } /** * The base implementation of `_.map` without support for iteratee shorthands. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function baseMap(collection, iteratee) { var index = -1, result = isArrayLike(collection) ? Array(collection.length) : []; baseEach(collection, function(value, key, collection) { result[++index] = iteratee(value, key, collection); }); return result; } /** * The base implementation of `_.matches` which doesn't clone `source`. * * @private * @param {Object} source The object of property values to match. * @returns {Function} Returns the new spec function. */ function baseMatches(source) { var matchData = getMatchData(source); if (matchData.length == 1 && matchData[0][2]) { return matchesStrictComparable(matchData[0][0], matchData[0][1]); } return function(object) { return object === source || baseIsMatch(object, source, matchData); }; } /** * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. * * @private * @param {string} path The path of the property to get. * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */ function baseMatchesProperty(path, srcValue) { if (isKey(path) && isStrictComparable(srcValue)) { return matchesStrictComparable(toKey(path), srcValue); } return function(object) { var objValue = get(object, path); return (objValue === undefined && objValue === srcValue) ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); }; } /** * The base implementation of `_.merge` without support for multiple sources. * * @private * @param {Object} object The destination object. * @param {Object} source The source object. * @param {number} srcIndex The index of `source`. * @param {Function} [customizer] The function to customize merged values. * @param {Object} [stack] Tracks traversed source values and their merged * counterparts. */ function baseMerge(object, source, srcIndex, customizer, stack) { if (object === source) { return; } baseFor(source, function(srcValue, key) { stack || (stack = new Stack); if (isObject(srcValue)) { baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); } else { var newValue = customizer ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) : undefined; if (newValue === undefined) { newValue = srcValue; } assignMergeValue(object, key, newValue); } }, keysIn); } /** * A specialized version of `baseMerge` for arrays and objects which performs * deep merges and tracks traversed objects enabling objects with circular * references to be merged. * * @private * @param {Object} object The destination object. * @param {Object} source The source object. * @param {string} key The key of the value to merge. * @param {number} srcIndex The index of `source`. * @param {Function} mergeFunc The function to merge values. * @param {Function} [customizer] The function to customize assigned values. * @param {Object} [stack] Tracks traversed source values and their merged * counterparts. */ function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue); if (stacked) { assignMergeValue(object, key, stacked); return; } var newValue = customizer ? customizer(objValue, srcValue, (key + ''), object, source, stack) : undefined; var isCommon = newValue === undefined; if (isCommon) { var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue); newValue = srcValue; if (isArr || isBuff || isTyped) { if (isArray(objValue)) { newValue = objValue; } else if (isArrayLikeObject(objValue)) { newValue = copyArray(objValue); } else if (isBuff) { isCommon = false; newValue = cloneBuffer(srcValue, true); } else if (isTyped) { isCommon = false; newValue = cloneTypedArray(srcValue, true); } else { newValue = []; } } else if (isPlainObject(srcValue) || isArguments(srcValue)) { newValue = objValue; if (isArguments(objValue)) { newValue = toPlainObject(objValue); } else if (!isObject(objValue) || isFunction(objValue)) { newValue = initCloneObject(srcValue); } } else { isCommon = false; } } if (isCommon) { // Recursively merge objects and arrays (susceptible to call stack limits). stack.set(srcValue, newValue); mergeFunc(newValue, srcValue, srcIndex, customizer, stack); stack['delete'](srcValue); } assignMergeValue(object, key, newValue); } /** * The base implementation of `_.nth` which doesn't coerce arguments. * * @private * @param {Array} array The array to query. * @param {number} n The index of the element to return. * @returns {*} Returns the nth element of `array`. */ function baseNth(array, n) { var length = array.length; if (!length) { return; } n += n < 0 ? length : 0; return isIndex(n, length) ? array[n] : undefined; } /** * The base implementation of `_.orderBy` without param guards. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. * @param {string[]} orders The sort orders of `iteratees`. * @returns {Array} Returns the new sorted array. */ function baseOrderBy(collection, iteratees, orders) { if (iteratees.length) { iteratees = arrayMap(iteratees, function(iteratee) { if (isArray(iteratee)) { return function(value) { return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); } } return iteratee; }); } else { iteratees = [identity]; } var index = -1; iteratees = arrayMap(iteratees, baseUnary(getIteratee())); var result = baseMap(collection, function(value, key, collection) { var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); }); return { 'criteria': criteria, 'index': ++index, 'value': value }; }); return baseSortBy(result, function(object, other) { return compareMultiple(object, other, orders); }); } /** * The base implementation of `_.pick` without support for individual * property identifiers. * * @private * @param {Object} object The source object. * @param {string[]} paths The property paths to pick. * @returns {Object} Returns the new object. */ function basePick(object, paths) { return basePickBy(object, paths, function(value, path) { return hasIn(object, path); }); } /** * The base implementation of `_.pickBy` without support for iteratee shorthands. * * @private * @param {Object} object The source object. * @param {string[]} paths The property paths to pick. * @param {Function} predicate The function invoked per property. * @returns {Object} Returns the new object. */ function basePickBy(object, paths, predicate) { var index = -1, length = paths.length, result = {}; while (++index < length) { var path = paths[index], value = baseGet(object, path); if (predicate(value, path)) { baseSet(result, castPath(path, object), value); } } return result; } /** * A specialized version of `baseProperty` which supports deep paths. * * @private * @param {Array|string} path The path of the property to get. * @returns {Function} Returns the new accessor function. */ function basePropertyDeep(path) { return function(object) { return baseGet(object, path); }; } /** * The base implementation of `_.pullAllBy` without support for iteratee * shorthands. * * @private * @param {Array} array The array to modify. * @param {Array} values The values to remove. * @param {Function} [iteratee] The iteratee invoked per element. * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns `array`. */ function basePullAll(array, values, iteratee, comparator) { var indexOf = comparator ? baseIndexOfWith : baseIndexOf, index = -1, length = values.length, seen = array; if (array === values) { values = copyArray(values); } if (iteratee) { seen = arrayMap(array, baseUnary(iteratee)); } while (++index < length) { var fromIndex = 0, value = values[index], computed = iteratee ? iteratee(value) : value; while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { if (seen !== array) { splice.call(seen, fromIndex, 1); } splice.call(array, fromIndex, 1); } } return array; } /** * The base implementation of `_.pullAt` without support for individual * indexes or capturing the removed elements. * * @private * @param {Array} array The array to modify. * @param {number[]} indexes The indexes of elements to remove. * @returns {Array} Returns `array`. */ function basePullAt(array, indexes) { var length = array ? indexes.length : 0, lastIndex = length - 1; while (length--) { var index = indexes[length]; if (length == lastIndex || index !== previous) { var previous = index; if (isIndex(index)) { splice.call(array, index, 1); } else { baseUnset(array, index); } } } return array; } /** * The base implementation of `_.random` without support for returning * floating-point numbers. * * @private * @param {number} lower The lower bound. * @param {number} upper The upper bound. * @returns {number} Returns the random number. */ function baseRandom(lower, upper) { return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); } /** * The base implementation of `_.range` and `_.rangeRight` which doesn't * coerce arguments. * * @private * @param {number} start The start of the range. * @param {number} end The end of the range. * @param {number} step The value to increment or decrement by. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Array} Returns the range of numbers. */ function baseRange(start, end, step, fromRight) { var index = -1, length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), result = Array(length); while (length--) { result[fromRight ? length : ++index] = start; start += step; } return result; } /** * The base implementation of `_.repeat` which doesn't coerce arguments. * * @private * @param {string} string The string to repeat. * @param {number} n The number of times to repeat the string. * @returns {string} Returns the repeated string. */ function baseRepeat(string, n) { var result = ''; if (!string || n < 1 || n > MAX_SAFE_INTEGER) { return result; } // Leverage the exponentiation by squaring algorithm for a faster repeat. // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. do { if (n % 2) { result += string; } n = nativeFloor(n / 2); if (n) { string += string; } } while (n); return result; } /** * The base implementation of `_.rest` which doesn't validate or coerce arguments. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @returns {Function} Returns the new function. */ function baseRest(func, start) { return setToString(overRest(func, start, identity), func + ''); } /** * The base implementation of `_.sample`. * * @private * @param {Array|Object} collection The collection to sample. * @returns {*} Returns the random element. */ function baseSample(collection) { return arraySample(values(collection)); } /** * The base implementation of `_.sampleSize` without param guards. * * @private * @param {Array|Object} collection The collection to sample. * @param {number} n The number of elements to sample. * @returns {Array} Returns the random elements. */ function baseSampleSize(collection, n) { var array = values(collection); return shuffleSelf(array, baseClamp(n, 0, array.length)); } /** * The base implementation of `_.set`. * * @private * @param {Object} object The object to modify. * @param {Array|string} path The path of the property to set. * @param {*} value The value to set. * @param {Function} [customizer] The function to customize path creation. * @returns {Object} Returns `object`. */ function baseSet(object, path, value, customizer) { if (!isObject(object)) { return object; } path = castPath(path, object); var index = -1, length = path.length, lastIndex = length - 1, nested = object; while (nested != null && ++index < length) { var key = toKey(path[index]), newValue = value; if (key === '__proto__' || key === 'constructor' || key === 'prototype') { return object; } if (index != lastIndex) { var objValue = nested[key]; newValue = customizer ? customizer(objValue, key, nested) : undefined; if (newValue === undefined) { newValue = isObject(objValue) ? objValue : (isIndex(path[index + 1]) ? [] : {}); } } assignValue(nested, key, newValue); nested = nested[key]; } return object; } /** * The base implementation of `setData` without support for hot loop shorting. * * @private * @param {Function} func The function to associate metadata with. * @param {*} data The metadata. * @returns {Function} Returns `func`. */ var baseSetData = !metaMap ? identity : function(func, data) { metaMap.set(func, data); return func; }; /** * The base implementation of `setToString` without support for hot loop shorting. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ var baseSetToString = !defineProperty ? identity : function(func, string) { return defineProperty(func, 'toString', { 'configurable': true, 'enumerable': false, 'value': constant(string), 'writable': true }); }; /** * The base implementation of `_.shuffle`. * * @private * @param {Array|Object} collection The collection to shuffle. * @returns {Array} Returns the new shuffled array. */ function baseShuffle(collection) { return shuffleSelf(values(collection)); } /** * The base implementation of `_.slice` without an iteratee call guard. * * @private * @param {Array} array The array to slice. * @param {number} [start=0] The start position. * @param {number} [end=array.length] The end position. * @returns {Array} Returns the slice of `array`. */ function baseSlice(array, start, end) { var index = -1, length = array.length; if (start < 0) { start = -start > length ? 0 : (length + start); } end = end > length ? length : end; if (end < 0) { end += length; } length = start > end ? 0 : ((end - start) >>> 0); start >>>= 0; var result = Array(length); while (++index < length) { result[index] = array[index + start]; } return result; } /** * The base implementation of `_.some` without support for iteratee shorthands. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {boolean} Returns `true` if any element passes the predicate check, * else `false`. */ function baseSome(collection, predicate) { var result; baseEach(collection, function(value, index, collection) { result = predicate(value, index, collection); return !result; }); return !!result; } /** * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which * performs a binary search of `array` to determine the index at which `value` * should be inserted into `array` in order to maintain its sort order. * * @private * @param {Array} array The sorted array to inspect. * @param {*} value The value to evaluate. * @param {boolean} [retHighest] Specify returning the highest qualified index. * @returns {number} Returns the index at which `value` should be inserted * into `array`. */ function baseSortedIndex(array, value, retHighest) { var low = 0, high = array == null ? low : array.length; if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { while (low < high) { var mid = (low + high) >>> 1, computed = array[mid]; if (computed !== null && !isSymbol(computed) && (retHighest ? (computed <= value) : (computed < value))) { low = mid + 1; } else { high = mid; } } return high; } return baseSortedIndexBy(array, value, identity, retHighest); } /** * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` * which invokes `iteratee` for `value` and each element of `array` to compute * their sort ranking. The iteratee is invoked with one argument; (value). * * @private * @param {Array} array The sorted array to inspect. * @param {*} value The value to evaluate. * @param {Function} iteratee The iteratee invoked per element. * @param {boolean} [retHighest] Specify returning the highest qualified index. * @returns {number} Returns the index at which `value` should be inserted * into `array`. */ function baseSortedIndexBy(array, value, iteratee, retHighest) { var low = 0, high = array == null ? 0 : array.length; if (high === 0) { return 0; } value = iteratee(value); var valIsNaN = value !== value, valIsNull = value === null, valIsSymbol = isSymbol(value), valIsUndefined = value === undefined; while (low < high) { var mid = nativeFloor((low + high) / 2), computed = iteratee(array[mid]), othIsDefined = computed !== undefined, othIsNull = computed === null, othIsReflexive = computed === computed, othIsSymbol = isSymbol(computed); if (valIsNaN) { var setLow = retHighest || othIsReflexive; } else if (valIsUndefined) { setLow = othIsReflexive && (retHighest || othIsDefined); } else if (valIsNull) { setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); } else if (valIsSymbol) { setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); } else if (othIsNull || othIsSymbol) { setLow = false; } else { setLow = retHighest ? (computed <= value) : (computed < value); } if (setLow) { low = mid + 1; } else { high = mid; } } return nativeMin(high, MAX_ARRAY_INDEX); } /** * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without * support for iteratee shorthands. * * @private * @param {Array} array The array to inspect. * @param {Function} [iteratee] The iteratee invoked per element. * @returns {Array} Returns the new duplicate free array. */ function baseSortedUniq(array, iteratee) { var index = -1, length = array.length, resIndex = 0, result = []; while (++index < length) { var value = array[index], computed = iteratee ? iteratee(value) : value; if (!index || !eq(computed, seen)) { var seen = computed; result[resIndex++] = value === 0 ? 0 : value; } } return result; } /** * The base implementation of `_.toNumber` which doesn't ensure correct * conversions of binary, hexadecimal, or octal string values. * * @private * @param {*} value The value to process. * @returns {number} Returns the number. */ function baseToNumber(value) { if (typeof value == 'number') { return value; } if (isSymbol(value)) { return NAN; } return +value; } /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */ function baseToString(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } if (isArray(value)) { // Recursively convert values (susceptible to call stack limits). return arrayMap(value, baseToString) + ''; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } /** * The base implementation of `_.uniqBy` without support for iteratee shorthands. * * @private * @param {Array} array The array to inspect. * @param {Function} [iteratee] The iteratee invoked per element. * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new duplicate free array. */ function baseUniq(array, iteratee, comparator) { var index = -1, includes = arrayIncludes, length = array.length, isCommon = true, result = [], seen = result; if (comparator) { isCommon = false; includes = arrayIncludesWith; } else if (length >= LARGE_ARRAY_SIZE) { var set = iteratee ? null : createSet(array); if (set) { return setToArray(set); } isCommon = false; includes = cacheHas; seen = new SetCache; } else { seen = iteratee ? [] : result; } outer: while (++index < length) { var value = array[index], computed = iteratee ? iteratee(value) : value; value = (comparator || value !== 0) ? value : 0; if (isCommon && computed === computed) { var seenIndex = seen.length; while (seenIndex--) { if (seen[seenIndex] === computed) { continue outer; } } if (iteratee) { seen.push(computed); } result.push(value); } else if (!includes(seen, computed, comparator)) { if (seen !== result) { seen.push(computed); } result.push(value); } } return result; } /** * The base implementation of `_.unset`. * * @private * @param {Object} object The object to modify. * @param {Array|string} path The property path to unset. * @returns {boolean} Returns `true` if the property is deleted, else `false`. */ function baseUnset(object, path) { path = castPath(path, object); object = parent(object, path); return object == null || delete object[toKey(last(path))]; } /** * The base implementation of `_.update`. * * @private * @param {Object} object The object to modify. * @param {Array|string} path The path of the property to update. * @param {Function} updater The function to produce the updated value. * @param {Function} [customizer] The function to customize path creation. * @returns {Object} Returns `object`. */ function baseUpdate(object, path, updater, customizer) { return baseSet(object, path, updater(baseGet(object, path)), customizer); } /** * The base implementation of methods like `_.dropWhile` and `_.takeWhile` * without support for iteratee shorthands. * * @private * @param {Array} array The array to query. * @param {Function} predicate The function invoked per iteration. * @param {boolean} [isDrop] Specify dropping elements instead of taking them. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Array} Returns the slice of `array`. */ function baseWhile(array, predicate, isDrop, fromRight) { var length = array.length, index = fromRight ? length : -1; while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {} return isDrop ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); } /** * The base implementation of `wrapperValue` which returns the result of * performing a sequence of actions on the unwrapped `value`, where each * successive action is supplied the return value of the previous. * * @private * @param {*} value The unwrapped value. * @param {Array} actions Actions to perform to resolve the unwrapped value. * @returns {*} Returns the resolved value. */ function baseWrapperValue(value, actions) { var result = value; if (result instanceof LazyWrapper) { result = result.value(); } return arrayReduce(actions, function(result, action) { return action.func.apply(action.thisArg, arrayPush([result], action.args)); }, result); } /** * The base implementation of methods like `_.xor`, without support for * iteratee shorthands, that accepts an array of arrays to inspect. * * @private * @param {Array} arrays The arrays to inspect. * @param {Function} [iteratee] The iteratee invoked per element. * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new array of values. */ function baseXor(arrays, iteratee, comparator) { var length = arrays.length; if (length < 2) { return length ? baseUniq(arrays[0]) : []; } var index = -1, result = Array(length); while (++index < length) { var array = arrays[index], othIndex = -1; while (++othIndex < length) { if (othIndex != index) { result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); } } } return baseUniq(baseFlatten(result, 1), iteratee, comparator); } /** * This base implementation of `_.zipObject` which assigns values using `assignFunc`. * * @private * @param {Array} props The property identifiers. * @param {Array} values The property values. * @param {Function} assignFunc The function to assign values. * @returns {Object} Returns the new object. */ function baseZipObject(props, values, assignFunc) { var index = -1, length = props.length, valsLength = values.length, result = {}; while (++index < length) { var value = index < valsLength ? values[index] : undefined; assignFunc(result, props[index], value); } return result; } /** * Casts `value` to an empty array if it's not an array like object. * * @private * @param {*} value The value to inspect. * @returns {Array|Object} Returns the cast array-like object. */ function castArrayLikeObject(value) { return isArrayLikeObject(value) ? value : []; } /** * Casts `value` to `identity` if it's not a function. * * @private * @param {*} value The value to inspect. * @returns {Function} Returns cast function. */ function castFunction(value) { return typeof value == 'function' ? value : identity; } /** * Casts `value` to a path array if it's not one. * * @private * @param {*} value The value to inspect. * @param {Object} [object] The object to query keys on. * @returns {Array} Returns the cast property path array. */ function castPath(value, object) { if (isArray(value)) { return value; } return isKey(value, object) ? [value] : stringToPath(toString(value)); } /** * A `baseRest` alias which can be replaced with `identity` by module * replacement plugins. * * @private * @type {Function} * @param {Function} func The function to apply a rest parameter to. * @returns {Function} Returns the new function. */ var castRest = baseRest; /** * Casts `array` to a slice if it's needed. * * @private * @param {Array} array The array to inspect. * @param {number} start The start position. * @param {number} [end=array.length] The end position. * @returns {Array} Returns the cast slice. */ function castSlice(array, start, end) { var length = array.length; end = end === undefined ? length : end; return (!start && end >= length) ? array : baseSlice(array, start, end); } /** * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). * * @private * @param {number|Object} id The timer id or timeout object of the timer to clear. */ var clearTimeout = ctxClearTimeout || function(id) { return root.clearTimeout(id); }; /** * Creates a clone of `buffer`. * * @private * @param {Buffer} buffer The buffer to clone. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Buffer} Returns the cloned buffer. */ function cloneBuffer(buffer, isDeep) { if (isDeep) { return buffer.slice(); } var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); buffer.copy(result); return result; } /** * Creates a clone of `arrayBuffer`. * * @private * @param {ArrayBuffer} arrayBuffer The array buffer to clone. * @returns {ArrayBuffer} Returns the cloned array buffer. */ function cloneArrayBuffer(arrayBuffer) { var result = new arrayBuffer.constructor(arrayBuffer.byteLength); new Uint8Array(result).set(new Uint8Array(arrayBuffer)); return result; } /** * Creates a clone of `dataView`. * * @private * @param {Object} dataView The data view to clone. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the cloned data view. */ function cloneDataView(dataView, isDeep) { var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); } /** * Creates a clone of `regexp`. * * @private * @param {Object} regexp The regexp to clone. * @returns {Object} Returns the cloned regexp. */ function cloneRegExp(regexp) { var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); result.lastIndex = regexp.lastIndex; return result; } /** * Creates a clone of the `symbol` object. * * @private * @param {Object} symbol The symbol object to clone. * @returns {Object} Returns the cloned symbol object. */ function cloneSymbol(symbol) { return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; } /** * Creates a clone of `typedArray`. * * @private * @param {Object} typedArray The typed array to clone. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the cloned typed array. */ function cloneTypedArray(typedArray, isDeep) { var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); } /** * Compares values to sort them in ascending order. * * @private * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {number} Returns the sort order indicator for `value`. */ function compareAscending(value, other) { if (value !== other) { var valIsDefined = value !== undefined, valIsNull = value === null, valIsReflexive = value === value, valIsSymbol = isSymbol(value); var othIsDefined = other !== undefined, othIsNull = other === null, othIsReflexive = other === other, othIsSymbol = isSymbol(other); if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || (valIsNull && othIsDefined && othIsReflexive) || (!valIsDefined && othIsReflexive) || !valIsReflexive) { return 1; } if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || (othIsNull && valIsDefined && valIsReflexive) || (!othIsDefined && valIsReflexive) || !othIsReflexive) { return -1; } } return 0; } /** * Used by `_.orderBy` to compare multiple properties of a value to another * and stable sort them. * * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, * specify an order of "desc" for descending or "asc" for ascending sort order * of corresponding values. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {boolean[]|string[]} orders The order to sort by for each property. * @returns {number} Returns the sort order indicator for `object`. */ function compareMultiple(object, other, orders) { var index = -1, objCriteria = object.criteria, othCriteria = other.criteria, length = objCriteria.length, ordersLength = orders.length; while (++index < length) { var result = compareAscending(objCriteria[index], othCriteria[index]); if (result) { if (index >= ordersLength) { return result; } var order = orders[index]; return result * (order == 'desc' ? -1 : 1); } } // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications // that causes it, under certain circumstances, to provide the same value for // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 // for more details. // // This also ensures a stable sort in V8 and other engines. // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. return object.index - other.index; } /** * Creates an array that is the composition of partially applied arguments, * placeholders, and provided arguments into a single array of arguments. * * @private * @param {Array} args The provided arguments. * @param {Array} partials The arguments to prepend to those provided. * @param {Array} holders The `partials` placeholder indexes. * @params {boolean} [isCurried] Specify composing for a curried function. * @returns {Array} Returns the new array of composed arguments. */ function composeArgs(args, partials, holders, isCurried) { var argsIndex = -1, argsLength = args.length, holdersLength = holders.length, leftIndex = -1, leftLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result = Array(leftLength + rangeLength), isUncurried = !isCurried; while (++leftIndex < leftLength) { result[leftIndex] = partials[leftIndex]; } while (++argsIndex < holdersLength) { if (isUncurried || argsIndex < argsLength) { result[holders[argsIndex]] = args[argsIndex]; } } while (rangeLength--) { result[leftIndex++] = args[argsIndex++]; } return result; } /** * This function is like `composeArgs` except that the arguments composition * is tailored for `_.partialRight`. * * @private * @param {Array} args The provided arguments. * @param {Array} partials The arguments to append to those provided. * @param {Array} holders The `partials` placeholder indexes. * @params {boolean} [isCurried] Specify composing for a curried function. * @returns {Array} Returns the new array of composed arguments. */ function composeArgsRight(args, partials, holders, isCurried) { var argsIndex = -1, argsLength = args.length, holdersIndex = -1, holdersLength = holders.length, rightIndex = -1, rightLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result = Array(rangeLength + rightLength), isUncurried = !isCurried; while (++argsIndex < rangeLength) { result[argsIndex] = args[argsIndex]; } var offset = argsIndex; while (++rightIndex < rightLength) { result[offset + rightIndex] = partials[rightIndex]; } while (++holdersIndex < holdersLength) { if (isUncurried || argsIndex < argsLength) { result[offset + holders[holdersIndex]] = args[argsIndex++]; } } return result; } /** * Copies the values of `source` to `array`. * * @private * @param {Array} source The array to copy values from. * @param {Array} [array=[]] The array to copy values to. * @returns {Array} Returns `array`. */ function copyArray(source, array) { var index = -1, length = source.length; array || (array = Array(length)); while (++index < length) { array[index] = source[index]; } return array; } /** * Copies properties of `source` to `object`. * * @private * @param {Object} source The object to copy properties from. * @param {Array} props The property identifiers to copy. * @param {Object} [object={}] The object to copy properties to. * @param {Function} [customizer] The function to customize copied values. * @returns {Object} Returns `object`. */ function copyObject(source, props, object, customizer) { var isNew = !object; object || (object = {}); var index = -1, length = props.length; while (++index < length) { var key = props[index]; var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined; if (newValue === undefined) { newValue = source[key]; } if (isNew) { baseAssignValue(object, key, newValue); } else { assignValue(object, key, newValue); } } return object; } /** * Copies own symbols of `source` to `object`. * * @private * @param {Object} source The object to copy symbols from. * @param {Object} [object={}] The object to copy symbols to. * @returns {Object} Returns `object`. */ function copySymbols(source, object) { return copyObject(source, getSymbols(source), object); } /** * Copies own and inherited symbols of `source` to `object`. * * @private * @param {Object} source The object to copy symbols from. * @param {Object} [object={}] The object to copy symbols to. * @returns {Object} Returns `object`. */ function copySymbolsIn(source, object) { return copyObject(source, getSymbolsIn(source), object); } /** * Creates a function like `_.groupBy`. * * @private * @param {Function} setter The function to set accumulator values. * @param {Function} [initializer] The accumulator object initializer. * @returns {Function} Returns the new aggregator function. */ function createAggregator(setter, initializer) { return function(collection, iteratee) { var func = isArray(collection) ? arrayAggregator : baseAggregator, accumulator = initializer ? initializer() : {}; return func(collection, setter, getIteratee(iteratee, 2), accumulator); }; } /** * Creates a function like `_.assign`. * * @private * @param {Function} assigner The function to assign values. * @returns {Function} Returns the new assigner function. */ function createAssigner(assigner) { return baseRest(function(object, sources) { var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined, guard = length > 2 ? sources[2] : undefined; customizer = (assigner.length > 3 && typeof customizer == 'function') ? (length--, customizer) : undefined; if (guard && isIterateeCall(sources[0], sources[1], guard)) { customizer = length < 3 ? undefined : customizer; length = 1; } object = Object(object); while (++index < length) { var source = sources[index]; if (source) { assigner(object, source, index, customizer); } } return object; }); } /** * Creates a `baseEach` or `baseEachRight` function. * * @private * @param {Function} eachFunc The function to iterate over a collection. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ function createBaseEach(eachFunc, fromRight) { return function(collection, iteratee) { if (collection == null) { return collection; } if (!isArrayLike(collection)) { return eachFunc(collection, iteratee); } var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection); while ((fromRight ? index-- : ++index < length)) { if (iteratee(iterable[index], index, iterable) === false) { break; } } return collection; }; } /** * Creates a base function for methods like `_.forIn` and `_.forOwn`. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ function createBaseFor(fromRight) { return function(object, iteratee, keysFunc) { var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; while (length--) { var key = props[fromRight ? length : ++index]; if (iteratee(iterable[key], key, iterable) === false) { break; } } return object; }; } /** * Creates a function that wraps `func` to invoke it with the optional `this` * binding of `thisArg`. * * @private * @param {Function} func The function to wrap. * @param {number} bitmask The bitmask flags. See `createWrap` for more details. * @param {*} [thisArg] The `this` binding of `func`. * @returns {Function} Returns the new wrapped function. */ function createBind(func, bitmask, thisArg) { var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func); function wrapper() { var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; return fn.apply(isBind ? thisArg : this, arguments); } return wrapper; } /** * Creates a function like `_.lowerFirst`. * * @private * @param {string} methodName The name of the `String` case method to use. * @returns {Function} Returns the new case function. */ function createCaseFirst(methodName) { return function(string) { string = toString(string); var strSymbols = hasUnicode(string) ? stringToArray(string) : undefined; var chr = strSymbols ? strSymbols[0] : string.charAt(0); var trailing = strSymbols ? castSlice(strSymbols, 1).join('') : string.slice(1); return chr[methodName]() + trailing; }; } /** * Creates a function like `_.camelCase`. * * @private * @param {Function} callback The function to combine each word. * @returns {Function} Returns the new compounder function. */ function createCompounder(callback) { return function(string) { return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); }; } /** * Creates a function that produces an instance of `Ctor` regardless of * whether it was invoked as part of a `new` expression or by `call` or `apply`. * * @private * @param {Function} Ctor The constructor to wrap. * @returns {Function} Returns the new wrapped function. */ function createCtor(Ctor) { return function() { // Use a `switch` statement to work with class constructors. See // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist // for more details. var args = arguments; switch (args.length) { case 0: return new Ctor; case 1: return new Ctor(args[0]); case 2: return new Ctor(args[0], args[1]); case 3: return new Ctor(args[0], args[1], args[2]); case 4: return new Ctor(args[0], args[1], args[2], args[3]); case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); } var thisBinding = baseCreate(Ctor.prototype), result = Ctor.apply(thisBinding, args); // Mimic the constructor's `return` behavior. // See https://es5.github.io/#x13.2.2 for more details. return isObject(result) ? result : thisBinding; }; } /** * Creates a function that wraps `func` to enable currying. * * @private * @param {Function} func The function to wrap. * @param {number} bitmask The bitmask flags. See `createWrap` for more details. * @param {number} arity The arity of `func`. * @returns {Function} Returns the new wrapped function. */ function createCurry(func, bitmask, arity) { var Ctor = createCtor(func); function wrapper() { var length = arguments.length, args = Array(length), index = length, placeholder = getHolder(wrapper); while (index--) { args[index] = arguments[index]; } var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) ? [] : replaceHolders(args, placeholder); length -= holders.length; if (length < arity) { return createRecurry( func, bitmask, createHybrid, wrapper.placeholder, undefined, args, holders, undefined, undefined, arity - length); } var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; return apply(fn, this, args); } return wrapper; } /** * Creates a `_.find` or `_.findLast` function. * * @private * @param {Function} findIndexFunc The function to find the collection index. * @returns {Function} Returns the new find function. */ function createFind(findIndexFunc) { return function(collection, predicate, fromIndex) { var iterable = Object(collection); if (!isArrayLike(collection)) { var iteratee = getIteratee(predicate, 3); collection = keys(collection); predicate = function(key) { return iteratee(iterable[key], key, iterable); }; } var index = findIndexFunc(collection, predicate, fromIndex); return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; }; } /** * Creates a `_.flow` or `_.flowRight` function. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new flow function. */ function createFlow(fromRight) { return flatRest(function(funcs) { var length = funcs.length, index = length, prereq = LodashWrapper.prototype.thru; if (fromRight) { funcs.reverse(); } while (index--) { var func = funcs[index]; if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } if (prereq && !wrapper && getFuncName(func) == 'wrapper') { var wrapper = new LodashWrapper([], true); } } index = wrapper ? index : length; while (++index < length) { func = funcs[index]; var funcName = getFuncName(func), data = funcName == 'wrapper' ? getData(func) : undefined; if (data && isLaziable(data[0]) && data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && !data[4].length && data[9] == 1 ) { wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); } else { wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func); } } return function() { var args = arguments, value = args[0]; if (wrapper && args.length == 1 && isArray(value)) { return wrapper.plant(value).value(); } var index = 0, result = length ? funcs[index].apply(this, args) : value; while (++index < length) { result = funcs[index].call(this, result); } return result; }; }); } /** * Creates a function that wraps `func` to invoke it with optional `this` * binding of `thisArg`, partial application, and currying. * * @private * @param {Function|string} func The function or method name to wrap. * @param {number} bitmask The bitmask flags. See `createWrap` for more details. * @param {*} [thisArg] The `this` binding of `func`. * @param {Array} [partials] The arguments to prepend to those provided to * the new function. * @param {Array} [holders] The `partials` placeholder indexes. * @param {Array} [partialsRight] The arguments to append to those provided * to the new function. * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. * @param {Array} [argPos] The argument positions of the new function. * @param {number} [ary] The arity cap of `func`. * @param {number} [arity] The arity of `func`. * @returns {Function} Returns the new wrapped function. */ function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { var isAry = bitmask & WRAP_ARY_FLAG, isBind = bitmask & WRAP_BIND_FLAG, isBindKey = bitmask & WRAP_BIND_KEY_FLAG, isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), isFlip = bitmask & WRAP_FLIP_FLAG, Ctor = isBindKey ? undefined : createCtor(func); function wrapper() { var length = arguments.length, args = Array(length), index = length; while (index--) { args[index] = arguments[index]; } if (isCurried) { var placeholder = getHolder(wrapper), holdersCount = countHolders(args, placeholder); } if (partials) { args = composeArgs(args, partials, holders, isCurried); } if (partialsRight) { args = composeArgsRight(args, partialsRight, holdersRight, isCurried); } length -= holdersCount; if (isCurried && length < arity) { var newHolders = replaceHolders(args, placeholder); return createRecurry( func, bitmask, createHybrid, wrapper.placeholder, thisArg, args, newHolders, argPos, ary, arity - length ); } var thisBinding = isBind ? thisArg : this, fn = isBindKey ? thisBinding[func] : func; length = args.length; if (argPos) { args = reorder(args, argPos); } else if (isFlip && length > 1) { args.reverse(); } if (isAry && ary < length) { args.length = ary; } if (this && this !== root && this instanceof wrapper) { fn = Ctor || createCtor(fn); } return fn.apply(thisBinding, args); } return wrapper; } /** * Creates a function like `_.invertBy`. * * @private * @param {Function} setter The function to set accumulator values. * @param {Function} toIteratee The function to resolve iteratees. * @returns {Function} Returns the new inverter function. */ function createInverter(setter, toIteratee) { return function(object, iteratee) { return baseInverter(object, setter, toIteratee(iteratee), {}); }; } /** * Creates a function that performs a mathematical operation on two values. * * @private * @param {Function} operator The function to perform the operation. * @param {number} [defaultValue] The value used for `undefined` arguments. * @returns {Function} Returns the new mathematical operation function. */ function createMathOperation(operator, defaultValue) { return function(value, other) { var result; if (value === undefined && other === undefined) { return defaultValue; } if (value !== undefined) { result = value; } if (other !== undefined) { if (result === undefined) { return other; } if (typeof value == 'string' || typeof other == 'string') { value = baseToString(value); other = baseToString(other); } else { value = baseToNumber(value); other = baseToNumber(other); } result = operator(value, other); } return result; }; } /** * Creates a function like `_.over`. * * @private * @param {Function} arrayFunc The function to iterate over iteratees. * @returns {Function} Returns the new over function. */ function createOver(arrayFunc) { return flatRest(function(iteratees) { iteratees = arrayMap(iteratees, baseUnary(getIteratee())); return baseRest(function(args) { var thisArg = this; return arrayFunc(iteratees, function(iteratee) { return apply(iteratee, thisArg, args); }); }); }); } /** * Creates the padding for `string` based on `length`. The `chars` string * is truncated if the number of characters exceeds `length`. * * @private * @param {number} length The padding length. * @param {string} [chars=' '] The string used as padding. * @returns {string} Returns the padding for `string`. */ function createPadding(length, chars) { chars = chars === undefined ? ' ' : baseToString(chars); var charsLength = chars.length; if (charsLength < 2) { return charsLength ? baseRepeat(chars, length) : chars; } var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); return hasUnicode(chars) ? castSlice(stringToArray(result), 0, length).join('') : result.slice(0, length); } /** * Creates a function that wraps `func` to invoke it with the `this` binding * of `thisArg` and `partials` prepended to the arguments it receives. * * @private * @param {Function} func The function to wrap. * @param {number} bitmask The bitmask flags. See `createWrap` for more details. * @param {*} thisArg The `this` binding of `func`. * @param {Array} partials The arguments to prepend to those provided to * the new function. * @returns {Function} Returns the new wrapped function. */ function createPartial(func, bitmask, thisArg, partials) { var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func); function wrapper() { var argsIndex = -1, argsLength = arguments.length, leftIndex = -1, leftLength = partials.length, args = Array(leftLength + argsLength), fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; while (++leftIndex < leftLength) { args[leftIndex] = partials[leftIndex]; } while (argsLength--) { args[leftIndex++] = arguments[++argsIndex]; } return apply(fn, isBind ? thisArg : this, args); } return wrapper; } /** * Creates a `_.range` or `_.rangeRight` function. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new range function. */ function createRange(fromRight) { return function(start, end, step) { if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { end = step = undefined; } // Ensure the sign of `-0` is preserved. start = toFinite(start); if (end === undefined) { end = start; start = 0; } else { end = toFinite(end); } step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); return baseRange(start, end, step, fromRight); }; } /** * Creates a function that performs a relational operation on two values. * * @private * @param {Function} operator The function to perform the operation. * @returns {Function} Returns the new relational operation function. */ function createRelationalOperation(operator) { return function(value, other) { if (!(typeof value == 'string' && typeof other == 'string')) { value = toNumber(value); other = toNumber(other); } return operator(value, other); }; } /** * Creates a function that wraps `func` to continue currying. * * @private * @param {Function} func The function to wrap. * @param {number} bitmask The bitmask flags. See `createWrap` for more details. * @param {Function} wrapFunc The function to create the `func` wrapper. * @param {*} placeholder The placeholder value. * @param {*} [thisArg] The `this` binding of `func`. * @param {Array} [partials] The arguments to prepend to those provided to * the new function. * @param {Array} [holders] The `partials` placeholder indexes. * @param {Array} [argPos] The argument positions of the new function. * @param {number} [ary] The arity cap of `func`. * @param {number} [arity] The arity of `func`. * @returns {Function} Returns the new wrapped function. */ function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { var isCurry = bitmask & WRAP_CURRY_FLAG, newHolders = isCurry ? holders : undefined, newHoldersRight = isCurry ? undefined : holders, newPartials = isCurry ? partials : undefined, newPartialsRight = isCurry ? undefined : partials; bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); } var newData = [ func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, newHoldersRight, argPos, ary, arity ]; var result = wrapFunc.apply(undefined, newData); if (isLaziable(func)) { setData(result, newData); } result.placeholder = placeholder; return setWrapToString(result, func, bitmask); } /** * Creates a function like `_.round`. * * @private * @param {string} methodName The name of the `Math` method to use when rounding. * @returns {Function} Returns the new round function. */ function createRound(methodName) { var func = Math[methodName]; return function(number, precision) { number = toNumber(number); precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); if (precision && nativeIsFinite(number)) { // Shift with exponential notation to avoid floating-point issues. // See [MDN](https://mdn.io/round#Examples) for more details. var pair = (toString(number) + 'e').split('e'), value = func(pair[0] + 'e' + (+pair[1] + precision)); pair = (toString(value) + 'e').split('e'); return +(pair[0] + 'e' + (+pair[1] - precision)); } return func(number); }; } /** * Creates a set object of `values`. * * @private * @param {Array} values The values to add to the set. * @returns {Object} Returns the new set. */ var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { return new Set(values); }; /** * Creates a `_.toPairs` or `_.toPairsIn` function. * * @private * @param {Function} keysFunc The function to get the keys of a given object. * @returns {Function} Returns the new pairs function. */ function createToPairs(keysFunc) { return function(object) { var tag = getTag(object); if (tag == mapTag) { return mapToArray(object); } if (tag == setTag) { return setToPairs(object); } return baseToPairs(object, keysFunc(object)); }; } /** * Creates a function that either curries or invokes `func` with optional * `this` binding and partially applied arguments. * * @private * @param {Function|string} func The function or method name to wrap. * @param {number} bitmask The bitmask flags. * 1 - `_.bind` * 2 - `_.bindKey` * 4 - `_.curry` or `_.curryRight` of a bound function * 8 - `_.curry` * 16 - `_.curryRight` * 32 - `_.partial` * 64 - `_.partialRight` * 128 - `_.rearg` * 256 - `_.ary` * 512 - `_.flip` * @param {*} [thisArg] The `this` binding of `func`. * @param {Array} [partials] The arguments to be partially applied. * @param {Array} [holders] The `partials` placeholder indexes. * @param {Array} [argPos] The argument positions of the new function. * @param {number} [ary] The arity cap of `func`. * @param {number} [arity] The arity of `func`. * @returns {Function} Returns the new wrapped function. */ function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; if (!isBindKey && typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } var length = partials ? partials.length : 0; if (!length) { bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); partials = holders = undefined; } ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); arity = arity === undefined ? arity : toInteger(arity); length -= holders ? holders.length : 0; if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { var partialsRight = partials, holdersRight = holders; partials = holders = undefined; } var data = isBindKey ? undefined : getData(func); var newData = [ func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity ]; if (data) { mergeData(newData, data); } func = newData[0]; bitmask = newData[1]; thisArg = newData[2]; partials = newData[3]; holders = newData[4]; arity = newData[9] = newData[9] === undefined ? (isBindKey ? 0 : func.length) : nativeMax(newData[9] - length, 0); if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); } if (!bitmask || bitmask == WRAP_BIND_FLAG) { var result = createBind(func, bitmask, thisArg); } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { result = createCurry(func, bitmask, arity); } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { result = createPartial(func, bitmask, thisArg, partials); } else { result = createHybrid.apply(undefined, newData); } var setter = data ? baseSetData : setData; return setWrapToString(setter(result, newData), func, bitmask); } /** * Used by `_.defaults` to customize its `_.assignIn` use to assign properties * of source objects to the destination object for all destination properties * that resolve to `undefined`. * * @private * @param {*} objValue The destination value. * @param {*} srcValue The source value. * @param {string} key The key of the property to assign. * @param {Object} object The parent object of `objValue`. * @returns {*} Returns the value to assign. */ function customDefaultsAssignIn(objValue, srcValue, key, object) { if (objValue === undefined || (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { return srcValue; } return objValue; } /** * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source * objects into destination objects that are passed thru. * * @private * @param {*} objValue The destination value. * @param {*} srcValue The source value. * @param {string} key The key of the property to merge. * @param {Object} object The parent object of `objValue`. * @param {Object} source The parent object of `srcValue`. * @param {Object} [stack] Tracks traversed source values and their merged * counterparts. * @returns {*} Returns the value to assign. */ function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { if (isObject(objValue) && isObject(srcValue)) { // Recursively merge objects and arrays (susceptible to call stack limits). stack.set(srcValue, objValue); baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); stack['delete'](srcValue); } return objValue; } /** * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain * objects. * * @private * @param {*} value The value to inspect. * @param {string} key The key of the property to inspect. * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. */ function customOmitClone(value) { return isPlainObject(value) ? undefined : value; } /** * A specialized version of `baseIsEqualDeep` for arrays with support for * partial deep comparisons. * * @private * @param {Array} array The array to compare. * @param {Array} other The other array to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `array` and `other` objects. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. */ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } // Check that cyclic values are equal. var arrStacked = stack.get(array); var othStacked = stack.get(other); if (arrStacked && othStacked) { return arrStacked == other && othStacked == array; } var index = -1, result = true, seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; stack.set(array, other); stack.set(other, array); // Ignore non-index properties. while (++index < arrLength) { var arrValue = array[index], othValue = other[index]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); } if (compared !== undefined) { if (compared) { continue; } result = false; break; } // Recursively compare arrays (susceptible to call stack limits). if (seen) { if (!arraySome(other, function(othValue, othIndex) { if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { return seen.push(othIndex); } })) { result = false; break; } } else if (!( arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack) )) { result = false; break; } } stack['delete'](array); stack['delete'](other); return result; } /** * A specialized version of `baseIsEqualDeep` for comparing objects of * the same `toStringTag`. * * **Note:** This function only supports comparing values with tags of * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {string} tag The `toStringTag` of the objects to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { switch (tag) { case dataViewTag: if ((object.byteLength != other.byteLength) || (object.byteOffset != other.byteOffset)) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag: if ((object.byteLength != other.byteLength) || !equalFunc(new Uint8Array(object), new Uint8Array(other))) { return false; } return true; case boolTag: case dateTag: case numberTag: // Coerce booleans to `1` or `0` and dates to milliseconds. // Invalid dates are coerced to `NaN`. return eq(+object, +other); case errorTag: return object.name == other.name && object.message == other.message; case regexpTag: case stringTag: // Coerce regexes to strings and treat strings, primitives and objects, // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring // for more details. return object == (other + ''); case mapTag: var convert = mapToArray; case setTag: var isPartial = bitmask & COMPARE_PARTIAL_FLAG; convert || (convert = setToArray); if (object.size != other.size && !isPartial) { return false; } // Assume cyclic values are equal. var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits). stack.set(object, other); var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); stack['delete'](object); return result; case symbolTag: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } /** * A specialized version of `baseIsEqualDeep` for objects with support for * partial deep comparisons. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index = objLength; while (index--) { var key = objProps[index]; if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { return false; } } // Check that cyclic values are equal. var objStacked = stack.get(object); var othStacked = stack.get(other); if (objStacked && othStacked) { return objStacked == other && othStacked == object; } var result = true; stack.set(object, other); stack.set(other, object); var skipCtor = isPartial; while (++index < objLength) { key = objProps[index]; var objValue = object[key], othValue = other[key]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); } // Recursively compare objects (susceptible to call stack limits). if (!(compared === undefined ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) : compared )) { result = false; break; } skipCtor || (skipCtor = key == 'constructor'); } if (result && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal. if (objCtor != othCtor && ('constructor' in object && 'constructor' in other) && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) { result = false; } } stack['delete'](object); stack['delete'](other); return result; } /** * A specialized version of `baseRest` which flattens the rest array. * * @private * @param {Function} func The function to apply a rest parameter to. * @returns {Function} Returns the new function. */ function flatRest(func) { return setToString(overRest(func, undefined, flatten), func + ''); } /** * Creates an array of own enumerable property names and symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names and symbols. */ function getAllKeys(object) { return baseGetAllKeys(object, keys, getSymbols); } /** * Creates an array of own and inherited enumerable property names and * symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names and symbols. */ function getAllKeysIn(object) { return baseGetAllKeys(object, keysIn, getSymbolsIn); } /** * Gets metadata for `func`. * * @private * @param {Function} func The function to query. * @returns {*} Returns the metadata for `func`. */ var getData = !metaMap ? noop : function(func) { return metaMap.get(func); }; /** * Gets the name of `func`. * * @private * @param {Function} func The function to query. * @returns {string} Returns the function name. */ function getFuncName(func) { var result = (func.name + ''), array = realNames[result], length = hasOwnProperty.call(realNames, result) ? array.length : 0; while (length--) { var data = array[length], otherFunc = data.func; if (otherFunc == null || otherFunc == func) { return data.name; } } return result; } /** * Gets the argument placeholder value for `func`. * * @private * @param {Function} func The function to inspect. * @returns {*} Returns the placeholder value. */ function getHolder(func) { var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; return object.placeholder; } /** * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, * this function returns the custom method, otherwise it returns `baseIteratee`. * If arguments are provided, the chosen function is invoked with them and * its result is returned. * * @private * @param {*} [value] The value to convert to an iteratee. * @param {number} [arity] The arity of the created iteratee. * @returns {Function} Returns the chosen function or its result. */ function getIteratee() { var result = lodash.iteratee || iteratee; result = result === iteratee ? baseIteratee : result; return arguments.length ? result(arguments[0], arguments[1]) : result; } /** * Gets the data for `map`. * * @private * @param {Object} map The map to query. * @param {string} key The reference key. * @returns {*} Returns the map data. */ function getMapData(map, key) { var data = map.__data__; return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; } /** * Gets the property names, values, and compare flags of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the match data of `object`. */ function getMatchData(object) { var result = keys(object), length = result.length; while (length--) { var key = result[length], value = object[key]; result[length] = [key, value, isStrictComparable(value)]; } return result; } /** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ function getNative(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : undefined; } /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } /** * Creates an array of the own enumerable symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */ var getSymbols = !nativeGetSymbols ? stubArray : function(object) { if (object == null) { return []; } object = Object(object); return arrayFilter(nativeGetSymbols(object), function(symbol) { return propertyIsEnumerable.call(object, symbol); }); }; /** * Creates an array of the own and inherited enumerable symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */ var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { var result = []; while (object) { arrayPush(result, getSymbols(object)); object = getPrototype(object); } return result; }; /** * Gets the `toStringTag` of `value`. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ var getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || (Map && getTag(new Map) != mapTag) || (Promise && getTag(Promise.resolve()) != promiseTag) || (Set && getTag(new Set) != setTag) || (WeakMap && getTag(new WeakMap) != weakMapTag)) { getTag = function(value) { var result = baseGetTag(value), Ctor = result == objectTag ? value.constructor : undefined, ctorString = Ctor ? toSource(Ctor) : ''; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag; case mapCtorString: return mapTag; case promiseCtorString: return promiseTag; case setCtorString: return setTag; case weakMapCtorString: return weakMapTag; } } return result; }; } /** * Gets the view, applying any `transforms` to the `start` and `end` positions. * * @private * @param {number} start The start of the view. * @param {number} end The end of the view. * @param {Array} transforms The transformations to apply to the view. * @returns {Object} Returns an object containing the `start` and `end` * positions of the view. */ function getView(start, end, transforms) { var index = -1, length = transforms.length; while (++index < length) { var data = transforms[index], size = data.size; switch (data.type) { case 'drop': start += size; break; case 'dropRight': end -= size; break; case 'take': end = nativeMin(end, start + size); break; case 'takeRight': start = nativeMax(start, end - size); break; } } return { 'start': start, 'end': end }; } /** * Extracts wrapper details from the `source` body comment. * * @private * @param {string} source The source to inspect. * @returns {Array} Returns the wrapper details. */ function getWrapDetails(source) { var match = source.match(reWrapDetails); return match ? match[1].split(reSplitDetails) : []; } /** * Checks if `path` exists on `object`. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @param {Function} hasFunc The function to check properties. * @returns {boolean} Returns `true` if `path` exists, else `false`. */ function hasPath(object, path, hasFunc) { path = castPath(path, object); var index = -1, length = path.length, result = false; while (++index < length) { var key = toKey(path[index]); if (!(result = object != null && hasFunc(object, key))) { break; } object = object[key]; } if (result || ++index != length) { return result; } length = object == null ? 0 : object.length; return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); } /** * Initializes an array clone. * * @private * @param {Array} array The array to clone. * @returns {Array} Returns the initialized clone. */ function initCloneArray(array) { var length = array.length, result = new array.constructor(length); // Add properties assigned by `RegExp#exec`. if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { result.index = array.index; result.input = array.input; } return result; } /** * Initializes an object clone. * * @private * @param {Object} object The object to clone. * @returns {Object} Returns the initialized clone. */ function initCloneObject(object) { return (typeof object.constructor == 'function' && !isPrototype(object)) ? baseCreate(getPrototype(object)) : {}; } /** * Initializes an object clone based on its `toStringTag`. * * **Note:** This function only supports cloning values with tags of * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. * * @private * @param {Object} object The object to clone. * @param {string} tag The `toStringTag` of the object to clone. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the initialized clone. */ function initCloneByTag(object, tag, isDeep) { var Ctor = object.constructor; switch (tag) { case arrayBufferTag: return cloneArrayBuffer(object); case boolTag: case dateTag: return new Ctor(+object); case dataViewTag: return cloneDataView(object, isDeep); case float32Tag: case float64Tag: case int8Tag: case int16Tag: case int32Tag: case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: return cloneTypedArray(object, isDeep); case mapTag: return new Ctor; case numberTag: case stringTag: return new Ctor(object); case regexpTag: return cloneRegExp(object); case setTag: return new Ctor; case symbolTag: return cloneSymbol(object); } } /** * Inserts wrapper `details` in a comment at the top of the `source` body. * * @private * @param {string} source The source to modify. * @returns {Array} details The details to insert. * @returns {string} Returns the modified source. */ function insertWrapDetails(source, details) { var length = details.length; if (!length) { return source; } var lastIndex = length - 1; details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; details = details.join(length > 2 ? ', ' : ' '); return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); } /** * Checks if `value` is a flattenable `arguments` object or array. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. */ function isFlattenable(value) { return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); } /** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ function isIndex(value, length) { var type = typeof value; length = length == null ? MAX_SAFE_INTEGER : length; return !!length && (type == 'number' || (type != 'symbol' && reIsUint.test(value))) && (value > -1 && value % 1 == 0 && value < length); } /** * Checks if the given arguments are from an iteratee call. * * @private * @param {*} value The potential iteratee value argument. * @param {*} index The potential iteratee index or key argument. * @param {*} object The potential iteratee object argument. * @returns {boolean} Returns `true` if the arguments are from an iteratee call, * else `false`. */ function isIterateeCall(value, index, object) { if (!isObject(object)) { return false; } var type = typeof index; if (type == 'number' ? (isArrayLike(object) && isIndex(index, object.length)) : (type == 'string' && index in object) ) { return eq(object[index], value); } return false; } /** * Checks if `value` is a property name and not a property path. * * @private * @param {*} value The value to check. * @param {Object} [object] The object to query keys on. * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ function isKey(value, object) { if (isArray(value)) { return false; } var type = typeof value; if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || (object != null && value in Object(object)); } /** * Checks if `value` is suitable for use as unique object key. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ function isKeyable(value) { var type = typeof value; return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') ? (value !== '__proto__') : (value === null); } /** * Checks if `func` has a lazy counterpart. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` has a lazy counterpart, * else `false`. */ function isLaziable(func) { var funcName = getFuncName(func), other = lodash[funcName]; if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { return false; } if (func === other) { return true; } var data = getData(other); return !!data && func === data[0]; } /** * Checks if `func` has its source masked. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ function isMasked(func) { return !!maskSrcKey && (maskSrcKey in func); } /** * Checks if `func` is capable of being masked. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `func` is maskable, else `false`. */ var isMaskable = coreJsData ? isFunction : stubFalse; /** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ function isPrototype(value) { var Ctor = value && value.constructor, proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; return value === proto; } /** * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` if suitable for strict * equality comparisons, else `false`. */ function isStrictComparable(value) { return value === value && !isObject(value); } /** * A specialized version of `matchesProperty` for source values suitable * for strict equality comparisons, i.e. `===`. * * @private * @param {string} key The key of the property to get. * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */ function matchesStrictComparable(key, srcValue) { return function(object) { if (object == null) { return false; } return object[key] === srcValue && (srcValue !== undefined || (key in Object(object))); }; } /** * A specialized version of `_.memoize` which clears the memoized function's * cache when it exceeds `MAX_MEMOIZE_SIZE`. * * @private * @param {Function} func The function to have its output memoized. * @returns {Function} Returns the new memoized function. */ function memoizeCapped(func) { var result = memoize(func, function(key) { if (cache.size === MAX_MEMOIZE_SIZE) { cache.clear(); } return key; }); var cache = result.cache; return result; } /** * Merges the function metadata of `source` into `data`. * * Merging metadata reduces the number of wrappers used to invoke a function. * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` * may be applied regardless of execution order. Methods like `_.ary` and * `_.rearg` modify function arguments, making the order in which they are * executed important, preventing the merging of metadata. However, we make * an exception for a safe combined case where curried functions have `_.ary` * and or `_.rearg` applied. * * @private * @param {Array} data The destination metadata. * @param {Array} source The source metadata. * @returns {Array} Returns `data`. */ function mergeData(data, source) { var bitmask = data[1], srcBitmask = source[1], newBitmask = bitmask | srcBitmask, isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); var isCombo = ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); // Exit early if metadata can't be merged. if (!(isCommon || isCombo)) { return data; } // Use source `thisArg` if available. if (srcBitmask & WRAP_BIND_FLAG) { data[2] = source[2]; // Set when currying a bound function. newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; } // Compose partial arguments. var value = source[3]; if (value) { var partials = data[3]; data[3] = partials ? composeArgs(partials, value, source[4]) : value; data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; } // Compose partial right arguments. value = source[5]; if (value) { partials = data[5]; data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; } // Use source `argPos` if available. value = source[7]; if (value) { data[7] = value; } // Use source `ary` if it's smaller. if (srcBitmask & WRAP_ARY_FLAG) { data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); } // Use source `arity` if one is not provided. if (data[9] == null) { data[9] = source[9]; } // Use source `func` and merge bitmasks. data[0] = source[0]; data[1] = newBitmask; return data; } /** * This function is like * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * except that it includes inherited enumerable properties. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function nativeKeysIn(object) { var result = []; if (object != null) { for (var key in Object(object)) { result.push(key); } } return result; } /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return nativeObjectToString.call(value); } /** * A specialized version of `baseRest` which transforms the rest array. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @param {Function} transform The rest array transform. * @returns {Function} Returns the new function. */ function overRest(func, start, transform) { start = nativeMax(start === undefined ? (func.length - 1) : start, 0); return function() { var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array(length); while (++index < length) { array[index] = args[start + index]; } index = -1; var otherArgs = Array(start + 1); while (++index < start) { otherArgs[index] = args[index]; } otherArgs[start] = transform(array); return apply(func, this, otherArgs); }; } /** * Gets the parent value at `path` of `object`. * * @private * @param {Object} object The object to query. * @param {Array} path The path to get the parent value of. * @returns {*} Returns the parent value. */ function parent(object, path) { return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); } /** * Reorder `array` according to the specified indexes where the element at * the first index is assigned as the first element, the element at * the second index is assigned as the second element, and so on. * * @private * @param {Array} array The array to reorder. * @param {Array} indexes The arranged array indexes. * @returns {Array} Returns `array`. */ function reorder(array, indexes) { var arrLength = array.length, length = nativeMin(indexes.length, arrLength), oldArray = copyArray(array); while (length--) { var index = indexes[length]; array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; } return array; } /** * Gets the value at `key`, unless `key` is "__proto__" or "constructor". * * @private * @param {Object} object The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function safeGet(object, key) { if (key === 'constructor' && typeof object[key] === 'function') { return; } if (key == '__proto__') { return; } return object[key]; } /** * Sets metadata for `func`. * * **Note:** If this function becomes hot, i.e. is invoked a lot in a short * period of time, it will trip its breaker and transition to an identity * function to avoid garbage collection pauses in V8. See * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) * for more details. * * @private * @param {Function} func The function to associate metadata with. * @param {*} data The metadata. * @returns {Function} Returns `func`. */ var setData = shortOut(baseSetData); /** * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). * * @private * @param {Function} func The function to delay. * @param {number} wait The number of milliseconds to delay invocation. * @returns {number|Object} Returns the timer id or timeout object. */ var setTimeout = ctxSetTimeout || function(func, wait) { return root.setTimeout(func, wait); }; /** * Sets the `toString` method of `func` to return `string`. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ var setToString = shortOut(baseSetToString); /** * Sets the `toString` method of `wrapper` to mimic the source of `reference` * with wrapper details in a comment at the top of the source body. * * @private * @param {Function} wrapper The function to modify. * @param {Function} reference The reference function. * @param {number} bitmask The bitmask flags. See `createWrap` for more details. * @returns {Function} Returns `wrapper`. */ function setWrapToString(wrapper, reference, bitmask) { var source = (reference + ''); return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); } /** * Creates a function that'll short out and invoke `identity` instead * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` * milliseconds. * * @private * @param {Function} func The function to restrict. * @returns {Function} Returns the new shortable function. */ function shortOut(func) { var count = 0, lastCalled = 0; return function() { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { return arguments[0]; } } else { count = 0; } return func.apply(undefined, arguments); }; } /** * A specialized version of `_.shuffle` which mutates and sets the size of `array`. * * @private * @param {Array} array The array to shuffle. * @param {number} [size=array.length] The size of `array`. * @returns {Array} Returns `array`. */ function shuffleSelf(array, size) { var index = -1, length = array.length, lastIndex = length - 1; size = size === undefined ? length : size; while (++index < size) { var rand = baseRandom(index, lastIndex), value = array[rand]; array[rand] = array[index]; array[index] = value; } array.length = size; return array; } /** * Converts `string` to a property path array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the property path array. */ var stringToPath = memoizeCapped(function(string) { var result = []; if (string.charCodeAt(0) === 46 /* . */) { result.push(''); } string.replace(rePropName, function(match, number, quote, subString) { result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); }); return result; }); /** * Converts `value` to a string key if it's not a string or symbol. * * @private * @param {*} value The value to inspect. * @returns {string|symbol} Returns the key. */ function toKey(value) { if (typeof value == 'string' || isSymbol(value)) { return value; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } /** * Converts `func` to its source code. * * @private * @param {Function} func The function to convert. * @returns {string} Returns the source code. */ function toSource(func) { if (func != null) { try { return funcToString.call(func); } catch (e) {} try { return (func + ''); } catch (e) {} } return ''; } /** * Updates wrapper `details` based on `bitmask` flags. * * @private * @returns {Array} details The details to modify. * @param {number} bitmask The bitmask flags. See `createWrap` for more details. * @returns {Array} Returns `details`. */ function updateWrapDetails(details, bitmask) { arrayEach(wrapFlags, function(pair) { var value = '_.' + pair[0]; if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { details.push(value); } }); return details.sort(); } /** * Creates a clone of `wrapper`. * * @private * @param {Object} wrapper The wrapper to clone. * @returns {Object} Returns the cloned wrapper. */ function wrapperClone(wrapper) { if (wrapper instanceof LazyWrapper) { return wrapper.clone(); } var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); result.__actions__ = copyArray(wrapper.__actions__); result.__index__ = wrapper.__index__; result.__values__ = wrapper.__values__; return result; } /*------------------------------------------------------------------------*/ /** * Creates an array of elements split into groups the length of `size`. * If `array` can't be split evenly, the final chunk will be the remaining * elements. * * @static * @memberOf _ * @since 3.0.0 * @category Array * @param {Array} array The array to process. * @param {number} [size=1] The length of each chunk * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {Array} Returns the new array of chunks. * @example * * _.chunk(['a', 'b', 'c', 'd'], 2); * // => [['a', 'b'], ['c', 'd']] * * _.chunk(['a', 'b', 'c', 'd'], 3); * // => [['a', 'b', 'c'], ['d']] */ function chunk(array, size, guard) { if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { size = 1; } else { size = nativeMax(toInteger(size), 0); } var length = array == null ? 0 : array.length; if (!length || size < 1) { return []; } var index = 0, resIndex = 0, result = Array(nativeCeil(length / size)); while (index < length) { result[resIndex++] = baseSlice(array, index, (index += size)); } return result; } /** * Creates an array with all falsey values removed. The values `false`, `null`, * `0`, `""`, `undefined`, and `NaN` are falsey. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to compact. * @returns {Array} Returns the new array of filtered values. * @example * * _.compact([0, 1, false, 2, '', 3]); * // => [1, 2, 3] */ function compact(array) { var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; while (++index < length) { var value = array[index]; if (value) { result[resIndex++] = value; } } return result; } /** * Creates a new array concatenating `array` with any additional arrays * and/or values. * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The array to concatenate. * @param {...*} [values] The values to concatenate. * @returns {Array} Returns the new concatenated array. * @example * * var array = [1]; * var other = _.concat(array, 2, [3], [[4]]); * * console.log(other); * // => [1, 2, 3, [4]] * * console.log(array); * // => [1] */ function concat() { var length = arguments.length; if (!length) { return []; } var args = Array(length - 1), array = arguments[0], index = length; while (index--) { args[index - 1] = arguments[index]; } return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); } /** * Creates an array of `array` values not included in the other given arrays * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. The order and references of result values are * determined by the first array. * * **Note:** Unlike `_.pullAll`, this method returns a new array. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to inspect. * @param {...Array} [values] The values to exclude. * @returns {Array} Returns the new array of filtered values. * @see _.without, _.xor * @example * * _.difference([2, 1], [2, 3]); * // => [1] */ var difference = baseRest(function(array, values) { return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) : []; }); /** * This method is like `_.difference` except that it accepts `iteratee` which * is invoked for each element of `array` and `values` to generate the criterion * by which they're compared. The order and references of result values are * determined by the first array. The iteratee is invoked with one argument: * (value). * * **Note:** Unlike `_.pullAllBy`, this method returns a new array. * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The array to inspect. * @param {...Array} [values] The values to exclude. * @param {Function} [iteratee=_.identity] The iteratee invoked per element. * @returns {Array} Returns the new array of filtered values. * @example * * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); * // => [1.2] * * // The `_.property` iteratee shorthand. * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); * // => [{ 'x': 2 }] */ var differenceBy = baseRest(function(array, values) { var iteratee = last(values); if (isArrayLikeObject(iteratee)) { iteratee = undefined; } return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) : []; }); /** * This method is like `_.difference` except that it accepts `comparator` * which is invoked to compare elements of `array` to `values`. The order and * references of result values are determined by the first array. The comparator * is invoked with two arguments: (arrVal, othVal). * * **Note:** Unlike `_.pullAllWith`, this method returns a new array. * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The array to inspect. * @param {...Array} [values] The values to exclude. * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new array of filtered values. * @example * * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; * * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); * // => [{ 'x': 2, 'y': 1 }] */ var differenceWith = baseRest(function(array, values) { var comparator = last(values); if (isArrayLikeObject(comparator)) { comparator = undefined; } return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) : []; }); /** * Creates a slice of `array` with `n` elements dropped from the beginning. * * @static * @memberOf _ * @since 0.5.0 * @category Array * @param {Array} array The array to query. * @param {number} [n=1] The number of elements to drop. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {Array} Returns the slice of `array`. * @example * * _.drop([1, 2, 3]); * // => [2, 3] * * _.drop([1, 2, 3], 2); * // => [3] * * _.drop([1, 2, 3], 5); * // => [] * * _.drop([1, 2, 3], 0); * // => [1, 2, 3] */ function drop(array, n, guard) { var length = array == null ? 0 : array.length; if (!length) { return []; } n = (guard || n === undefined) ? 1 : toInteger(n); return baseSlice(array, n < 0 ? 0 : n, length); } /** * Creates a slice of `array` with `n` elements dropped from the end. * * @static * @memberOf _ * @since 3.0.0 * @category Array * @param {Array} array The array to query. * @param {number} [n=1] The number of elements to drop. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {Array} Returns the slice of `array`. * @example * * _.dropRight([1, 2, 3]); * // => [1, 2] * * _.dropRight([1, 2, 3], 2); * // => [1] * * _.dropRight([1, 2, 3], 5); * // => [] * * _.dropRight([1, 2, 3], 0); * // => [1, 2, 3] */ function dropRight(array, n, guard) { var length = array == null ? 0 : array.length; if (!length) { return []; } n = (guard || n === undefined) ? 1 : toInteger(n); n = length - n; return baseSlice(array, 0, n < 0 ? 0 : n); } /** * Creates a slice of `array` excluding elements dropped from the end. * Elements are dropped until `predicate` returns falsey. The predicate is * invoked with three arguments: (value, index, array). * * @static * @memberOf _ * @since 3.0.0 * @category Array * @param {Array} array The array to query. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @returns {Array} Returns the slice of `array`. * @example * * var users = [ * { 'user': 'barney', 'active': true }, * { 'user': 'fred', 'active': false }, * { 'user': 'pebbles', 'active': false } * ]; * * _.dropRightWhile(users, function(o) { return !o.active; }); * // => objects for ['barney'] * * // The `_.matches` iteratee shorthand. * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); * // => objects for ['barney', 'fred'] * * // The `_.matchesProperty` iteratee shorthand. * _.dropRightWhile(users, ['active', false]); * // => objects for ['barney'] * * // The `_.property` iteratee shorthand. * _.dropRightWhile(users, 'active'); * // => objects for ['barney', 'fred', 'pebbles'] */ function dropRightWhile(array, predicate) { return (array && array.length) ? baseWhile(array, getIteratee(predicate, 3), true, true) : []; } /** * Creates a slice of `array` excluding elements dropped from the beginning. * Elements are dropped until `predicate` returns falsey. The predicate is * invoked with three arguments: (value, index, array). * * @static * @memberOf _ * @since 3.0.0 * @category Array * @param {Array} array The array to query. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @returns {Array} Returns the slice of `array`. * @example * * var users = [ * { 'user': 'barney', 'active': false }, * { 'user': 'fred', 'active': false }, * { 'user': 'pebbles', 'active': true } * ]; * * _.dropWhile(users, function(o) { return !o.active; }); * // => objects for ['pebbles'] * * // The `_.matches` iteratee shorthand. * _.dropWhile(users, { 'user': 'barney', 'active': false }); * // => objects for ['fred', 'pebbles'] * * // The `_.matchesProperty` iteratee shorthand. * _.dropWhile(users, ['active', false]); * // => objects for ['pebbles'] * * // The `_.property` iteratee shorthand. * _.dropWhile(users, 'active'); * // => objects for ['barney', 'fred', 'pebbles'] */ function dropWhile(array, predicate) { return (array && array.length) ? baseWhile(array, getIteratee(predicate, 3), true) : []; } /** * Fills elements of `array` with `value` from `start` up to, but not * including, `end`. * * **Note:** This method mutates `array`. * * @static * @memberOf _ * @since 3.2.0 * @category Array * @param {Array} array The array to fill. * @param {*} value The value to fill `array` with. * @param {number} [start=0] The start position. * @param {number} [end=array.length] The end position. * @returns {Array} Returns `array`. * @example * * var array = [1, 2, 3]; * * _.fill(array, 'a'); * console.log(array); * // => ['a', 'a', 'a'] * * _.fill(Array(3), 2); * // => [2, 2, 2] * * _.fill([4, 6, 8, 10], '*', 1, 3); * // => [4, '*', '*', 10] */ function fill(array, value, start, end) { var length = array == null ? 0 : array.length; if (!length) { return []; } if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { start = 0; end = length; } return baseFill(array, value, start, end); } /** * This method is like `_.find` except that it returns the index of the first * element `predicate` returns truthy for instead of the element itself. * * @static * @memberOf _ * @since 1.1.0 * @category Array * @param {Array} array The array to inspect. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @param {number} [fromIndex=0] The index to search from. * @returns {number} Returns the index of the found element, else `-1`. * @example * * var users = [ * { 'user': 'barney', 'active': false }, * { 'user': 'fred', 'active': false }, * { 'user': 'pebbles', 'active': true } * ]; * * _.findIndex(users, function(o) { return o.user == 'barney'; }); * // => 0 * * // The `_.matches` iteratee shorthand. * _.findIndex(users, { 'user': 'fred', 'active': false }); * // => 1 * * // The `_.matchesProperty` iteratee shorthand. * _.findIndex(users, ['active', false]); * // => 0 * * // The `_.property` iteratee shorthand. * _.findIndex(users, 'active'); * // => 2 */ function findIndex(array, predicate, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index = fromIndex == null ? 0 : toInteger(fromIndex); if (index < 0) { index = nativeMax(length + index, 0); } return baseFindIndex(array, getIteratee(predicate, 3), index); } /** * This method is like `_.findIndex` except that it iterates over elements * of `collection` from right to left. * * @static * @memberOf _ * @since 2.0.0 * @category Array * @param {Array} array The array to inspect. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @param {number} [fromIndex=array.length-1] The index to search from. * @returns {number} Returns the index of the found element, else `-1`. * @example * * var users = [ * { 'user': 'barney', 'active': true }, * { 'user': 'fred', 'active': false }, * { 'user': 'pebbles', 'active': false } * ]; * * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); * // => 2 * * // The `_.matches` iteratee shorthand. * _.findLastIndex(users, { 'user': 'barney', 'active': true }); * // => 0 * * // The `_.matchesProperty` iteratee shorthand. * _.findLastIndex(users, ['active', false]); * // => 2 * * // The `_.property` iteratee shorthand. * _.findLastIndex(users, 'active'); * // => 0 */ function findLastIndex(array, predicate, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index = length - 1; if (fromIndex !== undefined) { index = toInteger(fromIndex); index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); } return baseFindIndex(array, getIteratee(predicate, 3), index, true); } /** * Flattens `array` a single level deep. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to flatten. * @returns {Array} Returns the new flattened array. * @example * * _.flatten([1, [2, [3, [4]], 5]]); * // => [1, 2, [3, [4]], 5] */ function flatten(array) { var length = array == null ? 0 : array.length; return length ? baseFlatten(array, 1) : []; } /** * Recursively flattens `array`. * * @static * @memberOf _ * @since 3.0.0 * @category Array * @param {Array} array The array to flatten. * @returns {Array} Returns the new flattened array. * @example * * _.flattenDeep([1, [2, [3, [4]], 5]]); * // => [1, 2, 3, 4, 5] */ function flattenDeep(array) { var length = array == null ? 0 : array.length; return length ? baseFlatten(array, INFINITY) : []; } /** * Recursively flatten `array` up to `depth` times. * * @static * @memberOf _ * @since 4.4.0 * @category Array * @param {Array} array The array to flatten. * @param {number} [depth=1] The maximum recursion depth. * @returns {Array} Returns the new flattened array. * @example * * var array = [1, [2, [3, [4]], 5]]; * * _.flattenDepth(array, 1); * // => [1, 2, [3, [4]], 5] * * _.flattenDepth(array, 2); * // => [1, 2, 3, [4], 5] */ function flattenDepth(array, depth) { var length = array == null ? 0 : array.length; if (!length) { return []; } depth = depth === undefined ? 1 : toInteger(depth); return baseFlatten(array, depth); } /** * The inverse of `_.toPairs`; this method returns an object composed * from key-value `pairs`. * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} pairs The key-value pairs. * @returns {Object} Returns the new object. * @example * * _.fromPairs([['a', 1], ['b', 2]]); * // => { 'a': 1, 'b': 2 } */ function fromPairs(pairs) { var index = -1, length = pairs == null ? 0 : pairs.length, result = {}; while (++index < length) { var pair = pairs[index]; result[pair[0]] = pair[1]; } return result; } /** * Gets the first element of `array`. * * @static * @memberOf _ * @since 0.1.0 * @alias first * @category Array * @param {Array} array The array to query. * @returns {*} Returns the first element of `array`. * @example * * _.head([1, 2, 3]); * // => 1 * * _.head([]); * // => undefined */ function head(array) { return (array && array.length) ? array[0] : undefined; } /** * Gets the index at which the first occurrence of `value` is found in `array` * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. If `fromIndex` is negative, it's used as the * offset from the end of `array`. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} [fromIndex=0] The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. * @example * * _.indexOf([1, 2, 1, 2], 2); * // => 1 * * // Search from the `fromIndex`. * _.indexOf([1, 2, 1, 2], 2, 2); * // => 3 */ function indexOf(array, value, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index = fromIndex == null ? 0 : toInteger(fromIndex); if (index < 0) { index = nativeMax(length + index, 0); } return baseIndexOf(array, value, index); } /** * Gets all but the last element of `array`. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to query. * @returns {Array} Returns the slice of `array`. * @example * * _.initial([1, 2, 3]); * // => [1, 2] */ function initial(array) { var length = array == null ? 0 : array.length; return length ? baseSlice(array, 0, -1) : []; } /** * Creates an array of unique values that are included in all given arrays * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. The order and references of result values are * determined by the first array. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {...Array} [arrays] The arrays to inspect. * @returns {Array} Returns the new array of intersecting values. * @example * * _.intersection([2, 1], [2, 3]); * // => [2] */ var intersection = baseRest(function(arrays) { var mapped = arrayMap(arrays, castArrayLikeObject); return (mapped.length && mapped[0] === arrays[0]) ? baseIntersection(mapped) : []; }); /** * This method is like `_.intersection` except that it accepts `iteratee` * which is invoked for each element of each `arrays` to generate the criterion * by which they're compared. The order and references of result values are * determined by the first array. The iteratee is invoked with one argument: * (value). * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {...Array} [arrays] The arrays to inspect. * @param {Function} [iteratee=_.identity] The iteratee invoked per element. * @returns {Array} Returns the new array of intersecting values. * @example * * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); * // => [2.1] * * // The `_.property` iteratee shorthand. * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); * // => [{ 'x': 1 }] */ var intersectionBy = baseRest(function(arrays) { var iteratee = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject); if (iteratee === last(mapped)) { iteratee = undefined; } else { mapped.pop(); } return (mapped.length && mapped[0] === arrays[0]) ? baseIntersection(mapped, getIteratee(iteratee, 2)) : []; }); /** * This method is like `_.intersection` except that it accepts `comparator` * which is invoked to compare elements of `arrays`. The order and references * of result values are determined by the first array. The comparator is * invoked with two arguments: (arrVal, othVal). * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {...Array} [arrays] The arrays to inspect. * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new array of intersecting values. * @example * * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; * * _.intersectionWith(objects, others, _.isEqual); * // => [{ 'x': 1, 'y': 2 }] */ var intersectionWith = baseRest(function(arrays) { var comparator = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject); comparator = typeof comparator == 'function' ? comparator : undefined; if (comparator) { mapped.pop(); } return (mapped.length && mapped[0] === arrays[0]) ? baseIntersection(mapped, undefined, comparator) : []; }); /** * Converts all elements in `array` into a string separated by `separator`. * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The array to convert. * @param {string} [separator=','] The element separator. * @returns {string} Returns the joined string. * @example * * _.join(['a', 'b', 'c'], '~'); * // => 'a~b~c' */ function join(array, separator) { return array == null ? '' : nativeJoin.call(array, separator); } /** * Gets the last element of `array`. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to query. * @returns {*} Returns the last element of `array`. * @example * * _.last([1, 2, 3]); * // => 3 */ function last(array) { var length = array == null ? 0 : array.length; return length ? array[length - 1] : undefined; } /** * This method is like `_.indexOf` except that it iterates over elements of * `array` from right to left. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} [fromIndex=array.length-1] The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. * @example * * _.lastIndexOf([1, 2, 1, 2], 2); * // => 3 * * // Search from the `fromIndex`. * _.lastIndexOf([1, 2, 1, 2], 2, 2); * // => 1 */ function lastIndexOf(array, value, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index = length; if (fromIndex !== undefined) { index = toInteger(fromIndex); index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); } return value === value ? strictLastIndexOf(array, value, index) : baseFindIndex(array, baseIsNaN, index, true); } /** * Gets the element at index `n` of `array`. If `n` is negative, the nth * element from the end is returned. * * @static * @memberOf _ * @since 4.11.0 * @category Array * @param {Array} array The array to query. * @param {number} [n=0] The index of the element to return. * @returns {*} Returns the nth element of `array`. * @example * * var array = ['a', 'b', 'c', 'd']; * * _.nth(array, 1); * // => 'b' * * _.nth(array, -2); * // => 'c'; */ function nth(array, n) { return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; } /** * Removes all given values from `array` using * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. * * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` * to remove elements from an array by predicate. * * @static * @memberOf _ * @since 2.0.0 * @category Array * @param {Array} array The array to modify. * @param {...*} [values] The values to remove. * @returns {Array} Returns `array`. * @example * * var array = ['a', 'b', 'c', 'a', 'b', 'c']; * * _.pull(array, 'a', 'c'); * console.log(array); * // => ['b', 'b'] */ var pull = baseRest(pullAll); /** * This method is like `_.pull` except that it accepts an array of values to remove. * * **Note:** Unlike `_.difference`, this method mutates `array`. * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The array to modify. * @param {Array} values The values to remove. * @returns {Array} Returns `array`. * @example * * var array = ['a', 'b', 'c', 'a', 'b', 'c']; * * _.pullAll(array, ['a', 'c']); * console.log(array); * // => ['b', 'b'] */ function pullAll(array, values) { return (array && array.length && values && values.length) ? basePullAll(array, values) : array; } /** * This method is like `_.pullAll` except that it accepts `iteratee` which is * invoked for each element of `array` and `values` to generate the criterion * by which they're compared. The iteratee is invoked with one argument: (value). * * **Note:** Unlike `_.differenceBy`, this method mutates `array`. * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The array to modify. * @param {Array} values The values to remove. * @param {Function} [iteratee=_.identity] The iteratee invoked per element. * @returns {Array} Returns `array`. * @example * * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; * * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); * console.log(array); * // => [{ 'x': 2 }] */ function pullAllBy(array, values, iteratee) { return (array && array.length && values && values.length) ? basePullAll(array, values, getIteratee(iteratee, 2)) : array; } /** * This method is like `_.pullAll` except that it accepts `comparator` which * is invoked to compare elements of `array` to `values`. The comparator is * invoked with two arguments: (arrVal, othVal). * * **Note:** Unlike `_.differenceWith`, this method mutates `array`. * * @static * @memberOf _ * @since 4.6.0 * @category Array * @param {Array} array The array to modify. * @param {Array} values The values to remove. * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns `array`. * @example * * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; * * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); * console.log(array); * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] */ function pullAllWith(array, values, comparator) { return (array && array.length && values && values.length) ? basePullAll(array, values, undefined, comparator) : array; } /** * Removes elements from `array` corresponding to `indexes` and returns an * array of removed elements. * * **Note:** Unlike `_.at`, this method mutates `array`. * * @static * @memberOf _ * @since 3.0.0 * @category Array * @param {Array} array The array to modify. * @param {...(number|number[])} [indexes] The indexes of elements to remove. * @returns {Array} Returns the new array of removed elements. * @example * * var array = ['a', 'b', 'c', 'd']; * var pulled = _.pullAt(array, [1, 3]); * * console.log(array); * // => ['a', 'c'] * * console.log(pulled); * // => ['b', 'd'] */ var pullAt = flatRest(function(array, indexes) { var length = array == null ? 0 : array.length, result = baseAt(array, indexes); basePullAt(array, arrayMap(indexes, function(index) { return isIndex(index, length) ? +index : index; }).sort(compareAscending)); return result; }); /** * Removes all elements from `array` that `predicate` returns truthy for * and returns an array of the removed elements. The predicate is invoked * with three arguments: (value, index, array). * * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` * to pull elements from an array by value. * * @static * @memberOf _ * @since 2.0.0 * @category Array * @param {Array} array The array to modify. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @returns {Array} Returns the new array of removed elements. * @example * * var array = [1, 2, 3, 4]; * var evens = _.remove(array, function(n) { * return n % 2 == 0; * }); * * console.log(array); * // => [1, 3] * * console.log(evens); * // => [2, 4] */ function remove(array, predicate) { var result = []; if (!(array && array.length)) { return result; } var index = -1, indexes = [], length = array.length; predicate = getIteratee(predicate, 3); while (++index < length) { var value = array[index]; if (predicate(value, index, array)) { result.push(value); indexes.push(index); } } basePullAt(array, indexes); return result; } /** * Reverses `array` so that the first element becomes the last, the second * element becomes the second to last, and so on. * * **Note:** This method mutates `array` and is based on * [`Array#reverse`](https://mdn.io/Array/reverse). * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The array to modify. * @returns {Array} Returns `array`. * @example * * var array = [1, 2, 3]; * * _.reverse(array); * // => [3, 2, 1] * * console.log(array); * // => [3, 2, 1] */ function reverse(array) { return array == null ? array : nativeReverse.call(array); } /** * Creates a slice of `array` from `start` up to, but not including, `end`. * * **Note:** This method is used instead of * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are * returned. * * @static * @memberOf _ * @since 3.0.0 * @category Array * @param {Array} array The array to slice. * @param {number} [start=0] The start position. * @param {number} [end=array.length] The end position. * @returns {Array} Returns the slice of `array`. */ function slice(array, start, end) { var length = array == null ? 0 : array.length; if (!length) { return []; } if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { start = 0; end = length; } else { start = start == null ? 0 : toInteger(start); end = end === undefined ? length : toInteger(end); } return baseSlice(array, start, end); } /** * Uses a binary search to determine the lowest index at which `value` * should be inserted into `array` in order to maintain its sort order. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The sorted array to inspect. * @param {*} value The value to evaluate. * @returns {number} Returns the index at which `value` should be inserted * into `array`. * @example * * _.sortedIndex([30, 50], 40); * // => 1 */ function sortedIndex(array, value) { return baseSortedIndex(array, value); } /** * This method is like `_.sortedIndex` except that it accepts `iteratee` * which is invoked for `value` and each element of `array` to compute their * sort ranking. The iteratee is invoked with one argument: (value). * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The sorted array to inspect. * @param {*} value The value to evaluate. * @param {Function} [iteratee=_.identity] The iteratee invoked per element. * @returns {number} Returns the index at which `value` should be inserted * into `array`. * @example * * var objects = [{ 'x': 4 }, { 'x': 5 }]; * * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); * // => 0 * * // The `_.property` iteratee shorthand. * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); * // => 0 */ function sortedIndexBy(array, value, iteratee) { return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); } /** * This method is like `_.indexOf` except that it performs a binary * search on a sorted `array`. * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @returns {number} Returns the index of the matched value, else `-1`. * @example * * _.sortedIndexOf([4, 5, 5, 5, 6], 5); * // => 1 */ function sortedIndexOf(array, value) { var length = array == null ? 0 : array.length; if (length) { var index = baseSortedIndex(array, value); if (index < length && eq(array[index], value)) { return index; } } return -1; } /** * This method is like `_.sortedIndex` except that it returns the highest * index at which `value` should be inserted into `array` in order to * maintain its sort order. * * @static * @memberOf _ * @since 3.0.0 * @category Array * @param {Array} array The sorted array to inspect. * @param {*} value The value to evaluate. * @returns {number} Returns the index at which `value` should be inserted * into `array`. * @example * * _.sortedLastIndex([4, 5, 5, 5, 6], 5); * // => 4 */ function sortedLastIndex(array, value) { return baseSortedIndex(array, value, true); } /** * This method is like `_.sortedLastIndex` except that it accepts `iteratee` * which is invoked for `value` and each element of `array` to compute their * sort ranking. The iteratee is invoked with one argument: (value). * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The sorted array to inspect. * @param {*} value The value to evaluate. * @param {Function} [iteratee=_.identity] The iteratee invoked per element. * @returns {number} Returns the index at which `value` should be inserted * into `array`. * @example * * var objects = [{ 'x': 4 }, { 'x': 5 }]; * * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); * // => 1 * * // The `_.property` iteratee shorthand. * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); * // => 1 */ function sortedLastIndexBy(array, value, iteratee) { return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); } /** * This method is like `_.lastIndexOf` except that it performs a binary * search on a sorted `array`. * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @returns {number} Returns the index of the matched value, else `-1`. * @example * * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); * // => 3 */ function sortedLastIndexOf(array, value) { var length = array == null ? 0 : array.length; if (length) { var index = baseSortedIndex(array, value, true) - 1; if (eq(array[index], value)) { return index; } } return -1; } /** * This method is like `_.uniq` except that it's designed and optimized * for sorted arrays. * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The array to inspect. * @returns {Array} Returns the new duplicate free array. * @example * * _.sortedUniq([1, 1, 2]); * // => [1, 2] */ function sortedUniq(array) { return (array && array.length) ? baseSortedUniq(array) : []; } /** * This method is like `_.uniqBy` except that it's designed and optimized * for sorted arrays. * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The array to inspect. * @param {Function} [iteratee] The iteratee invoked per element. * @returns {Array} Returns the new duplicate free array. * @example * * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); * // => [1.1, 2.3] */ function sortedUniqBy(array, iteratee) { return (array && array.length) ? baseSortedUniq(array, getIteratee(iteratee, 2)) : []; } /** * Gets all but the first element of `array`. * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The array to query. * @returns {Array} Returns the slice of `array`. * @example * * _.tail([1, 2, 3]); * // => [2, 3] */ function tail(array) { var length = array == null ? 0 : array.length; return length ? baseSlice(array, 1, length) : []; } /** * Creates a slice of `array` with `n` elements taken from the beginning. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to query. * @param {number} [n=1] The number of elements to take. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {Array} Returns the slice of `array`. * @example * * _.take([1, 2, 3]); * // => [1] * * _.take([1, 2, 3], 2); * // => [1, 2] * * _.take([1, 2, 3], 5); * // => [1, 2, 3] * * _.take([1, 2, 3], 0); * // => [] */ function take(array, n, guard) { if (!(array && array.length)) { return []; } n = (guard || n === undefined) ? 1 : toInteger(n); return baseSlice(array, 0, n < 0 ? 0 : n); } /** * Creates a slice of `array` with `n` elements taken from the end. * * @static * @memberOf _ * @since 3.0.0 * @category Array * @param {Array} array The array to query. * @param {number} [n=1] The number of elements to take. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {Array} Returns the slice of `array`. * @example * * _.takeRight([1, 2, 3]); * // => [3] * * _.takeRight([1, 2, 3], 2); * // => [2, 3] * * _.takeRight([1, 2, 3], 5); * // => [1, 2, 3] * * _.takeRight([1, 2, 3], 0); * // => [] */ function takeRight(array, n, guard) { var length = array == null ? 0 : array.length; if (!length) { return []; } n = (guard || n === undefined) ? 1 : toInteger(n); n = length - n; return baseSlice(array, n < 0 ? 0 : n, length); } /** * Creates a slice of `array` with elements taken from the end. Elements are * taken until `predicate` returns falsey. The predicate is invoked with * three arguments: (value, index, array). * * @static * @memberOf _ * @since 3.0.0 * @category Array * @param {Array} array The array to query. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @returns {Array} Returns the slice of `array`. * @example * * var users = [ * { 'user': 'barney', 'active': true }, * { 'user': 'fred', 'active': false }, * { 'user': 'pebbles', 'active': false } * ]; * * _.takeRightWhile(users, function(o) { return !o.active; }); * // => objects for ['fred', 'pebbles'] * * // The `_.matches` iteratee shorthand. * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); * // => objects for ['pebbles'] * * // The `_.matchesProperty` iteratee shorthand. * _.takeRightWhile(users, ['active', false]); * // => objects for ['fred', 'pebbles'] * * // The `_.property` iteratee shorthand. * _.takeRightWhile(users, 'active'); * // => [] */ function takeRightWhile(array, predicate) { return (array && array.length) ? baseWhile(array, getIteratee(predicate, 3), false, true) : []; } /** * Creates a slice of `array` with elements taken from the beginning. Elements * are taken until `predicate` returns falsey. The predicate is invoked with * three arguments: (value, index, array). * * @static * @memberOf _ * @since 3.0.0 * @category Array * @param {Array} array The array to query. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @returns {Array} Returns the slice of `array`. * @example * * var users = [ * { 'user': 'barney', 'active': false }, * { 'user': 'fred', 'active': false }, * { 'user': 'pebbles', 'active': true } * ]; * * _.takeWhile(users, function(o) { return !o.active; }); * // => objects for ['barney', 'fred'] * * // The `_.matches` iteratee shorthand. * _.takeWhile(users, { 'user': 'barney', 'active': false }); * // => objects for ['barney'] * * // The `_.matchesProperty` iteratee shorthand. * _.takeWhile(users, ['active', false]); * // => objects for ['barney', 'fred'] * * // The `_.property` iteratee shorthand. * _.takeWhile(users, 'active'); * // => [] */ function takeWhile(array, predicate) { return (array && array.length) ? baseWhile(array, getIteratee(predicate, 3)) : []; } /** * Creates an array of unique values, in order, from all given arrays using * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {...Array} [arrays] The arrays to inspect. * @returns {Array} Returns the new array of combined values. * @example * * _.union([2], [1, 2]); * // => [2, 1] */ var union = baseRest(function(arrays) { return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); }); /** * This method is like `_.union` except that it accepts `iteratee` which is * invoked for each element of each `arrays` to generate the criterion by * which uniqueness is computed. Result values are chosen from the first * array in which the value occurs. The iteratee is invoked with one argument: * (value). * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {...Array} [arrays] The arrays to inspect. * @param {Function} [iteratee=_.identity] The iteratee invoked per element. * @returns {Array} Returns the new array of combined values. * @example * * _.unionBy([2.1], [1.2, 2.3], Math.floor); * // => [2.1, 1.2] * * // The `_.property` iteratee shorthand. * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); * // => [{ 'x': 1 }, { 'x': 2 }] */ var unionBy = baseRest(function(arrays) { var iteratee = last(arrays); if (isArrayLikeObject(iteratee)) { iteratee = undefined; } return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); }); /** * This method is like `_.union` except that it accepts `comparator` which * is invoked to compare elements of `arrays`. Result values are chosen from * the first array in which the value occurs. The comparator is invoked * with two arguments: (arrVal, othVal). * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {...Array} [arrays] The arrays to inspect. * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new array of combined values. * @example * * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; * * _.unionWith(objects, others, _.isEqual); * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] */ var unionWith = baseRest(function(arrays) { var comparator = last(arrays); comparator = typeof comparator == 'function' ? comparator : undefined; return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); }); /** * Creates a duplicate-free version of an array, using * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons, in which only the first occurrence of each element * is kept. The order of result values is determined by the order they occur * in the array. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to inspect. * @returns {Array} Returns the new duplicate free array. * @example * * _.uniq([2, 1, 2]); * // => [2, 1] */ function uniq(array) { return (array && array.length) ? baseUniq(array) : []; } /** * This method is like `_.uniq` except that it accepts `iteratee` which is * invoked for each element in `array` to generate the criterion by which * uniqueness is computed. The order of result values is determined by the * order they occur in the array. The iteratee is invoked with one argument: * (value). * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The array to inspect. * @param {Function} [iteratee=_.identity] The iteratee invoked per element. * @returns {Array} Returns the new duplicate free array. * @example * * _.uniqBy([2.1, 1.2, 2.3], Math.floor); * // => [2.1, 1.2] * * // The `_.property` iteratee shorthand. * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); * // => [{ 'x': 1 }, { 'x': 2 }] */ function uniqBy(array, iteratee) { return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; } /** * This method is like `_.uniq` except that it accepts `comparator` which * is invoked to compare elements of `array`. The order of result values is * determined by the order they occur in the array.The comparator is invoked * with two arguments: (arrVal, othVal). * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {Array} array The array to inspect. * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new duplicate free array. * @example * * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; * * _.uniqWith(objects, _.isEqual); * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] */ function uniqWith(array, comparator) { comparator = typeof comparator == 'function' ? comparator : undefined; return (array && array.length) ? baseUniq(array, undefined, comparator) : []; } /** * This method is like `_.zip` except that it accepts an array of grouped * elements and creates an array regrouping the elements to their pre-zip * configuration. * * @static * @memberOf _ * @since 1.2.0 * @category Array * @param {Array} array The array of grouped elements to process. * @returns {Array} Returns the new array of regrouped elements. * @example * * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); * // => [['a', 1, true], ['b', 2, false]] * * _.unzip(zipped); * // => [['a', 'b'], [1, 2], [true, false]] */ function unzip(array) { if (!(array && array.length)) { return []; } var length = 0; array = arrayFilter(array, function(group) { if (isArrayLikeObject(group)) { length = nativeMax(group.length, length); return true; } }); return baseTimes(length, function(index) { return arrayMap(array, baseProperty(index)); }); } /** * This method is like `_.unzip` except that it accepts `iteratee` to specify * how regrouped values should be combined. The iteratee is invoked with the * elements of each group: (...group). * * @static * @memberOf _ * @since 3.8.0 * @category Array * @param {Array} array The array of grouped elements to process. * @param {Function} [iteratee=_.identity] The function to combine * regrouped values. * @returns {Array} Returns the new array of regrouped elements. * @example * * var zipped = _.zip([1, 2], [10, 20], [100, 200]); * // => [[1, 10, 100], [2, 20, 200]] * * _.unzipWith(zipped, _.add); * // => [3, 30, 300] */ function unzipWith(array, iteratee) { if (!(array && array.length)) { return []; } var result = unzip(array); if (iteratee == null) { return result; } return arrayMap(result, function(group) { return apply(iteratee, undefined, group); }); } /** * Creates an array excluding all given values using * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. * * **Note:** Unlike `_.pull`, this method returns a new array. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to inspect. * @param {...*} [values] The values to exclude. * @returns {Array} Returns the new array of filtered values. * @see _.difference, _.xor * @example * * _.without([2, 1, 2, 3], 1, 2); * // => [3] */ var without = baseRest(function(array, values) { return isArrayLikeObject(array) ? baseDifference(array, values) : []; }); /** * Creates an array of unique values that is the * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) * of the given arrays. The order of result values is determined by the order * they occur in the arrays. * * @static * @memberOf _ * @since 2.4.0 * @category Array * @param {...Array} [arrays] The arrays to inspect. * @returns {Array} Returns the new array of filtered values. * @see _.difference, _.without * @example * * _.xor([2, 1], [2, 3]); * // => [1, 3] */ var xor = baseRest(function(arrays) { return baseXor(arrayFilter(arrays, isArrayLikeObject)); }); /** * This method is like `_.xor` except that it accepts `iteratee` which is * invoked for each element of each `arrays` to generate the criterion by * which by which they're compared. The order of result values is determined * by the order they occur in the arrays. The iteratee is invoked with one * argument: (value). * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {...Array} [arrays] The arrays to inspect. * @param {Function} [iteratee=_.identity] The iteratee invoked per element. * @returns {Array} Returns the new array of filtered values. * @example * * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); * // => [1.2, 3.4] * * // The `_.property` iteratee shorthand. * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); * // => [{ 'x': 2 }] */ var xorBy = baseRest(function(arrays) { var iteratee = last(arrays); if (isArrayLikeObject(iteratee)) { iteratee = undefined; } return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); }); /** * This method is like `_.xor` except that it accepts `comparator` which is * invoked to compare elements of `arrays`. The order of result values is * determined by the order they occur in the arrays. The comparator is invoked * with two arguments: (arrVal, othVal). * * @static * @memberOf _ * @since 4.0.0 * @category Array * @param {...Array} [arrays] The arrays to inspect. * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new array of filtered values. * @example * * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; * * _.xorWith(objects, others, _.isEqual); * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] */ var xorWith = baseRest(function(arrays) { var comparator = last(arrays); comparator = typeof comparator == 'function' ? comparator : undefined; return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); }); /** * Creates an array of grouped elements, the first of which contains the * first elements of the given arrays, the second of which contains the * second elements of the given arrays, and so on. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {...Array} [arrays] The arrays to process. * @returns {Array} Returns the new array of grouped elements. * @example * * _.zip(['a', 'b'], [1, 2], [true, false]); * // => [['a', 1, true], ['b', 2, false]] */ var zip = baseRest(unzip); /** * This method is like `_.fromPairs` except that it accepts two arrays, * one of property identifiers and one of corresponding values. * * @static * @memberOf _ * @since 0.4.0 * @category Array * @param {Array} [props=[]] The property identifiers. * @param {Array} [values=[]] The property values. * @returns {Object} Returns the new object. * @example * * _.zipObject(['a', 'b'], [1, 2]); * // => { 'a': 1, 'b': 2 } */ function zipObject(props, values) { return baseZipObject(props || [], values || [], assignValue); } /** * This method is like `_.zipObject` except that it supports property paths. * * @static * @memberOf _ * @since 4.1.0 * @category Array * @param {Array} [props=[]] The property identifiers. * @param {Array} [values=[]] The property values. * @returns {Object} Returns the new object. * @example * * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } */ function zipObjectDeep(props, values) { return baseZipObject(props || [], values || [], baseSet); } /** * This method is like `_.zip` except that it accepts `iteratee` to specify * how grouped values should be combined. The iteratee is invoked with the * elements of each group: (...group). * * @static * @memberOf _ * @since 3.8.0 * @category Array * @param {...Array} [arrays] The arrays to process. * @param {Function} [iteratee=_.identity] The function to combine * grouped values. * @returns {Array} Returns the new array of grouped elements. * @example * * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { * return a + b + c; * }); * // => [111, 222] */ var zipWith = baseRest(function(arrays) { var length = arrays.length, iteratee = length > 1 ? arrays[length - 1] : undefined; iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; return unzipWith(arrays, iteratee); }); /*------------------------------------------------------------------------*/ /** * Creates a `lodash` wrapper instance that wraps `value` with explicit method * chain sequences enabled. The result of such sequences must be unwrapped * with `_#value`. * * @static * @memberOf _ * @since 1.3.0 * @category Seq * @param {*} value The value to wrap. * @returns {Object} Returns the new `lodash` wrapper instance. * @example * * var users = [ * { 'user': 'barney', 'age': 36 }, * { 'user': 'fred', 'age': 40 }, * { 'user': 'pebbles', 'age': 1 } * ]; * * var youngest = _ * .chain(users) * .sortBy('age') * .map(function(o) { * return o.user + ' is ' + o.age; * }) * .head() * .value(); * // => 'pebbles is 1' */ function chain(value) { var result = lodash(value); result.__chain__ = true; return result; } /** * This method invokes `interceptor` and returns `value`. The interceptor * is invoked with one argument; (value). The purpose of this method is to * "tap into" a method chain sequence in order to modify intermediate results. * * @static * @memberOf _ * @since 0.1.0 * @category Seq * @param {*} value The value to provide to `interceptor`. * @param {Function} interceptor The function to invoke. * @returns {*} Returns `value`. * @example * * _([1, 2, 3]) * .tap(function(array) { * // Mutate input array. * array.pop(); * }) * .reverse() * .value(); * // => [2, 1] */ function tap(value, interceptor) { interceptor(value); return value; } /** * This method is like `_.tap` except that it returns the result of `interceptor`. * The purpose of this method is to "pass thru" values replacing intermediate * results in a method chain sequence. * * @static * @memberOf _ * @since 3.0.0 * @category Seq * @param {*} value The value to provide to `interceptor`. * @param {Function} interceptor The function to invoke. * @returns {*} Returns the result of `interceptor`. * @example * * _(' abc ') * .chain() * .trim() * .thru(function(value) { * return [value]; * }) * .value(); * // => ['abc'] */ function thru(value, interceptor) { return interceptor(value); } /** * This method is the wrapper version of `_.at`. * * @name at * @memberOf _ * @since 1.0.0 * @category Seq * @param {...(string|string[])} [paths] The property paths to pick. * @returns {Object} Returns the new `lodash` wrapper instance. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; * * _(object).at(['a[0].b.c', 'a[1]']).value(); * // => [3, 4] */ var wrapperAt = flatRest(function(paths) { var length = paths.length, start = length ? paths[0] : 0, value = this.__wrapped__, interceptor = function(object) { return baseAt(object, paths); }; if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start)) { return this.thru(interceptor); } value = value.slice(start, +start + (length ? 1 : 0)); value.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); return new LodashWrapper(value, this.__chain__).thru(function(array) { if (length && !array.length) { array.push(undefined); } return array; }); }); /** * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. * * @name chain * @memberOf _ * @since 0.1.0 * @category Seq * @returns {Object} Returns the new `lodash` wrapper instance. * @example * * var users = [ * { 'user': 'barney', 'age': 36 }, * { 'user': 'fred', 'age': 40 } * ]; * * // A sequence without explicit chaining. * _(users).head(); * // => { 'user': 'barney', 'age': 36 } * * // A sequence with explicit chaining. * _(users) * .chain() * .head() * .pick('user') * .value(); * // => { 'user': 'barney' } */ function wrapperChain() { return chain(this); } /** * Executes the chain sequence and returns the wrapped result. * * @name commit * @memberOf _ * @since 3.2.0 * @category Seq * @returns {Object} Returns the new `lodash` wrapper instance. * @example * * var array = [1, 2]; * var wrapped = _(array).push(3); * * console.log(array); * // => [1, 2] * * wrapped = wrapped.commit(); * console.log(array); * // => [1, 2, 3] * * wrapped.last(); * // => 3 * * console.log(array); * // => [1, 2, 3] */ function wrapperCommit() { return new LodashWrapper(this.value(), this.__chain__); } /** * Gets the next value on a wrapped object following the * [iterator protocol](https://mdn.io/iteration_protocols#iterator). * * @name next * @memberOf _ * @since 4.0.0 * @category Seq * @returns {Object} Returns the next iterator value. * @example * * var wrapped = _([1, 2]); * * wrapped.next(); * // => { 'done': false, 'value': 1 } * * wrapped.next(); * // => { 'done': false, 'value': 2 } * * wrapped.next(); * // => { 'done': true, 'value': undefined } */ function wrapperNext() { if (this.__values__ === undefined) { this.__values__ = toArray(this.value()); } var done = this.__index__ >= this.__values__.length, value = done ? undefined : this.__values__[this.__index__++]; return { 'done': done, 'value': value }; } /** * Enables the wrapper to be iterable. * * @name Symbol.iterator * @memberOf _ * @since 4.0.0 * @category Seq * @returns {Object} Returns the wrapper object. * @example * * var wrapped = _([1, 2]); * * wrapped[Symbol.iterator]() === wrapped; * // => true * * Array.from(wrapped); * // => [1, 2] */ function wrapperToIterator() { return this; } /** * Creates a clone of the chain sequence planting `value` as the wrapped value. * * @name plant * @memberOf _ * @since 3.2.0 * @category Seq * @param {*} value The value to plant. * @returns {Object} Returns the new `lodash` wrapper instance. * @example * * function square(n) { * return n * n; * } * * var wrapped = _([1, 2]).map(square); * var other = wrapped.plant([3, 4]); * * other.value(); * // => [9, 16] * * wrapped.value(); * // => [1, 4] */ function wrapperPlant(value) { var result, parent = this; while (parent instanceof baseLodash) { var clone = wrapperClone(parent); clone.__index__ = 0; clone.__values__ = undefined; if (result) { previous.__wrapped__ = clone; } else { result = clone; } var previous = clone; parent = parent.__wrapped__; } previous.__wrapped__ = value; return result; } /** * This method is the wrapper version of `_.reverse`. * * **Note:** This method mutates the wrapped array. * * @name reverse * @memberOf _ * @since 0.1.0 * @category Seq * @returns {Object} Returns the new `lodash` wrapper instance. * @example * * var array = [1, 2, 3]; * * _(array).reverse().value() * // => [3, 2, 1] * * console.log(array); * // => [3, 2, 1] */ function wrapperReverse() { var value = this.__wrapped__; if (value instanceof LazyWrapper) { var wrapped = value; if (this.__actions__.length) { wrapped = new LazyWrapper(this); } wrapped = wrapped.reverse(); wrapped.__actions__.push({ 'func': thru, 'args': [reverse], 'thisArg': undefined }); return new LodashWrapper(wrapped, this.__chain__); } return this.thru(reverse); } /** * Executes the chain sequence to resolve the unwrapped value. * * @name value * @memberOf _ * @since 0.1.0 * @alias toJSON, valueOf * @category Seq * @returns {*} Returns the resolved unwrapped value. * @example * * _([1, 2, 3]).value(); * // => [1, 2, 3] */ function wrapperValue() { return baseWrapperValue(this.__wrapped__, this.__actions__); } /*------------------------------------------------------------------------*/ /** * Creates an object composed of keys generated from the results of running * each element of `collection` thru `iteratee`. The corresponding value of * each key is the number of times the key was returned by `iteratee`. The * iteratee is invoked with one argument: (value). * * @static * @memberOf _ * @since 0.5.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The iteratee to transform keys. * @returns {Object} Returns the composed aggregate object. * @example * * _.countBy([6.1, 4.2, 6.3], Math.floor); * // => { '4': 1, '6': 2 } * * // The `_.property` iteratee shorthand. * _.countBy(['one', 'two', 'three'], 'length'); * // => { '3': 2, '5': 1 } */ var countBy = createAggregator(function(result, value, key) { if (hasOwnProperty.call(result, key)) { ++result[key]; } else { baseAssignValue(result, key, 1); } }); /** * Checks if `predicate` returns truthy for **all** elements of `collection`. * Iteration is stopped once `predicate` returns falsey. The predicate is * invoked with three arguments: (value, index|key, collection). * * **Note:** This method returns `true` for * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of * elements of empty collections. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {boolean} Returns `true` if all elements pass the predicate check, * else `false`. * @example * * _.every([true, 1, null, 'yes'], Boolean); * // => false * * var users = [ * { 'user': 'barney', 'age': 36, 'active': false }, * { 'user': 'fred', 'age': 40, 'active': false } * ]; * * // The `_.matches` iteratee shorthand. * _.every(users, { 'user': 'barney', 'active': false }); * // => false * * // The `_.matchesProperty` iteratee shorthand. * _.every(users, ['active', false]); * // => true * * // The `_.property` iteratee shorthand. * _.every(users, 'active'); * // => false */ function every(collection, predicate, guard) { var func = isArray(collection) ? arrayEvery : baseEvery; if (guard && isIterateeCall(collection, predicate, guard)) { predicate = undefined; } return func(collection, getIteratee(predicate, 3)); } /** * Iterates over elements of `collection`, returning an array of all elements * `predicate` returns truthy for. The predicate is invoked with three * arguments: (value, index|key, collection). * * **Note:** Unlike `_.remove`, this method returns a new array. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @returns {Array} Returns the new filtered array. * @see _.reject * @example * * var users = [ * { 'user': 'barney', 'age': 36, 'active': true }, * { 'user': 'fred', 'age': 40, 'active': false } * ]; * * _.filter(users, function(o) { return !o.active; }); * // => objects for ['fred'] * * // The `_.matches` iteratee shorthand. * _.filter(users, { 'age': 36, 'active': true }); * // => objects for ['barney'] * * // The `_.matchesProperty` iteratee shorthand. * _.filter(users, ['active', false]); * // => objects for ['fred'] * * // The `_.property` iteratee shorthand. * _.filter(users, 'active'); * // => objects for ['barney'] * * // Combining several predicates using `_.overEvery` or `_.overSome`. * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); * // => objects for ['fred', 'barney'] */ function filter(collection, predicate) { var func = isArray(collection) ? arrayFilter : baseFilter; return func(collection, getIteratee(predicate, 3)); } /** * Iterates over elements of `collection`, returning the first element * `predicate` returns truthy for. The predicate is invoked with three * arguments: (value, index|key, collection). * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to inspect. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @param {number} [fromIndex=0] The index to search from. * @returns {*} Returns the matched element, else `undefined`. * @example * * var users = [ * { 'user': 'barney', 'age': 36, 'active': true }, * { 'user': 'fred', 'age': 40, 'active': false }, * { 'user': 'pebbles', 'age': 1, 'active': true } * ]; * * _.find(users, function(o) { return o.age < 40; }); * // => object for 'barney' * * // The `_.matches` iteratee shorthand. * _.find(users, { 'age': 1, 'active': true }); * // => object for 'pebbles' * * // The `_.matchesProperty` iteratee shorthand. * _.find(users, ['active', false]); * // => object for 'fred' * * // The `_.property` iteratee shorthand. * _.find(users, 'active'); * // => object for 'barney' */ var find = createFind(findIndex); /** * This method is like `_.find` except that it iterates over elements of * `collection` from right to left. * * @static * @memberOf _ * @since 2.0.0 * @category Collection * @param {Array|Object} collection The collection to inspect. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @param {number} [fromIndex=collection.length-1] The index to search from. * @returns {*} Returns the matched element, else `undefined`. * @example * * _.findLast([1, 2, 3, 4], function(n) { * return n % 2 == 1; * }); * // => 3 */ var findLast = createFind(findLastIndex); /** * Creates a flattened array of values by running each element in `collection` * thru `iteratee` and flattening the mapped results. The iteratee is invoked * with three arguments: (value, index|key, collection). * * @static * @memberOf _ * @since 4.0.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Array} Returns the new flattened array. * @example * * function duplicate(n) { * return [n, n]; * } * * _.flatMap([1, 2], duplicate); * // => [1, 1, 2, 2] */ function flatMap(collection, iteratee) { return baseFlatten(map(collection, iteratee), 1); } /** * This method is like `_.flatMap` except that it recursively flattens the * mapped results. * * @static * @memberOf _ * @since 4.7.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Array} Returns the new flattened array. * @example * * function duplicate(n) { * return [[[n, n]]]; * } * * _.flatMapDeep([1, 2], duplicate); * // => [1, 1, 2, 2] */ function flatMapDeep(collection, iteratee) { return baseFlatten(map(collection, iteratee), INFINITY); } /** * This method is like `_.flatMap` except that it recursively flattens the * mapped results up to `depth` times. * * @static * @memberOf _ * @since 4.7.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @param {number} [depth=1] The maximum recursion depth. * @returns {Array} Returns the new flattened array. * @example * * function duplicate(n) { * return [[[n, n]]]; * } * * _.flatMapDepth([1, 2], duplicate, 2); * // => [[1, 1], [2, 2]] */ function flatMapDepth(collection, iteratee, depth) { depth = depth === undefined ? 1 : toInteger(depth); return baseFlatten(map(collection, iteratee), depth); } /** * Iterates over elements of `collection` and invokes `iteratee` for each element. * The iteratee is invoked with three arguments: (value, index|key, collection). * Iteratee functions may exit iteration early by explicitly returning `false`. * * **Note:** As with other "Collections" methods, objects with a "length" * property are iterated like arrays. To avoid this behavior use `_.forIn` * or `_.forOwn` for object iteration. * * @static * @memberOf _ * @since 0.1.0 * @alias each * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Array|Object} Returns `collection`. * @see _.forEachRight * @example * * _.forEach([1, 2], function(value) { * console.log(value); * }); * // => Logs `1` then `2`. * * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { * console.log(key); * }); * // => Logs 'a' then 'b' (iteration order is not guaranteed). */ function forEach(collection, iteratee) { var func = isArray(collection) ? arrayEach : baseEach; return func(collection, getIteratee(iteratee, 3)); } /** * This method is like `_.forEach` except that it iterates over elements of * `collection` from right to left. * * @static * @memberOf _ * @since 2.0.0 * @alias eachRight * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Array|Object} Returns `collection`. * @see _.forEach * @example * * _.forEachRight([1, 2], function(value) { * console.log(value); * }); * // => Logs `2` then `1`. */ function forEachRight(collection, iteratee) { var func = isArray(collection) ? arrayEachRight : baseEachRight; return func(collection, getIteratee(iteratee, 3)); } /** * Creates an object composed of keys generated from the results of running * each element of `collection` thru `iteratee`. The order of grouped values * is determined by the order they occur in `collection`. The corresponding * value of each key is an array of elements responsible for generating the * key. The iteratee is invoked with one argument: (value). * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The iteratee to transform keys. * @returns {Object} Returns the composed aggregate object. * @example * * _.groupBy([6.1, 4.2, 6.3], Math.floor); * // => { '4': [4.2], '6': [6.1, 6.3] } * * // The `_.property` iteratee shorthand. * _.groupBy(['one', 'two', 'three'], 'length'); * // => { '3': ['one', 'two'], '5': ['three'] } */ var groupBy = createAggregator(function(result, value, key) { if (hasOwnProperty.call(result, key)) { result[key].push(value); } else { baseAssignValue(result, key, [value]); } }); /** * Checks if `value` is in `collection`. If `collection` is a string, it's * checked for a substring of `value`, otherwise * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * is used for equality comparisons. If `fromIndex` is negative, it's used as * the offset from the end of `collection`. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object|string} collection The collection to inspect. * @param {*} value The value to search for. * @param {number} [fromIndex=0] The index to search from. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. * @returns {boolean} Returns `true` if `value` is found, else `false`. * @example * * _.includes([1, 2, 3], 1); * // => true * * _.includes([1, 2, 3], 1, 2); * // => false * * _.includes({ 'a': 1, 'b': 2 }, 1); * // => true * * _.includes('abcd', 'bc'); * // => true */ function includes(collection, value, fromIndex, guard) { collection = isArrayLike(collection) ? collection : values(collection); fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; var length = collection.length; if (fromIndex < 0) { fromIndex = nativeMax(length + fromIndex, 0); } return isString(collection) ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) : (!!length && baseIndexOf(collection, value, fromIndex) > -1); } /** * Invokes the method at `path` of each element in `collection`, returning * an array of the results of each invoked method. Any additional arguments * are provided to each invoked method. If `path` is a function, it's invoked * for, and `this` bound to, each element in `collection`. * * @static * @memberOf _ * @since 4.0.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Array|Function|string} path The path of the method to invoke or * the function invoked per iteration. * @param {...*} [args] The arguments to invoke each method with. * @returns {Array} Returns the array of results. * @example * * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); * // => [[1, 5, 7], [1, 2, 3]] * * _.invokeMap([123, 456], String.prototype.split, ''); * // => [['1', '2', '3'], ['4', '5', '6']] */ var invokeMap = baseRest(function(collection, path, args) { var index = -1, isFunc = typeof path == 'function', result = isArrayLike(collection) ? Array(collection.length) : []; baseEach(collection, function(value) { result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); }); return result; }); /** * Creates an object composed of keys generated from the results of running * each element of `collection` thru `iteratee`. The corresponding value of * each key is the last element responsible for generating the key. The * iteratee is invoked with one argument: (value). * * @static * @memberOf _ * @since 4.0.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The iteratee to transform keys. * @returns {Object} Returns the composed aggregate object. * @example * * var array = [ * { 'dir': 'left', 'code': 97 }, * { 'dir': 'right', 'code': 100 } * ]; * * _.keyBy(array, function(o) { * return String.fromCharCode(o.code); * }); * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } * * _.keyBy(array, 'dir'); * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } */ var keyBy = createAggregator(function(result, value, key) { baseAssignValue(result, key, value); }); /** * Creates an array of values by running each element in `collection` thru * `iteratee`. The iteratee is invoked with three arguments: * (value, index|key, collection). * * Many lodash methods are guarded to work as iteratees for methods like * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. * * The guarded methods are: * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, * `template`, `trim`, `trimEnd`, `trimStart`, and `words` * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Array} Returns the new mapped array. * @example * * function square(n) { * return n * n; * } * * _.map([4, 8], square); * // => [16, 64] * * _.map({ 'a': 4, 'b': 8 }, square); * // => [16, 64] (iteration order is not guaranteed) * * var users = [ * { 'user': 'barney' }, * { 'user': 'fred' } * ]; * * // The `_.property` iteratee shorthand. * _.map(users, 'user'); * // => ['barney', 'fred'] */ function map(collection, iteratee) { var func = isArray(collection) ? arrayMap : baseMap; return func(collection, getIteratee(iteratee, 3)); } /** * This method is like `_.sortBy` except that it allows specifying the sort * orders of the iteratees to sort by. If `orders` is unspecified, all values * are sorted in ascending order. Otherwise, specify an order of "desc" for * descending or "asc" for ascending sort order of corresponding values. * * @static * @memberOf _ * @since 4.0.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] * The iteratees to sort by. * @param {string[]} [orders] The sort orders of `iteratees`. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. * @returns {Array} Returns the new sorted array. * @example * * var users = [ * { 'user': 'fred', 'age': 48 }, * { 'user': 'barney', 'age': 34 }, * { 'user': 'fred', 'age': 40 }, * { 'user': 'barney', 'age': 36 } * ]; * * // Sort by `user` in ascending order and by `age` in descending order. * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] */ function orderBy(collection, iteratees, orders, guard) { if (collection == null) { return []; } if (!isArray(iteratees)) { iteratees = iteratees == null ? [] : [iteratees]; } orders = guard ? undefined : orders; if (!isArray(orders)) { orders = orders == null ? [] : [orders]; } return baseOrderBy(collection, iteratees, orders); } /** * Creates an array of elements split into two groups, the first of which * contains elements `predicate` returns truthy for, the second of which * contains elements `predicate` returns falsey for. The predicate is * invoked with one argument: (value). * * @static * @memberOf _ * @since 3.0.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @returns {Array} Returns the array of grouped elements. * @example * * var users = [ * { 'user': 'barney', 'age': 36, 'active': false }, * { 'user': 'fred', 'age': 40, 'active': true }, * { 'user': 'pebbles', 'age': 1, 'active': false } * ]; * * _.partition(users, function(o) { return o.active; }); * // => objects for [['fred'], ['barney', 'pebbles']] * * // The `_.matches` iteratee shorthand. * _.partition(users, { 'age': 1, 'active': false }); * // => objects for [['pebbles'], ['barney', 'fred']] * * // The `_.matchesProperty` iteratee shorthand. * _.partition(users, ['active', false]); * // => objects for [['barney', 'pebbles'], ['fred']] * * // The `_.property` iteratee shorthand. * _.partition(users, 'active'); * // => objects for [['fred'], ['barney', 'pebbles']] */ var partition = createAggregator(function(result, value, key) { result[key ? 0 : 1].push(value); }, function() { return [[], []]; }); /** * Reduces `collection` to a value which is the accumulated result of running * each element in `collection` thru `iteratee`, where each successive * invocation is supplied the return value of the previous. If `accumulator` * is not given, the first element of `collection` is used as the initial * value. The iteratee is invoked with four arguments: * (accumulator, value, index|key, collection). * * Many lodash methods are guarded to work as iteratees for methods like * `_.reduce`, `_.reduceRight`, and `_.transform`. * * The guarded methods are: * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, * and `sortBy` * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @param {*} [accumulator] The initial value. * @returns {*} Returns the accumulated value. * @see _.reduceRight * @example * * _.reduce([1, 2], function(sum, n) { * return sum + n; * }, 0); * // => 3 * * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { * (result[value] || (result[value] = [])).push(key); * return result; * }, {}); * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) */ function reduce(collection, iteratee, accumulator) { var func = isArray(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3; return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); } /** * This method is like `_.reduce` except that it iterates over elements of * `collection` from right to left. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @param {*} [accumulator] The initial value. * @returns {*} Returns the accumulated value. * @see _.reduce * @example * * var array = [[0, 1], [2, 3], [4, 5]]; * * _.reduceRight(array, function(flattened, other) { * return flattened.concat(other); * }, []); * // => [4, 5, 2, 3, 0, 1] */ function reduceRight(collection, iteratee, accumulator) { var func = isArray(collection) ? arrayReduceRight : baseReduce, initAccum = arguments.length < 3; return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); } /** * The opposite of `_.filter`; this method returns the elements of `collection` * that `predicate` does **not** return truthy for. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @returns {Array} Returns the new filtered array. * @see _.filter * @example * * var users = [ * { 'user': 'barney', 'age': 36, 'active': false }, * { 'user': 'fred', 'age': 40, 'active': true } * ]; * * _.reject(users, function(o) { return !o.active; }); * // => objects for ['fred'] * * // The `_.matches` iteratee shorthand. * _.reject(users, { 'age': 40, 'active': true }); * // => objects for ['barney'] * * // The `_.matchesProperty` iteratee shorthand. * _.reject(users, ['active', false]); * // => objects for ['fred'] * * // The `_.property` iteratee shorthand. * _.reject(users, 'active'); * // => objects for ['barney'] */ function reject(collection, predicate) { var func = isArray(collection) ? arrayFilter : baseFilter; return func(collection, negate(getIteratee(predicate, 3))); } /** * Gets a random element from `collection`. * * @static * @memberOf _ * @since 2.0.0 * @category Collection * @param {Array|Object} collection The collection to sample. * @returns {*} Returns the random element. * @example * * _.sample([1, 2, 3, 4]); * // => 2 */ function sample(collection) { var func = isArray(collection) ? arraySample : baseSample; return func(collection); } /** * Gets `n` random elements at unique keys from `collection` up to the * size of `collection`. * * @static * @memberOf _ * @since 4.0.0 * @category Collection * @param {Array|Object} collection The collection to sample. * @param {number} [n=1] The number of elements to sample. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {Array} Returns the random elements. * @example * * _.sampleSize([1, 2, 3], 2); * // => [3, 1] * * _.sampleSize([1, 2, 3], 4); * // => [2, 3, 1] */ function sampleSize(collection, n, guard) { if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { n = 1; } else { n = toInteger(n); } var func = isArray(collection) ? arraySampleSize : baseSampleSize; return func(collection, n); } /** * Creates an array of shuffled values, using a version of the * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to shuffle. * @returns {Array} Returns the new shuffled array. * @example * * _.shuffle([1, 2, 3, 4]); * // => [4, 1, 3, 2] */ function shuffle(collection) { var func = isArray(collection) ? arrayShuffle : baseShuffle; return func(collection); } /** * Gets the size of `collection` by returning its length for array-like * values or the number of own enumerable string keyed properties for objects. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object|string} collection The collection to inspect. * @returns {number} Returns the collection size. * @example * * _.size([1, 2, 3]); * // => 3 * * _.size({ 'a': 1, 'b': 2 }); * // => 2 * * _.size('pebbles'); * // => 7 */ function size(collection) { if (collection == null) { return 0; } if (isArrayLike(collection)) { return isString(collection) ? stringSize(collection) : collection.length; } var tag = getTag(collection); if (tag == mapTag || tag == setTag) { return collection.size; } return baseKeys(collection).length; } /** * Checks if `predicate` returns truthy for **any** element of `collection`. * Iteration is stopped once `predicate` returns truthy. The predicate is * invoked with three arguments: (value, index|key, collection). * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {boolean} Returns `true` if any element passes the predicate check, * else `false`. * @example * * _.some([null, 0, 'yes', false], Boolean); * // => true * * var users = [ * { 'user': 'barney', 'active': true }, * { 'user': 'fred', 'active': false } * ]; * * // The `_.matches` iteratee shorthand. * _.some(users, { 'user': 'barney', 'active': false }); * // => false * * // The `_.matchesProperty` iteratee shorthand. * _.some(users, ['active', false]); * // => true * * // The `_.property` iteratee shorthand. * _.some(users, 'active'); * // => true */ function some(collection, predicate, guard) { var func = isArray(collection) ? arraySome : baseSome; if (guard && isIterateeCall(collection, predicate, guard)) { predicate = undefined; } return func(collection, getIteratee(predicate, 3)); } /** * Creates an array of elements, sorted in ascending order by the results of * running each element in a collection thru each iteratee. This method * performs a stable sort, that is, it preserves the original sort order of * equal elements. The iteratees are invoked with one argument: (value). * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {...(Function|Function[])} [iteratees=[_.identity]] * The iteratees to sort by. * @returns {Array} Returns the new sorted array. * @example * * var users = [ * { 'user': 'fred', 'age': 48 }, * { 'user': 'barney', 'age': 36 }, * { 'user': 'fred', 'age': 30 }, * { 'user': 'barney', 'age': 34 } * ]; * * _.sortBy(users, [function(o) { return o.user; }]); * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] * * _.sortBy(users, ['user', 'age']); * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] */ var sortBy = baseRest(function(collection, iteratees) { if (collection == null) { return []; } var length = iteratees.length; if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { iteratees = []; } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { iteratees = [iteratees[0]]; } return baseOrderBy(collection, baseFlatten(iteratees, 1), []); }); /*------------------------------------------------------------------------*/ /** * Gets the timestamp of the number of milliseconds that have elapsed since * the Unix epoch (1 January 1970 00:00:00 UTC). * * @static * @memberOf _ * @since 2.4.0 * @category Date * @returns {number} Returns the timestamp. * @example * * _.defer(function(stamp) { * console.log(_.now() - stamp); * }, _.now()); * // => Logs the number of milliseconds it took for the deferred invocation. */ var now = ctxNow || function() { return root.Date.now(); }; /*------------------------------------------------------------------------*/ /** * The opposite of `_.before`; this method creates a function that invokes * `func` once it's called `n` or more times. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {number} n The number of calls before `func` is invoked. * @param {Function} func The function to restrict. * @returns {Function} Returns the new restricted function. * @example * * var saves = ['profile', 'settings']; * * var done = _.after(saves.length, function() { * console.log('done saving!'); * }); * * _.forEach(saves, function(type) { * asyncSave({ 'type': type, 'complete': done }); * }); * // => Logs 'done saving!' after the two async saves have completed. */ function after(n, func) { if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } n = toInteger(n); return function() { if (--n < 1) { return func.apply(this, arguments); } }; } /** * Creates a function that invokes `func`, with up to `n` arguments, * ignoring any additional arguments. * * @static * @memberOf _ * @since 3.0.0 * @category Function * @param {Function} func The function to cap arguments for. * @param {number} [n=func.length] The arity cap. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {Function} Returns the new capped function. * @example * * _.map(['6', '8', '10'], _.ary(parseInt, 1)); * // => [6, 8, 10] */ function ary(func, n, guard) { n = guard ? undefined : n; n = (func && n == null) ? func.length : n; return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); } /** * Creates a function that invokes `func`, with the `this` binding and arguments * of the created function, while it's called less than `n` times. Subsequent * calls to the created function return the result of the last `func` invocation. * * @static * @memberOf _ * @since 3.0.0 * @category Function * @param {number} n The number of calls at which `func` is no longer invoked. * @param {Function} func The function to restrict. * @returns {Function} Returns the new restricted function. * @example * * jQuery(element).on('click', _.before(5, addContactToList)); * // => Allows adding up to 4 contacts to the list. */ function before(n, func) { var result; if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } n = toInteger(n); return function() { if (--n > 0) { result = func.apply(this, arguments); } if (n <= 1) { func = undefined; } return result; }; } /** * Creates a function that invokes `func` with the `this` binding of `thisArg` * and `partials` prepended to the arguments it receives. * * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, * may be used as a placeholder for partially applied arguments. * * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" * property of bound functions. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to bind. * @param {*} thisArg The `this` binding of `func`. * @param {...*} [partials] The arguments to be partially applied. * @returns {Function} Returns the new bound function. * @example * * function greet(greeting, punctuation) { * return greeting + ' ' + this.user + punctuation; * } * * var object = { 'user': 'fred' }; * * var bound = _.bind(greet, object, 'hi'); * bound('!'); * // => 'hi fred!' * * // Bound with placeholders. * var bound = _.bind(greet, object, _, '!'); * bound('hi'); * // => 'hi fred!' */ var bind = baseRest(function(func, thisArg, partials) { var bitmask = WRAP_BIND_FLAG; if (partials.length) { var holders = replaceHolders(partials, getHolder(bind)); bitmask |= WRAP_PARTIAL_FLAG; } return createWrap(func, bitmask, thisArg, partials, holders); }); /** * Creates a function that invokes the method at `object[key]` with `partials` * prepended to the arguments it receives. * * This method differs from `_.bind` by allowing bound functions to reference * methods that may be redefined or don't yet exist. See * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) * for more details. * * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic * builds, may be used as a placeholder for partially applied arguments. * * @static * @memberOf _ * @since 0.10.0 * @category Function * @param {Object} object The object to invoke the method on. * @param {string} key The key of the method. * @param {...*} [partials] The arguments to be partially applied. * @returns {Function} Returns the new bound function. * @example * * var object = { * 'user': 'fred', * 'greet': function(greeting, punctuation) { * return greeting + ' ' + this.user + punctuation; * } * }; * * var bound = _.bindKey(object, 'greet', 'hi'); * bound('!'); * // => 'hi fred!' * * object.greet = function(greeting, punctuation) { * return greeting + 'ya ' + this.user + punctuation; * }; * * bound('!'); * // => 'hiya fred!' * * // Bound with placeholders. * var bound = _.bindKey(object, 'greet', _, '!'); * bound('hi'); * // => 'hiya fred!' */ var bindKey = baseRest(function(object, key, partials) { var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; if (partials.length) { var holders = replaceHolders(partials, getHolder(bindKey)); bitmask |= WRAP_PARTIAL_FLAG; } return createWrap(key, bitmask, object, partials, holders); }); /** * Creates a function that accepts arguments of `func` and either invokes * `func` returning its result, if at least `arity` number of arguments have * been provided, or returns a function that accepts the remaining `func` * arguments, and so on. The arity of `func` may be specified if `func.length` * is not sufficient. * * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, * may be used as a placeholder for provided arguments. * * **Note:** This method doesn't set the "length" property of curried functions. * * @static * @memberOf _ * @since 2.0.0 * @category Function * @param {Function} func The function to curry. * @param {number} [arity=func.length] The arity of `func`. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {Function} Returns the new curried function. * @example * * var abc = function(a, b, c) { * return [a, b, c]; * }; * * var curried = _.curry(abc); * * curried(1)(2)(3); * // => [1, 2, 3] * * curried(1, 2)(3); * // => [1, 2, 3] * * curried(1, 2, 3); * // => [1, 2, 3] * * // Curried with placeholders. * curried(1)(_, 3)(2); * // => [1, 2, 3] */ function curry(func, arity, guard) { arity = guard ? undefined : arity; var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); result.placeholder = curry.placeholder; return result; } /** * This method is like `_.curry` except that arguments are applied to `func` * in the manner of `_.partialRight` instead of `_.partial`. * * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic * builds, may be used as a placeholder for provided arguments. * * **Note:** This method doesn't set the "length" property of curried functions. * * @static * @memberOf _ * @since 3.0.0 * @category Function * @param {Function} func The function to curry. * @param {number} [arity=func.length] The arity of `func`. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {Function} Returns the new curried function. * @example * * var abc = function(a, b, c) { * return [a, b, c]; * }; * * var curried = _.curryRight(abc); * * curried(3)(2)(1); * // => [1, 2, 3] * * curried(2, 3)(1); * // => [1, 2, 3] * * curried(1, 2, 3); * // => [1, 2, 3] * * // Curried with placeholders. * curried(3)(1, _)(2); * // => [1, 2, 3] */ function curryRight(func, arity, guard) { arity = guard ? undefined : arity; var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); result.placeholder = curryRight.placeholder; return result; } /** * Creates a debounced function that delays invoking `func` until after `wait` * milliseconds have elapsed since the last time the debounced function was * invoked. The debounced function comes with a `cancel` method to cancel * delayed `func` invocations and a `flush` method to immediately invoke them. * Provide `options` to indicate whether `func` should be invoked on the * leading and/or trailing edge of the `wait` timeout. The `func` is invoked * with the last arguments provided to the debounced function. Subsequent * calls to the debounced function return the result of the last `func` * invocation. * * **Note:** If `leading` and `trailing` options are `true`, `func` is * invoked on the trailing edge of the timeout only if the debounced function * is invoked more than once during the `wait` timeout. * * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred * until to the next tick, similar to `setTimeout` with a timeout of `0`. * * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) * for details over the differences between `_.debounce` and `_.throttle`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to debounce. * @param {number} [wait=0] The number of milliseconds to delay. * @param {Object} [options={}] The options object. * @param {boolean} [options.leading=false] * Specify invoking on the leading edge of the timeout. * @param {number} [options.maxWait] * The maximum time `func` is allowed to be delayed before it's invoked. * @param {boolean} [options.trailing=true] * Specify invoking on the trailing edge of the timeout. * @returns {Function} Returns the new debounced function. * @example * * // Avoid costly calculations while the window size is in flux. * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); * * // Invoke `sendMail` when clicked, debouncing subsequent calls. * jQuery(element).on('click', _.debounce(sendMail, 300, { * 'leading': true, * 'trailing': false * })); * * // Ensure `batchLog` is invoked once after 1 second of debounced calls. * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); * var source = new EventSource('/stream'); * jQuery(source).on('message', debounced); * * // Cancel the trailing debounced invocation. * jQuery(window).on('popstate', debounced.cancel); */ function debounce(func, wait, options) { var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } wait = toNumber(wait) || 0; if (isObject(options)) { leading = !!options.leading; maxing = 'maxWait' in options; maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; trailing = 'trailing' in options ? !!options.trailing : trailing; } function invokeFunc(time) { var args = lastArgs, thisArg = lastThis; lastArgs = lastThis = undefined; lastInvokeTime = time; result = func.apply(thisArg, args); return result; } function leadingEdge(time) { // Reset any `maxWait` timer. lastInvokeTime = time; // Start the timer for the trailing edge. timerId = setTimeout(timerExpired, wait); // Invoke the leading edge. return leading ? invokeFunc(time) : result; } function remainingWait(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall; return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; } function shouldInvoke(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the // trailing edge, the system time has gone backwards and we're treating // it as the trailing edge, or we've hit the `maxWait` limit. return (lastCallTime === undefined || (timeSinceLastCall >= wait) || (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); } function timerExpired() { var time = now(); if (shouldInvoke(time)) { return trailingEdge(time); } // Restart the timer. timerId = setTimeout(timerExpired, remainingWait(time)); } function trailingEdge(time) { timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been // debounced at least once. if (trailing && lastArgs) { return invokeFunc(time); } lastArgs = lastThis = undefined; return result; } function cancel() { if (timerId !== undefined) { clearTimeout(timerId); } lastInvokeTime = 0; lastArgs = lastCallTime = lastThis = timerId = undefined; } function flush() { return timerId === undefined ? result : trailingEdge(now()); } function debounced() { var time = now(), isInvoking = shouldInvoke(time); lastArgs = arguments; lastThis = this; lastCallTime = time; if (isInvoking) { if (timerId === undefined) { return leadingEdge(lastCallTime); } if (maxing) { // Handle invocations in a tight loop. clearTimeout(timerId); timerId = setTimeout(timerExpired, wait); return invokeFunc(lastCallTime); } } if (timerId === undefined) { timerId = setTimeout(timerExpired, wait); } return result; } debounced.cancel = cancel; debounced.flush = flush; return debounced; } /** * Defers invoking the `func` until the current call stack has cleared. Any * additional arguments are provided to `func` when it's invoked. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to defer. * @param {...*} [args] The arguments to invoke `func` with. * @returns {number} Returns the timer id. * @example * * _.defer(function(text) { * console.log(text); * }, 'deferred'); * // => Logs 'deferred' after one millisecond. */ var defer = baseRest(function(func, args) { return baseDelay(func, 1, args); }); /** * Invokes `func` after `wait` milliseconds. Any additional arguments are * provided to `func` when it's invoked. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to delay. * @param {number} wait The number of milliseconds to delay invocation. * @param {...*} [args] The arguments to invoke `func` with. * @returns {number} Returns the timer id. * @example * * _.delay(function(text) { * console.log(text); * }, 1000, 'later'); * // => Logs 'later' after one second. */ var delay = baseRest(function(func, wait, args) { return baseDelay(func, toNumber(wait) || 0, args); }); /** * Creates a function that invokes `func` with arguments reversed. * * @static * @memberOf _ * @since 4.0.0 * @category Function * @param {Function} func The function to flip arguments for. * @returns {Function} Returns the new flipped function. * @example * * var flipped = _.flip(function() { * return _.toArray(arguments); * }); * * flipped('a', 'b', 'c', 'd'); * // => ['d', 'c', 'b', 'a'] */ function flip(func) { return createWrap(func, WRAP_FLIP_FLAG); } /** * Creates a function that memoizes the result of `func`. If `resolver` is * provided, it determines the cache key for storing the result based on the * arguments provided to the memoized function. By default, the first argument * provided to the memoized function is used as the map cache key. The `func` * is invoked with the `this` binding of the memoized function. * * **Note:** The cache is exposed as the `cache` property on the memoized * function. Its creation may be customized by replacing the `_.memoize.Cache` * constructor with one whose instances implement the * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) * method interface of `clear`, `delete`, `get`, `has`, and `set`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to have its output memoized. * @param {Function} [resolver] The function to resolve the cache key. * @returns {Function} Returns the new memoized function. * @example * * var object = { 'a': 1, 'b': 2 }; * var other = { 'c': 3, 'd': 4 }; * * var values = _.memoize(_.values); * values(object); * // => [1, 2] * * values(other); * // => [3, 4] * * object.a = 2; * values(object); * // => [1, 2] * * // Modify the result cache. * values.cache.set(object, ['a', 'b']); * values(object); * // => ['a', 'b'] * * // Replace `_.memoize.Cache`. * _.memoize.Cache = WeakMap; */ function memoize(func, resolver) { if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { throw new TypeError(FUNC_ERROR_TEXT); } var memoized = function() { var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key)) { return cache.get(key); } var result = func.apply(this, args); memoized.cache = cache.set(key, result) || cache; return result; }; memoized.cache = new (memoize.Cache || MapCache); return memoized; } // Expose `MapCache`. memoize.Cache = MapCache; /** * Creates a function that negates the result of the predicate `func`. The * `func` predicate is invoked with the `this` binding and arguments of the * created function. * * @static * @memberOf _ * @since 3.0.0 * @category Function * @param {Function} predicate The predicate to negate. * @returns {Function} Returns the new negated function. * @example * * function isEven(n) { * return n % 2 == 0; * } * * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); * // => [1, 3, 5] */ function negate(predicate) { if (typeof predicate != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } return function() { var args = arguments; switch (args.length) { case 0: return !predicate.call(this); case 1: return !predicate.call(this, args[0]); case 2: return !predicate.call(this, args[0], args[1]); case 3: return !predicate.call(this, args[0], args[1], args[2]); } return !predicate.apply(this, args); }; } /** * Creates a function that is restricted to invoking `func` once. Repeat calls * to the function return the value of the first invocation. The `func` is * invoked with the `this` binding and arguments of the created function. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to restrict. * @returns {Function} Returns the new restricted function. * @example * * var initialize = _.once(createApplication); * initialize(); * initialize(); * // => `createApplication` is invoked once */ function once(func) { return before(2, func); } /** * Creates a function that invokes `func` with its arguments transformed. * * @static * @since 4.0.0 * @memberOf _ * @category Function * @param {Function} func The function to wrap. * @param {...(Function|Function[])} [transforms=[_.identity]] * The argument transforms. * @returns {Function} Returns the new function. * @example * * function doubled(n) { * return n * 2; * } * * function square(n) { * return n * n; * } * * var func = _.overArgs(function(x, y) { * return [x, y]; * }, [square, doubled]); * * func(9, 3); * // => [81, 6] * * func(10, 5); * // => [100, 10] */ var overArgs = castRest(function(func, transforms) { transforms = (transforms.length == 1 && isArray(transforms[0])) ? arrayMap(transforms[0], baseUnary(getIteratee())) : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); var funcsLength = transforms.length; return baseRest(function(args) { var index = -1, length = nativeMin(args.length, funcsLength); while (++index < length) { args[index] = transforms[index].call(this, args[index]); } return apply(func, this, args); }); }); /** * Creates a function that invokes `func` with `partials` prepended to the * arguments it receives. This method is like `_.bind` except it does **not** * alter the `this` binding. * * The `_.partial.placeholder` value, which defaults to `_` in monolithic * builds, may be used as a placeholder for partially applied arguments. * * **Note:** This method doesn't set the "length" property of partially * applied functions. * * @static * @memberOf _ * @since 0.2.0 * @category Function * @param {Function} func The function to partially apply arguments to. * @param {...*} [partials] The arguments to be partially applied. * @returns {Function} Returns the new partially applied function. * @example * * function greet(greeting, name) { * return greeting + ' ' + name; * } * * var sayHelloTo = _.partial(greet, 'hello'); * sayHelloTo('fred'); * // => 'hello fred' * * // Partially applied with placeholders. * var greetFred = _.partial(greet, _, 'fred'); * greetFred('hi'); * // => 'hi fred' */ var partial = baseRest(function(func, partials) { var holders = replaceHolders(partials, getHolder(partial)); return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); }); /** * This method is like `_.partial` except that partially applied arguments * are appended to the arguments it receives. * * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic * builds, may be used as a placeholder for partially applied arguments. * * **Note:** This method doesn't set the "length" property of partially * applied functions. * * @static * @memberOf _ * @since 1.0.0 * @category Function * @param {Function} func The function to partially apply arguments to. * @param {...*} [partials] The arguments to be partially applied. * @returns {Function} Returns the new partially applied function. * @example * * function greet(greeting, name) { * return greeting + ' ' + name; * } * * var greetFred = _.partialRight(greet, 'fred'); * greetFred('hi'); * // => 'hi fred' * * // Partially applied with placeholders. * var sayHelloTo = _.partialRight(greet, 'hello', _); * sayHelloTo('fred'); * // => 'hello fred' */ var partialRight = baseRest(function(func, partials) { var holders = replaceHolders(partials, getHolder(partialRight)); return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); }); /** * Creates a function that invokes `func` with arguments arranged according * to the specified `indexes` where the argument value at the first index is * provided as the first argument, the argument value at the second index is * provided as the second argument, and so on. * * @static * @memberOf _ * @since 3.0.0 * @category Function * @param {Function} func The function to rearrange arguments for. * @param {...(number|number[])} indexes The arranged argument indexes. * @returns {Function} Returns the new function. * @example * * var rearged = _.rearg(function(a, b, c) { * return [a, b, c]; * }, [2, 0, 1]); * * rearged('b', 'c', 'a') * // => ['a', 'b', 'c'] */ var rearg = flatRest(function(func, indexes) { return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); }); /** * Creates a function that invokes `func` with the `this` binding of the * created function and arguments from `start` and beyond provided as * an array. * * **Note:** This method is based on the * [rest parameter](https://mdn.io/rest_parameters). * * @static * @memberOf _ * @since 4.0.0 * @category Function * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @returns {Function} Returns the new function. * @example * * var say = _.rest(function(what, names) { * return what + ' ' + _.initial(names).join(', ') + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); * }); * * say('hello', 'fred', 'barney', 'pebbles'); * // => 'hello fred, barney, & pebbles' */ function rest(func, start) { if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } start = start === undefined ? start : toInteger(start); return baseRest(func, start); } /** * Creates a function that invokes `func` with the `this` binding of the * create function and an array of arguments much like * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). * * **Note:** This method is based on the * [spread operator](https://mdn.io/spread_operator). * * @static * @memberOf _ * @since 3.2.0 * @category Function * @param {Function} func The function to spread arguments over. * @param {number} [start=0] The start position of the spread. * @returns {Function} Returns the new function. * @example * * var say = _.spread(function(who, what) { * return who + ' says ' + what; * }); * * say(['fred', 'hello']); * // => 'fred says hello' * * var numbers = Promise.all([ * Promise.resolve(40), * Promise.resolve(36) * ]); * * numbers.then(_.spread(function(x, y) { * return x + y; * })); * // => a Promise of 76 */ function spread(func, start) { if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } start = start == null ? 0 : nativeMax(toInteger(start), 0); return baseRest(function(args) { var array = args[start], otherArgs = castSlice(args, 0, start); if (array) { arrayPush(otherArgs, array); } return apply(func, this, otherArgs); }); } /** * Creates a throttled function that only invokes `func` at most once per * every `wait` milliseconds. The throttled function comes with a `cancel` * method to cancel delayed `func` invocations and a `flush` method to * immediately invoke them. Provide `options` to indicate whether `func` * should be invoked on the leading and/or trailing edge of the `wait` * timeout. The `func` is invoked with the last arguments provided to the * throttled function. Subsequent calls to the throttled function return the * result of the last `func` invocation. * * **Note:** If `leading` and `trailing` options are `true`, `func` is * invoked on the trailing edge of the timeout only if the throttled function * is invoked more than once during the `wait` timeout. * * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred * until to the next tick, similar to `setTimeout` with a timeout of `0`. * * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) * for details over the differences between `_.throttle` and `_.debounce`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to throttle. * @param {number} [wait=0] The number of milliseconds to throttle invocations to. * @param {Object} [options={}] The options object. * @param {boolean} [options.leading=true] * Specify invoking on the leading edge of the timeout. * @param {boolean} [options.trailing=true] * Specify invoking on the trailing edge of the timeout. * @returns {Function} Returns the new throttled function. * @example * * // Avoid excessively updating the position while scrolling. * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); * * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); * jQuery(element).on('click', throttled); * * // Cancel the trailing throttled invocation. * jQuery(window).on('popstate', throttled.cancel); */ function throttle(func, wait, options) { var leading = true, trailing = true; if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } if (isObject(options)) { leading = 'leading' in options ? !!options.leading : leading; trailing = 'trailing' in options ? !!options.trailing : trailing; } return debounce(func, wait, { 'leading': leading, 'maxWait': wait, 'trailing': trailing }); } /** * Creates a function that accepts up to one argument, ignoring any * additional arguments. * * @static * @memberOf _ * @since 4.0.0 * @category Function * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. * @example * * _.map(['6', '8', '10'], _.unary(parseInt)); * // => [6, 8, 10] */ function unary(func) { return ary(func, 1); } /** * Creates a function that provides `value` to `wrapper` as its first * argument. Any additional arguments provided to the function are appended * to those provided to the `wrapper`. The wrapper is invoked with the `this` * binding of the created function. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {*} value The value to wrap. * @param {Function} [wrapper=identity] The wrapper function. * @returns {Function} Returns the new function. * @example * * var p = _.wrap(_.escape, function(func, text) { * return '

' + func(text) + '

'; * }); * * p('fred, barney, & pebbles'); * // => '

fred, barney, & pebbles

' */ function wrap(value, wrapper) { return partial(castFunction(wrapper), value); } /*------------------------------------------------------------------------*/ /** * Casts `value` as an array if it's not one. * * @static * @memberOf _ * @since 4.4.0 * @category Lang * @param {*} value The value to inspect. * @returns {Array} Returns the cast array. * @example * * _.castArray(1); * // => [1] * * _.castArray({ 'a': 1 }); * // => [{ 'a': 1 }] * * _.castArray('abc'); * // => ['abc'] * * _.castArray(null); * // => [null] * * _.castArray(undefined); * // => [undefined] * * _.castArray(); * // => [] * * var array = [1, 2, 3]; * console.log(_.castArray(array) === array); * // => true */ function castArray() { if (!arguments.length) { return []; } var value = arguments[0]; return isArray(value) ? value : [value]; } /** * Creates a shallow clone of `value`. * * **Note:** This method is loosely based on the * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) * and supports cloning arrays, array buffers, booleans, date objects, maps, * numbers, `Object` objects, regexes, sets, strings, symbols, and typed * arrays. The own enumerable properties of `arguments` objects are cloned * as plain objects. An empty object is returned for uncloneable values such * as error objects, functions, DOM nodes, and WeakMaps. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to clone. * @returns {*} Returns the cloned value. * @see _.cloneDeep * @example * * var objects = [{ 'a': 1 }, { 'b': 2 }]; * * var shallow = _.clone(objects); * console.log(shallow[0] === objects[0]); * // => true */ function clone(value) { return baseClone(value, CLONE_SYMBOLS_FLAG); } /** * This method is like `_.clone` except that it accepts `customizer` which * is invoked to produce the cloned value. If `customizer` returns `undefined`, * cloning is handled by the method instead. The `customizer` is invoked with * up to four arguments; (value [, index|key, object, stack]). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to clone. * @param {Function} [customizer] The function to customize cloning. * @returns {*} Returns the cloned value. * @see _.cloneDeepWith * @example * * function customizer(value) { * if (_.isElement(value)) { * return value.cloneNode(false); * } * } * * var el = _.cloneWith(document.body, customizer); * * console.log(el === document.body); * // => false * console.log(el.nodeName); * // => 'BODY' * console.log(el.childNodes.length); * // => 0 */ function cloneWith(value, customizer) { customizer = typeof customizer == 'function' ? customizer : undefined; return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); } /** * This method is like `_.clone` except that it recursively clones `value`. * * @static * @memberOf _ * @since 1.0.0 * @category Lang * @param {*} value The value to recursively clone. * @returns {*} Returns the deep cloned value. * @see _.clone * @example * * var objects = [{ 'a': 1 }, { 'b': 2 }]; * * var deep = _.cloneDeep(objects); * console.log(deep[0] === objects[0]); * // => false */ function cloneDeep(value) { return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); } /** * This method is like `_.cloneWith` except that it recursively clones `value`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to recursively clone. * @param {Function} [customizer] The function to customize cloning. * @returns {*} Returns the deep cloned value. * @see _.cloneWith * @example * * function customizer(value) { * if (_.isElement(value)) { * return value.cloneNode(true); * } * } * * var el = _.cloneDeepWith(document.body, customizer); * * console.log(el === document.body); * // => false * console.log(el.nodeName); * // => 'BODY' * console.log(el.childNodes.length); * // => 20 */ function cloneDeepWith(value, customizer) { customizer = typeof customizer == 'function' ? customizer : undefined; return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); } /** * Checks if `object` conforms to `source` by invoking the predicate * properties of `source` with the corresponding property values of `object`. * * **Note:** This method is equivalent to `_.conforms` when `source` is * partially applied. * * @static * @memberOf _ * @since 4.14.0 * @category Lang * @param {Object} object The object to inspect. * @param {Object} source The object of property predicates to conform to. * @returns {boolean} Returns `true` if `object` conforms, else `false`. * @example * * var object = { 'a': 1, 'b': 2 }; * * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); * // => true * * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); * // => false */ function conformsTo(object, source) { return source == null || baseConformsTo(object, source, keys(source)); } /** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.eq(object, object); * // => true * * _.eq(object, other); * // => false * * _.eq('a', 'a'); * // => true * * _.eq('a', Object('a')); * // => false * * _.eq(NaN, NaN); * // => true */ function eq(value, other) { return value === other || (value !== value && other !== other); } /** * Checks if `value` is greater than `other`. * * @static * @memberOf _ * @since 3.9.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if `value` is greater than `other`, * else `false`. * @see _.lt * @example * * _.gt(3, 1); * // => true * * _.gt(3, 3); * // => false * * _.gt(1, 3); * // => false */ var gt = createRelationalOperation(baseGt); /** * Checks if `value` is greater than or equal to `other`. * * @static * @memberOf _ * @since 3.9.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if `value` is greater than or equal to * `other`, else `false`. * @see _.lte * @example * * _.gte(3, 1); * // => true * * _.gte(3, 3); * // => true * * _.gte(1, 3); * // => false */ var gte = createRelationalOperation(function(value, other) { return value >= other; }); /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray = Array.isArray; /** * Checks if `value` is classified as an `ArrayBuffer` object. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. * @example * * _.isArrayBuffer(new ArrayBuffer(2)); * // => true * * _.isArrayBuffer(new Array(2)); * // => false */ var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */ function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } /** * This method is like `_.isArrayLike` except that it also checks if `value` * is an object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array-like object, * else `false`. * @example * * _.isArrayLikeObject([1, 2, 3]); * // => true * * _.isArrayLikeObject(document.body.children); * // => true * * _.isArrayLikeObject('abc'); * // => false * * _.isArrayLikeObject(_.noop); * // => false */ function isArrayLikeObject(value) { return isObjectLike(value) && isArrayLike(value); } /** * Checks if `value` is classified as a boolean primitive or object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. * @example * * _.isBoolean(false); * // => true * * _.isBoolean(null); * // => false */ function isBoolean(value) { return value === true || value === false || (isObjectLike(value) && baseGetTag(value) == boolTag); } /** * Checks if `value` is a buffer. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * * _.isBuffer(new Buffer(2)); * // => true * * _.isBuffer(new Uint8Array(2)); * // => false */ var isBuffer = nativeIsBuffer || stubFalse; /** * Checks if `value` is classified as a `Date` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a date object, else `false`. * @example * * _.isDate(new Date); * // => true * * _.isDate('Mon April 23 2012'); * // => false */ var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; /** * Checks if `value` is likely a DOM element. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. * @example * * _.isElement(document.body); * // => true * * _.isElement(''); * // => false */ function isElement(value) { return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); } /** * Checks if `value` is an empty object, collection, map, or set. * * Objects are considered empty if they have no own enumerable string keyed * properties. * * Array-like values such as `arguments` objects, arrays, buffers, strings, or * jQuery-like collections are considered empty if they have a `length` of `0`. * Similarly, maps and sets are considered empty if they have a `size` of `0`. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is empty, else `false`. * @example * * _.isEmpty(null); * // => true * * _.isEmpty(true); * // => true * * _.isEmpty(1); * // => true * * _.isEmpty([1, 2, 3]); * // => false * * _.isEmpty({ 'a': 1 }); * // => false */ function isEmpty(value) { if (value == null) { return true; } if (isArrayLike(value) && (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || isBuffer(value) || isTypedArray(value) || isArguments(value))) { return !value.length; } var tag = getTag(value); if (tag == mapTag || tag == setTag) { return !value.size; } if (isPrototype(value)) { return !baseKeys(value).length; } for (var key in value) { if (hasOwnProperty.call(value, key)) { return false; } } return true; } /** * Performs a deep comparison between two values to determine if they are * equivalent. * * **Note:** This method supports comparing arrays, array buffers, booleans, * date objects, error objects, maps, numbers, `Object` objects, regexes, * sets, strings, symbols, and typed arrays. `Object` objects are compared * by their own, not inherited, enumerable properties. Functions and DOM * nodes are compared by strict equality, i.e. `===`. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.isEqual(object, other); * // => true * * object === other; * // => false */ function isEqual(value, other) { return baseIsEqual(value, other); } /** * This method is like `_.isEqual` except that it accepts `customizer` which * is invoked to compare values. If `customizer` returns `undefined`, comparisons * are handled by the method instead. The `customizer` is invoked with up to * six arguments: (objValue, othValue [, index|key, object, other, stack]). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @param {Function} [customizer] The function to customize comparisons. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * function isGreeting(value) { * return /^h(?:i|ello)$/.test(value); * } * * function customizer(objValue, othValue) { * if (isGreeting(objValue) && isGreeting(othValue)) { * return true; * } * } * * var array = ['hello', 'goodbye']; * var other = ['hi', 'goodbye']; * * _.isEqualWith(array, other, customizer); * // => true */ function isEqualWith(value, other, customizer) { customizer = typeof customizer == 'function' ? customizer : undefined; var result = customizer ? customizer(value, other) : undefined; return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; } /** * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, * `SyntaxError`, `TypeError`, or `URIError` object. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an error object, else `false`. * @example * * _.isError(new Error); * // => true * * _.isError(Error); * // => false */ function isError(value) { if (!isObjectLike(value)) { return false; } var tag = baseGetTag(value); return tag == errorTag || tag == domExcTag || (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); } /** * Checks if `value` is a finite primitive number. * * **Note:** This method is based on * [`Number.isFinite`](https://mdn.io/Number/isFinite). * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. * @example * * _.isFinite(3); * // => true * * _.isFinite(Number.MIN_VALUE); * // => true * * _.isFinite(Infinity); * // => false * * _.isFinite('3'); * // => false */ function isFinite(value) { return typeof value == 'number' && nativeIsFinite(value); } /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction(value) { if (!isObject(value)) { return false; } // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag = baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } /** * Checks if `value` is an integer. * * **Note:** This method is based on * [`Number.isInteger`](https://mdn.io/Number/isInteger). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an integer, else `false`. * @example * * _.isInteger(3); * // => true * * _.isInteger(Number.MIN_VALUE); * // => false * * _.isInteger(Infinity); * // => false * * _.isInteger('3'); * // => false */ function isInteger(value) { return typeof value == 'number' && value == toInteger(value); } /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */ function isLength(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject(value) { var type = typeof value; return value != null && (type == 'object' || type == 'function'); } /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && typeof value == 'object'; } /** * Checks if `value` is classified as a `Map` object. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a map, else `false`. * @example * * _.isMap(new Map); * // => true * * _.isMap(new WeakMap); * // => false */ var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; /** * Performs a partial deep comparison between `object` and `source` to * determine if `object` contains equivalent property values. * * **Note:** This method is equivalent to `_.matches` when `source` is * partially applied. * * Partial comparisons will match empty array and empty object `source` * values against any array or object value, respectively. See `_.isEqual` * for a list of supported value comparisons. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {Object} object The object to inspect. * @param {Object} source The object of property values to match. * @returns {boolean} Returns `true` if `object` is a match, else `false`. * @example * * var object = { 'a': 1, 'b': 2 }; * * _.isMatch(object, { 'b': 2 }); * // => true * * _.isMatch(object, { 'b': 1 }); * // => false */ function isMatch(object, source) { return object === source || baseIsMatch(object, source, getMatchData(source)); } /** * This method is like `_.isMatch` except that it accepts `customizer` which * is invoked to compare values. If `customizer` returns `undefined`, comparisons * are handled by the method instead. The `customizer` is invoked with five * arguments: (objValue, srcValue, index|key, object, source). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {Object} object The object to inspect. * @param {Object} source The object of property values to match. * @param {Function} [customizer] The function to customize comparisons. * @returns {boolean} Returns `true` if `object` is a match, else `false`. * @example * * function isGreeting(value) { * return /^h(?:i|ello)$/.test(value); * } * * function customizer(objValue, srcValue) { * if (isGreeting(objValue) && isGreeting(srcValue)) { * return true; * } * } * * var object = { 'greeting': 'hello' }; * var source = { 'greeting': 'hi' }; * * _.isMatchWith(object, source, customizer); * // => true */ function isMatchWith(object, source, customizer) { customizer = typeof customizer == 'function' ? customizer : undefined; return baseIsMatch(object, source, getMatchData(source), customizer); } /** * Checks if `value` is `NaN`. * * **Note:** This method is based on * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for * `undefined` and other non-number values. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. * @example * * _.isNaN(NaN); * // => true * * _.isNaN(new Number(NaN)); * // => true * * isNaN(undefined); * // => true * * _.isNaN(undefined); * // => false */ function isNaN(value) { // An `NaN` primitive is the only value that is not equal to itself. // Perform the `toStringTag` check first to avoid errors with some // ActiveX objects in IE. return isNumber(value) && value != +value; } /** * Checks if `value` is a pristine native function. * * **Note:** This method can't reliably detect native functions in the presence * of the core-js package because core-js circumvents this kind of detection. * Despite multiple requests, the core-js maintainer has made it clear: any * attempt to fix the detection will be obstructed. As a result, we're left * with little choice but to throw an error. Unfortunately, this also affects * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), * which rely on core-js. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. * @example * * _.isNative(Array.prototype.push); * // => true * * _.isNative(_); * // => false */ function isNative(value) { if (isMaskable(value)) { throw new Error(CORE_ERROR_TEXT); } return baseIsNative(value); } /** * Checks if `value` is `null`. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is `null`, else `false`. * @example * * _.isNull(null); * // => true * * _.isNull(void 0); * // => false */ function isNull(value) { return value === null; } /** * Checks if `value` is `null` or `undefined`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is nullish, else `false`. * @example * * _.isNil(null); * // => true * * _.isNil(void 0); * // => true * * _.isNil(NaN); * // => false */ function isNil(value) { return value == null; } /** * Checks if `value` is classified as a `Number` primitive or object. * * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are * classified as numbers, use the `_.isFinite` method. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a number, else `false`. * @example * * _.isNumber(3); * // => true * * _.isNumber(Number.MIN_VALUE); * // => true * * _.isNumber(Infinity); * // => true * * _.isNumber('3'); * // => false */ function isNumber(value) { return typeof value == 'number' || (isObjectLike(value) && baseGetTag(value) == numberTag); } /** * Checks if `value` is a plain object, that is, an object created by the * `Object` constructor or one with a `[[Prototype]]` of `null`. * * @static * @memberOf _ * @since 0.8.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. * @example * * function Foo() { * this.a = 1; * } * * _.isPlainObject(new Foo); * // => false * * _.isPlainObject([1, 2, 3]); * // => false * * _.isPlainObject({ 'x': 0, 'y': 0 }); * // => true * * _.isPlainObject(Object.create(null)); * // => true */ function isPlainObject(value) { if (!isObjectLike(value) || baseGetTag(value) != objectTag) { return false; } var proto = getPrototype(value); if (proto === null) { return true; } var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; } /** * Checks if `value` is classified as a `RegExp` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. * @example * * _.isRegExp(/abc/); * // => true * * _.isRegExp('/abc/'); * // => false */ var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; /** * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 * double precision number which isn't the result of a rounded unsafe integer. * * **Note:** This method is based on * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. * @example * * _.isSafeInteger(3); * // => true * * _.isSafeInteger(Number.MIN_VALUE); * // => false * * _.isSafeInteger(Infinity); * // => false * * _.isSafeInteger('3'); * // => false */ function isSafeInteger(value) { return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; } /** * Checks if `value` is classified as a `Set` object. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a set, else `false`. * @example * * _.isSet(new Set); * // => true * * _.isSet(new WeakSet); * // => false */ var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; /** * Checks if `value` is classified as a `String` primitive or object. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a string, else `false`. * @example * * _.isString('abc'); * // => true * * _.isString(1); * // => false */ function isString(value) { return typeof value == 'string' || (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); } /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol(value) { return typeof value == 'symbol' || (isObjectLike(value) && baseGetTag(value) == symbolTag); } /** * Checks if `value` is classified as a typed array. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * * _.isTypedArray(new Uint8Array); * // => true * * _.isTypedArray([]); * // => false */ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; /** * Checks if `value` is `undefined`. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. * @example * * _.isUndefined(void 0); * // => true * * _.isUndefined(null); * // => false */ function isUndefined(value) { return value === undefined; } /** * Checks if `value` is classified as a `WeakMap` object. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. * @example * * _.isWeakMap(new WeakMap); * // => true * * _.isWeakMap(new Map); * // => false */ function isWeakMap(value) { return isObjectLike(value) && getTag(value) == weakMapTag; } /** * Checks if `value` is classified as a `WeakSet` object. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. * @example * * _.isWeakSet(new WeakSet); * // => true * * _.isWeakSet(new Set); * // => false */ function isWeakSet(value) { return isObjectLike(value) && baseGetTag(value) == weakSetTag; } /** * Checks if `value` is less than `other`. * * @static * @memberOf _ * @since 3.9.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if `value` is less than `other`, * else `false`. * @see _.gt * @example * * _.lt(1, 3); * // => true * * _.lt(3, 3); * // => false * * _.lt(3, 1); * // => false */ var lt = createRelationalOperation(baseLt); /** * Checks if `value` is less than or equal to `other`. * * @static * @memberOf _ * @since 3.9.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if `value` is less than or equal to * `other`, else `false`. * @see _.gte * @example * * _.lte(1, 3); * // => true * * _.lte(3, 3); * // => true * * _.lte(3, 1); * // => false */ var lte = createRelationalOperation(function(value, other) { return value <= other; }); /** * Converts `value` to an array. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to convert. * @returns {Array} Returns the converted array. * @example * * _.toArray({ 'a': 1, 'b': 2 }); * // => [1, 2] * * _.toArray('abc'); * // => ['a', 'b', 'c'] * * _.toArray(1); * // => [] * * _.toArray(null); * // => [] */ function toArray(value) { if (!value) { return []; } if (isArrayLike(value)) { return isString(value) ? stringToArray(value) : copyArray(value); } if (symIterator && value[symIterator]) { return iteratorToArray(value[symIterator]()); } var tag = getTag(value), func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); return func(value); } /** * Converts `value` to a finite number. * * @static * @memberOf _ * @since 4.12.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted number. * @example * * _.toFinite(3.2); * // => 3.2 * * _.toFinite(Number.MIN_VALUE); * // => 5e-324 * * _.toFinite(Infinity); * // => 1.7976931348623157e+308 * * _.toFinite('3.2'); * // => 3.2 */ function toFinite(value) { if (!value) { return value === 0 ? value : 0; } value = toNumber(value); if (value === INFINITY || value === -INFINITY) { var sign = (value < 0 ? -1 : 1); return sign * MAX_INTEGER; } return value === value ? value : 0; } /** * Converts `value` to an integer. * * **Note:** This method is loosely based on * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted integer. * @example * * _.toInteger(3.2); * // => 3 * * _.toInteger(Number.MIN_VALUE); * // => 0 * * _.toInteger(Infinity); * // => 1.7976931348623157e+308 * * _.toInteger('3.2'); * // => 3 */ function toInteger(value) { var result = toFinite(value), remainder = result % 1; return result === result ? (remainder ? result - remainder : result) : 0; } /** * Converts `value` to an integer suitable for use as the length of an * array-like object. * * **Note:** This method is based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted integer. * @example * * _.toLength(3.2); * // => 3 * * _.toLength(Number.MIN_VALUE); * // => 0 * * _.toLength(Infinity); * // => 4294967295 * * _.toLength('3.2'); * // => 3 */ function toLength(value) { return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; } /** * Converts `value` to a number. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to process. * @returns {number} Returns the number. * @example * * _.toNumber(3.2); * // => 3.2 * * _.toNumber(Number.MIN_VALUE); * // => 5e-324 * * _.toNumber(Infinity); * // => Infinity * * _.toNumber('3.2'); * // => 3.2 */ function toNumber(value) { if (typeof value == 'number') { return value; } if (isSymbol(value)) { return NAN; } if (isObject(value)) { var other = typeof value.valueOf == 'function' ? value.valueOf() : value; value = isObject(other) ? (other + '') : other; } if (typeof value != 'string') { return value === 0 ? value : +value; } value = baseTrim(value); var isBinary = reIsBinary.test(value); return (isBinary || reIsOctal.test(value)) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : (reIsBadHex.test(value) ? NAN : +value); } /** * Converts `value` to a plain object flattening inherited enumerable string * keyed properties of `value` to own properties of the plain object. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to convert. * @returns {Object} Returns the converted plain object. * @example * * function Foo() { * this.b = 2; * } * * Foo.prototype.c = 3; * * _.assign({ 'a': 1 }, new Foo); * // => { 'a': 1, 'b': 2 } * * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); * // => { 'a': 1, 'b': 2, 'c': 3 } */ function toPlainObject(value) { return copyObject(value, keysIn(value)); } /** * Converts `value` to a safe integer. A safe integer can be compared and * represented correctly. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted integer. * @example * * _.toSafeInteger(3.2); * // => 3 * * _.toSafeInteger(Number.MIN_VALUE); * // => 0 * * _.toSafeInteger(Infinity); * // => 9007199254740991 * * _.toSafeInteger('3.2'); * // => 3 */ function toSafeInteger(value) { return value ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) : (value === 0 ? value : 0); } /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {string} Returns the converted string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(value); } /*------------------------------------------------------------------------*/ /** * Assigns own enumerable string keyed properties of source objects to the * destination object. Source objects are applied from left to right. * Subsequent sources overwrite property assignments of previous sources. * * **Note:** This method mutates `object` and is loosely based on * [`Object.assign`](https://mdn.io/Object/assign). * * @static * @memberOf _ * @since 0.10.0 * @category Object * @param {Object} object The destination object. * @param {...Object} [sources] The source objects. * @returns {Object} Returns `object`. * @see _.assignIn * @example * * function Foo() { * this.a = 1; * } * * function Bar() { * this.c = 3; * } * * Foo.prototype.b = 2; * Bar.prototype.d = 4; * * _.assign({ 'a': 0 }, new Foo, new Bar); * // => { 'a': 1, 'c': 3 } */ var assign = createAssigner(function(object, source) { if (isPrototype(source) || isArrayLike(source)) { copyObject(source, keys(source), object); return; } for (var key in source) { if (hasOwnProperty.call(source, key)) { assignValue(object, key, source[key]); } } }); /** * This method is like `_.assign` except that it iterates over own and * inherited source properties. * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 4.0.0 * @alias extend * @category Object * @param {Object} object The destination object. * @param {...Object} [sources] The source objects. * @returns {Object} Returns `object`. * @see _.assign * @example * * function Foo() { * this.a = 1; * } * * function Bar() { * this.c = 3; * } * * Foo.prototype.b = 2; * Bar.prototype.d = 4; * * _.assignIn({ 'a': 0 }, new Foo, new Bar); * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } */ var assignIn = createAssigner(function(object, source) { copyObject(source, keysIn(source), object); }); /** * This method is like `_.assignIn` except that it accepts `customizer` * which is invoked to produce the assigned values. If `customizer` returns * `undefined`, assignment is handled by the method instead. The `customizer` * is invoked with five arguments: (objValue, srcValue, key, object, source). * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 4.0.0 * @alias extendWith * @category Object * @param {Object} object The destination object. * @param {...Object} sources The source objects. * @param {Function} [customizer] The function to customize assigned values. * @returns {Object} Returns `object`. * @see _.assignWith * @example * * function customizer(objValue, srcValue) { * return _.isUndefined(objValue) ? srcValue : objValue; * } * * var defaults = _.partialRight(_.assignInWith, customizer); * * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); * // => { 'a': 1, 'b': 2 } */ var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { copyObject(source, keysIn(source), object, customizer); }); /** * This method is like `_.assign` except that it accepts `customizer` * which is invoked to produce the assigned values. If `customizer` returns * `undefined`, assignment is handled by the method instead. The `customizer` * is invoked with five arguments: (objValue, srcValue, key, object, source). * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The destination object. * @param {...Object} sources The source objects. * @param {Function} [customizer] The function to customize assigned values. * @returns {Object} Returns `object`. * @see _.assignInWith * @example * * function customizer(objValue, srcValue) { * return _.isUndefined(objValue) ? srcValue : objValue; * } * * var defaults = _.partialRight(_.assignWith, customizer); * * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); * // => { 'a': 1, 'b': 2 } */ var assignWith = createAssigner(function(object, source, srcIndex, customizer) { copyObject(source, keys(source), object, customizer); }); /** * Creates an array of values corresponding to `paths` of `object`. * * @static * @memberOf _ * @since 1.0.0 * @category Object * @param {Object} object The object to iterate over. * @param {...(string|string[])} [paths] The property paths to pick. * @returns {Array} Returns the picked values. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; * * _.at(object, ['a[0].b.c', 'a[1]']); * // => [3, 4] */ var at = flatRest(baseAt); /** * Creates an object that inherits from the `prototype` object. If a * `properties` object is given, its own enumerable string keyed properties * are assigned to the created object. * * @static * @memberOf _ * @since 2.3.0 * @category Object * @param {Object} prototype The object to inherit from. * @param {Object} [properties] The properties to assign to the object. * @returns {Object} Returns the new object. * @example * * function Shape() { * this.x = 0; * this.y = 0; * } * * function Circle() { * Shape.call(this); * } * * Circle.prototype = _.create(Shape.prototype, { * 'constructor': Circle * }); * * var circle = new Circle; * circle instanceof Circle; * // => true * * circle instanceof Shape; * // => true */ function create(prototype, properties) { var result = baseCreate(prototype); return properties == null ? result : baseAssign(result, properties); } /** * Assigns own and inherited enumerable string keyed properties of source * objects to the destination object for all destination properties that * resolve to `undefined`. Source objects are applied from left to right. * Once a property is set, additional values of the same property are ignored. * * **Note:** This method mutates `object`. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The destination object. * @param {...Object} [sources] The source objects. * @returns {Object} Returns `object`. * @see _.defaultsDeep * @example * * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); * // => { 'a': 1, 'b': 2 } */ var defaults = baseRest(function(object, sources) { object = Object(object); var index = -1; var length = sources.length; var guard = length > 2 ? sources[2] : undefined; if (guard && isIterateeCall(sources[0], sources[1], guard)) { length = 1; } while (++index < length) { var source = sources[index]; var props = keysIn(source); var propsIndex = -1; var propsLength = props.length; while (++propsIndex < propsLength) { var key = props[propsIndex]; var value = object[key]; if (value === undefined || (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { object[key] = source[key]; } } } return object; }); /** * This method is like `_.defaults` except that it recursively assigns * default properties. * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 3.10.0 * @category Object * @param {Object} object The destination object. * @param {...Object} [sources] The source objects. * @returns {Object} Returns `object`. * @see _.defaults * @example * * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); * // => { 'a': { 'b': 2, 'c': 3 } } */ var defaultsDeep = baseRest(function(args) { args.push(undefined, customDefaultsMerge); return apply(mergeWith, undefined, args); }); /** * This method is like `_.find` except that it returns the key of the first * element `predicate` returns truthy for instead of the element itself. * * @static * @memberOf _ * @since 1.1.0 * @category Object * @param {Object} object The object to inspect. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @returns {string|undefined} Returns the key of the matched element, * else `undefined`. * @example * * var users = { * 'barney': { 'age': 36, 'active': true }, * 'fred': { 'age': 40, 'active': false }, * 'pebbles': { 'age': 1, 'active': true } * }; * * _.findKey(users, function(o) { return o.age < 40; }); * // => 'barney' (iteration order is not guaranteed) * * // The `_.matches` iteratee shorthand. * _.findKey(users, { 'age': 1, 'active': true }); * // => 'pebbles' * * // The `_.matchesProperty` iteratee shorthand. * _.findKey(users, ['active', false]); * // => 'fred' * * // The `_.property` iteratee shorthand. * _.findKey(users, 'active'); * // => 'barney' */ function findKey(object, predicate) { return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); } /** * This method is like `_.findKey` except that it iterates over elements of * a collection in the opposite order. * * @static * @memberOf _ * @since 2.0.0 * @category Object * @param {Object} object The object to inspect. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @returns {string|undefined} Returns the key of the matched element, * else `undefined`. * @example * * var users = { * 'barney': { 'age': 36, 'active': true }, * 'fred': { 'age': 40, 'active': false }, * 'pebbles': { 'age': 1, 'active': true } * }; * * _.findLastKey(users, function(o) { return o.age < 40; }); * // => returns 'pebbles' assuming `_.findKey` returns 'barney' * * // The `_.matches` iteratee shorthand. * _.findLastKey(users, { 'age': 36, 'active': true }); * // => 'barney' * * // The `_.matchesProperty` iteratee shorthand. * _.findLastKey(users, ['active', false]); * // => 'fred' * * // The `_.property` iteratee shorthand. * _.findLastKey(users, 'active'); * // => 'pebbles' */ function findLastKey(object, predicate) { return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); } /** * Iterates over own and inherited enumerable string keyed properties of an * object and invokes `iteratee` for each property. The iteratee is invoked * with three arguments: (value, key, object). Iteratee functions may exit * iteration early by explicitly returning `false`. * * @static * @memberOf _ * @since 0.3.0 * @category Object * @param {Object} object The object to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Object} Returns `object`. * @see _.forInRight * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.forIn(new Foo, function(value, key) { * console.log(key); * }); * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). */ function forIn(object, iteratee) { return object == null ? object : baseFor(object, getIteratee(iteratee, 3), keysIn); } /** * This method is like `_.forIn` except that it iterates over properties of * `object` in the opposite order. * * @static * @memberOf _ * @since 2.0.0 * @category Object * @param {Object} object The object to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Object} Returns `object`. * @see _.forIn * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.forInRight(new Foo, function(value, key) { * console.log(key); * }); * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. */ function forInRight(object, iteratee) { return object == null ? object : baseForRight(object, getIteratee(iteratee, 3), keysIn); } /** * Iterates over own enumerable string keyed properties of an object and * invokes `iteratee` for each property. The iteratee is invoked with three * arguments: (value, key, object). Iteratee functions may exit iteration * early by explicitly returning `false`. * * @static * @memberOf _ * @since 0.3.0 * @category Object * @param {Object} object The object to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Object} Returns `object`. * @see _.forOwnRight * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.forOwn(new Foo, function(value, key) { * console.log(key); * }); * // => Logs 'a' then 'b' (iteration order is not guaranteed). */ function forOwn(object, iteratee) { return object && baseForOwn(object, getIteratee(iteratee, 3)); } /** * This method is like `_.forOwn` except that it iterates over properties of * `object` in the opposite order. * * @static * @memberOf _ * @since 2.0.0 * @category Object * @param {Object} object The object to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Object} Returns `object`. * @see _.forOwn * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.forOwnRight(new Foo, function(value, key) { * console.log(key); * }); * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. */ function forOwnRight(object, iteratee) { return object && baseForOwnRight(object, getIteratee(iteratee, 3)); } /** * Creates an array of function property names from own enumerable properties * of `object`. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to inspect. * @returns {Array} Returns the function names. * @see _.functionsIn * @example * * function Foo() { * this.a = _.constant('a'); * this.b = _.constant('b'); * } * * Foo.prototype.c = _.constant('c'); * * _.functions(new Foo); * // => ['a', 'b'] */ function functions(object) { return object == null ? [] : baseFunctions(object, keys(object)); } /** * Creates an array of function property names from own and inherited * enumerable properties of `object`. * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The object to inspect. * @returns {Array} Returns the function names. * @see _.functions * @example * * function Foo() { * this.a = _.constant('a'); * this.b = _.constant('b'); * } * * Foo.prototype.c = _.constant('c'); * * _.functionsIn(new Foo); * // => ['a', 'b', 'c'] */ function functionsIn(object) { return object == null ? [] : baseFunctions(object, keysIn(object)); } /** * Gets the value at `path` of `object`. If the resolved value is * `undefined`, the `defaultValue` is returned in its place. * * @static * @memberOf _ * @since 3.7.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @param {*} [defaultValue] The value returned for `undefined` resolved values. * @returns {*} Returns the resolved value. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }] }; * * _.get(object, 'a[0].b.c'); * // => 3 * * _.get(object, ['a', '0', 'b', 'c']); * // => 3 * * _.get(object, 'a.b.c', 'default'); * // => 'default' */ function get(object, path, defaultValue) { var result = object == null ? undefined : baseGet(object, path); return result === undefined ? defaultValue : result; } /** * Checks if `path` is a direct property of `object`. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @returns {boolean} Returns `true` if `path` exists, else `false`. * @example * * var object = { 'a': { 'b': 2 } }; * var other = _.create({ 'a': _.create({ 'b': 2 }) }); * * _.has(object, 'a'); * // => true * * _.has(object, 'a.b'); * // => true * * _.has(object, ['a', 'b']); * // => true * * _.has(other, 'a'); * // => false */ function has(object, path) { return object != null && hasPath(object, path, baseHas); } /** * Checks if `path` is a direct or inherited property of `object`. * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @returns {boolean} Returns `true` if `path` exists, else `false`. * @example * * var object = _.create({ 'a': _.create({ 'b': 2 }) }); * * _.hasIn(object, 'a'); * // => true * * _.hasIn(object, 'a.b'); * // => true * * _.hasIn(object, ['a', 'b']); * // => true * * _.hasIn(object, 'b'); * // => false */ function hasIn(object, path) { return object != null && hasPath(object, path, baseHasIn); } /** * Creates an object composed of the inverted keys and values of `object`. * If `object` contains duplicate values, subsequent values overwrite * property assignments of previous values. * * @static * @memberOf _ * @since 0.7.0 * @category Object * @param {Object} object The object to invert. * @returns {Object} Returns the new inverted object. * @example * * var object = { 'a': 1, 'b': 2, 'c': 1 }; * * _.invert(object); * // => { '1': 'c', '2': 'b' } */ var invert = createInverter(function(result, value, key) { if (value != null && typeof value.toString != 'function') { value = nativeObjectToString.call(value); } result[value] = key; }, constant(identity)); /** * This method is like `_.invert` except that the inverted object is generated * from the results of running each element of `object` thru `iteratee`. The * corresponding inverted value of each inverted key is an array of keys * responsible for generating the inverted value. The iteratee is invoked * with one argument: (value). * * @static * @memberOf _ * @since 4.1.0 * @category Object * @param {Object} object The object to invert. * @param {Function} [iteratee=_.identity] The iteratee invoked per element. * @returns {Object} Returns the new inverted object. * @example * * var object = { 'a': 1, 'b': 2, 'c': 1 }; * * _.invertBy(object); * // => { '1': ['a', 'c'], '2': ['b'] } * * _.invertBy(object, function(value) { * return 'group' + value; * }); * // => { 'group1': ['a', 'c'], 'group2': ['b'] } */ var invertBy = createInverter(function(result, value, key) { if (value != null && typeof value.toString != 'function') { value = nativeObjectToString.call(value); } if (hasOwnProperty.call(result, value)) { result[value].push(key); } else { result[value] = [key]; } }, getIteratee); /** * Invokes the method at `path` of `object`. * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path of the method to invoke. * @param {...*} [args] The arguments to invoke the method with. * @returns {*} Returns the result of the invoked method. * @example * * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; * * _.invoke(object, 'a[0].b.c.slice', 1, 3); * // => [2, 3] */ var invoke = baseRest(baseInvoke); /** * Creates an array of the own enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. See the * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * for more details. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keys(new Foo); * // => ['a', 'b'] (iteration order is not guaranteed) * * _.keys('hi'); * // => ['0', '1'] */ function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } /** * Creates an array of the own and inherited enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @memberOf _ * @since 3.0.0 * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keysIn(new Foo); * // => ['a', 'b', 'c'] (iteration order is not guaranteed) */ function keysIn(object) { return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); } /** * The opposite of `_.mapValues`; this method creates an object with the * same values as `object` and keys generated by running each own enumerable * string keyed property of `object` thru `iteratee`. The iteratee is invoked * with three arguments: (value, key, object). * * @static * @memberOf _ * @since 3.8.0 * @category Object * @param {Object} object The object to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Object} Returns the new mapped object. * @see _.mapValues * @example * * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { * return key + value; * }); * // => { 'a1': 1, 'b2': 2 } */ function mapKeys(object, iteratee) { var result = {}; iteratee = getIteratee(iteratee, 3); baseForOwn(object, function(value, key, object) { baseAssignValue(result, iteratee(value, key, object), value); }); return result; } /** * Creates an object with the same keys as `object` and values generated * by running each own enumerable string keyed property of `object` thru * `iteratee`. The iteratee is invoked with three arguments: * (value, key, object). * * @static * @memberOf _ * @since 2.4.0 * @category Object * @param {Object} object The object to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Object} Returns the new mapped object. * @see _.mapKeys * @example * * var users = { * 'fred': { 'user': 'fred', 'age': 40 }, * 'pebbles': { 'user': 'pebbles', 'age': 1 } * }; * * _.mapValues(users, function(o) { return o.age; }); * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) * * // The `_.property` iteratee shorthand. * _.mapValues(users, 'age'); * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) */ function mapValues(object, iteratee) { var result = {}; iteratee = getIteratee(iteratee, 3); baseForOwn(object, function(value, key, object) { baseAssignValue(result, key, iteratee(value, key, object)); }); return result; } /** * This method is like `_.assign` except that it recursively merges own and * inherited enumerable string keyed properties of source objects into the * destination object. Source properties that resolve to `undefined` are * skipped if a destination value exists. Array and plain object properties * are merged recursively. Other objects and value types are overridden by * assignment. Source objects are applied from left to right. Subsequent * sources overwrite property assignments of previous sources. * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 0.5.0 * @category Object * @param {Object} object The destination object. * @param {...Object} [sources] The source objects. * @returns {Object} Returns `object`. * @example * * var object = { * 'a': [{ 'b': 2 }, { 'd': 4 }] * }; * * var other = { * 'a': [{ 'c': 3 }, { 'e': 5 }] * }; * * _.merge(object, other); * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } */ var merge = createAssigner(function(object, source, srcIndex) { baseMerge(object, source, srcIndex); }); /** * This method is like `_.merge` except that it accepts `customizer` which * is invoked to produce the merged values of the destination and source * properties. If `customizer` returns `undefined`, merging is handled by the * method instead. The `customizer` is invoked with six arguments: * (objValue, srcValue, key, object, source, stack). * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The destination object. * @param {...Object} sources The source objects. * @param {Function} customizer The function to customize assigned values. * @returns {Object} Returns `object`. * @example * * function customizer(objValue, srcValue) { * if (_.isArray(objValue)) { * return objValue.concat(srcValue); * } * } * * var object = { 'a': [1], 'b': [2] }; * var other = { 'a': [3], 'b': [4] }; * * _.mergeWith(object, other, customizer); * // => { 'a': [1, 3], 'b': [2, 4] } */ var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { baseMerge(object, source, srcIndex, customizer); }); /** * The opposite of `_.pick`; this method creates an object composed of the * own and inherited enumerable property paths of `object` that are not omitted. * * **Note:** This method is considerably slower than `_.pick`. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The source object. * @param {...(string|string[])} [paths] The property paths to omit. * @returns {Object} Returns the new object. * @example * * var object = { 'a': 1, 'b': '2', 'c': 3 }; * * _.omit(object, ['a', 'c']); * // => { 'b': '2' } */ var omit = flatRest(function(object, paths) { var result = {}; if (object == null) { return result; } var isDeep = false; paths = arrayMap(paths, function(path) { path = castPath(path, object); isDeep || (isDeep = path.length > 1); return path; }); copyObject(object, getAllKeysIn(object), result); if (isDeep) { result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); } var length = paths.length; while (length--) { baseUnset(result, paths[length]); } return result; }); /** * The opposite of `_.pickBy`; this method creates an object composed of * the own and inherited enumerable string keyed properties of `object` that * `predicate` doesn't return truthy for. The predicate is invoked with two * arguments: (value, key). * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The source object. * @param {Function} [predicate=_.identity] The function invoked per property. * @returns {Object} Returns the new object. * @example * * var object = { 'a': 1, 'b': '2', 'c': 3 }; * * _.omitBy(object, _.isNumber); * // => { 'b': '2' } */ function omitBy(object, predicate) { return pickBy(object, negate(getIteratee(predicate))); } /** * Creates an object composed of the picked `object` properties. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The source object. * @param {...(string|string[])} [paths] The property paths to pick. * @returns {Object} Returns the new object. * @example * * var object = { 'a': 1, 'b': '2', 'c': 3 }; * * _.pick(object, ['a', 'c']); * // => { 'a': 1, 'c': 3 } */ var pick = flatRest(function(object, paths) { return object == null ? {} : basePick(object, paths); }); /** * Creates an object composed of the `object` properties `predicate` returns * truthy for. The predicate is invoked with two arguments: (value, key). * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The source object. * @param {Function} [predicate=_.identity] The function invoked per property. * @returns {Object} Returns the new object. * @example * * var object = { 'a': 1, 'b': '2', 'c': 3 }; * * _.pickBy(object, _.isNumber); * // => { 'a': 1, 'c': 3 } */ function pickBy(object, predicate) { if (object == null) { return {}; } var props = arrayMap(getAllKeysIn(object), function(prop) { return [prop]; }); predicate = getIteratee(predicate); return basePickBy(object, props, function(value, path) { return predicate(value, path[0]); }); } /** * This method is like `_.get` except that if the resolved value is a * function it's invoked with the `this` binding of its parent object and * its result is returned. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path of the property to resolve. * @param {*} [defaultValue] The value returned for `undefined` resolved values. * @returns {*} Returns the resolved value. * @example * * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; * * _.result(object, 'a[0].b.c1'); * // => 3 * * _.result(object, 'a[0].b.c2'); * // => 4 * * _.result(object, 'a[0].b.c3', 'default'); * // => 'default' * * _.result(object, 'a[0].b.c3', _.constant('default')); * // => 'default' */ function result(object, path, defaultValue) { path = castPath(path, object); var index = -1, length = path.length; // Ensure the loop is entered when path is empty. if (!length) { length = 1; object = undefined; } while (++index < length) { var value = object == null ? undefined : object[toKey(path[index])]; if (value === undefined) { index = length; value = defaultValue; } object = isFunction(value) ? value.call(object) : value; } return object; } /** * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, * it's created. Arrays are created for missing index properties while objects * are created for all other missing properties. Use `_.setWith` to customize * `path` creation. * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 3.7.0 * @category Object * @param {Object} object The object to modify. * @param {Array|string} path The path of the property to set. * @param {*} value The value to set. * @returns {Object} Returns `object`. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }] }; * * _.set(object, 'a[0].b.c', 4); * console.log(object.a[0].b.c); * // => 4 * * _.set(object, ['x', '0', 'y', 'z'], 5); * console.log(object.x[0].y.z); * // => 5 */ function set(object, path, value) { return object == null ? object : baseSet(object, path, value); } /** * This method is like `_.set` except that it accepts `customizer` which is * invoked to produce the objects of `path`. If `customizer` returns `undefined` * path creation is handled by the method instead. The `customizer` is invoked * with three arguments: (nsValue, key, nsObject). * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The object to modify. * @param {Array|string} path The path of the property to set. * @param {*} value The value to set. * @param {Function} [customizer] The function to customize assigned values. * @returns {Object} Returns `object`. * @example * * var object = {}; * * _.setWith(object, '[0][1]', 'a', Object); * // => { '0': { '1': 'a' } } */ function setWith(object, path, value, customizer) { customizer = typeof customizer == 'function' ? customizer : undefined; return object == null ? object : baseSet(object, path, value, customizer); } /** * Creates an array of own enumerable string keyed-value pairs for `object` * which can be consumed by `_.fromPairs`. If `object` is a map or set, its * entries are returned. * * @static * @memberOf _ * @since 4.0.0 * @alias entries * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the key-value pairs. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.toPairs(new Foo); * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) */ var toPairs = createToPairs(keys); /** * Creates an array of own and inherited enumerable string keyed-value pairs * for `object` which can be consumed by `_.fromPairs`. If `object` is a map * or set, its entries are returned. * * @static * @memberOf _ * @since 4.0.0 * @alias entriesIn * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the key-value pairs. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.toPairsIn(new Foo); * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) */ var toPairsIn = createToPairs(keysIn); /** * An alternative to `_.reduce`; this method transforms `object` to a new * `accumulator` object which is the result of running each of its own * enumerable string keyed properties thru `iteratee`, with each invocation * potentially mutating the `accumulator` object. If `accumulator` is not * provided, a new object with the same `[[Prototype]]` will be used. The * iteratee is invoked with four arguments: (accumulator, value, key, object). * Iteratee functions may exit iteration early by explicitly returning `false`. * * @static * @memberOf _ * @since 1.3.0 * @category Object * @param {Object} object The object to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @param {*} [accumulator] The custom accumulator value. * @returns {*} Returns the accumulated value. * @example * * _.transform([2, 3, 4], function(result, n) { * result.push(n *= n); * return n % 2 == 0; * }, []); * // => [4, 9] * * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { * (result[value] || (result[value] = [])).push(key); * }, {}); * // => { '1': ['a', 'c'], '2': ['b'] } */ function transform(object, iteratee, accumulator) { var isArr = isArray(object), isArrLike = isArr || isBuffer(object) || isTypedArray(object); iteratee = getIteratee(iteratee, 4); if (accumulator == null) { var Ctor = object && object.constructor; if (isArrLike) { accumulator = isArr ? new Ctor : []; } else if (isObject(object)) { accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; } else { accumulator = {}; } } (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { return iteratee(accumulator, value, index, object); }); return accumulator; } /** * Removes the property at `path` of `object`. * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The object to modify. * @param {Array|string} path The path of the property to unset. * @returns {boolean} Returns `true` if the property is deleted, else `false`. * @example * * var object = { 'a': [{ 'b': { 'c': 7 } }] }; * _.unset(object, 'a[0].b.c'); * // => true * * console.log(object); * // => { 'a': [{ 'b': {} }] }; * * _.unset(object, ['a', '0', 'b', 'c']); * // => true * * console.log(object); * // => { 'a': [{ 'b': {} }] }; */ function unset(object, path) { return object == null ? true : baseUnset(object, path); } /** * This method is like `_.set` except that accepts `updater` to produce the * value to set. Use `_.updateWith` to customize `path` creation. The `updater` * is invoked with one argument: (value). * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 4.6.0 * @category Object * @param {Object} object The object to modify. * @param {Array|string} path The path of the property to set. * @param {Function} updater The function to produce the updated value. * @returns {Object} Returns `object`. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }] }; * * _.update(object, 'a[0].b.c', function(n) { return n * n; }); * console.log(object.a[0].b.c); * // => 9 * * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); * console.log(object.x[0].y.z); * // => 0 */ function update(object, path, updater) { return object == null ? object : baseUpdate(object, path, castFunction(updater)); } /** * This method is like `_.update` except that it accepts `customizer` which is * invoked to produce the objects of `path`. If `customizer` returns `undefined` * path creation is handled by the method instead. The `customizer` is invoked * with three arguments: (nsValue, key, nsObject). * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 4.6.0 * @category Object * @param {Object} object The object to modify. * @param {Array|string} path The path of the property to set. * @param {Function} updater The function to produce the updated value. * @param {Function} [customizer] The function to customize assigned values. * @returns {Object} Returns `object`. * @example * * var object = {}; * * _.updateWith(object, '[0][1]', _.constant('a'), Object); * // => { '0': { '1': 'a' } } */ function updateWith(object, path, updater, customizer) { customizer = typeof customizer == 'function' ? customizer : undefined; return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); } /** * Creates an array of the own enumerable string keyed property values of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property values. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.values(new Foo); * // => [1, 2] (iteration order is not guaranteed) * * _.values('hi'); * // => ['h', 'i'] */ function values(object) { return object == null ? [] : baseValues(object, keys(object)); } /** * Creates an array of the own and inherited enumerable string keyed property * values of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @memberOf _ * @since 3.0.0 * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property values. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.valuesIn(new Foo); * // => [1, 2, 3] (iteration order is not guaranteed) */ function valuesIn(object) { return object == null ? [] : baseValues(object, keysIn(object)); } /*------------------------------------------------------------------------*/ /** * Clamps `number` within the inclusive `lower` and `upper` bounds. * * @static * @memberOf _ * @since 4.0.0 * @category Number * @param {number} number The number to clamp. * @param {number} [lower] The lower bound. * @param {number} upper The upper bound. * @returns {number} Returns the clamped number. * @example * * _.clamp(-10, -5, 5); * // => -5 * * _.clamp(10, -5, 5); * // => 5 */ function clamp(number, lower, upper) { if (upper === undefined) { upper = lower; lower = undefined; } if (upper !== undefined) { upper = toNumber(upper); upper = upper === upper ? upper : 0; } if (lower !== undefined) { lower = toNumber(lower); lower = lower === lower ? lower : 0; } return baseClamp(toNumber(number), lower, upper); } /** * Checks if `n` is between `start` and up to, but not including, `end`. If * `end` is not specified, it's set to `start` with `start` then set to `0`. * If `start` is greater than `end` the params are swapped to support * negative ranges. * * @static * @memberOf _ * @since 3.3.0 * @category Number * @param {number} number The number to check. * @param {number} [start=0] The start of the range. * @param {number} end The end of the range. * @returns {boolean} Returns `true` if `number` is in the range, else `false`. * @see _.range, _.rangeRight * @example * * _.inRange(3, 2, 4); * // => true * * _.inRange(4, 8); * // => true * * _.inRange(4, 2); * // => false * * _.inRange(2, 2); * // => false * * _.inRange(1.2, 2); * // => true * * _.inRange(5.2, 4); * // => false * * _.inRange(-3, -2, -6); * // => true */ function inRange(number, start, end) { start = toFinite(start); if (end === undefined) { end = start; start = 0; } else { end = toFinite(end); } number = toNumber(number); return baseInRange(number, start, end); } /** * Produces a random number between the inclusive `lower` and `upper` bounds. * If only one argument is provided a number between `0` and the given number * is returned. If `floating` is `true`, or either `lower` or `upper` are * floats, a floating-point number is returned instead of an integer. * * **Note:** JavaScript follows the IEEE-754 standard for resolving * floating-point values which can produce unexpected results. * * @static * @memberOf _ * @since 0.7.0 * @category Number * @param {number} [lower=0] The lower bound. * @param {number} [upper=1] The upper bound. * @param {boolean} [floating] Specify returning a floating-point number. * @returns {number} Returns the random number. * @example * * _.random(0, 5); * // => an integer between 0 and 5 * * _.random(5); * // => also an integer between 0 and 5 * * _.random(5, true); * // => a floating-point number between 0 and 5 * * _.random(1.2, 5.2); * // => a floating-point number between 1.2 and 5.2 */ function random(lower, upper, floating) { if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { upper = floating = undefined; } if (floating === undefined) { if (typeof upper == 'boolean') { floating = upper; upper = undefined; } else if (typeof lower == 'boolean') { floating = lower; lower = undefined; } } if (lower === undefined && upper === undefined) { lower = 0; upper = 1; } else { lower = toFinite(lower); if (upper === undefined) { upper = lower; lower = 0; } else { upper = toFinite(upper); } } if (lower > upper) { var temp = lower; lower = upper; upper = temp; } if (floating || lower % 1 || upper % 1) { var rand = nativeRandom(); return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); } return baseRandom(lower, upper); } /*------------------------------------------------------------------------*/ /** * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). * * @static * @memberOf _ * @since 3.0.0 * @category String * @param {string} [string=''] The string to convert. * @returns {string} Returns the camel cased string. * @example * * _.camelCase('Foo Bar'); * // => 'fooBar' * * _.camelCase('--foo-bar--'); * // => 'fooBar' * * _.camelCase('__FOO_BAR__'); * // => 'fooBar' */ var camelCase = createCompounder(function(result, word, index) { word = word.toLowerCase(); return result + (index ? capitalize(word) : word); }); /** * Converts the first character of `string` to upper case and the remaining * to lower case. * * @static * @memberOf _ * @since 3.0.0 * @category String * @param {string} [string=''] The string to capitalize. * @returns {string} Returns the capitalized string. * @example * * _.capitalize('FRED'); * // => 'Fred' */ function capitalize(string) { return upperFirst(toString(string).toLowerCase()); } /** * Deburrs `string` by converting * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) * letters to basic Latin letters and removing * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). * * @static * @memberOf _ * @since 3.0.0 * @category String * @param {string} [string=''] The string to deburr. * @returns {string} Returns the deburred string. * @example * * _.deburr('déjà vu'); * // => 'deja vu' */ function deburr(string) { string = toString(string); return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); } /** * Checks if `string` ends with the given target string. * * @static * @memberOf _ * @since 3.0.0 * @category String * @param {string} [string=''] The string to inspect. * @param {string} [target] The string to search for. * @param {number} [position=string.length] The position to search up to. * @returns {boolean} Returns `true` if `string` ends with `target`, * else `false`. * @example * * _.endsWith('abc', 'c'); * // => true * * _.endsWith('abc', 'b'); * // => false * * _.endsWith('abc', 'b', 2); * // => true */ function endsWith(string, target, position) { string = toString(string); target = baseToString(target); var length = string.length; position = position === undefined ? length : baseClamp(toInteger(position), 0, length); var end = position; position -= target.length; return position >= 0 && string.slice(position, end) == target; } /** * Converts the characters "&", "<", ">", '"', and "'" in `string` to their * corresponding HTML entities. * * **Note:** No other characters are escaped. To escape additional * characters use a third-party library like [_he_](https://mths.be/he). * * Though the ">" character is escaped for symmetry, characters like * ">" and "/" don't need escaping in HTML and have no special meaning * unless they're part of a tag or unquoted attribute value. See * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) * (under "semi-related fun fact") for more details. * * When working with HTML you should always * [quote attribute values](http://wonko.com/post/html-escaping) to reduce * XSS vectors. * * @static * @since 0.1.0 * @memberOf _ * @category String * @param {string} [string=''] The string to escape. * @returns {string} Returns the escaped string. * @example * * _.escape('fred, barney, & pebbles'); * // => 'fred, barney, & pebbles' */ function escape(string) { string = toString(string); return (string && reHasUnescapedHtml.test(string)) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string; } /** * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. * * @static * @memberOf _ * @since 3.0.0 * @category String * @param {string} [string=''] The string to escape. * @returns {string} Returns the escaped string. * @example * * _.escapeRegExp('[lodash](https://lodash.com/)'); * // => '\[lodash\]\(https://lodash\.com/\)' */ function escapeRegExp(string) { string = toString(string); return (string && reHasRegExpChar.test(string)) ? string.replace(reRegExpChar, '\\$&') : string; } /** * Converts `string` to * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). * * @static * @memberOf _ * @since 3.0.0 * @category String * @param {string} [string=''] The string to convert. * @returns {string} Returns the kebab cased string. * @example * * _.kebabCase('Foo Bar'); * // => 'foo-bar' * * _.kebabCase('fooBar'); * // => 'foo-bar' * * _.kebabCase('__FOO_BAR__'); * // => 'foo-bar' */ var kebabCase = createCompounder(function(result, word, index) { return result + (index ? '-' : '') + word.toLowerCase(); }); /** * Converts `string`, as space separated words, to lower case. * * @static * @memberOf _ * @since 4.0.0 * @category String * @param {string} [string=''] The string to convert. * @returns {string} Returns the lower cased string. * @example * * _.lowerCase('--Foo-Bar--'); * // => 'foo bar' * * _.lowerCase('fooBar'); * // => 'foo bar' * * _.lowerCase('__FOO_BAR__'); * // => 'foo bar' */ var lowerCase = createCompounder(function(result, word, index) { return result + (index ? ' ' : '') + word.toLowerCase(); }); /** * Converts the first character of `string` to lower case. * * @static * @memberOf _ * @since 4.0.0 * @category String * @param {string} [string=''] The string to convert. * @returns {string} Returns the converted string. * @example * * _.lowerFirst('Fred'); * // => 'fred' * * _.lowerFirst('FRED'); * // => 'fRED' */ var lowerFirst = createCaseFirst('toLowerCase'); /** * Pads `string` on the left and right sides if it's shorter than `length`. * Padding characters are truncated if they can't be evenly divided by `length`. * * @static * @memberOf _ * @since 3.0.0 * @category String * @param {string} [string=''] The string to pad. * @param {number} [length=0] The padding length. * @param {string} [chars=' '] The string used as padding. * @returns {string} Returns the padded string. * @example * * _.pad('abc', 8); * // => ' abc ' * * _.pad('abc', 8, '_-'); * // => '_-abc_-_' * * _.pad('abc', 3); * // => 'abc' */ function pad(string, length, chars) { string = toString(string); length = toInteger(length); var strLength = length ? stringSize(string) : 0; if (!length || strLength >= length) { return string; } var mid = (length - strLength) / 2; return ( createPadding(nativeFloor(mid), chars) + string + createPadding(nativeCeil(mid), chars) ); } /** * Pads `string` on the right side if it's shorter than `length`. Padding * characters are truncated if they exceed `length`. * * @static * @memberOf _ * @since 4.0.0 * @category String * @param {string} [string=''] The string to pad. * @param {number} [length=0] The padding length. * @param {string} [chars=' '] The string used as padding. * @returns {string} Returns the padded string. * @example * * _.padEnd('abc', 6); * // => 'abc ' * * _.padEnd('abc', 6, '_-'); * // => 'abc_-_' * * _.padEnd('abc', 3); * // => 'abc' */ function padEnd(string, length, chars) { string = toString(string); length = toInteger(length); var strLength = length ? stringSize(string) : 0; return (length && strLength < length) ? (string + createPadding(length - strLength, chars)) : string; } /** * Pads `string` on the left side if it's shorter than `length`. Padding * characters are truncated if they exceed `length`. * * @static * @memberOf _ * @since 4.0.0 * @category String * @param {string} [string=''] The string to pad. * @param {number} [length=0] The padding length. * @param {string} [chars=' '] The string used as padding. * @returns {string} Returns the padded string. * @example * * _.padStart('abc', 6); * // => ' abc' * * _.padStart('abc', 6, '_-'); * // => '_-_abc' * * _.padStart('abc', 3); * // => 'abc' */ function padStart(string, length, chars) { string = toString(string); length = toInteger(length); var strLength = length ? stringSize(string) : 0; return (length && strLength < length) ? (createPadding(length - strLength, chars) + string) : string; } /** * Converts `string` to an integer of the specified radix. If `radix` is * `undefined` or `0`, a `radix` of `10` is used unless `value` is a * hexadecimal, in which case a `radix` of `16` is used. * * **Note:** This method aligns with the * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. * * @static * @memberOf _ * @since 1.1.0 * @category String * @param {string} string The string to convert. * @param {number} [radix=10] The radix to interpret `value` by. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {number} Returns the converted integer. * @example * * _.parseInt('08'); * // => 8 * * _.map(['6', '08', '10'], _.parseInt); * // => [6, 8, 10] */ function parseInt(string, radix, guard) { if (guard || radix == null) { radix = 0; } else if (radix) { radix = +radix; } return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); } /** * Repeats the given string `n` times. * * @static * @memberOf _ * @since 3.0.0 * @category String * @param {string} [string=''] The string to repeat. * @param {number} [n=1] The number of times to repeat the string. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {string} Returns the repeated string. * @example * * _.repeat('*', 3); * // => '***' * * _.repeat('abc', 2); * // => 'abcabc' * * _.repeat('abc', 0); * // => '' */ function repeat(string, n, guard) { if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { n = 1; } else { n = toInteger(n); } return baseRepeat(toString(string), n); } /** * Replaces matches for `pattern` in `string` with `replacement`. * * **Note:** This method is based on * [`String#replace`](https://mdn.io/String/replace). * * @static * @memberOf _ * @since 4.0.0 * @category String * @param {string} [string=''] The string to modify. * @param {RegExp|string} pattern The pattern to replace. * @param {Function|string} replacement The match replacement. * @returns {string} Returns the modified string. * @example * * _.replace('Hi Fred', 'Fred', 'Barney'); * // => 'Hi Barney' */ function replace() { var args = arguments, string = toString(args[0]); return args.length < 3 ? string : string.replace(args[1], args[2]); } /** * Converts `string` to * [snake case](https://en.wikipedia.org/wiki/Snake_case). * * @static * @memberOf _ * @since 3.0.0 * @category String * @param {string} [string=''] The string to convert. * @returns {string} Returns the snake cased string. * @example * * _.snakeCase('Foo Bar'); * // => 'foo_bar' * * _.snakeCase('fooBar'); * // => 'foo_bar' * * _.snakeCase('--FOO-BAR--'); * // => 'foo_bar' */ var snakeCase = createCompounder(function(result, word, index) { return result + (index ? '_' : '') + word.toLowerCase(); }); /** * Splits `string` by `separator`. * * **Note:** This method is based on * [`String#split`](https://mdn.io/String/split). * * @static * @memberOf _ * @since 4.0.0 * @category String * @param {string} [string=''] The string to split. * @param {RegExp|string} separator The separator pattern to split by. * @param {number} [limit] The length to truncate results to. * @returns {Array} Returns the string segments. * @example * * _.split('a-b-c', '-', 2); * // => ['a', 'b'] */ function split(string, separator, limit) { if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { separator = limit = undefined; } limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; if (!limit) { return []; } string = toString(string); if (string && ( typeof separator == 'string' || (separator != null && !isRegExp(separator)) )) { separator = baseToString(separator); if (!separator && hasUnicode(string)) { return castSlice(stringToArray(string), 0, limit); } } return string.split(separator, limit); } /** * Converts `string` to * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). * * @static * @memberOf _ * @since 3.1.0 * @category String * @param {string} [string=''] The string to convert. * @returns {string} Returns the start cased string. * @example * * _.startCase('--foo-bar--'); * // => 'Foo Bar' * * _.startCase('fooBar'); * // => 'Foo Bar' * * _.startCase('__FOO_BAR__'); * // => 'FOO BAR' */ var startCase = createCompounder(function(result, word, index) { return result + (index ? ' ' : '') + upperFirst(word); }); /** * Checks if `string` starts with the given target string. * * @static * @memberOf _ * @since 3.0.0 * @category String * @param {string} [string=''] The string to inspect. * @param {string} [target] The string to search for. * @param {number} [position=0] The position to search from. * @returns {boolean} Returns `true` if `string` starts with `target`, * else `false`. * @example * * _.startsWith('abc', 'a'); * // => true * * _.startsWith('abc', 'b'); * // => false * * _.startsWith('abc', 'b', 1); * // => true */ function startsWith(string, target, position) { string = toString(string); position = position == null ? 0 : baseClamp(toInteger(position), 0, string.length); target = baseToString(target); return string.slice(position, position + target.length) == target; } /** * Creates a compiled template function that can interpolate data properties * in "interpolate" delimiters, HTML-escape interpolated data properties in * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data * properties may be accessed as free variables in the template. If a setting * object is given, it takes precedence over `_.templateSettings` values. * * **Note:** In the development build `_.template` utilizes * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) * for easier debugging. * * For more information on precompiling templates see * [lodash's custom builds documentation](https://lodash.com/custom-builds). * * For more information on Chrome extension sandboxes see * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). * * @static * @since 0.1.0 * @memberOf _ * @category String * @param {string} [string=''] The template string. * @param {Object} [options={}] The options object. * @param {RegExp} [options.escape=_.templateSettings.escape] * The HTML "escape" delimiter. * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] * The "evaluate" delimiter. * @param {Object} [options.imports=_.templateSettings.imports] * An object to import into the template as free variables. * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] * The "interpolate" delimiter. * @param {string} [options.sourceURL='lodash.templateSources[n]'] * The sourceURL of the compiled template. * @param {string} [options.variable='obj'] * The data object variable name. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {Function} Returns the compiled template function. * @example * * // Use the "interpolate" delimiter to create a compiled template. * var compiled = _.template('hello <%= user %>!'); * compiled({ 'user': 'fred' }); * // => 'hello fred!' * * // Use the HTML "escape" delimiter to escape data property values. * var compiled = _.template('<%- value %>'); * compiled({ 'value': ' * ``` * * Elements by their ID are made available by browsers on the `window` object, * which is a security risk. * Using a prefix solves this problem. * * More information on how to handle clobbering and the prefix is explained in * Example: headings (DOM clobbering) in `rehype-sanitize`. * * ###### Unknown nodes * * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`. * The default behavior for unknown nodes is: * * * when the node has a `value` (and doesn’t have `data.hName`, * `data.hProperties`, or `data.hChildren`, see later), create a hast `text` * node * * otherwise, create a `
` element (which could be changed with * `data.hName`), with its children mapped from mdast to hast as well * * This behavior can be changed by passing an `unknownHandler`. * * @param {MdastNodes} tree * mdast tree. * @param {Options | null | undefined} [options] * Configuration (optional). * @returns {HastNodes} * hast tree. */ function toHast(tree, options) { const state = (0,_state_js__WEBPACK_IMPORTED_MODULE_0__.createState)(tree, options) const node = state.one(tree, undefined) const foot = (0,_footer_js__WEBPACK_IMPORTED_MODULE_1__.footer)(state) /** @type {HastNodes} */ const result = Array.isArray(node) ? {type: 'root', children: node} : node || {type: 'root', children: []} if (foot) { // If there’s a footer, there were definitions, meaning block // content. // So `result` is a parent node. (0,devlop__WEBPACK_IMPORTED_MODULE_2__.ok)('children' in result) result.children.push({type: 'text', value: '\n'}, foot) } return result } /***/ }), /***/ "./node_modules/mdast-util-to-hast/lib/revert.js": /*!*******************************************************!*\ !*** ./node_modules/mdast-util-to-hast/lib/revert.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ revert: () => (/* binding */ revert) /* harmony export */ }); /** * @typedef {import('hast').ElementContent} ElementContent * * @typedef {import('mdast').Nodes} Nodes * @typedef {import('mdast').Reference} Reference * * @typedef {import('./state.js').State} State */ // Make VS Code show references to the above types. '' /** * Return the content of a reference without definition as plain text. * * @param {State} state * Info passed around. * @param {Extract} node * Reference node (image, link). * @returns {Array} * hast content. */ function revert(state, node) { const subtype = node.referenceType let suffix = ']' if (subtype === 'collapsed') { suffix += '[]' } else if (subtype === 'full') { suffix += '[' + (node.label || node.identifier) + ']' } if (node.type === 'imageReference') { return [{type: 'text', value: '![' + node.alt + suffix}] } const contents = state.all(node) const head = contents[0] if (head && head.type === 'text') { head.value = '[' + head.value } else { contents.unshift({type: 'text', value: '['}) } const tail = contents[contents.length - 1] if (tail && tail.type === 'text') { tail.value += suffix } else { contents.push({type: 'text', value: suffix}) } return contents } /***/ }), /***/ "./node_modules/mdast-util-to-hast/lib/state.js": /*!******************************************************!*\ !*** ./node_modules/mdast-util-to-hast/lib/state.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createState: () => (/* binding */ createState), /* harmony export */ wrap: () => (/* binding */ wrap) /* harmony export */ }); /* harmony import */ var _ungap_structured_clone__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ungap/structured-clone */ "./node_modules/@ungap/structured-clone/esm/index.js"); /* harmony import */ var unist_util_visit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! unist-util-visit */ "./node_modules/unist-util-visit/lib/index.js"); /* harmony import */ var unist_util_position__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! unist-util-position */ "./node_modules/unist-util-position/lib/index.js"); /* harmony import */ var _handlers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./handlers/index.js */ "./node_modules/mdast-util-to-hast/lib/handlers/index.js"); /** * @typedef {import('hast').Element} HastElement * @typedef {import('hast').ElementContent} HastElementContent * @typedef {import('hast').Nodes} HastNodes * @typedef {import('hast').Properties} HastProperties * @typedef {import('hast').RootContent} HastRootContent * @typedef {import('hast').Text} HastText * * @typedef {import('mdast').Definition} MdastDefinition * @typedef {import('mdast').FootnoteDefinition} MdastFootnoteDefinition * @typedef {import('mdast').Nodes} MdastNodes * @typedef {import('mdast').Parents} MdastParents * * @typedef {import('vfile').VFile} VFile * * @typedef {import('./footer.js').FootnoteBackContentTemplate} FootnoteBackContentTemplate * @typedef {import('./footer.js').FootnoteBackLabelTemplate} FootnoteBackLabelTemplate */ /** * @callback Handler * Handle a node. * @param {State} state * Info passed around. * @param {any} node * mdast node to handle. * @param {MdastParents | undefined} parent * Parent of `node`. * @returns {Array | HastElementContent | undefined} * hast node. * * @typedef {Partial>} Handlers * Handle nodes. * * @typedef Options * Configuration (optional). * @property {boolean | null | undefined} [allowDangerousHtml=false] * Whether to persist raw HTML in markdown in the hast tree (default: * `false`). * @property {string | null | undefined} [clobberPrefix='user-content-'] * Prefix to use before the `id` property on footnotes to prevent them from * *clobbering* (default: `'user-content-'`). * * Pass `''` for trusted markdown and when you are careful with * polyfilling. * You could pass a different prefix. * * DOM clobbering is this: * * ```html *

* * ``` * * The above example shows that elements are made available by browsers, by * their ID, on the `window` object. * This is a security risk because you might be expecting some other variable * at that place. * It can also break polyfills. * Using a prefix solves these problems. * @property {VFile | null | undefined} [file] * Corresponding virtual file representing the input document (optional). * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent] * Content of the backreference back to references (default: `defaultFootnoteBackContent`). * * The default value is: * * ```js * function defaultFootnoteBackContent(_, rereferenceIndex) { * const result = [{type: 'text', value: '↩'}] * * if (rereferenceIndex > 1) { * result.push({ * type: 'element', * tagName: 'sup', * properties: {}, * children: [{type: 'text', value: String(rereferenceIndex)}] * }) * } * * return result * } * ``` * * This content is used in the `a` element of each backreference (the `↩` * links). * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel] * Label to describe the backreference back to references (default: * `defaultFootnoteBackLabel`). * * The default value is: * * ```js * function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) { * return ( * 'Back to reference ' + * (referenceIndex + 1) + * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '') * ) * } * ``` * * Change it when the markdown is not in English. * * This label is used in the `ariaLabel` property on each backreference * (the `↩` links). * It affects users of assistive technology. * @property {string | null | undefined} [footnoteLabel='Footnotes'] * Textual label to use for the footnotes section (default: `'Footnotes'`). * * Change it when the markdown is not in English. * * This label is typically hidden visually (assuming a `sr-only` CSS class * is defined that does that) and so affects screen readers only. * If you do have such a class, but want to show this section to everyone, * pass different properties with the `footnoteLabelProperties` option. * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}] * Properties to use on the footnote label (default: `{className: * ['sr-only']}`). * * Change it to show the label and add other properties. * * This label is typically hidden visually (assuming an `sr-only` CSS class * is defined that does that) and so affects screen readers only. * If you do have such a class, but want to show this section to everyone, * pass an empty string. * You can also add different properties. * * > 👉 **Note**: `id: 'footnote-label'` is always added, because footnote * > calls use it with `aria-describedby` to provide an accessible label. * @property {string | null | undefined} [footnoteLabelTagName='h2'] * HTML tag name to use for the footnote label element (default: `'h2'`). * * Change it to match your document structure. * * This label is typically hidden visually (assuming a `sr-only` CSS class * is defined that does that) and so affects screen readers only. * If you do have such a class, but want to show this section to everyone, * pass different properties with the `footnoteLabelProperties` option. * @property {Handlers | null | undefined} [handlers] * Extra handlers for nodes (optional). * @property {Array | null | undefined} [passThrough] * List of custom mdast node types to pass through (keep) in hast (note that * the node itself is passed, but eventual children are transformed) * (optional). * @property {Handler | null | undefined} [unknownHandler] * Handler for all unknown nodes (optional). * * @typedef State * Info passed around. * @property {(node: MdastNodes) => Array} all * Transform the children of an mdast parent to hast. * @property {(from: MdastNodes, to: Type) => HastElement | Type} applyData * Honor the `data` of `from`, and generate an element instead of `node`. * @property {Map} definitionById * Definitions by their identifier. * @property {Map} footnoteById * Footnote definitions by their identifier. * @property {Map} footnoteCounts * Counts for how often the same footnote was called. * @property {Array} footnoteOrder * Identifiers of order when footnote calls first appear in tree order. * @property {Handlers} handlers * Applied handlers. * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array | HastElementContent | undefined} one * Transform an mdast node to hast. * @property {Options} options * Configuration. * @property {(from: MdastNodes, node: HastNodes) => undefined} patch * Copy a node’s positional info. * @property {(nodes: Array, loose?: boolean | undefined) => Array} wrap * Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`. */ const own = {}.hasOwnProperty /** @type {Options} */ const emptyOptions = {} /** * Create `state` from an mdast tree. * * @param {MdastNodes} tree * mdast node to transform. * @param {Options | null | undefined} [options] * Configuration (optional). * @returns {State} * `state` function. */ function createState(tree, options) { const settings = options || emptyOptions /** @type {Map} */ const definitionById = new Map() /** @type {Map} */ const footnoteById = new Map() /** @type {Map} */ const footnoteCounts = new Map() /** @type {Handlers} */ // @ts-expect-error: the root handler returns a root. // Hard to type. const handlers = {..._handlers_index_js__WEBPACK_IMPORTED_MODULE_1__.handlers, ...settings.handlers} /** @type {State} */ const state = { all, applyData, definitionById, footnoteById, footnoteCounts, footnoteOrder: [], handlers, one, options: settings, patch, wrap } ;(0,unist_util_visit__WEBPACK_IMPORTED_MODULE_2__.visit)(tree, function (node) { if (node.type === 'definition' || node.type === 'footnoteDefinition') { const map = node.type === 'definition' ? definitionById : footnoteById const id = String(node.identifier).toUpperCase() // Mimick CM behavior of link definitions. // See: . if (!map.has(id)) { // @ts-expect-error: node type matches map. map.set(id, node) } } }) return state /** * Transform an mdast node into a hast node. * * @param {MdastNodes} node * mdast node. * @param {MdastParents | undefined} [parent] * Parent of `node`. * @returns {Array | HastElementContent | undefined} * Resulting hast node. */ function one(node, parent) { const type = node.type const handle = state.handlers[type] if (own.call(state.handlers, type) && handle) { return handle(state, node, parent) } if (state.options.passThrough && state.options.passThrough.includes(type)) { if ('children' in node) { const {children, ...shallow} = node const result = (0,_ungap_structured_clone__WEBPACK_IMPORTED_MODULE_0__["default"])(shallow) // @ts-expect-error: TS doesn’t understand… result.children = state.all(node) // @ts-expect-error: TS doesn’t understand… return result } // @ts-expect-error: it’s custom. return (0,_ungap_structured_clone__WEBPACK_IMPORTED_MODULE_0__["default"])(node) } const unknown = state.options.unknownHandler || defaultUnknownHandler return unknown(state, node, parent) } /** * Transform the children of an mdast node into hast nodes. * * @param {MdastNodes} parent * mdast node to compile * @returns {Array} * Resulting hast nodes. */ function all(parent) { /** @type {Array} */ const values = [] if ('children' in parent) { const nodes = parent.children let index = -1 while (++index < nodes.length) { const result = state.one(nodes[index], parent) // To do: see if we van clean this? Can we merge texts? if (result) { if (index && nodes[index - 1].type === 'break') { if (!Array.isArray(result) && result.type === 'text') { result.value = trimMarkdownSpaceStart(result.value) } if (!Array.isArray(result) && result.type === 'element') { const head = result.children[0] if (head && head.type === 'text') { head.value = trimMarkdownSpaceStart(head.value) } } } if (Array.isArray(result)) { values.push(...result) } else { values.push(result) } } } } return values } } /** * Copy a node’s positional info. * * @param {MdastNodes} from * mdast node to copy from. * @param {HastNodes} to * hast node to copy into. * @returns {undefined} * Nothing. */ function patch(from, to) { if (from.position) to.position = (0,unist_util_position__WEBPACK_IMPORTED_MODULE_3__.position)(from) } /** * Honor the `data` of `from` and maybe generate an element instead of `to`. * * @template {HastNodes} Type * Node type. * @param {MdastNodes} from * mdast node to use data from. * @param {Type} to * hast node to change. * @returns {HastElement | Type} * Nothing. */ function applyData(from, to) { /** @type {HastElement | Type} */ let result = to // Handle `data.hName`, `data.hProperties, `data.hChildren`. if (from && from.data) { const hName = from.data.hName const hChildren = from.data.hChildren const hProperties = from.data.hProperties if (typeof hName === 'string') { // Transforming the node resulted in an element with a different name // than wanted: if (result.type === 'element') { result.tagName = hName } // Transforming the node resulted in a non-element, which happens for // raw, text, and root nodes (unless custom handlers are passed). // The intent of `hName` is to create an element, but likely also to keep // the content around (otherwise: pass `hChildren`). else { /** @type {Array} */ // @ts-expect-error: assume no doctypes in `root`. const children = 'children' in result ? result.children : [result] result = {type: 'element', tagName: hName, properties: {}, children} } } if (result.type === 'element' && hProperties) { Object.assign(result.properties, (0,_ungap_structured_clone__WEBPACK_IMPORTED_MODULE_0__["default"])(hProperties)) } if ( 'children' in result && result.children && hChildren !== null && hChildren !== undefined ) { result.children = hChildren } } return result } /** * Transform an unknown node. * * @param {State} state * Info passed around. * @param {MdastNodes} node * Unknown mdast node. * @returns {HastElement | HastText} * Resulting hast node. */ function defaultUnknownHandler(state, node) { const data = node.data || {} /** @type {HastElement | HastText} */ const result = 'value' in node && !(own.call(data, 'hProperties') || own.call(data, 'hChildren')) ? {type: 'text', value: node.value} : { type: 'element', tagName: 'div', properties: {}, children: state.all(node) } state.patch(node, result) return state.applyData(node, result) } /** * Wrap `nodes` with line endings between each node. * * @template {HastRootContent} Type * Node type. * @param {Array} nodes * List of nodes to wrap. * @param {boolean | undefined} [loose=false] * Whether to add line endings at start and end (default: `false`). * @returns {Array} * Wrapped nodes. */ function wrap(nodes, loose) { /** @type {Array} */ const result = [] let index = -1 if (loose) { result.push({type: 'text', value: '\n'}) } while (++index < nodes.length) { if (index) result.push({type: 'text', value: '\n'}) result.push(nodes[index]) } if (loose && nodes.length > 0) { result.push({type: 'text', value: '\n'}) } return result } /** * Trim spaces and tabs at the start of `value`. * * @param {string} value * Value to trim. * @returns {string} * Result. */ function trimMarkdownSpaceStart(value) { let index = 0 let code = value.charCodeAt(index) while (code === 9 || code === 32) { index++ code = value.charCodeAt(index) } return value.slice(index) } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/blockquote.js": /*!**********************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/blockquote.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ blockquote: () => (/* binding */ blockquote) /* harmony export */ }); /** * @typedef {import('mdast').Blockquote} Blockquote * @typedef {import('mdast').Parents} Parents * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').Map} Map * @typedef {import('../types.js').State} State */ /** * @param {Blockquote} node * @param {Parents | undefined} _ * @param {State} state * @param {Info} info * @returns {string} */ function blockquote(node, _, state, info) { const exit = state.enter('blockquote') const tracker = state.createTracker(info) tracker.move('> ') tracker.shift(2) const value = state.indentLines( state.containerFlow(node, tracker.current()), map ) exit() return value } /** @type {Map} */ function map(line, _, blank) { return '>' + (blank ? '' : ' ') + line } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/break.js": /*!*****************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/break.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ hardBreak: () => (/* binding */ hardBreak) /* harmony export */ }); /* harmony import */ var _util_pattern_in_scope_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/pattern-in-scope.js */ "./node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js"); /** * @typedef {import('mdast').Break} Break * @typedef {import('mdast').Parents} Parents * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').State} State */ /** * @param {Break} _ * @param {Parents | undefined} _1 * @param {State} state * @param {Info} info * @returns {string} */ function hardBreak(_, _1, state, info) { let index = -1 while (++index < state.unsafe.length) { // If we can’t put eols in this construct (setext headings, tables), use a // space instead. if ( state.unsafe[index].character === '\n' && (0,_util_pattern_in_scope_js__WEBPACK_IMPORTED_MODULE_0__.patternInScope)(state.stack, state.unsafe[index]) ) { return /[ \t]/.test(info.before) ? '' : ' ' } } return '\\\n' } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/code.js": /*!****************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/code.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ code: () => (/* binding */ code) /* harmony export */ }); /* harmony import */ var longest_streak__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! longest-streak */ "./node_modules/longest-streak/index.js"); /* harmony import */ var _util_format_code_as_indented_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/format-code-as-indented.js */ "./node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js"); /* harmony import */ var _util_check_fence_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/check-fence.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-fence.js"); /** * @typedef {import('mdast').Code} Code * @typedef {import('mdast').Parents} Parents * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').Map} Map * @typedef {import('../types.js').State} State */ /** * @param {Code} node * @param {Parents | undefined} _ * @param {State} state * @param {Info} info * @returns {string} */ function code(node, _, state, info) { const marker = (0,_util_check_fence_js__WEBPACK_IMPORTED_MODULE_0__.checkFence)(state) const raw = node.value || '' const suffix = marker === '`' ? 'GraveAccent' : 'Tilde' if ((0,_util_format_code_as_indented_js__WEBPACK_IMPORTED_MODULE_1__.formatCodeAsIndented)(node, state)) { const exit = state.enter('codeIndented') const value = state.indentLines(raw, map) exit() return value } const tracker = state.createTracker(info) const sequence = marker.repeat(Math.max((0,longest_streak__WEBPACK_IMPORTED_MODULE_2__.longestStreak)(raw, marker) + 1, 3)) const exit = state.enter('codeFenced') let value = tracker.move(sequence) if (node.lang) { const subexit = state.enter(`codeFencedLang${suffix}`) value += tracker.move( state.safe(node.lang, { before: value, after: ' ', encode: ['`'], ...tracker.current() }) ) subexit() } if (node.lang && node.meta) { const subexit = state.enter(`codeFencedMeta${suffix}`) value += tracker.move(' ') value += tracker.move( state.safe(node.meta, { before: value, after: '\n', encode: ['`'], ...tracker.current() }) ) subexit() } value += tracker.move('\n') if (raw) { value += tracker.move(raw + '\n') } value += tracker.move(sequence) exit() return value } /** @type {Map} */ function map(line, _, blank) { return (blank ? '' : ' ') + line } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/definition.js": /*!**********************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/definition.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ definition: () => (/* binding */ definition) /* harmony export */ }); /* harmony import */ var _util_check_quote_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/check-quote.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-quote.js"); /** * @typedef {import('mdast').Definition} Definition * @typedef {import('mdast').Parents} Parents * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').State} State */ /** * @param {Definition} node * @param {Parents | undefined} _ * @param {State} state * @param {Info} info * @returns {string} */ function definition(node, _, state, info) { const quote = (0,_util_check_quote_js__WEBPACK_IMPORTED_MODULE_0__.checkQuote)(state) const suffix = quote === '"' ? 'Quote' : 'Apostrophe' const exit = state.enter('definition') let subexit = state.enter('label') const tracker = state.createTracker(info) let value = tracker.move('[') value += tracker.move( state.safe(state.associationId(node), { before: value, after: ']', ...tracker.current() }) ) value += tracker.move(']: ') subexit() if ( // If there’s no url, or… !node.url || // If there are control characters or whitespace. /[\0- \u007F]/.test(node.url) ) { subexit = state.enter('destinationLiteral') value += tracker.move('<') value += tracker.move( state.safe(node.url, {before: value, after: '>', ...tracker.current()}) ) value += tracker.move('>') } else { // No whitespace, raw is prettier. subexit = state.enter('destinationRaw') value += tracker.move( state.safe(node.url, { before: value, after: node.title ? ' ' : '\n', ...tracker.current() }) ) } subexit() if (node.title) { subexit = state.enter(`title${suffix}`) value += tracker.move(' ' + quote) value += tracker.move( state.safe(node.title, { before: value, after: quote, ...tracker.current() }) ) value += tracker.move(quote) subexit() } exit() return value } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/emphasis.js": /*!********************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/emphasis.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ emphasis: () => (/* binding */ emphasis) /* harmony export */ }); /* harmony import */ var _util_check_emphasis_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/check-emphasis.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js"); /** * @typedef {import('mdast').Emphasis} Emphasis * @typedef {import('mdast').Parents} Parents * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').State} State */ emphasis.peek = emphasisPeek // To do: there are cases where emphasis cannot “form” depending on the // previous or next character of sequences. // There’s no way around that though, except for injecting zero-width stuff. // Do we need to safeguard against that? /** * @param {Emphasis} node * @param {Parents | undefined} _ * @param {State} state * @param {Info} info * @returns {string} */ function emphasis(node, _, state, info) { const marker = (0,_util_check_emphasis_js__WEBPACK_IMPORTED_MODULE_0__.checkEmphasis)(state) const exit = state.enter('emphasis') const tracker = state.createTracker(info) let value = tracker.move(marker) value += tracker.move( state.containerPhrasing(node, { before: value, after: marker, ...tracker.current() }) ) value += tracker.move(marker) exit() return value } /** * @param {Emphasis} _ * @param {Parents | undefined} _1 * @param {State} state * @returns {string} */ function emphasisPeek(_, _1, state) { return state.options.emphasis || '*' } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/heading.js": /*!*******************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/heading.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ heading: () => (/* binding */ heading) /* harmony export */ }); /* harmony import */ var _util_format_heading_as_setext_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/format-heading-as-setext.js */ "./node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js"); /** * @typedef {import('mdast').Heading} Heading * @typedef {import('mdast').Parents} Parents * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').State} State */ /** * @param {Heading} node * @param {Parents | undefined} _ * @param {State} state * @param {Info} info * @returns {string} */ function heading(node, _, state, info) { const rank = Math.max(Math.min(6, node.depth || 1), 1) const tracker = state.createTracker(info) if ((0,_util_format_heading_as_setext_js__WEBPACK_IMPORTED_MODULE_0__.formatHeadingAsSetext)(node, state)) { const exit = state.enter('headingSetext') const subexit = state.enter('phrasing') const value = state.containerPhrasing(node, { ...tracker.current(), before: '\n', after: '\n' }) subexit() exit() return ( value + '\n' + (rank === 1 ? '=' : '-').repeat( // The whole size… value.length - // Minus the position of the character after the last EOL (or // 0 if there is none)… (Math.max(value.lastIndexOf('\r'), value.lastIndexOf('\n')) + 1) ) ) } const sequence = '#'.repeat(rank) const exit = state.enter('headingAtx') const subexit = state.enter('phrasing') // Note: for proper tracking, we should reset the output positions when there // is no content returned, because then the space is not output. // Practically, in that case, there is no content, so it doesn’t matter that // we’ve tracked one too many characters. tracker.move(sequence + ' ') let value = state.containerPhrasing(node, { before: '# ', after: '\n', ...tracker.current() }) if (/^[\t ]/.test(value)) { // To do: what effect has the character reference on tracking? value = '&#x' + value.charCodeAt(0).toString(16).toUpperCase() + ';' + value.slice(1) } value = value ? sequence + ' ' + value : sequence if (state.options.closeAtx) { value += ' ' + sequence } subexit() exit() return value } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/html.js": /*!****************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/html.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ html: () => (/* binding */ html) /* harmony export */ }); /** * @typedef {import('mdast').Html} Html */ html.peek = htmlPeek /** * @param {Html} node * @returns {string} */ function html(node) { return node.value || '' } /** * @returns {string} */ function htmlPeek() { return '<' } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/image-reference.js": /*!***************************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/image-reference.js ***! \***************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ imageReference: () => (/* binding */ imageReference) /* harmony export */ }); /** * @typedef {import('mdast').ImageReference} ImageReference * @typedef {import('mdast').Parents} Parents * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').State} State */ imageReference.peek = imageReferencePeek /** * @param {ImageReference} node * @param {Parents | undefined} _ * @param {State} state * @param {Info} info * @returns {string} */ function imageReference(node, _, state, info) { const type = node.referenceType const exit = state.enter('imageReference') let subexit = state.enter('label') const tracker = state.createTracker(info) let value = tracker.move('![') const alt = state.safe(node.alt, { before: value, after: ']', ...tracker.current() }) value += tracker.move(alt + '][') subexit() // Hide the fact that we’re in phrasing, because escapes don’t work. const stack = state.stack state.stack = [] subexit = state.enter('reference') // Note: for proper tracking, we should reset the output positions when we end // up making a `shortcut` reference, because then there is no brace output. // Practically, in that case, there is no content, so it doesn’t matter that // we’ve tracked one too many characters. const reference = state.safe(state.associationId(node), { before: value, after: ']', ...tracker.current() }) subexit() state.stack = stack exit() if (type === 'full' || !alt || alt !== reference) { value += tracker.move(reference + ']') } else if (type === 'shortcut') { // Remove the unwanted `[`. value = value.slice(0, -1) } else { value += tracker.move(']') } return value } /** * @returns {string} */ function imageReferencePeek() { return '!' } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/image.js": /*!*****************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/image.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ image: () => (/* binding */ image) /* harmony export */ }); /* harmony import */ var _util_check_quote_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/check-quote.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-quote.js"); /** * @typedef {import('mdast').Image} Image * @typedef {import('mdast').Parents} Parents * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').State} State */ image.peek = imagePeek /** * @param {Image} node * @param {Parents | undefined} _ * @param {State} state * @param {Info} info * @returns {string} */ function image(node, _, state, info) { const quote = (0,_util_check_quote_js__WEBPACK_IMPORTED_MODULE_0__.checkQuote)(state) const suffix = quote === '"' ? 'Quote' : 'Apostrophe' const exit = state.enter('image') let subexit = state.enter('label') const tracker = state.createTracker(info) let value = tracker.move('![') value += tracker.move( state.safe(node.alt, {before: value, after: ']', ...tracker.current()}) ) value += tracker.move('](') subexit() if ( // If there’s no url but there is a title… (!node.url && node.title) || // If there are control characters or whitespace. /[\0- \u007F]/.test(node.url) ) { subexit = state.enter('destinationLiteral') value += tracker.move('<') value += tracker.move( state.safe(node.url, {before: value, after: '>', ...tracker.current()}) ) value += tracker.move('>') } else { // No whitespace, raw is prettier. subexit = state.enter('destinationRaw') value += tracker.move( state.safe(node.url, { before: value, after: node.title ? ' ' : ')', ...tracker.current() }) ) } subexit() if (node.title) { subexit = state.enter(`title${suffix}`) value += tracker.move(' ' + quote) value += tracker.move( state.safe(node.title, { before: value, after: quote, ...tracker.current() }) ) value += tracker.move(quote) subexit() } value += tracker.move(')') exit() return value } /** * @returns {string} */ function imagePeek() { return '!' } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/index.js": /*!*****************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/index.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ handle: () => (/* binding */ handle) /* harmony export */ }); /* harmony import */ var _blockquote_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./blockquote.js */ "./node_modules/mdast-util-to-markdown/lib/handle/blockquote.js"); /* harmony import */ var _break_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./break.js */ "./node_modules/mdast-util-to-markdown/lib/handle/break.js"); /* harmony import */ var _code_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./code.js */ "./node_modules/mdast-util-to-markdown/lib/handle/code.js"); /* harmony import */ var _definition_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./definition.js */ "./node_modules/mdast-util-to-markdown/lib/handle/definition.js"); /* harmony import */ var _emphasis_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./emphasis.js */ "./node_modules/mdast-util-to-markdown/lib/handle/emphasis.js"); /* harmony import */ var _heading_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./heading.js */ "./node_modules/mdast-util-to-markdown/lib/handle/heading.js"); /* harmony import */ var _html_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./html.js */ "./node_modules/mdast-util-to-markdown/lib/handle/html.js"); /* harmony import */ var _image_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./image.js */ "./node_modules/mdast-util-to-markdown/lib/handle/image.js"); /* harmony import */ var _image_reference_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./image-reference.js */ "./node_modules/mdast-util-to-markdown/lib/handle/image-reference.js"); /* harmony import */ var _inline_code_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./inline-code.js */ "./node_modules/mdast-util-to-markdown/lib/handle/inline-code.js"); /* harmony import */ var _link_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./link.js */ "./node_modules/mdast-util-to-markdown/lib/handle/link.js"); /* harmony import */ var _link_reference_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./link-reference.js */ "./node_modules/mdast-util-to-markdown/lib/handle/link-reference.js"); /* harmony import */ var _list_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./list.js */ "./node_modules/mdast-util-to-markdown/lib/handle/list.js"); /* harmony import */ var _list_item_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./list-item.js */ "./node_modules/mdast-util-to-markdown/lib/handle/list-item.js"); /* harmony import */ var _paragraph_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./paragraph.js */ "./node_modules/mdast-util-to-markdown/lib/handle/paragraph.js"); /* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./root.js */ "./node_modules/mdast-util-to-markdown/lib/handle/root.js"); /* harmony import */ var _strong_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./strong.js */ "./node_modules/mdast-util-to-markdown/lib/handle/strong.js"); /* harmony import */ var _text_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./text.js */ "./node_modules/mdast-util-to-markdown/lib/handle/text.js"); /* harmony import */ var _thematic_break_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./thematic-break.js */ "./node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js"); /** * Default (CommonMark) handlers. */ const handle = { blockquote: _blockquote_js__WEBPACK_IMPORTED_MODULE_0__.blockquote, break: _break_js__WEBPACK_IMPORTED_MODULE_1__.hardBreak, code: _code_js__WEBPACK_IMPORTED_MODULE_2__.code, definition: _definition_js__WEBPACK_IMPORTED_MODULE_3__.definition, emphasis: _emphasis_js__WEBPACK_IMPORTED_MODULE_4__.emphasis, hardBreak: _break_js__WEBPACK_IMPORTED_MODULE_1__.hardBreak, heading: _heading_js__WEBPACK_IMPORTED_MODULE_5__.heading, html: _html_js__WEBPACK_IMPORTED_MODULE_6__.html, image: _image_js__WEBPACK_IMPORTED_MODULE_7__.image, imageReference: _image_reference_js__WEBPACK_IMPORTED_MODULE_8__.imageReference, inlineCode: _inline_code_js__WEBPACK_IMPORTED_MODULE_9__.inlineCode, link: _link_js__WEBPACK_IMPORTED_MODULE_10__.link, linkReference: _link_reference_js__WEBPACK_IMPORTED_MODULE_11__.linkReference, list: _list_js__WEBPACK_IMPORTED_MODULE_12__.list, listItem: _list_item_js__WEBPACK_IMPORTED_MODULE_13__.listItem, paragraph: _paragraph_js__WEBPACK_IMPORTED_MODULE_14__.paragraph, root: _root_js__WEBPACK_IMPORTED_MODULE_15__.root, strong: _strong_js__WEBPACK_IMPORTED_MODULE_16__.strong, text: _text_js__WEBPACK_IMPORTED_MODULE_17__.text, thematicBreak: _thematic_break_js__WEBPACK_IMPORTED_MODULE_18__.thematicBreak } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/inline-code.js": /*!***********************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/inline-code.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ inlineCode: () => (/* binding */ inlineCode) /* harmony export */ }); /** * @typedef {import('mdast').InlineCode} InlineCode * @typedef {import('mdast').Parents} Parents * @typedef {import('../types.js').State} State */ inlineCode.peek = inlineCodePeek /** * @param {InlineCode} node * @param {Parents | undefined} _ * @param {State} state * @returns {string} */ function inlineCode(node, _, state) { let value = node.value || '' let sequence = '`' let index = -1 // If there is a single grave accent on its own in the code, use a fence of // two. // If there are two in a row, use one. while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) { sequence += '`' } // If this is not just spaces or eols (tabs don’t count), and either the // first or last character are a space, eol, or tick, then pad with spaces. if ( /[^ \r\n]/.test(value) && ((/^[ \r\n]/.test(value) && /[ \r\n]$/.test(value)) || /^`|`$/.test(value)) ) { value = ' ' + value + ' ' } // We have a potential problem: certain characters after eols could result in // blocks being seen. // For example, if someone injected the string `'\n# b'`, then that would // result in an ATX heading. // We can’t escape characters in `inlineCode`, but because eols are // transformed to spaces when going from markdown to HTML anyway, we can swap // them out. while (++index < state.unsafe.length) { const pattern = state.unsafe[index] const expression = state.compilePattern(pattern) /** @type {RegExpExecArray | null} */ let match // Only look for `atBreak`s. // Btw: note that `atBreak` patterns will always start the regex at LF or // CR. if (!pattern.atBreak) continue while ((match = expression.exec(value))) { let position = match.index // Support CRLF (patterns only look for one of the characters). if ( value.charCodeAt(position) === 10 /* `\n` */ && value.charCodeAt(position - 1) === 13 /* `\r` */ ) { position-- } value = value.slice(0, position) + ' ' + value.slice(match.index + 1) } } return sequence + value + sequence } /** * @returns {string} */ function inlineCodePeek() { return '`' } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/link-reference.js": /*!**************************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/link-reference.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ linkReference: () => (/* binding */ linkReference) /* harmony export */ }); /** * @typedef {import('mdast').LinkReference} LinkReference * @typedef {import('mdast').Parents} Parents * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').State} State */ linkReference.peek = linkReferencePeek /** * @param {LinkReference} node * @param {Parents | undefined} _ * @param {State} state * @param {Info} info * @returns {string} */ function linkReference(node, _, state, info) { const type = node.referenceType const exit = state.enter('linkReference') let subexit = state.enter('label') const tracker = state.createTracker(info) let value = tracker.move('[') const text = state.containerPhrasing(node, { before: value, after: ']', ...tracker.current() }) value += tracker.move(text + '][') subexit() // Hide the fact that we’re in phrasing, because escapes don’t work. const stack = state.stack state.stack = [] subexit = state.enter('reference') // Note: for proper tracking, we should reset the output positions when we end // up making a `shortcut` reference, because then there is no brace output. // Practically, in that case, there is no content, so it doesn’t matter that // we’ve tracked one too many characters. const reference = state.safe(state.associationId(node), { before: value, after: ']', ...tracker.current() }) subexit() state.stack = stack exit() if (type === 'full' || !text || text !== reference) { value += tracker.move(reference + ']') } else if (type === 'shortcut') { // Remove the unwanted `[`. value = value.slice(0, -1) } else { value += tracker.move(']') } return value } /** * @returns {string} */ function linkReferencePeek() { return '[' } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/link.js": /*!****************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/link.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ link: () => (/* binding */ link) /* harmony export */ }); /* harmony import */ var _util_check_quote_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/check-quote.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-quote.js"); /* harmony import */ var _util_format_link_as_autolink_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/format-link-as-autolink.js */ "./node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js"); /** * @typedef {import('mdast').Link} Link * @typedef {import('mdast').Parents} Parents * @typedef {import('../types.js').Exit} Exit * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').State} State */ link.peek = linkPeek /** * @param {Link} node * @param {Parents | undefined} _ * @param {State} state * @param {Info} info * @returns {string} */ function link(node, _, state, info) { const quote = (0,_util_check_quote_js__WEBPACK_IMPORTED_MODULE_0__.checkQuote)(state) const suffix = quote === '"' ? 'Quote' : 'Apostrophe' const tracker = state.createTracker(info) /** @type {Exit} */ let exit /** @type {Exit} */ let subexit if ((0,_util_format_link_as_autolink_js__WEBPACK_IMPORTED_MODULE_1__.formatLinkAsAutolink)(node, state)) { // Hide the fact that we’re in phrasing, because escapes don’t work. const stack = state.stack state.stack = [] exit = state.enter('autolink') let value = tracker.move('<') value += tracker.move( state.containerPhrasing(node, { before: value, after: '>', ...tracker.current() }) ) value += tracker.move('>') exit() state.stack = stack return value } exit = state.enter('link') subexit = state.enter('label') let value = tracker.move('[') value += tracker.move( state.containerPhrasing(node, { before: value, after: '](', ...tracker.current() }) ) value += tracker.move('](') subexit() if ( // If there’s no url but there is a title… (!node.url && node.title) || // If there are control characters or whitespace. /[\0- \u007F]/.test(node.url) ) { subexit = state.enter('destinationLiteral') value += tracker.move('<') value += tracker.move( state.safe(node.url, {before: value, after: '>', ...tracker.current()}) ) value += tracker.move('>') } else { // No whitespace, raw is prettier. subexit = state.enter('destinationRaw') value += tracker.move( state.safe(node.url, { before: value, after: node.title ? ' ' : ')', ...tracker.current() }) ) } subexit() if (node.title) { subexit = state.enter(`title${suffix}`) value += tracker.move(' ' + quote) value += tracker.move( state.safe(node.title, { before: value, after: quote, ...tracker.current() }) ) value += tracker.move(quote) subexit() } value += tracker.move(')') exit() return value } /** * @param {Link} node * @param {Parents | undefined} _ * @param {State} state * @returns {string} */ function linkPeek(node, _, state) { return (0,_util_format_link_as_autolink_js__WEBPACK_IMPORTED_MODULE_1__.formatLinkAsAutolink)(node, state) ? '<' : '[' } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/list-item.js": /*!*********************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/list-item.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ listItem: () => (/* binding */ listItem) /* harmony export */ }); /* harmony import */ var _util_check_bullet_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/check-bullet.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-bullet.js"); /* harmony import */ var _util_check_list_item_indent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/check-list-item-indent.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js"); /** * @typedef {import('mdast').ListItem} ListItem * @typedef {import('mdast').Parents} Parents * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').Map} Map * @typedef {import('../types.js').State} State */ /** * @param {ListItem} node * @param {Parents | undefined} parent * @param {State} state * @param {Info} info * @returns {string} */ function listItem(node, parent, state, info) { const listItemIndent = (0,_util_check_list_item_indent_js__WEBPACK_IMPORTED_MODULE_0__.checkListItemIndent)(state) let bullet = state.bulletCurrent || (0,_util_check_bullet_js__WEBPACK_IMPORTED_MODULE_1__.checkBullet)(state) // Add the marker value for ordered lists. if (parent && parent.type === 'list' && parent.ordered) { bullet = (typeof parent.start === 'number' && parent.start > -1 ? parent.start : 1) + (state.options.incrementListMarker === false ? 0 : parent.children.indexOf(node)) + bullet } let size = bullet.length + 1 if ( listItemIndent === 'tab' || (listItemIndent === 'mixed' && ((parent && parent.type === 'list' && parent.spread) || node.spread)) ) { size = Math.ceil(size / 4) * 4 } const tracker = state.createTracker(info) tracker.move(bullet + ' '.repeat(size - bullet.length)) tracker.shift(size) const exit = state.enter('listItem') const value = state.indentLines( state.containerFlow(node, tracker.current()), map ) exit() return value /** @type {Map} */ function map(line, index, blank) { if (index) { return (blank ? '' : ' '.repeat(size)) + line } return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line } } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/list.js": /*!****************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/list.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ list: () => (/* binding */ list) /* harmony export */ }); /* harmony import */ var _util_check_bullet_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/check-bullet.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-bullet.js"); /* harmony import */ var _util_check_bullet_other_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/check-bullet-other.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js"); /* harmony import */ var _util_check_bullet_ordered_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/check-bullet-ordered.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js"); /* harmony import */ var _util_check_rule_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/check-rule.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-rule.js"); /** * @typedef {import('mdast').List} List * @typedef {import('mdast').Parents} Parents * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').State} State */ /** * @param {List} node * @param {Parents | undefined} parent * @param {State} state * @param {Info} info * @returns {string} */ function list(node, parent, state, info) { const exit = state.enter('list') const bulletCurrent = state.bulletCurrent /** @type {string} */ let bullet = node.ordered ? (0,_util_check_bullet_ordered_js__WEBPACK_IMPORTED_MODULE_0__.checkBulletOrdered)(state) : (0,_util_check_bullet_js__WEBPACK_IMPORTED_MODULE_1__.checkBullet)(state) /** @type {string} */ const bulletOther = node.ordered ? bullet === '.' ? ')' : '.' : (0,_util_check_bullet_other_js__WEBPACK_IMPORTED_MODULE_2__.checkBulletOther)(state) let useDifferentMarker = parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false if (!node.ordered) { const firstListItem = node.children ? node.children[0] : undefined // If there’s an empty first list item directly in two list items, // we have to use a different bullet: // // ```markdown // * - * // ``` // // …because otherwise it would become one big thematic break. if ( // Bullet could be used as a thematic break marker: (bullet === '*' || bullet === '-') && // Empty first list item: firstListItem && (!firstListItem.children || !firstListItem.children[0]) && // Directly in two other list items: state.stack[state.stack.length - 1] === 'list' && state.stack[state.stack.length - 2] === 'listItem' && state.stack[state.stack.length - 3] === 'list' && state.stack[state.stack.length - 4] === 'listItem' && // That are each the first child. state.indexStack[state.indexStack.length - 1] === 0 && state.indexStack[state.indexStack.length - 2] === 0 && state.indexStack[state.indexStack.length - 3] === 0 ) { useDifferentMarker = true } // If there’s a thematic break at the start of the first list item, // we have to use a different bullet: // // ```markdown // * --- // ``` // // …because otherwise it would become one big thematic break. if ((0,_util_check_rule_js__WEBPACK_IMPORTED_MODULE_3__.checkRule)(state) === bullet && firstListItem) { let index = -1 while (++index < node.children.length) { const item = node.children[index] if ( item && item.type === 'listItem' && item.children && item.children[0] && item.children[0].type === 'thematicBreak' ) { useDifferentMarker = true break } } } } if (useDifferentMarker) { bullet = bulletOther } state.bulletCurrent = bullet const value = state.containerFlow(node, info) state.bulletLastUsed = bullet state.bulletCurrent = bulletCurrent exit() return value } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/paragraph.js": /*!*********************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/paragraph.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ paragraph: () => (/* binding */ paragraph) /* harmony export */ }); /** * @typedef {import('mdast').Paragraph} Paragraph * @typedef {import('mdast').Parents} Parents * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').State} State */ /** * @param {Paragraph} node * @param {Parents | undefined} _ * @param {State} state * @param {Info} info * @returns {string} */ function paragraph(node, _, state, info) { const exit = state.enter('paragraph') const subexit = state.enter('phrasing') const value = state.containerPhrasing(node, info) subexit() exit() return value } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/root.js": /*!****************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/root.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ root: () => (/* binding */ root) /* harmony export */ }); /* harmony import */ var mdast_util_phrasing__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mdast-util-phrasing */ "./node_modules/mdast-util-phrasing/lib/index.js"); /** * @typedef {import('mdast').Parents} Parents * @typedef {import('mdast').Root} Root * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').State} State */ /** * @param {Root} node * @param {Parents | undefined} _ * @param {State} state * @param {Info} info * @returns {string} */ function root(node, _, state, info) { // Note: `html` nodes are ambiguous. const hasPhrasing = node.children.some(function (d) { return (0,mdast_util_phrasing__WEBPACK_IMPORTED_MODULE_0__.phrasing)(d) }) const fn = hasPhrasing ? state.containerPhrasing : state.containerFlow return fn.call(state, node, info) } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/strong.js": /*!******************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/strong.js ***! \******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ strong: () => (/* binding */ strong) /* harmony export */ }); /* harmony import */ var _util_check_strong_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/check-strong.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-strong.js"); /** * @typedef {import('mdast').Parents} Parents * @typedef {import('mdast').Strong} Strong * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').State} State */ strong.peek = strongPeek // To do: there are cases where emphasis cannot “form” depending on the // previous or next character of sequences. // There’s no way around that though, except for injecting zero-width stuff. // Do we need to safeguard against that? /** * @param {Strong} node * @param {Parents | undefined} _ * @param {State} state * @param {Info} info * @returns {string} */ function strong(node, _, state, info) { const marker = (0,_util_check_strong_js__WEBPACK_IMPORTED_MODULE_0__.checkStrong)(state) const exit = state.enter('strong') const tracker = state.createTracker(info) let value = tracker.move(marker + marker) value += tracker.move( state.containerPhrasing(node, { before: value, after: marker, ...tracker.current() }) ) value += tracker.move(marker + marker) exit() return value } /** * @param {Strong} _ * @param {Parents | undefined} _1 * @param {State} state * @returns {string} */ function strongPeek(_, _1, state) { return state.options.strong || '*' } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/text.js": /*!****************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/text.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ text: () => (/* binding */ text) /* harmony export */ }); /** * @typedef {import('mdast').Parents} Parents * @typedef {import('mdast').Text} Text * @typedef {import('../types.js').Info} Info * @typedef {import('../types.js').State} State */ /** * @param {Text} node * @param {Parents | undefined} _ * @param {State} state * @param {Info} info * @returns {string} */ function text(node, _, state, info) { return state.safe(node.value, info) } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js": /*!**************************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ thematicBreak: () => (/* binding */ thematicBreak) /* harmony export */ }); /* harmony import */ var _util_check_rule_repetition_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/check-rule-repetition.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js"); /* harmony import */ var _util_check_rule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/check-rule.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-rule.js"); /** * @typedef {import('mdast').Parents} Parents * @typedef {import('mdast').ThematicBreak} ThematicBreak * @typedef {import('../types.js').State} State */ /** * @param {ThematicBreak} _ * @param {Parents | undefined} _1 * @param {State} state * @returns {string} */ function thematicBreak(_, _1, state) { const value = ( (0,_util_check_rule_js__WEBPACK_IMPORTED_MODULE_0__.checkRule)(state) + (state.options.ruleSpaces ? ' ' : '') ).repeat((0,_util_check_rule_repetition_js__WEBPACK_IMPORTED_MODULE_1__.checkRuleRepetition)(state)) return state.options.ruleSpaces ? value.slice(0, -1) : value } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js": /*!******************************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ checkBulletOrdered: () => (/* binding */ checkBulletOrdered) /* harmony export */ }); /** * @typedef {import('../types.js').Options} Options * @typedef {import('../types.js').State} State */ /** * @param {State} state * @returns {Exclude} */ function checkBulletOrdered(state) { const marker = state.options.bulletOrdered || '.' if (marker !== '.' && marker !== ')') { throw new Error( 'Cannot serialize items with `' + marker + '` for `options.bulletOrdered`, expected `.` or `)`' ) } return marker } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js": /*!****************************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ checkBulletOther: () => (/* binding */ checkBulletOther) /* harmony export */ }); /* harmony import */ var _check_bullet_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./check-bullet.js */ "./node_modules/mdast-util-to-markdown/lib/util/check-bullet.js"); /** * @typedef {import('../types.js').Options} Options * @typedef {import('../types.js').State} State */ /** * @param {State} state * @returns {Exclude} */ function checkBulletOther(state) { const bullet = (0,_check_bullet_js__WEBPACK_IMPORTED_MODULE_0__.checkBullet)(state) const bulletOther = state.options.bulletOther if (!bulletOther) { return bullet === '*' ? '-' : '*' } if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') { throw new Error( 'Cannot serialize items with `' + bulletOther + '` for `options.bulletOther`, expected `*`, `+`, or `-`' ) } if (bulletOther === bullet) { throw new Error( 'Expected `bullet` (`' + bullet + '`) and `bulletOther` (`' + bulletOther + '`) to be different' ) } return bulletOther } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/util/check-bullet.js": /*!**********************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/util/check-bullet.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ checkBullet: () => (/* binding */ checkBullet) /* harmony export */ }); /** * @typedef {import('../types.js').Options} Options * @typedef {import('../types.js').State} State */ /** * @param {State} state * @returns {Exclude} */ function checkBullet(state) { const marker = state.options.bullet || '*' if (marker !== '*' && marker !== '+' && marker !== '-') { throw new Error( 'Cannot serialize items with `' + marker + '` for `options.bullet`, expected `*`, `+`, or `-`' ) } return marker } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js": /*!************************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ checkEmphasis: () => (/* binding */ checkEmphasis) /* harmony export */ }); /** * @typedef {import('../types.js').Options} Options * @typedef {import('../types.js').State} State */ /** * @param {State} state * @returns {Exclude} */ function checkEmphasis(state) { const marker = state.options.emphasis || '*' if (marker !== '*' && marker !== '_') { throw new Error( 'Cannot serialize emphasis with `' + marker + '` for `options.emphasis`, expected `*`, or `_`' ) } return marker } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/util/check-fence.js": /*!*********************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/util/check-fence.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ checkFence: () => (/* binding */ checkFence) /* harmony export */ }); /** * @typedef {import('../types.js').Options} Options * @typedef {import('../types.js').State} State */ /** * @param {State} state * @returns {Exclude} */ function checkFence(state) { const marker = state.options.fence || '`' if (marker !== '`' && marker !== '~') { throw new Error( 'Cannot serialize code with `' + marker + '` for `options.fence`, expected `` ` `` or `~`' ) } return marker } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js": /*!********************************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js ***! \********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ checkListItemIndent: () => (/* binding */ checkListItemIndent) /* harmony export */ }); /** * @typedef {import('../types.js').Options} Options * @typedef {import('../types.js').State} State */ /** * @param {State} state * @returns {Exclude} */ function checkListItemIndent(state) { const style = state.options.listItemIndent || 'one' if (style !== 'tab' && style !== 'one' && style !== 'mixed') { throw new Error( 'Cannot serialize items with `' + style + '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`' ) } return style } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/util/check-quote.js": /*!*********************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/util/check-quote.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ checkQuote: () => (/* binding */ checkQuote) /* harmony export */ }); /** * @typedef {import('../types.js').Options} Options * @typedef {import('../types.js').State} State */ /** * @param {State} state * @returns {Exclude} */ function checkQuote(state) { const marker = state.options.quote || '"' if (marker !== '"' && marker !== "'") { throw new Error( 'Cannot serialize title with `' + marker + '` for `options.quote`, expected `"`, or `\'`' ) } return marker } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js": /*!*******************************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js ***! \*******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ checkRuleRepetition: () => (/* binding */ checkRuleRepetition) /* harmony export */ }); /** * @typedef {import('../types.js').Options} Options * @typedef {import('../types.js').State} State */ /** * @param {State} state * @returns {Exclude} */ function checkRuleRepetition(state) { const repetition = state.options.ruleRepetition || 3 if (repetition < 3) { throw new Error( 'Cannot serialize rules with repetition `' + repetition + '` for `options.ruleRepetition`, expected `3` or more' ) } return repetition } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/util/check-rule.js": /*!********************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/util/check-rule.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ checkRule: () => (/* binding */ checkRule) /* harmony export */ }); /** * @typedef {import('../types.js').Options} Options * @typedef {import('../types.js').State} State */ /** * @param {State} state * @returns {Exclude} */ function checkRule(state) { const marker = state.options.rule || '*' if (marker !== '*' && marker !== '-' && marker !== '_') { throw new Error( 'Cannot serialize rules with `' + marker + '` for `options.rule`, expected `*`, `-`, or `_`' ) } return marker } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/util/check-strong.js": /*!**********************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/util/check-strong.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ checkStrong: () => (/* binding */ checkStrong) /* harmony export */ }); /** * @typedef {import('../types.js').Options} Options * @typedef {import('../types.js').State} State */ /** * @param {State} state * @returns {Exclude} */ function checkStrong(state) { const marker = state.options.strong || '*' if (marker !== '*' && marker !== '_') { throw new Error( 'Cannot serialize strong with `' + marker + '` for `options.strong`, expected `*`, or `_`' ) } return marker } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js": /*!*********************************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js ***! \*********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ formatCodeAsIndented: () => (/* binding */ formatCodeAsIndented) /* harmony export */ }); /** * @typedef {import('mdast').Code} Code * @typedef {import('../types.js').State} State */ /** * @param {Code} node * @param {State} state * @returns {boolean} */ function formatCodeAsIndented(node, state) { return Boolean( state.options.fences === false && node.value && // If there’s no info… !node.lang && // And there’s a non-whitespace character… /[^ \r\n]/.test(node.value) && // And the value doesn’t start or end in a blank… !/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(node.value) ) } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js": /*!**********************************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js ***! \**********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ formatHeadingAsSetext: () => (/* binding */ formatHeadingAsSetext) /* harmony export */ }); /* harmony import */ var unist_util_visit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! unist-util-visit */ "./node_modules/unist-util-visit/lib/index.js"); /* harmony import */ var unist_util_visit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! unist-util-visit */ "./node_modules/unist-util-visit-parents/lib/index.js"); /* harmony import */ var mdast_util_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! mdast-util-to-string */ "./node_modules/mdast-util-to-string/lib/index.js"); /** * @typedef {import('mdast').Heading} Heading * @typedef {import('../types.js').State} State */ /** * @param {Heading} node * @param {State} state * @returns {boolean} */ function formatHeadingAsSetext(node, state) { let literalWithBreak = false // Look for literals with a line break. // Note that this also ;(0,unist_util_visit__WEBPACK_IMPORTED_MODULE_0__.visit)(node, function (node) { if ( ('value' in node && /\r?\n|\r/.test(node.value)) || node.type === 'break' ) { literalWithBreak = true return unist_util_visit__WEBPACK_IMPORTED_MODULE_1__.EXIT } }) return Boolean( (!node.depth || node.depth < 3) && (0,mdast_util_to_string__WEBPACK_IMPORTED_MODULE_2__.toString)(node) && (state.options.setext || literalWithBreak) ) } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js": /*!*********************************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js ***! \*********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ formatLinkAsAutolink: () => (/* binding */ formatLinkAsAutolink) /* harmony export */ }); /* harmony import */ var mdast_util_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mdast-util-to-string */ "./node_modules/mdast-util-to-string/lib/index.js"); /** * @typedef {import('mdast').Link} Link * @typedef {import('../types.js').State} State */ /** * @param {Link} node * @param {State} state * @returns {boolean} */ function formatLinkAsAutolink(node, state) { const raw = (0,mdast_util_to_string__WEBPACK_IMPORTED_MODULE_0__.toString)(node) return Boolean( !state.options.resourceLink && // If there’s a url… node.url && // And there’s a no title… !node.title && // And the content of `node` is a single text node… node.children && node.children.length === 1 && node.children[0].type === 'text' && // And if the url is the same as the content… (raw === node.url || 'mailto:' + raw === node.url) && // And that starts w/ a protocol… /^[a-z][a-z+.-]+:/i.test(node.url) && // And that doesn’t contain ASCII control codes (character escapes and // references don’t work), space, or angle brackets… !/[\0- <>\u007F]/.test(node.url) ) } /***/ }), /***/ "./node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js": /*!**************************************************************************!*\ !*** ./node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ patternInScope: () => (/* binding */ patternInScope) /* harmony export */ }); /** * @typedef {import('../types.js').ConstructName} ConstructName * @typedef {import('../types.js').Unsafe} Unsafe */ /** * @param {Array} stack * @param {Unsafe} pattern * @returns {boolean} */ function patternInScope(stack, pattern) { return ( listInScope(stack, pattern.inConstruct, true) && !listInScope(stack, pattern.notInConstruct, false) ) } /** * @param {Array} stack * @param {Unsafe['inConstruct']} list * @param {boolean} none * @returns {boolean} */ function listInScope(stack, list, none) { if (typeof list === 'string') { list = [list] } if (!list || list.length === 0) { return none } let index = -1 while (++index < list.length) { if (stack.includes(list[index])) { return true } } return false } /***/ }), /***/ "./node_modules/mdast-util-to-string/lib/index.js": /*!********************************************************!*\ !*** ./node_modules/mdast-util-to-string/lib/index.js ***! \********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ toString: () => (/* binding */ toString) /* harmony export */ }); /** * @typedef {import('mdast').Nodes} Nodes * * @typedef Options * Configuration (optional). * @property {boolean | null | undefined} [includeImageAlt=true] * Whether to use `alt` for `image`s (default: `true`). * @property {boolean | null | undefined} [includeHtml=true] * Whether to use `value` of HTML (default: `true`). */ /** @type {Options} */ const emptyOptions = {} /** * Get the text content of a node or list of nodes. * * Prefers the node’s plain-text fields, otherwise serializes its children, * and if the given value is an array, serialize the nodes in it. * * @param {unknown} [value] * Thing to serialize, typically `Node`. * @param {Options | null | undefined} [options] * Configuration (optional). * @returns {string} * Serialized `value`. */ function toString(value, options) { const settings = options || emptyOptions const includeImageAlt = typeof settings.includeImageAlt === 'boolean' ? settings.includeImageAlt : true const includeHtml = typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true return one(value, includeImageAlt, includeHtml) } /** * One node or several nodes. * * @param {unknown} value * Thing to serialize. * @param {boolean} includeImageAlt * Include image `alt`s. * @param {boolean} includeHtml * Include HTML. * @returns {string} * Serialized node. */ function one(value, includeImageAlt, includeHtml) { if (node(value)) { if ('value' in value) { return value.type === 'html' && !includeHtml ? '' : value.value } if (includeImageAlt && 'alt' in value && value.alt) { return value.alt } if ('children' in value) { return all(value.children, includeImageAlt, includeHtml) } } if (Array.isArray(value)) { return all(value, includeImageAlt, includeHtml) } return '' } /** * Serialize a list of nodes. * * @param {Array} values * Thing to serialize. * @param {boolean} includeImageAlt * Include image `alt`s. * @param {boolean} includeHtml * Include HTML. * @returns {string} * Serialized nodes. */ function all(values, includeImageAlt, includeHtml) { /** @type {Array} */ const result = [] let index = -1 while (++index < values.length) { result[index] = one(values[index], includeImageAlt, includeHtml) } return result.join('') } /** * Check if `value` looks like a node. * * @param {unknown} value * Thing. * @returns {value is Nodes} * Whether `value` is a node. */ function node(value) { return Boolean(value && typeof value === 'object') } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/attention.js": /*!*********************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/attention.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ attention: () => (/* binding */ attention) /* harmony export */ }); /* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-chunked */ "./node_modules/micromark-util-chunked/dev/index.js"); /* harmony import */ var micromark_util_classify_character__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-classify-character */ "./node_modules/micromark-util-classify-character/dev/index.js"); /* harmony import */ var micromark_util_resolve_all__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-resolve-all */ "./node_modules/micromark-util-resolve-all/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Code} Code * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').Event} Event * @typedef {import('micromark-util-types').Point} Point * @typedef {import('micromark-util-types').Resolver} Resolver * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').Token} Token * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const attention = { name: 'attention', tokenize: tokenizeAttention, resolveAll: resolveAllAttention } /** * Take all events and resolve attention to emphasis or strong. * * @type {Resolver} */ // eslint-disable-next-line complexity function resolveAllAttention(events, context) { let index = -1 /** @type {number} */ let open /** @type {Token} */ let group /** @type {Token} */ let text /** @type {Token} */ let openingSequence /** @type {Token} */ let closingSequence /** @type {number} */ let use /** @type {Array} */ let nextEvents /** @type {number} */ let offset // Walk through all events. // // Note: performance of this is fine on an mb of normal markdown, but it’s // a bottleneck for malicious stuff. while (++index < events.length) { // Find a token that can close. if ( events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close ) { open = index // Now walk back to find an opener. while (open--) { // Find a token that can open the closer. if ( events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open && // If the markers are the same: context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0) ) { // If the opening can close or the closing can open, // and the close size *is not* a multiple of three, // but the sum of the opening and closing size *is* multiple of three, // then don’t match. if ( (events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !( (events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3 ) ) { continue } // Number of markers to use from the sequence. use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1 const start = Object.assign({}, events[open][1].end) const end = Object.assign({}, events[index][1].start) movePoint(start, -use) movePoint(end, use) openingSequence = { type: use > 1 ? micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.strongSequence : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.emphasisSequence, start, end: Object.assign({}, events[open][1].end) } closingSequence = { type: use > 1 ? micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.strongSequence : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.emphasisSequence, start: Object.assign({}, events[index][1].start), end } text = { type: use > 1 ? micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.strongText : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.emphasisText, start: Object.assign({}, events[open][1].end), end: Object.assign({}, events[index][1].start) } group = { type: use > 1 ? micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.strong : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.emphasis, start: Object.assign({}, openingSequence.start), end: Object.assign({}, closingSequence.end) } events[open][1].end = Object.assign({}, openingSequence.start) events[index][1].start = Object.assign({}, closingSequence.end) nextEvents = [] // If there are more markers in the opening, add them before. if (events[open][1].end.offset - events[open][1].start.offset) { nextEvents = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_1__.push)(nextEvents, [ ['enter', events[open][1], context], ['exit', events[open][1], context] ]) } // Opening. nextEvents = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_1__.push)(nextEvents, [ ['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context] ]) // Always populated by defaults. ;(0,devlop__WEBPACK_IMPORTED_MODULE_2__.ok)( context.parser.constructs.insideSpan.null, 'expected `insideSpan` to be populated' ) // Between. nextEvents = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_1__.push)( nextEvents, (0,micromark_util_resolve_all__WEBPACK_IMPORTED_MODULE_3__.resolveAll)( context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context ) ) // Closing. nextEvents = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_1__.push)(nextEvents, [ ['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context] ]) // If there are more markers in the closing, add them after. if (events[index][1].end.offset - events[index][1].start.offset) { offset = 2 nextEvents = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_1__.push)(nextEvents, [ ['enter', events[index][1], context], ['exit', events[index][1], context] ]) } else { offset = 0 } (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_1__.splice)(events, open - 1, index - open + 3, nextEvents) index = open + nextEvents.length - offset - 2 break } } } } // Remove remaining sequences. index = -1 while (++index < events.length) { if (events[index][1].type === 'attentionSequence') { events[index][1].type = 'data' } } return events } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeAttention(effects, ok) { const attentionMarkers = this.parser.constructs.attentionMarkers.null const previous = this.previous const before = (0,micromark_util_classify_character__WEBPACK_IMPORTED_MODULE_4__.classifyCharacter)(previous) /** @type {NonNullable} */ let marker return start /** * Before a sequence. * * ```markdown * > | ** * ^ * ``` * * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_2__.ok)( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.codes.asterisk || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.codes.underscore, 'expected asterisk or underscore' ) marker = code effects.enter('attentionSequence') return inside(code) } /** * In a sequence. * * ```markdown * > | ** * ^^ * ``` * * @type {State} */ function inside(code) { if (code === marker) { effects.consume(code) return inside } const token = effects.exit('attentionSequence') // To do: next major: move this to resolver, just like `markdown-rs`. const after = (0,micromark_util_classify_character__WEBPACK_IMPORTED_MODULE_4__.classifyCharacter)(code) // Always populated by defaults. ;(0,devlop__WEBPACK_IMPORTED_MODULE_2__.ok)(attentionMarkers, 'expected `attentionMarkers` to be populated') const open = !after || (after === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_6__.constants.characterGroupPunctuation && before) || attentionMarkers.includes(code) const close = !before || (before === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_6__.constants.characterGroupPunctuation && after) || attentionMarkers.includes(previous) token._open = Boolean( marker === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.codes.asterisk ? open : open && (before || !close) ) token._close = Boolean( marker === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.codes.asterisk ? close : close && (after || !open) ) return ok(code) } } /** * Move a point a bit. * * Note: `move` only works inside lines! It’s not possible to move past other * chunks (replacement characters, tabs, or line endings). * * @param {Point} point * @param {number} offset * @returns {undefined} */ function movePoint(point, offset) { point.column += offset point.offset += offset point._bufferIndex += offset } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/autolink.js": /*!********************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/autolink.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ autolink: () => (/* binding */ autolink) /* harmony export */ }); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const autolink = {name: 'autolink', tokenize: tokenizeAutolink} /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeAutolink(effects, ok, nok) { let size = 0 return start /** * Start of an autolink. * * ```markdown * > | ab * ^ * > | ab * ^ * ``` * * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.lessThan, 'expected `<`') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.autolink) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.autolinkMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.autolinkMarker) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.autolinkProtocol) return open } /** * After `<`, at protocol or atext. * * ```markdown * > | ab * ^ * > | ab * ^ * ``` * * @type {State} */ function open(code) { if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlpha)(code)) { effects.consume(code) return schemeOrEmailAtext } return emailAtext(code) } /** * At second byte of protocol or atext. * * ```markdown * > | ab * ^ * > | ab * ^ * ``` * * @type {State} */ function schemeOrEmailAtext(code) { // ASCII alphanumeric and `+`, `-`, and `.`. if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.plusSign || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dot || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlphanumeric)(code) ) { // Count the previous alphabetical from `open` too. size = 1 return schemeInsideOrEmailAtext(code) } return emailAtext(code) } /** * In ambiguous protocol or atext. * * ```markdown * > | ab * ^ * > | ab * ^ * ``` * * @type {State} */ function schemeInsideOrEmailAtext(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.colon) { effects.consume(code) size = 0 return urlInside } // ASCII alphanumeric and `+`, `-`, and `.`. if ( (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.plusSign || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dot || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlphanumeric)(code)) && size++ < micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.autolinkSchemeSizeMax ) { effects.consume(code) return schemeInsideOrEmailAtext } size = 0 return emailAtext(code) } /** * After protocol, in URL. * * ```markdown * > | ab * ^ * ``` * * @type {State} */ function urlInside(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.autolinkProtocol) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.autolinkMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.autolinkMarker) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.autolink) return ok } // ASCII control, space, or `<`. if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.space || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.lessThan || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiControl)(code) ) { return nok(code) } effects.consume(code) return urlInside } /** * In email atext. * * ```markdown * > | ab * ^ * ``` * * @type {State} */ function emailAtext(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.atSign) { effects.consume(code) return emailAtSignOrDot } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAtext)(code)) { effects.consume(code) return emailAtext } return nok(code) } /** * In label, after at-sign or dot. * * ```markdown * > | ab * ^ ^ * ``` * * @type {State} */ function emailAtSignOrDot(code) { return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlphanumeric)(code) ? emailLabel(code) : nok(code) } /** * In label, where `.` and `>` are allowed. * * ```markdown * > | ab * ^ * ``` * * @type {State} */ function emailLabel(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dot) { effects.consume(code) size = 0 return emailAtSignOrDot } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan) { // Exit, then change the token type. effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.autolinkProtocol).type = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.autolinkEmail effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.autolinkMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.autolinkMarker) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.autolink) return ok } return emailValue(code) } /** * In label, where `.` and `>` are *not* allowed. * * Though, this is also used in `emailLabel` to parse other values. * * ```markdown * > | ab * ^ * ``` * * @type {State} */ function emailValue(code) { // ASCII alphanumeric or `-`. if ( (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlphanumeric)(code)) && size++ < micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.autolinkDomainSizeMax ) { const next = code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash ? emailValue : emailLabel effects.consume(code) return next } return nok(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/blank-line.js": /*!**********************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/blank-line.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ blankLine: () => (/* binding */ blankLine) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const blankLine = {tokenize: tokenizeBlankLine, partial: true} /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeBlankLine(effects, ok, nok) { return start /** * Start of blank line. * * > 👉 **Note**: `␠` represents a space character. * * ```markdown * > | ␠␠␊ * ^ * > | ␊ * ^ * ``` * * @type {State} */ function start(code) { return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_0__.markdownSpace)(code) ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_1__.factorySpace)(effects, after, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix)(code) : after(code) } /** * At eof/eol, after optional whitespace. * * > 👉 **Note**: `␠` represents a space character. * * ```markdown * > | ␠␠␊ * ^ * > | ␊ * ^ * ``` * * @type {State} */ function after(code) { return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_0__.markdownLineEnding)(code) ? ok(code) : nok(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/block-quote.js": /*!***********************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/block-quote.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ blockQuote: () => (/* binding */ blockQuote) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').Exiter} Exiter * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const blockQuote = { name: 'blockQuote', tokenize: tokenizeBlockQuoteStart, continuation: {tokenize: tokenizeBlockQuoteContinuation}, exit } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeBlockQuoteStart(effects, ok, nok) { const self = this return start /** * Start of block quote. * * ```markdown * > | > a * ^ * ``` * * @type {State} */ function start(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.greaterThan) { const state = self.containerState ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(state, 'expected `containerState` to be defined in container') if (!state.open) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.blockQuote, {_container: true}) state.open = true } effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.blockQuotePrefix) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.blockQuoteMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.blockQuoteMarker) return after } return nok(code) } /** * After `>`, before optional whitespace. * * ```markdown * > | > a * ^ * ``` * * @type {State} */ function after(code) { if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.blockQuotePrefixWhitespace) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.blockQuotePrefixWhitespace) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.blockQuotePrefix) return ok } effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.blockQuotePrefix) return ok(code) } } /** * Start of block quote continuation. * * ```markdown * | > a * > | > b * ^ * ``` * * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeBlockQuoteContinuation(effects, ok, nok) { const self = this return contStart /** * Start of block quote continuation. * * Also used to parse the first block quote opening. * * ```markdown * | > a * > | > b * ^ * ``` * * @type {State} */ function contStart(code) { if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) { // Always populated by defaults. (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)( self.parser.constructs.disable.null, 'expected `disable.null` to be populated' ) return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_4__.factorySpace)( effects, contBefore, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix, self.parser.constructs.disable.null.includes('codeIndented') ? undefined : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.constants.tabSize )(code) } return contBefore(code) } /** * At `>`, after optional whitespace. * * Also used to parse the first block quote opening. * * ```markdown * | > a * > | > b * ^ * ``` * * @type {State} */ function contBefore(code) { return effects.attempt(blockQuote, ok, nok)(code) } } /** @type {Exiter} */ function exit(effects) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.blockQuote) } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/character-escape.js": /*!****************************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/character-escape.js ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ characterEscape: () => (/* binding */ characterEscape) /* harmony export */ }); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const characterEscape = { name: 'characterEscape', tokenize: tokenizeCharacterEscape } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeCharacterEscape(effects, ok, nok) { return start /** * Start of character escape. * * ```markdown * > | a\*b * ^ * ``` * * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.backslash, 'expected `\\`') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterEscape) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.escapeMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.escapeMarker) return inside } /** * After `\`, at punctuation. * * ```markdown * > | a\*b * ^ * ``` * * @type {State} */ function inside(code) { // ASCII punctuation. if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiPunctuation)(code)) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterEscapeValue) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterEscapeValue) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterEscape) return ok } return nok(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/character-reference.js": /*!*******************************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/character-reference.js ***! \*******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ characterReference: () => (/* binding */ characterReference) /* harmony export */ }); /* harmony import */ var decode_named_character_reference__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! decode-named-character-reference */ "./node_modules/decode-named-character-reference/index.dom.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Code} Code * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const characterReference = { name: 'characterReference', tokenize: tokenizeCharacterReference } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeCharacterReference(effects, ok, nok) { const self = this let size = 0 /** @type {number} */ let max /** @type {(code: Code) => boolean} */ let test return start /** * Start of character reference. * * ```markdown * > | a&b * ^ * > | a{b * ^ * > | a b * ^ * ``` * * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.ampersand, 'expected `&`') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterReference) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarker) return open } /** * After `&`, at `#` for numeric references or alphanumeric for named * references. * * ```markdown * > | a&b * ^ * > | a{b * ^ * > | a b * ^ * ``` * * @type {State} */ function open(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.numberSign) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarkerNumeric) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarkerNumeric) return numeric } effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceValue) max = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.characterReferenceNamedSizeMax test = micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlphanumeric return value(code) } /** * After `#`, at `x` for hexadecimals or digit for decimals. * * ```markdown * > | a{b * ^ * > | a b * ^ * ``` * * @type {State} */ function numeric(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.uppercaseX || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.lowercaseX) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarkerHexadecimal) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarkerHexadecimal) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceValue) max = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.characterReferenceHexadecimalSizeMax test = micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiHexDigit return value } effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceValue) max = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.characterReferenceDecimalSizeMax test = micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiDigit return value(code) } /** * After markers (`&#x`, `&#`, or `&`), in value, before `;`. * * The character reference kind defines what and how many characters are * allowed. * * ```markdown * > | a&b * ^^^ * > | a{b * ^^^ * > | a b * ^ * ``` * * @type {State} */ function value(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.semicolon && size) { const token = effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceValue) if ( test === micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlphanumeric && !(0,decode_named_character_reference__WEBPACK_IMPORTED_MODULE_5__.decodeNamedCharacterReference)(self.sliceSerialize(token)) ) { return nok(code) } // To do: `markdown-rs` uses a different name: // `CharacterReferenceMarkerSemi`. effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterReferenceMarker) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.characterReference) return ok } if (test(code) && size++ < max) { effects.consume(code) return value } return nok(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/code-fenced.js": /*!***********************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/code-fenced.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ codeFenced: () => (/* binding */ codeFenced) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Code} Code * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const nonLazyContinuation = { tokenize: tokenizeNonLazyContinuation, partial: true } /** @type {Construct} */ const codeFenced = { name: 'codeFenced', tokenize: tokenizeCodeFenced, concrete: true } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeCodeFenced(effects, ok, nok) { const self = this /** @type {Construct} */ const closeStart = {tokenize: tokenizeCloseStart, partial: true} let initialPrefix = 0 let sizeOpen = 0 /** @type {NonNullable} */ let marker return start /** * Start of code. * * ```markdown * > | ~~~js * ^ * | alert(1) * | ~~~ * ``` * * @type {State} */ function start(code) { // To do: parse whitespace like `markdown-rs`. return beforeSequenceOpen(code) } /** * In opening fence, after prefix, at sequence. * * ```markdown * > | ~~~js * ^ * | alert(1) * | ~~~ * ``` * * @type {State} */ function beforeSequenceOpen(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.tilde, 'expected `` ` `` or `~`' ) const tail = self.events[self.events.length - 1] initialPrefix = tail && tail[1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix ? tail[2].sliceSerialize(tail[1], true).length : 0 marker = code effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFenced) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFence) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceSequence) return sequenceOpen(code) } /** * In opening fence sequence. * * ```markdown * > | ~~~js * ^ * | alert(1) * | ~~~ * ``` * * @type {State} */ function sequenceOpen(code) { if (code === marker) { sizeOpen++ effects.consume(code) return sequenceOpen } if (sizeOpen < micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.codeFencedSequenceSizeMin) { return nok(code) } effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceSequence) return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code) ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__.factorySpace)(effects, infoBefore, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.whitespace)(code) : infoBefore(code) } /** * In opening fence, after the sequence (and optional whitespace), before info. * * ```markdown * > | ~~~js * ^ * | alert(1) * | ~~~ * ``` * * @type {State} */ function infoBefore(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFence) return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) } effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceInfo) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.chunkString, {contentType: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.contentTypeString}) return info(code) } /** * In info. * * ```markdown * > | ~~~js * ^ * | alert(1) * | ~~~ * ``` * * @type {State} */ function info(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.chunkString) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceInfo) return infoBefore(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.chunkString) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceInfo) return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__.factorySpace)(effects, metaBefore, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.whitespace)(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent && code === marker) { return nok(code) } effects.consume(code) return info } /** * In opening fence, after info and whitespace, before meta. * * ```markdown * > | ~~~js eval * ^ * | alert(1) * | ~~~ * ``` * * @type {State} */ function metaBefore(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) { return infoBefore(code) } effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceMeta) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.chunkString, {contentType: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.contentTypeString}) return meta(code) } /** * In meta. * * ```markdown * > | ~~~js eval * ^ * | alert(1) * | ~~~ * ``` * * @type {State} */ function meta(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.chunkString) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceMeta) return infoBefore(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent && code === marker) { return nok(code) } effects.consume(code) return meta } /** * At eol/eof in code, before a non-lazy closing fence or content. * * ```markdown * > | ~~~js * ^ * > | alert(1) * ^ * | ~~~ * ``` * * @type {State} */ function atNonLazyBreak(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code), 'expected eol') return effects.attempt(closeStart, after, contentBefore)(code) } /** * Before code content, not a closing fence, at eol. * * ```markdown * | ~~~js * > | alert(1) * ^ * | ~~~ * ``` * * @type {State} */ function contentBefore(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code), 'expected eol') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) return contentStart } /** * Before code content, not a closing fence. * * ```markdown * | ~~~js * > | alert(1) * ^ * | ~~~ * ``` * * @type {State} */ function contentStart(code) { return initialPrefix > 0 && (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code) ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__.factorySpace)( effects, beforeContentChunk, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix, initialPrefix + 1 )(code) : beforeContentChunk(code) } /** * Before code content, after optional prefix. * * ```markdown * | ~~~js * > | alert(1) * ^ * | ~~~ * ``` * * @type {State} */ function beforeContentChunk(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) { return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) } effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFlowValue) return contentChunk(code) } /** * In code content. * * ```markdown * | ~~~js * > | alert(1) * ^^^^^^^^ * | ~~~ * ``` * * @type {State} */ function contentChunk(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFlowValue) return beforeContentChunk(code) } effects.consume(code) return contentChunk } /** * After code. * * ```markdown * | ~~~js * | alert(1) * > | ~~~ * ^ * ``` * * @type {State} */ function after(code) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFenced) return ok(code) } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeCloseStart(effects, ok, nok) { let size = 0 return startBefore /** * * * @type {State} */ function startBefore(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code), 'expected eol') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) return start } /** * Before closing fence, at optional whitespace. * * ```markdown * | ~~~js * | alert(1) * > | ~~~ * ^ * ``` * * @type {State} */ function start(code) { // Always populated by defaults. (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)( self.parser.constructs.disable.null, 'expected `disable.null` to be populated' ) // To do: `enter` here or in next state? effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFence) return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code) ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__.factorySpace)( effects, beforeSequenceClose, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix, self.parser.constructs.disable.null.includes('codeIndented') ? undefined : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.tabSize )(code) : beforeSequenceClose(code) } /** * In closing fence, after optional whitespace, at sequence. * * ```markdown * | ~~~js * | alert(1) * > | ~~~ * ^ * ``` * * @type {State} */ function beforeSequenceClose(code) { if (code === marker) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceSequence) return sequenceClose(code) } return nok(code) } /** * In closing fence sequence. * * ```markdown * | ~~~js * | alert(1) * > | ~~~ * ^ * ``` * * @type {State} */ function sequenceClose(code) { if (code === marker) { size++ effects.consume(code) return sequenceClose } if (size >= sizeOpen) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFenceSequence) return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code) ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__.factorySpace)(effects, sequenceCloseAfter, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.whitespace)(code) : sequenceCloseAfter(code) } return nok(code) } /** * After closing fence sequence, after optional whitespace. * * ```markdown * | ~~~js * | alert(1) * > | ~~~ * ^ * ``` * * @type {State} */ function sequenceCloseAfter(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFencedFence) return ok(code) } return nok(code) } } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeNonLazyContinuation(effects, ok, nok) { const self = this return start /** * * * @type {State} */ function start(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof) { return nok(code) } (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code), 'expected eol') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) return lineStart } /** * * * @type {State} */ function lineStart(code) { return self.parser.lazy[self.now().line] ? nok(code) : ok(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/code-indented.js": /*!*************************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/code-indented.js ***! \*************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ codeIndented: () => (/* binding */ codeIndented) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const codeIndented = { name: 'codeIndented', tokenize: tokenizeCodeIndented } /** @type {Construct} */ const furtherStart = {tokenize: tokenizeFurtherStart, partial: true} /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeCodeIndented(effects, ok, nok) { const self = this return start /** * Start of code (indented). * * > **Parsing note**: it is not needed to check if this first line is a * > filled line (that it has a non-whitespace character), because blank lines * > are parsed already, so we never run into that. * * ```markdown * > | aaa * ^ * ``` * * @type {State} */ function start(code) { // To do: manually check if interrupting like `markdown-rs`. ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownSpace)(code)) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeIndented) // To do: use an improved `space_or_tab` function like `markdown-rs`, // so that we can drop the next state. return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__.factorySpace)( effects, afterPrefix, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.tabSize + 1 )(code) } /** * At start, after 1 or 4 spaces. * * ```markdown * > | aaa * ^ * ``` * * @type {State} */ function afterPrefix(code) { const tail = self.events[self.events.length - 1] return tail && tail[1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix && tail[2].sliceSerialize(tail[1], true).length >= micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.tabSize ? atBreak(code) : nok(code) } /** * At a break. * * ```markdown * > | aaa * ^ ^ * ``` * * @type {State} */ function atBreak(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.codes.eof) { return after(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code)) { return effects.attempt(furtherStart, atBreak, after)(code) } effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFlowValue) return inside(code) } /** * In code content. * * ```markdown * > | aaa * ^^^^ * ``` * * @type {State} */ function inside(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeFlowValue) return atBreak(code) } effects.consume(code) return inside } /** @type {State} */ function after(code) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.codeIndented) // To do: allow interrupting like `markdown-rs`. // Feel free to interrupt. // tokenizer.interrupt = false return ok(code) } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeFurtherStart(effects, ok, nok) { const self = this return furtherStart /** * At eol, trying to parse another indent. * * ```markdown * > | aaa * ^ * | bbb * ``` * * @type {State} */ function furtherStart(code) { // To do: improve `lazy` / `pierce` handling. // If this is a lazy line, it can’t be code. if (self.parser.lazy[self.now().line]) { return nok(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code)) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) return furtherStart } // To do: the code here in `micromark-js` is a bit different from // `markdown-rs` because there it can attempt spaces. // We can’t yet. // // To do: use an improved `space_or_tab` function like `markdown-rs`, // so that we can drop the next state. return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__.factorySpace)( effects, afterPrefix, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.tabSize + 1 )(code) } /** * At start, after 1 or 4 spaces. * * ```markdown * > | aaa * ^ * ``` * * @type {State} */ function afterPrefix(code) { const tail = self.events[self.events.length - 1] return tail && tail[1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix && tail[2].sliceSerialize(tail[1], true).length >= micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.tabSize ? ok(code) : (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code) ? furtherStart(code) : nok(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/code-text.js": /*!*********************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/code-text.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ codeText: () => (/* binding */ codeText) /* harmony export */ }); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').Previous} Previous * @typedef {import('micromark-util-types').Resolver} Resolver * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').Token} Token * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const codeText = { name: 'codeText', tokenize: tokenizeCodeText, resolve: resolveCodeText, previous } // To do: next major: don’t resolve, like `markdown-rs`. /** @type {Resolver} */ function resolveCodeText(events) { let tailExitIndex = events.length - 4 let headEnterIndex = 3 /** @type {number} */ let index /** @type {number | undefined} */ let enter // If we start and end with an EOL or a space. if ( (events[headEnterIndex][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding || events[tailExitIndex][1].type === 'space') ) { index = headEnterIndex // And we have data. while (++index < tailExitIndex) { if (events[index][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.codeTextData) { // Then we have padding. events[headEnterIndex][1].type = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.codeTextPadding events[tailExitIndex][1].type = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.codeTextPadding headEnterIndex += 2 tailExitIndex -= 2 break } } } // Merge adjacent spaces and data. index = headEnterIndex - 1 tailExitIndex++ while (++index <= tailExitIndex) { if (enter === undefined) { if ( index !== tailExitIndex && events[index][1].type !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding ) { enter = index } } else if ( index === tailExitIndex || events[index][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding ) { events[enter][1].type = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.codeTextData if (index !== enter + 2) { events[enter][1].end = events[index - 1][1].end events.splice(enter + 2, index - enter - 2) tailExitIndex -= index - enter - 2 index = enter + 2 } enter = undefined } } return events } /** * @this {TokenizeContext} * @type {Previous} */ function previous(code) { // If there is a previous code, there will always be a tail. return ( code !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent || this.events[this.events.length - 1][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.characterEscape ) } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeCodeText(effects, ok, nok) { const self = this let sizeOpen = 0 /** @type {number} */ let size /** @type {Token} */ let token return start /** * Start of code (text). * * ```markdown * > | `a` * ^ * > | \`a` * ^ * ``` * * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_2__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent, 'expected `` ` ``') ;(0,devlop__WEBPACK_IMPORTED_MODULE_2__.ok)(previous.call(self, self.previous), 'expected correct previous') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.codeText) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.codeTextSequence) return sequenceOpen(code) } /** * In opening sequence. * * ```markdown * > | `a` * ^ * ``` * * @type {State} */ function sequenceOpen(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent) { effects.consume(code) sizeOpen++ return sequenceOpen } effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.codeTextSequence) return between(code) } /** * Between something and something else. * * ```markdown * > | `a` * ^^ * ``` * * @type {State} */ function between(code) { // EOF. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof) { return nok(code) } // To do: next major: don’t do spaces in resolve, but when compiling, // like `markdown-rs`. // Tabs don’t work, and virtual spaces don’t make sense. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.space) { effects.enter('space') effects.consume(code) effects.exit('space') return between } // Closing fence? Could also be data. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent) { token = effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.codeTextSequence) size = 0 return sequenceClose(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding) return between } // Data. effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.codeTextData) return data(code) } /** * In data. * * ```markdown * > | `a` * ^ * ``` * * @type {State} */ function data(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.space || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code) ) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.codeTextData) return between(code) } effects.consume(code) return data } /** * In closing sequence. * * ```markdown * > | `a` * ^ * ``` * * @type {State} */ function sequenceClose(code) { // More. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent) { effects.consume(code) size++ return sequenceClose } // Done! if (size === sizeOpen) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.codeTextSequence) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.codeText) return ok(code) } // More or less accents: mark as data. token.type = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.codeTextData return data(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/content.js": /*!*******************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/content.js ***! \*******************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ content: () => (/* binding */ content) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_subtokenize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-subtokenize */ "./node_modules/micromark-util-subtokenize/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').Resolver} Resolver * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').Token} Token * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** * No name because it must not be turned off. * @type {Construct} */ const content = {tokenize: tokenizeContent, resolve: resolveContent} /** @type {Construct} */ const continuationConstruct = {tokenize: tokenizeContinuation, partial: true} /** * Content is transparent: it’s parsed right now. That way, definitions are also * parsed right now: before text in paragraphs (specifically, media) are parsed. * * @type {Resolver} */ function resolveContent(events) { ;(0,micromark_util_subtokenize__WEBPACK_IMPORTED_MODULE_0__.subtokenize)(events) return events } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeContent(effects, ok) { /** @type {Token | undefined} */ let previous return chunkStart /** * Before a content chunk. * * ```markdown * > | abc * ^ * ``` * * @type {State} */ function chunkStart(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)( code !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof && !(0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code), 'expected no eof or eol' ) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.content) previous = effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.chunkContent, { contentType: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.constants.contentTypeContent }) return chunkInside(code) } /** * In a content chunk. * * ```markdown * > | abc * ^^^ * ``` * * @type {State} */ function chunkInside(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof) { return contentEnd(code) } // To do: in `markdown-rs`, each line is parsed on its own, and everything // is stitched together resolving. if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { return effects.check( continuationConstruct, contentContinue, contentEnd )(code) } // Data. effects.consume(code) return chunkInside } /** * * * @type {State} */ function contentEnd(code) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.chunkContent) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.content) return ok(code) } /** * * * @type {State} */ function contentContinue(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code), 'expected eol') effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.chunkContent) ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(previous, 'expected previous token') previous.next = effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.chunkContent, { contentType: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.constants.contentTypeContent, previous }) previous = previous.next return chunkInside } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeContinuation(effects, ok, nok) { const self = this return startLookahead /** * * * @type {State} */ function startLookahead(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code), 'expected a line ending') effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.chunkContent) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.lineEnding) return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__.factorySpace)(effects, prefixed, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.linePrefix) } /** * * * @type {State} */ function prefixed(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { return nok(code) } // Always populated by defaults. (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)( self.parser.constructs.disable.null, 'expected `disable.null` to be populated' ) const tail = self.events[self.events.length - 1] if ( !self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.linePrefix && tail[2].sliceSerialize(tail[1], true).length >= micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.constants.tabSize ) { return ok(code) } return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/definition.js": /*!**********************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/definition.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ definition: () => (/* binding */ definition) /* harmony export */ }); /* harmony import */ var micromark_factory_destination__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! micromark-factory-destination */ "./node_modules/micromark-factory-destination/dev/index.js"); /* harmony import */ var micromark_factory_label__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-factory-label */ "./node_modules/micromark-factory-label/dev/index.js"); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_factory_title__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! micromark-factory-title */ "./node_modules/micromark-factory-title/dev/index.js"); /* harmony import */ var micromark_factory_whitespace__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-factory-whitespace */ "./node_modules/micromark-factory-whitespace/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-normalize-identifier */ "./node_modules/micromark-util-normalize-identifier/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const definition = {name: 'definition', tokenize: tokenizeDefinition} /** @type {Construct} */ const titleBefore = {tokenize: tokenizeTitleBefore, partial: true} /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeDefinition(effects, ok, nok) { const self = this /** @type {string} */ let identifier return start /** * At start of a definition. * * ```markdown * > | [a]: b "c" * ^ * ``` * * @type {State} */ function start(code) { // Do not interrupt paragraphs (but do follow definitions). // To do: do `interrupt` the way `markdown-rs` does. // To do: parse whitespace the way `markdown-rs` does. effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definition) return before(code) } /** * After optional whitespace, at `[`. * * ```markdown * > | [a]: b "c" * ^ * ``` * * @type {State} */ function before(code) { // To do: parse whitespace the way `markdown-rs` does. (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.leftSquareBracket, 'expected `[`') return micromark_factory_label__WEBPACK_IMPORTED_MODULE_3__.factoryLabel.call( self, effects, labelAfter, // Note: we don’t need to reset the way `markdown-rs` does. nok, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definitionLabel, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definitionLabelMarker, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definitionLabelString )(code) } /** * After label. * * ```markdown * > | [a]: b "c" * ^ * ``` * * @type {State} */ function labelAfter(code) { identifier = (0,micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_4__.normalizeIdentifier)( self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) ) if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.colon) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definitionMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definitionMarker) return markerAfter } return nok(code) } /** * After marker. * * ```markdown * > | [a]: b "c" * ^ * ``` * * @type {State} */ function markerAfter(code) { // Note: whitespace is optional. return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEndingOrSpace)(code) ? (0,micromark_factory_whitespace__WEBPACK_IMPORTED_MODULE_6__.factoryWhitespace)(effects, destinationBefore)(code) : destinationBefore(code) } /** * Before destination. * * ```markdown * > | [a]: b "c" * ^ * ``` * * @type {State} */ function destinationBefore(code) { return (0,micromark_factory_destination__WEBPACK_IMPORTED_MODULE_7__.factoryDestination)( effects, destinationAfter, // Note: we don’t need to reset the way `markdown-rs` does. nok, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definitionDestination, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definitionDestinationLiteral, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definitionDestinationLiteralMarker, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definitionDestinationRaw, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definitionDestinationString )(code) } /** * After destination. * * ```markdown * > | [a]: b "c" * ^ * ``` * * @type {State} */ function destinationAfter(code) { return effects.attempt(titleBefore, after, after)(code) } /** * After definition. * * ```markdown * > | [a]: b * ^ * > | [a]: b "c" * ^ * ``` * * @type {State} */ function after(code) { return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownSpace)(code) ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_8__.factorySpace)(effects, afterWhitespace, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.whitespace)(code) : afterWhitespace(code) } /** * After definition, after optional whitespace. * * ```markdown * > | [a]: b * ^ * > | [a]: b "c" * ^ * ``` * * @type {State} */ function afterWhitespace(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEnding)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definition) // Note: we don’t care about uniqueness. // It’s likely that that doesn’t happen very frequently. // It is more likely that it wastes precious time. self.parser.defined.push(identifier) // To do: `markdown-rs` interrupt. // // You’d be interrupting. // tokenizer.interrupt = true return ok(code) } return nok(code) } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeTitleBefore(effects, ok, nok) { return titleBefore /** * After destination, at whitespace. * * ```markdown * > | [a]: b * ^ * > | [a]: b "c" * ^ * ``` * * @type {State} */ function titleBefore(code) { return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEndingOrSpace)(code) ? (0,micromark_factory_whitespace__WEBPACK_IMPORTED_MODULE_6__.factoryWhitespace)(effects, beforeMarker)(code) : nok(code) } /** * At title. * * ```markdown * | [a]: b * > | "c" * ^ * ``` * * @type {State} */ function beforeMarker(code) { return (0,micromark_factory_title__WEBPACK_IMPORTED_MODULE_9__.factoryTitle)( effects, titleAfter, nok, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definitionTitle, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definitionTitleMarker, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definitionTitleString )(code) } /** * After title. * * ```markdown * > | [a]: b "c" * ^ * ``` * * @type {State} */ function titleAfter(code) { return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownSpace)(code) ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_8__.factorySpace)( effects, titleAfterOptionalWhitespace, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.whitespace )(code) : titleAfterOptionalWhitespace(code) } /** * After title, after optional whitespace. * * ```markdown * > | [a]: b "c" * ^ * ``` * * @type {State} */ function titleAfterOptionalWhitespace(code) { return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEnding)(code) ? ok(code) : nok(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/hard-break-escape.js": /*!*****************************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/hard-break-escape.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ hardBreakEscape: () => (/* binding */ hardBreakEscape) /* harmony export */ }); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const hardBreakEscape = { name: 'hardBreakEscape', tokenize: tokenizeHardBreakEscape } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeHardBreakEscape(effects, ok, nok) { return start /** * Start of a hard break (escape). * * ```markdown * > | a\ * ^ * | b * ``` * * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.backslash, 'expected `\\`') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.hardBreakEscape) effects.consume(code) return after } /** * After `\`, at eol. * * ```markdown * > | a\ * ^ * | b * ``` * * @type {State} */ function after(code) { if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.hardBreakEscape) return ok(code) } return nok(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/heading-atx.js": /*!***********************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/heading-atx.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ headingAtx: () => (/* binding */ headingAtx) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-chunked */ "./node_modules/micromark-util-chunked/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').Resolver} Resolver * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').Token} Token * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const headingAtx = { name: 'headingAtx', tokenize: tokenizeHeadingAtx, resolve: resolveHeadingAtx } /** @type {Resolver} */ function resolveHeadingAtx(events, context) { let contentEnd = events.length - 2 let contentStart = 3 /** @type {Token} */ let content /** @type {Token} */ let text // Prefix whitespace, part of the opening. if (events[contentStart][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.whitespace) { contentStart += 2 } // Suffix whitespace, part of the closing. if ( contentEnd - 2 > contentStart && events[contentEnd][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.whitespace ) { contentEnd -= 2 } if ( events[contentEnd][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.atxHeadingSequence && (contentStart === contentEnd - 1 || (contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.whitespace)) ) { contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 } if (contentEnd > contentStart) { content = { type: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.atxHeadingText, start: events[contentStart][1].start, end: events[contentEnd][1].end } text = { type: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.chunkText, start: events[contentStart][1].start, end: events[contentEnd][1].end, contentType: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.constants.contentTypeText } ;(0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.splice)(events, contentStart, contentEnd - contentStart + 1, [ ['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context] ]) } return events } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeHeadingAtx(effects, ok, nok) { let size = 0 return start /** * Start of a heading (atx). * * ```markdown * > | ## aa * ^ * ``` * * @type {State} */ function start(code) { // To do: parse indent like `markdown-rs`. effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.atxHeading) return before(code) } /** * After optional whitespace, at `#`. * * ```markdown * > | ## aa * ^ * ``` * * @type {State} */ function before(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_3__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.numberSign, 'expected `#`') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.atxHeadingSequence) return sequenceOpen(code) } /** * In opening sequence. * * ```markdown * > | ## aa * ^ * ``` * * @type {State} */ function sequenceOpen(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.numberSign && size++ < micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.constants.atxHeadingOpeningFenceSizeMax ) { effects.consume(code) return sequenceOpen } // Always at least one `#`. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEndingOrSpace)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.atxHeadingSequence) return atBreak(code) } return nok(code) } /** * After something, before something else. * * ```markdown * > | ## aa * ^ * ``` * * @type {State} */ function atBreak(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.numberSign) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.atxHeadingSequence) return sequenceFurther(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEnding)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.atxHeading) // To do: interrupt like `markdown-rs`. // // Feel free to interrupt. // tokenizer.interrupt = false return ok(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownSpace)(code)) { return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__.factorySpace)(effects, atBreak, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.whitespace)(code) } // To do: generate `data` tokens, add the `text` token later. // Needs edit map, see: `markdown.rs`. effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.atxHeadingText) return data(code) } /** * In further sequence (after whitespace). * * Could be normal “visible” hashes in the heading or a final sequence. * * ```markdown * > | ## aa ## * ^ * ``` * * @type {State} */ function sequenceFurther(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.numberSign) { effects.consume(code) return sequenceFurther } effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.atxHeadingSequence) return atBreak(code) } /** * In text. * * ```markdown * > | ## aa * ^ * ``` * * @type {State} */ function data(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.numberSign || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEndingOrSpace)(code) ) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.atxHeadingText) return atBreak(code) } effects.consume(code) return data } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/html-flow.js": /*!*********************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/html-flow.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ htmlFlow: () => (/* binding */ htmlFlow) /* harmony export */ }); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_html_tag_name__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-html-tag-name */ "./node_modules/micromark-util-html-tag-name/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /* harmony import */ var _blank_line_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./blank-line.js */ "./node_modules/micromark-core-commonmark/dev/lib/blank-line.js"); /** * @typedef {import('micromark-util-types').Code} Code * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').Resolver} Resolver * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const htmlFlow = { name: 'htmlFlow', tokenize: tokenizeHtmlFlow, resolveTo: resolveToHtmlFlow, concrete: true } /** @type {Construct} */ const blankLineBefore = {tokenize: tokenizeBlankLineBefore, partial: true} const nonLazyContinuationStart = { tokenize: tokenizeNonLazyContinuationStart, partial: true } /** @type {Resolver} */ function resolveToHtmlFlow(events) { let index = events.length while (index--) { if ( events[index][0] === 'enter' && events[index][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.htmlFlow ) { break } } if (index > 1 && events[index - 2][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.linePrefix) { // Add the prefix start to the HTML token. events[index][1].start = events[index - 2][1].start // Add the prefix start to the HTML line token. events[index + 1][1].start = events[index - 2][1].start // Remove the line prefix. events.splice(index - 2, 2) } return events } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeHtmlFlow(effects, ok, nok) { const self = this /** @type {number} */ let marker /** @type {boolean} */ let closingTag /** @type {string} */ let buffer /** @type {number} */ let index /** @type {Code} */ let markerB return start /** * Start of HTML (flow). * * ```markdown * > | * ^ * ``` * * @type {State} */ function start(code) { // To do: parse indent like `markdown-rs`. return before(code) } /** * At `<`, after optional whitespace. * * ```markdown * > | * ^ * ``` * * @type {State} */ function before(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.lessThan, 'expected `<`') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.htmlFlow) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.htmlFlowData) effects.consume(code) return open } /** * After `<`, at tag name or other stuff. * * ```markdown * > | * ^ * > | * ^ * > | * ^ * ``` * * @type {State} */ function open(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.exclamationMark) { effects.consume(code) return declarationOpen } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.slash) { effects.consume(code) closingTag = true return tagCloseStart } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.questionMark) { effects.consume(code) marker = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlInstruction // To do: // tokenizer.concrete = true // To do: use `markdown-rs` style interrupt. // While we’re in an instruction instead of a declaration, we’re on a `?` // right now, so we do need to search for `>`, similar to declarations. return self.interrupt ? ok : continuationDeclarationInside } // ASCII alphabetical. if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlpha)(code)) { effects.consume(code) // @ts-expect-error: not null. buffer = String.fromCharCode(code) return tagName } return nok(code) } /** * After ` | * ^ * > | * ^ * > | &<]]> * ^ * ``` * * @type {State} */ function declarationOpen(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.dash) { effects.consume(code) marker = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlComment return commentOpenInside } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.leftSquareBracket) { effects.consume(code) marker = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlCdata index = 0 return cdataOpenInside } // ASCII alphabetical. if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlpha)(code)) { effects.consume(code) marker = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlDeclaration // // Do not form containers. // tokenizer.concrete = true return self.interrupt ? ok : continuationDeclarationInside } return nok(code) } /** * After ` | * ^ * ``` * * @type {State} */ function commentOpenInside(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.dash) { effects.consume(code) // // Do not form containers. // tokenizer.concrete = true return self.interrupt ? ok : continuationDeclarationInside } return nok(code) } /** * After ` | &<]]> * ^^^^^^ * ``` * * @type {State} */ function cdataOpenInside(code) { const value = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.cdataOpeningString if (code === value.charCodeAt(index++)) { effects.consume(code) if (index === value.length) { // // Do not form containers. // tokenizer.concrete = true return self.interrupt ? ok : continuation } return cdataOpenInside } return nok(code) } /** * After ` | * ^ * ``` * * @type {State} */ function tagCloseStart(code) { if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlpha)(code)) { effects.consume(code) // @ts-expect-error: not null. buffer = String.fromCharCode(code) return tagName } return nok(code) } /** * In tag name. * * ```markdown * > | * ^^ * > | * ^^ * ``` * * @type {State} */ function tagName(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.slash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEndingOrSpace)(code) ) { const slash = code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.slash const name = buffer.toLowerCase() if (!slash && !closingTag && micromark_util_html_tag_name__WEBPACK_IMPORTED_MODULE_5__.htmlRawNames.includes(name)) { marker = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlRaw // // Do not form containers. // tokenizer.concrete = true return self.interrupt ? ok(code) : continuation(code) } if (micromark_util_html_tag_name__WEBPACK_IMPORTED_MODULE_5__.htmlBlockNames.includes(buffer.toLowerCase())) { marker = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlBasic if (slash) { effects.consume(code) return basicSelfClosing } // // Do not form containers. // tokenizer.concrete = true return self.interrupt ? ok(code) : continuation(code) } marker = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlComplete // Do not support complete HTML when interrupting. return self.interrupt && !self.parser.lazy[self.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code) } // ASCII alphanumerical and `-`. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.dash || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlphanumeric)(code)) { effects.consume(code) buffer += String.fromCharCode(code) return tagName } return nok(code) } /** * After closing slash of a basic tag name. * * ```markdown * > |
* ^ * ``` * * @type {State} */ function basicSelfClosing(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan) { effects.consume(code) // // Do not form containers. // tokenizer.concrete = true return self.interrupt ? ok : continuation } return nok(code) } /** * After closing slash of a complete tag name. * * ```markdown * > | * ^ * ``` * * @type {State} */ function completeClosingTagAfter(code) { if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)) { effects.consume(code) return completeClosingTagAfter } return completeEnd(code) } /** * At an attribute name. * * At first, this state is used after a complete tag name, after whitespace, * where it expects optional attributes or the end of the tag. * It is also reused after attributes, when expecting more optional * attributes. * * ```markdown * > | * ^ * > | * ^ * > | * ^ * > | * ^ * > | * ^ * ``` * * @type {State} */ function completeAttributeNameBefore(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.slash) { effects.consume(code) return completeEnd } // ASCII alphanumerical and `:` and `_`. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.colon || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.underscore || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlpha)(code)) { effects.consume(code) return completeAttributeName } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)) { effects.consume(code) return completeAttributeNameBefore } return completeEnd(code) } /** * In attribute name. * * ```markdown * > | * ^ * > | * ^ * > | * ^ * ``` * * @type {State} */ function completeAttributeName(code) { // ASCII alphanumerical and `-`, `.`, `:`, and `_`. if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.dash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.dot || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.colon || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.underscore || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlphanumeric)(code) ) { effects.consume(code) return completeAttributeName } return completeAttributeNameAfter(code) } /** * After attribute name, at an optional initializer, the end of the tag, or * whitespace. * * ```markdown * > | * ^ * > | * ^ * ``` * * @type {State} */ function completeAttributeNameAfter(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.equalsTo) { effects.consume(code) return completeAttributeValueBefore } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)) { effects.consume(code) return completeAttributeNameAfter } return completeAttributeNameBefore(code) } /** * Before unquoted, double quoted, or single quoted attribute value, allowing * whitespace. * * ```markdown * > | * ^ * > | * ^ * ``` * * @type {State} */ function completeAttributeValueBefore(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.lessThan || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.equalsTo || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.graveAccent ) { return nok(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.quotationMark || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.apostrophe) { effects.consume(code) markerB = code return completeAttributeValueQuoted } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)) { effects.consume(code) return completeAttributeValueBefore } return completeAttributeValueUnquoted(code) } /** * In double or single quoted attribute value. * * ```markdown * > | * ^ * > | * ^ * ``` * * @type {State} */ function completeAttributeValueQuoted(code) { if (code === markerB) { effects.consume(code) markerB = null return completeAttributeValueQuotedAfter } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) { return nok(code) } effects.consume(code) return completeAttributeValueQuoted } /** * In unquoted attribute value. * * ```markdown * > | * ^ * ``` * * @type {State} */ function completeAttributeValueUnquoted(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.quotationMark || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.apostrophe || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.slash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.lessThan || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.equalsTo || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.graveAccent || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEndingOrSpace)(code) ) { return completeAttributeNameAfter(code) } effects.consume(code) return completeAttributeValueUnquoted } /** * After double or single quoted attribute value, before whitespace or the * end of the tag. * * ```markdown * > | * ^ * ``` * * @type {State} */ function completeAttributeValueQuotedAfter(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.slash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code) ) { return completeAttributeNameBefore(code) } return nok(code) } /** * In certain circumstances of a complete tag where only an `>` is allowed. * * ```markdown * > | * ^ * ``` * * @type {State} */ function completeEnd(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan) { effects.consume(code) return completeAfter } return nok(code) } /** * After `>` in a complete tag. * * ```markdown * > | * ^ * ``` * * @type {State} */ function completeAfter(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) { // // Do not form containers. // tokenizer.concrete = true return continuation(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code)) { effects.consume(code) return completeAfter } return nok(code) } /** * In continuation of any HTML kind. * * ```markdown * > | * ^ * ``` * * @type {State} */ function continuation(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.dash && marker === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlComment) { effects.consume(code) return continuationCommentInside } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.lessThan && marker === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlRaw) { effects.consume(code) return continuationRawTagOpen } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan && marker === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlDeclaration) { effects.consume(code) return continuationClose } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.questionMark && marker === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlInstruction) { effects.consume(code) return continuationDeclarationInside } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.rightSquareBracket && marker === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlCdata) { effects.consume(code) return continuationCdataInside } if ( (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code) && (marker === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlBasic || marker === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlComplete) ) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.htmlFlowData) return effects.check( blankLineBefore, continuationAfter, continuationStart )(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.htmlFlowData) return continuationStart(code) } effects.consume(code) return continuation } /** * In continuation, at eol. * * ```markdown * > | * ^ * | asd * ``` * * @type {State} */ function continuationStart(code) { return effects.check( nonLazyContinuationStart, continuationStartNonLazy, continuationAfter )(code) } /** * In continuation, at eol, before non-lazy content. * * ```markdown * > | * ^ * | asd * ``` * * @type {State} */ function continuationStartNonLazy(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding) return continuationBefore } /** * In continuation, before non-lazy content. * * ```markdown * | * > | asd * ^ * ``` * * @type {State} */ function continuationBefore(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) { return continuationStart(code) } effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.htmlFlowData) return continuation(code) } /** * In comment continuation, after one `-`, expecting another. * * ```markdown * > | * ^ * ``` * * @type {State} */ function continuationCommentInside(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.dash) { effects.consume(code) return continuationDeclarationInside } return continuation(code) } /** * In raw continuation, after `<`, at `/`. * * ```markdown * > | * ^ * ``` * * @type {State} */ function continuationRawTagOpen(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.slash) { effects.consume(code) buffer = '' return continuationRawEndTag } return continuation(code) } /** * In raw continuation, after ` | * ^^^^^^ * ``` * * @type {State} */ function continuationRawEndTag(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan) { const name = buffer.toLowerCase() if (micromark_util_html_tag_name__WEBPACK_IMPORTED_MODULE_5__.htmlRawNames.includes(name)) { effects.consume(code) return continuationClose } return continuation(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.asciiAlpha)(code) && buffer.length < micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlRawSizeMax) { effects.consume(code) // @ts-expect-error: not null. buffer += String.fromCharCode(code) return continuationRawEndTag } return continuation(code) } /** * In cdata continuation, after `]`, expecting `]>`. * * ```markdown * > | &<]]> * ^ * ``` * * @type {State} */ function continuationCdataInside(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.rightSquareBracket) { effects.consume(code) return continuationDeclarationInside } return continuation(code) } /** * In declaration or instruction continuation, at `>`. * * ```markdown * > | * ^ * > | * ^ * > | * ^ * > | * ^ * > | &<]]> * ^ * ``` * * @type {State} */ function continuationDeclarationInside(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.greaterThan) { effects.consume(code) return continuationClose } // More dashes. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.dash && marker === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.htmlComment) { effects.consume(code) return continuationDeclarationInside } return continuation(code) } /** * In closed continuation: everything we get until the eol/eof is part of it. * * ```markdown * > | * ^ * ``` * * @type {State} */ function continuationClose(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.htmlFlowData) return continuationAfter(code) } effects.consume(code) return continuationClose } /** * Done. * * ```markdown * > | * ^ * ``` * * @type {State} */ function continuationAfter(code) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.htmlFlow) // // Feel free to interrupt. // tokenizer.interrupt = false // // No longer concrete. // tokenizer.concrete = false return ok(code) } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeNonLazyContinuationStart(effects, ok, nok) { const self = this return start /** * At eol, before continuation. * * ```markdown * > | * ```js * ^ * | b * ``` * * @type {State} */ function start(code) { if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding) return after } return nok(code) } /** * A continuation. * * ```markdown * | * ```js * > | b * ^ * ``` * * @type {State} */ function after(code) { return self.parser.lazy[self.now().line] ? nok(code) : ok(code) } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeBlankLineBefore(effects, ok, nok) { return start /** * Before eol, expecting blank line. * * ```markdown * > |
* ^ * | * ``` * * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code), 'expected a line ending') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding) return effects.attempt(_blank_line_js__WEBPACK_IMPORTED_MODULE_6__.blankLine, ok, nok) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/html-text.js": /*!*********************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/html-text.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ htmlText: () => (/* binding */ htmlText) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Code} Code * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const htmlText = {name: 'htmlText', tokenize: tokenizeHtmlText} /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeHtmlText(effects, ok, nok) { const self = this /** @type {NonNullable | undefined} */ let marker /** @type {number} */ let index /** @type {State} */ let returnState return start /** * Start of HTML (text). * * ```markdown * > | a c * ^ * ``` * * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.lessThan, 'expected `<`') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.htmlText) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.htmlTextData) effects.consume(code) return open } /** * After `<`, at tag name or other stuff. * * ```markdown * > | a c * ^ * > | a c * ^ * > | a c * ^ * ``` * * @type {State} */ function open(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.exclamationMark) { effects.consume(code) return declarationOpen } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.slash) { effects.consume(code) return tagCloseStart } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.questionMark) { effects.consume(code) return instruction } // ASCII alphabetical. if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlpha)(code)) { effects.consume(code) return tagOpen } return nok(code) } /** * After ` | a c * ^ * > | a c * ^ * > | a &<]]> c * ^ * ``` * * @type {State} */ function declarationOpen(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash) { effects.consume(code) return commentOpenInside } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.leftSquareBracket) { effects.consume(code) index = 0 return cdataOpenInside } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlpha)(code)) { effects.consume(code) return declaration } return nok(code) } /** * In a comment, after ` | a c * ^ * ``` * * @type {State} */ function commentOpenInside(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash) { effects.consume(code) return commentEnd } return nok(code) } /** * In comment. * * ```markdown * > | a c * ^ * ``` * * @type {State} */ function comment(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof) { return nok(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash) { effects.consume(code) return commentClose } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { returnState = comment return lineEndingBefore(code) } effects.consume(code) return comment } /** * In comment, after `-`. * * ```markdown * > | a c * ^ * ``` * * @type {State} */ function commentClose(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash) { effects.consume(code) return commentEnd } return comment(code) } /** * In comment, after `--`. * * ```markdown * > | a c * ^ * ``` * * @type {State} */ function commentEnd(code) { return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan ? end(code) : code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash ? commentClose(code) : comment(code) } /** * After ` | a &<]]> b * ^^^^^^ * ``` * * @type {State} */ function cdataOpenInside(code) { const value = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.cdataOpeningString if (code === value.charCodeAt(index++)) { effects.consume(code) return index === value.length ? cdata : cdataOpenInside } return nok(code) } /** * In CDATA. * * ```markdown * > | a &<]]> b * ^^^ * ``` * * @type {State} */ function cdata(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof) { return nok(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.rightSquareBracket) { effects.consume(code) return cdataClose } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { returnState = cdata return lineEndingBefore(code) } effects.consume(code) return cdata } /** * In CDATA, after `]`, at another `]`. * * ```markdown * > | a &<]]> b * ^ * ``` * * @type {State} */ function cdataClose(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.rightSquareBracket) { effects.consume(code) return cdataEnd } return cdata(code) } /** * In CDATA, after `]]`, at `>`. * * ```markdown * > | a &<]]> b * ^ * ``` * * @type {State} */ function cdataEnd(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan) { return end(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.rightSquareBracket) { effects.consume(code) return cdataEnd } return cdata(code) } /** * In declaration. * * ```markdown * > | a c * ^ * ``` * * @type {State} */ function declaration(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan) { return end(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { returnState = declaration return lineEndingBefore(code) } effects.consume(code) return declaration } /** * In instruction. * * ```markdown * > | a c * ^ * ``` * * @type {State} */ function instruction(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof) { return nok(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.questionMark) { effects.consume(code) return instructionClose } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { returnState = instruction return lineEndingBefore(code) } effects.consume(code) return instruction } /** * In instruction, after `?`, at `>`. * * ```markdown * > | a c * ^ * ``` * * @type {State} */ function instructionClose(code) { return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan ? end(code) : instruction(code) } /** * After ` | a c * ^ * ``` * * @type {State} */ function tagCloseStart(code) { // ASCII alphabetical. if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlpha)(code)) { effects.consume(code) return tagClose } return nok(code) } /** * After ` | a c * ^ * ``` * * @type {State} */ function tagClose(code) { // ASCII alphanumerical and `-`. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlphanumeric)(code)) { effects.consume(code) return tagClose } return tagCloseBetween(code) } /** * In closing tag, after tag name. * * ```markdown * > | a c * ^ * ``` * * @type {State} */ function tagCloseBetween(code) { if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { returnState = tagCloseBetween return lineEndingBefore(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) { effects.consume(code) return tagCloseBetween } return end(code) } /** * After ` | a c * ^ * ``` * * @type {State} */ function tagOpen(code) { // ASCII alphanumerical and `-`. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlphanumeric)(code)) { effects.consume(code) return tagOpen } if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.slash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEndingOrSpace)(code) ) { return tagOpenBetween(code) } return nok(code) } /** * In opening tag, after tag name. * * ```markdown * > | a c * ^ * ``` * * @type {State} */ function tagOpenBetween(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.slash) { effects.consume(code) return end } // ASCII alphabetical and `:` and `_`. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.colon || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.underscore || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlpha)(code)) { effects.consume(code) return tagOpenAttributeName } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { returnState = tagOpenBetween return lineEndingBefore(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) { effects.consume(code) return tagOpenBetween } return end(code) } /** * In attribute name. * * ```markdown * > | a d * ^ * ``` * * @type {State} */ function tagOpenAttributeName(code) { // ASCII alphabetical and `-`, `.`, `:`, and `_`. if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dot || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.colon || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.underscore || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiAlphanumeric)(code) ) { effects.consume(code) return tagOpenAttributeName } return tagOpenAttributeNameAfter(code) } /** * After attribute name, before initializer, the end of the tag, or * whitespace. * * ```markdown * > | a d * ^ * ``` * * @type {State} */ function tagOpenAttributeNameAfter(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.equalsTo) { effects.consume(code) return tagOpenAttributeValueBefore } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { returnState = tagOpenAttributeNameAfter return lineEndingBefore(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) { effects.consume(code) return tagOpenAttributeNameAfter } return tagOpenBetween(code) } /** * Before unquoted, double quoted, or single quoted attribute value, allowing * whitespace. * * ```markdown * > | a e * ^ * ``` * * @type {State} */ function tagOpenAttributeValueBefore(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.lessThan || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.equalsTo || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent ) { return nok(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.quotationMark || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.apostrophe) { effects.consume(code) marker = code return tagOpenAttributeValueQuoted } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { returnState = tagOpenAttributeValueBefore return lineEndingBefore(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) { effects.consume(code) return tagOpenAttributeValueBefore } effects.consume(code) return tagOpenAttributeValueUnquoted } /** * In double or single quoted attribute value. * * ```markdown * > | a e * ^ * ``` * * @type {State} */ function tagOpenAttributeValueQuoted(code) { if (code === marker) { effects.consume(code) marker = undefined return tagOpenAttributeValueQuotedAfter } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof) { return nok(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { returnState = tagOpenAttributeValueQuoted return lineEndingBefore(code) } effects.consume(code) return tagOpenAttributeValueQuoted } /** * In unquoted attribute value. * * ```markdown * > | a e * ^ * ``` * * @type {State} */ function tagOpenAttributeValueUnquoted(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.quotationMark || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.apostrophe || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.lessThan || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.equalsTo || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.graveAccent ) { return nok(code) } if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.slash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEndingOrSpace)(code) ) { return tagOpenBetween(code) } effects.consume(code) return tagOpenAttributeValueUnquoted } /** * After double or single quoted attribute value, before whitespace or the end * of the tag. * * ```markdown * > | a e * ^ * ``` * * @type {State} */ function tagOpenAttributeValueQuotedAfter(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.slash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEndingOrSpace)(code) ) { return tagOpenBetween(code) } return nok(code) } /** * In certain circumstances of a tag where only an `>` is allowed. * * ```markdown * > | a e * ^ * ``` * * @type {State} */ function end(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.greaterThan) { effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.htmlTextData) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.htmlText) return ok } return nok(code) } /** * At eol. * * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about * > empty tokens. * * ```markdown * > | a * ``` * * @type {State} */ function lineEndingBefore(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(returnState, 'expected return state') ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code), 'expected eol') effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.htmlTextData) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) return lineEndingAfter } /** * After eol, at optional whitespace. * * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about * > empty tokens. * * ```markdown * | a * ^ * ``` * * @type {State} */ function lineEndingAfter(code) { // Always populated by defaults. (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)( self.parser.constructs.disable.null, 'expected `disable.null` to be populated' ) return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code) ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__.factorySpace)( effects, lineEndingAfterPrefix, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix, self.parser.constructs.disable.null.includes('codeIndented') ? undefined : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.tabSize )(code) : lineEndingAfterPrefix(code) } /** * After eol, after optional whitespace. * * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about * > empty tokens. * * ```markdown * | a * ^ * ``` * * @type {State} */ function lineEndingAfterPrefix(code) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.htmlTextData) return returnState(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/label-end.js": /*!*********************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/label-end.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ labelEnd: () => (/* binding */ labelEnd) /* harmony export */ }); /* harmony import */ var micromark_factory_destination__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! micromark-factory-destination */ "./node_modules/micromark-factory-destination/dev/index.js"); /* harmony import */ var micromark_factory_label__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! micromark-factory-label */ "./node_modules/micromark-factory-label/dev/index.js"); /* harmony import */ var micromark_factory_title__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! micromark-factory-title */ "./node_modules/micromark-factory-title/dev/index.js"); /* harmony import */ var micromark_factory_whitespace__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! micromark-factory-whitespace */ "./node_modules/micromark-factory-whitespace/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-chunked */ "./node_modules/micromark-util-chunked/dev/index.js"); /* harmony import */ var micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-normalize-identifier */ "./node_modules/micromark-util-normalize-identifier/dev/index.js"); /* harmony import */ var micromark_util_resolve_all__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-resolve-all */ "./node_modules/micromark-util-resolve-all/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').Event} Event * @typedef {import('micromark-util-types').Resolver} Resolver * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').Token} Token * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const labelEnd = { name: 'labelEnd', tokenize: tokenizeLabelEnd, resolveTo: resolveToLabelEnd, resolveAll: resolveAllLabelEnd } /** @type {Construct} */ const resourceConstruct = {tokenize: tokenizeResource} /** @type {Construct} */ const referenceFullConstruct = {tokenize: tokenizeReferenceFull} /** @type {Construct} */ const referenceCollapsedConstruct = {tokenize: tokenizeReferenceCollapsed} /** @type {Resolver} */ function resolveAllLabelEnd(events) { let index = -1 while (++index < events.length) { const token = events[index][1] if ( token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelImage || token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelLink || token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelEnd ) { // Remove the marker. events.splice(index + 1, token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelImage ? 4 : 2) token.type = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.data index++ } } return events } /** @type {Resolver} */ function resolveToLabelEnd(events, context) { let index = events.length let offset = 0 /** @type {Token} */ let token /** @type {number | undefined} */ let open /** @type {number | undefined} */ let close /** @type {Array} */ let media // Find an opening. while (index--) { token = events[index][1] if (open) { // If we see another link, or inactive link label, we’ve been here before. if ( token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.link || (token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelLink && token._inactive) ) { break } // Mark other link openings as inactive, as we can’t have links in // links. if (events[index][0] === 'enter' && token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelLink) { token._inactive = true } } else if (close) { if ( events[index][0] === 'enter' && (token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelImage || token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelLink) && !token._balanced ) { open = index if (token.type !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelLink) { offset = 2 break } } } else if (token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelEnd) { close = index } } (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(open !== undefined, '`open` is supposed to be found') ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(close !== undefined, '`close` is supposed to be found') const group = { type: events[open][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelLink ? micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.link : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.image, start: Object.assign({}, events[open][1].start), end: Object.assign({}, events[events.length - 1][1].end) } const label = { type: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.label, start: Object.assign({}, events[open][1].start), end: Object.assign({}, events[close][1].end) } const text = { type: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelText, start: Object.assign({}, events[open + offset + 2][1].end), end: Object.assign({}, events[close - 2][1].start) } media = [ ['enter', group, context], ['enter', label, context] ] // Opening marker. media = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(media, events.slice(open + 1, open + offset + 3)) // Text open. media = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(media, [['enter', text, context]]) // Always populated by defaults. ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)( context.parser.constructs.insideSpan.null, 'expected `insideSpan.null` to be populated' ) // Between. media = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)( media, (0,micromark_util_resolve_all__WEBPACK_IMPORTED_MODULE_3__.resolveAll)( context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context ) ) // Text close, marker close, label close. media = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(media, [ ['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context] ]) // Reference, resource, or so. media = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(media, events.slice(close + 1)) // Media close. media = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(media, [['exit', group, context]]) ;(0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.splice)(events, open, events.length, media) return events } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeLabelEnd(effects, ok, nok) { const self = this let index = self.events.length /** @type {Token} */ let labelStart /** @type {boolean} */ let defined // Find an opening. while (index--) { if ( (self.events[index][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelImage || self.events[index][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelLink) && !self.events[index][1]._balanced ) { labelStart = self.events[index][1] break } } return start /** * Start of label end. * * ```markdown * > | [a](b) c * ^ * > | [a][b] c * ^ * > | [a][] b * ^ * > | [a] b * ``` * * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.rightSquareBracket, 'expected `]`') // If there is not an okay opening. if (!labelStart) { return nok(code) } // If the corresponding label (link) start is marked as inactive, // it means we’d be wrapping a link, like this: // // ```markdown // > | a [b [c](d) e](f) g. // ^ // ``` // // We can’t have that, so it’s just balanced brackets. if (labelStart._inactive) { return labelEndNok(code) } defined = self.parser.defined.includes( (0,micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_5__.normalizeIdentifier)( self.sliceSerialize({start: labelStart.end, end: self.now()}) ) ) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelEnd) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelMarker) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.labelEnd) return after } /** * After `]`. * * ```markdown * > | [a](b) c * ^ * > | [a][b] c * ^ * > | [a][] b * ^ * > | [a] b * ^ * ``` * * @type {State} */ function after(code) { // Note: `markdown-rs` also parses GFM footnotes here, which for us is in // an extension. // Resource (`[asd](fgh)`)? if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.leftParenthesis) { return effects.attempt( resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok )(code) } // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.leftSquareBracket) { return effects.attempt( referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok )(code) } // Shortcut (`[asd]`) reference? return defined ? labelEndOk(code) : labelEndNok(code) } /** * After `]`, at `[`, but not at a full reference. * * > 👉 **Note**: we only get here if the label is defined. * * ```markdown * > | [a][] b * ^ * > | [a] b * ^ * ``` * * @type {State} */ function referenceNotFull(code) { return effects.attempt( referenceCollapsedConstruct, labelEndOk, labelEndNok )(code) } /** * Done, we found something. * * ```markdown * > | [a](b) c * ^ * > | [a][b] c * ^ * > | [a][] b * ^ * > | [a] b * ^ * ``` * * @type {State} */ function labelEndOk(code) { // Note: `markdown-rs` does a bunch of stuff here. return ok(code) } /** * Done, it’s nothing. * * There was an okay opening, but we didn’t match anything. * * ```markdown * > | [a](b c * ^ * > | [a][b c * ^ * > | [a] b * ^ * ``` * * @type {State} */ function labelEndNok(code) { labelStart._balanced = true return nok(code) } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeResource(effects, ok, nok) { return resourceStart /** * At a resource. * * ```markdown * > | [a](b) c * ^ * ``` * * @type {State} */ function resourceStart(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.leftParenthesis, 'expected left paren') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.resource) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.resourceMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.resourceMarker) return resourceBefore } /** * In resource, after `(`, at optional whitespace. * * ```markdown * > | [a](b) c * ^ * ``` * * @type {State} */ function resourceBefore(code) { return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_6__.markdownLineEndingOrSpace)(code) ? (0,micromark_factory_whitespace__WEBPACK_IMPORTED_MODULE_7__.factoryWhitespace)(effects, resourceOpen)(code) : resourceOpen(code) } /** * In resource, after optional whitespace, at `)` or a destination. * * ```markdown * > | [a](b) c * ^ * ``` * * @type {State} */ function resourceOpen(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.rightParenthesis) { return resourceEnd(code) } return (0,micromark_factory_destination__WEBPACK_IMPORTED_MODULE_8__.factoryDestination)( effects, resourceDestinationAfter, resourceDestinationMissing, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.resourceDestination, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.resourceDestinationLiteral, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.resourceDestinationLiteralMarker, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.resourceDestinationRaw, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.resourceDestinationString, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_9__.constants.linkResourceDestinationBalanceMax )(code) } /** * In resource, after destination, at optional whitespace. * * ```markdown * > | [a](b) c * ^ * ``` * * @type {State} */ function resourceDestinationAfter(code) { return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_6__.markdownLineEndingOrSpace)(code) ? (0,micromark_factory_whitespace__WEBPACK_IMPORTED_MODULE_7__.factoryWhitespace)(effects, resourceBetween)(code) : resourceEnd(code) } /** * At invalid destination. * * ```markdown * > | [a](<<) b * ^ * ``` * * @type {State} */ function resourceDestinationMissing(code) { return nok(code) } /** * In resource, after destination and whitespace, at `(` or title. * * ```markdown * > | [a](b ) c * ^ * ``` * * @type {State} */ function resourceBetween(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.quotationMark || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.apostrophe || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.leftParenthesis ) { return (0,micromark_factory_title__WEBPACK_IMPORTED_MODULE_10__.factoryTitle)( effects, resourceTitleAfter, nok, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.resourceTitle, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.resourceTitleMarker, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.resourceTitleString )(code) } return resourceEnd(code) } /** * In resource, after title, at optional whitespace. * * ```markdown * > | [a](b "c") d * ^ * ``` * * @type {State} */ function resourceTitleAfter(code) { return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_6__.markdownLineEndingOrSpace)(code) ? (0,micromark_factory_whitespace__WEBPACK_IMPORTED_MODULE_7__.factoryWhitespace)(effects, resourceEnd)(code) : resourceEnd(code) } /** * In resource, at `)`. * * ```markdown * > | [a](b) d * ^ * ``` * * @type {State} */ function resourceEnd(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.rightParenthesis) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.resourceMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.resourceMarker) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.resource) return ok } return nok(code) } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeReferenceFull(effects, ok, nok) { const self = this return referenceFull /** * In a reference (full), at the `[`. * * ```markdown * > | [a][b] d * ^ * ``` * * @type {State} */ function referenceFull(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.leftSquareBracket, 'expected left bracket') return micromark_factory_label__WEBPACK_IMPORTED_MODULE_11__.factoryLabel.call( self, effects, referenceFullAfter, referenceFullMissing, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.reference, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.referenceMarker, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.referenceString )(code) } /** * In a reference (full), after `]`. * * ```markdown * > | [a][b] d * ^ * ``` * * @type {State} */ function referenceFullAfter(code) { return self.parser.defined.includes( (0,micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_5__.normalizeIdentifier)( self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) ) ) ? ok(code) : nok(code) } /** * In reference (full) that was missing. * * ```markdown * > | [a][b d * ^ * ``` * * @type {State} */ function referenceFullMissing(code) { return nok(code) } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeReferenceCollapsed(effects, ok, nok) { return referenceCollapsedStart /** * In reference (collapsed), at `[`. * * > 👉 **Note**: we only get here if the label is defined. * * ```markdown * > | [a][] d * ^ * ``` * * @type {State} */ function referenceCollapsedStart(code) { // We only attempt a collapsed label if there’s a `[`. ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.leftSquareBracket, 'expected left bracket') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.reference) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.referenceMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.referenceMarker) return referenceCollapsedOpen } /** * In reference (collapsed), at `]`. * * > 👉 **Note**: we only get here if the label is defined. * * ```markdown * > | [a][] d * ^ * ``` * * @type {State} */ function referenceCollapsedOpen(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.codes.rightSquareBracket) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.referenceMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.referenceMarker) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.reference) return ok } return nok(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/label-start-image.js": /*!*****************************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/label-start-image.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ labelStartImage: () => (/* binding */ labelStartImage) /* harmony export */ }); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /* harmony import */ var _label_end_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./label-end.js */ "./node_modules/micromark-core-commonmark/dev/lib/label-end.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const labelStartImage = { name: 'labelStartImage', tokenize: tokenizeLabelStartImage, resolveAll: _label_end_js__WEBPACK_IMPORTED_MODULE_0__.labelEnd.resolveAll } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeLabelStartImage(effects, ok, nok) { const self = this return start /** * Start of label (image) start. * * ```markdown * > | a ![b] c * ^ * ``` * * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.exclamationMark, 'expected `!`') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.labelImage) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.labelImageMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.labelImageMarker) return open } /** * After `!`, at `[`. * * ```markdown * > | a ![b] c * ^ * ``` * * @type {State} */ function open(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.leftSquareBracket) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.labelMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.labelMarker) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.labelImage) return after } return nok(code) } /** * After `![`. * * ```markdown * > | a ![b] c * ^ * ``` * * This is needed in because, when GFM footnotes are enabled, images never * form when started with a `^`. * Instead, links form: * * ```markdown * ![^a](b) * * ![^a][b] * * [b]: c * ``` * * ```html *

!^a

*

!^a

* ``` * * @type {State} */ function after(code) { // To do: use a new field to do this, this is still needed for // `micromark-extension-gfm-footnote`, but the `label-start-link` // behavior isn’t. // Hidden footnotes hook. /* c8 ignore next 3 */ return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.caret && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/label-start-link.js": /*!****************************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/label-start-link.js ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ labelStartLink: () => (/* binding */ labelStartLink) /* harmony export */ }); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /* harmony import */ var _label_end_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./label-end.js */ "./node_modules/micromark-core-commonmark/dev/lib/label-end.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const labelStartLink = { name: 'labelStartLink', tokenize: tokenizeLabelStartLink, resolveAll: _label_end_js__WEBPACK_IMPORTED_MODULE_0__.labelEnd.resolveAll } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeLabelStartLink(effects, ok, nok) { const self = this return start /** * Start of label (link) start. * * ```markdown * > | a [b] c * ^ * ``` * * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.leftSquareBracket, 'expected `[`') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.labelLink) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.labelMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.labelMarker) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.labelLink) return after } /** @type {State} */ function after(code) { // To do: this isn’t needed in `micromark-extension-gfm-footnote`, // remove. // Hidden footnotes hook. /* c8 ignore next 3 */ return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.caret && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/line-ending.js": /*!***********************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/line-ending.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ lineEnding: () => (/* binding */ lineEnding) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const lineEnding = {name: 'lineEnding', tokenize: tokenizeLineEnding} /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeLineEnding(effects, ok) { return start /** @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code), 'expected eol') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__.factorySpace)(effects, ok, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/list.js": /*!****************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/list.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ list: () => (/* binding */ list) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /* harmony import */ var _blank_line_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./blank-line.js */ "./node_modules/micromark-core-commonmark/dev/lib/blank-line.js"); /* harmony import */ var _thematic_break_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./thematic-break.js */ "./node_modules/micromark-core-commonmark/dev/lib/thematic-break.js"); /** * @typedef {import('micromark-util-types').Code} Code * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').ContainerState} ContainerState * @typedef {import('micromark-util-types').Exiter} Exiter * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const list = { name: 'list', tokenize: tokenizeListStart, continuation: {tokenize: tokenizeListContinuation}, exit: tokenizeListEnd } /** @type {Construct} */ const listItemPrefixWhitespaceConstruct = { tokenize: tokenizeListItemPrefixWhitespace, partial: true } /** @type {Construct} */ const indentConstruct = {tokenize: tokenizeIndent, partial: true} // To do: `markdown-rs` parses list items on their own and later stitches them // together. /** * @type {Tokenizer} * @this {TokenizeContext} */ function tokenizeListStart(effects, ok, nok) { const self = this const tail = self.events[self.events.length - 1] let initialSize = tail && tail[1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.linePrefix ? tail[2].sliceSerialize(tail[1], true).length : 0 let size = 0 return start /** @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(self.containerState, 'expected state') const kind = self.containerState.type || (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.asterisk || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.plusSign || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.dash ? micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listUnordered : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listOrdered) if ( kind === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listUnordered ? !self.containerState.marker || code === self.containerState.marker : (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiDigit)(code) ) { if (!self.containerState.type) { self.containerState.type = kind effects.enter(kind, {_container: true}) } if (kind === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listUnordered) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemPrefix) return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.asterisk || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.dash ? effects.check(_thematic_break_js__WEBPACK_IMPORTED_MODULE_4__.thematicBreak, nok, atMarker)(code) : atMarker(code) } if (!self.interrupt || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.digit1) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemPrefix) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemValue) return inside(code) } } return nok(code) } /** @type {State} */ function inside(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(self.containerState, 'expected state') if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.asciiDigit)(code) && ++size < micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.constants.listItemValueSizeMax) { effects.consume(code) return inside } if ( (!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.rightParenthesis || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.dot) ) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemValue) return atMarker(code) } return nok(code) } /** * @type {State} **/ function atMarker(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(self.containerState, 'expected state') ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(code !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof, 'eof (`null`) is not a marker') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemMarker) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemMarker) self.containerState.marker = self.containerState.marker || code return effects.check( _blank_line_js__WEBPACK_IMPORTED_MODULE_6__.blankLine, // Can’t be empty when interrupting. self.interrupt ? nok : onBlank, effects.attempt( listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix ) ) } /** @type {State} */ function onBlank(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(self.containerState, 'expected state') self.containerState.initialBlankLine = true initialSize++ return endOfPrefix(code) } /** @type {State} */ function otherPrefix(code) { if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemPrefixWhitespace) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemPrefixWhitespace) return endOfPrefix } return nok(code) } /** @type {State} */ function endOfPrefix(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(self.containerState, 'expected state') self.containerState.size = initialSize + self.sliceSerialize(effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemPrefix), true).length return ok(code) } } /** * @type {Tokenizer} * @this {TokenizeContext} */ function tokenizeListContinuation(effects, ok, nok) { const self = this ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(self.containerState, 'expected state') self.containerState._closeFlow = undefined return effects.check(_blank_line_js__WEBPACK_IMPORTED_MODULE_6__.blankLine, onBlank, notBlank) /** @type {State} */ function onBlank(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(self.containerState, 'expected state') ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(typeof self.containerState.size === 'number', 'expected size') self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine // We have a blank line. // Still, try to consume at most the items size. return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_7__.factorySpace)( effects, ok, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemIndent, self.containerState.size + 1 )(code) } /** @type {State} */ function notBlank(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(self.containerState, 'expected state') if (self.containerState.furtherBlankLines || !(0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code)) { self.containerState.furtherBlankLines = undefined self.containerState.initialBlankLine = undefined return notInCurrentItem(code) } self.containerState.furtherBlankLines = undefined self.containerState.initialBlankLine = undefined return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) } /** @type {State} */ function notInCurrentItem(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(self.containerState, 'expected state') // While we do continue, we signal that the flow should be closed. self.containerState._closeFlow = true // As we’re closing flow, we’re no longer interrupting. self.interrupt = undefined // Always populated by defaults. ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)( self.parser.constructs.disable.null, 'expected `disable.null` to be populated' ) return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_7__.factorySpace)( effects, effects.attempt(list, ok, nok), micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.linePrefix, self.parser.constructs.disable.null.includes('codeIndented') ? undefined : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.constants.tabSize )(code) } } /** * @type {Tokenizer} * @this {TokenizeContext} */ function tokenizeIndent(effects, ok, nok) { const self = this ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(self.containerState, 'expected state') ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(typeof self.containerState.size === 'number', 'expected size') return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_7__.factorySpace)( effects, afterPrefix, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemIndent, self.containerState.size + 1 ) /** @type {State} */ function afterPrefix(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(self.containerState, 'expected state') const tail = self.events[self.events.length - 1] return tail && tail[1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemIndent && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code) } } /** * @type {Exiter} * @this {TokenizeContext} */ function tokenizeListEnd(effects) { (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(this.containerState, 'expected state') ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(typeof this.containerState.type === 'string', 'expected type') effects.exit(this.containerState.type) } /** * @type {Tokenizer} * @this {TokenizeContext} */ function tokenizeListItemPrefixWhitespace(effects, ok, nok) { const self = this // Always populated by defaults. ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)( self.parser.constructs.disable.null, 'expected `disable.null` to be populated' ) return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_7__.factorySpace)( effects, afterPrefix, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemPrefixWhitespace, self.parser.constructs.disable.null.includes('codeIndented') ? undefined : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.constants.tabSize + 1 ) /** @type {State} */ function afterPrefix(code) { const tail = self.events[self.events.length - 1] return !(0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code) && tail && tail[1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemPrefixWhitespace ? ok(code) : nok(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/setext-underline.js": /*!****************************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/setext-underline.js ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ setextUnderline: () => (/* binding */ setextUnderline) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Code} Code * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').Resolver} Resolver * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const setextUnderline = { name: 'setextUnderline', tokenize: tokenizeSetextUnderline, resolveTo: resolveToSetextUnderline } /** @type {Resolver} */ function resolveToSetextUnderline(events, context) { // To do: resolve like `markdown-rs`. let index = events.length /** @type {number | undefined} */ let content /** @type {number | undefined} */ let text /** @type {number | undefined} */ let definition // Find the opening of the content. // It’ll always exist: we don’t tokenize if it isn’t there. while (index--) { if (events[index][0] === 'enter') { if (events[index][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.content) { content = index break } if (events[index][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.paragraph) { text = index } } // Exit else { if (events[index][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.content) { // Remove the content end (if needed we’ll add it later) events.splice(index, 1) } if (!definition && events[index][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.definition) { definition = index } } } (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(text !== undefined, 'expected a `text` index to be found') ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(content !== undefined, 'expected a `text` index to be found') const heading = { type: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.setextHeading, start: Object.assign({}, events[text][1].start), end: Object.assign({}, events[events.length - 1][1].end) } // Change the paragraph to setext heading text. events[text][1].type = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.setextHeadingText // If we have definitions in the content, we’ll keep on having content, // but we need move it. if (definition) { events.splice(text, 0, ['enter', heading, context]) events.splice(definition + 1, 0, ['exit', events[content][1], context]) events[content][1].end = Object.assign({}, events[definition][1].end) } else { events[content][1] = heading } // Add the heading exit at the end. events.push(['exit', heading, context]) return events } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeSetextUnderline(effects, ok, nok) { const self = this /** @type {NonNullable} */ let marker return start /** * At start of heading (setext) underline. * * ```markdown * | aa * > | == * ^ * ``` * * @type {State} */ function start(code) { let index = self.events.length /** @type {boolean | undefined} */ let paragraph ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.dash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.equalsTo, 'expected `=` or `-`' ) // Find an opening. while (index--) { // Skip enter/exit of line ending, line prefix, and content. // We can now either have a definition or a paragraph. if ( self.events[index][1].type !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding && self.events[index][1].type !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.linePrefix && self.events[index][1].type !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.content ) { paragraph = self.events[index][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.paragraph break } } // To do: handle lazy/pierce like `markdown-rs`. // To do: parse indent like `markdown-rs`. if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.setextHeadingLine) marker = code return before(code) } return nok(code) } /** * After optional whitespace, at `-` or `=`. * * ```markdown * | aa * > | == * ^ * ``` * * @type {State} */ function before(code) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.setextHeadingLineSequence) return inside(code) } /** * In sequence. * * ```markdown * | aa * > | == * ^ * ``` * * @type {State} */ function inside(code) { if (code === marker) { effects.consume(code) return inside } effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.setextHeadingLineSequence) return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code) ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_4__.factorySpace)(effects, after, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineSuffix)(code) : after(code) } /** * After sequence, after optional whitespace. * * ```markdown * | aa * > | == * ^ * ``` * * @type {State} */ function after(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.setextHeadingLine) return ok(code) } return nok(code) } } /***/ }), /***/ "./node_modules/micromark-core-commonmark/dev/lib/thematic-break.js": /*!**************************************************************************!*\ !*** ./node_modules/micromark-core-commonmark/dev/lib/thematic-break.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ thematicBreak: () => (/* binding */ thematicBreak) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Code} Code * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** @type {Construct} */ const thematicBreak = { name: 'thematicBreak', tokenize: tokenizeThematicBreak } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeThematicBreak(effects, ok, nok) { let size = 0 /** @type {NonNullable} */ let marker return start /** * Start of thematic break. * * ```markdown * > | *** * ^ * ``` * * @type {State} */ function start(code) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.thematicBreak) // To do: parse indent like `markdown-rs`. return before(code) } /** * After optional whitespace, at marker. * * ```markdown * > | *** * ^ * ``` * * @type {State} */ function before(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.asterisk || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.dash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.underscore, 'expected `*`, `-`, or `_`' ) marker = code return atBreak(code) } /** * After something, before something else. * * ```markdown * > | *** * ^ * ``` * * @type {State} */ function atBreak(code) { if (code === marker) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.thematicBreakSequence) return sequence(code) } if ( size >= micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.thematicBreakMarkerCountMin && (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownLineEnding)(code)) ) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.thematicBreak) return ok(code) } return nok(code) } /** * In sequence. * * ```markdown * > | *** * ^ * ``` * * @type {State} */ function sequence(code) { if (code === marker) { effects.consume(code) size++ return sequence } effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.thematicBreakSequence) return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_4__.markdownSpace)(code) ? (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_5__.factorySpace)(effects, atBreak, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.whitespace)(code) : atBreak(code) } } /***/ }), /***/ "./node_modules/micromark-extension-gfm-autolink-literal/dev/lib/html.js": /*!*******************************************************************************!*\ !*** ./node_modules/micromark-extension-gfm-autolink-literal/dev/lib/html.js ***! \*******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ gfmAutolinkLiteralHtml: () => (/* binding */ gfmAutolinkLiteralHtml) /* harmony export */ }); /* harmony import */ var micromark_util_sanitize_uri__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-sanitize-uri */ "./node_modules/micromark-util-sanitize-uri/dev/index.js"); /** * @typedef {import('micromark-util-types').CompileContext} CompileContext * @typedef {import('micromark-util-types').Handle} Handle * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension * @typedef {import('micromark-util-types').Token} Token */ /** * Create an HTML extension for `micromark` to support GitHub autolink literal * when serializing to HTML. * * @returns {HtmlExtension} * Extension for `micromark` that can be passed in `htmlExtensions` to * support GitHub autolink literal when serializing to HTML. */ function gfmAutolinkLiteralHtml() { return { exit: {literalAutolinkEmail, literalAutolinkHttp, literalAutolinkWww} } } /** * @this {CompileContext} * @type {Handle} */ function literalAutolinkWww(token) { anchorFromToken.call(this, token, 'http://') } /** * @this {CompileContext} * @type {Handle} */ function literalAutolinkEmail(token) { anchorFromToken.call(this, token, 'mailto:') } /** * @this {CompileContext} * @type {Handle} */ function literalAutolinkHttp(token) { anchorFromToken.call(this, token) } /** * @this CompileContext * @param {Token} token * @param {string | null | undefined} [protocol] * @returns {undefined} */ function anchorFromToken(token, protocol) { const url = this.sliceSerialize(token) this.tag('') this.raw(this.encode(url)) this.tag('') } /***/ }), /***/ "./node_modules/micromark-extension-gfm-autolink-literal/dev/lib/syntax.js": /*!*********************************************************************************!*\ !*** ./node_modules/micromark-extension-gfm-autolink-literal/dev/lib/syntax.js ***! \*********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ gfmAutolinkLiteral: () => (/* binding */ gfmAutolinkLiteral) /* harmony export */ }); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /** * @typedef {import('micromark-util-types').Code} Code * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord * @typedef {import('micromark-util-types').Event} Event * @typedef {import('micromark-util-types').Extension} Extension * @typedef {import('micromark-util-types').Previous} Previous * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ const wwwPrefix = {tokenize: tokenizeWwwPrefix, partial: true} const domain = {tokenize: tokenizeDomain, partial: true} const path = {tokenize: tokenizePath, partial: true} const trail = {tokenize: tokenizeTrail, partial: true} const emailDomainDotTrail = { tokenize: tokenizeEmailDomainDotTrail, partial: true } const wwwAutolink = {tokenize: tokenizeWwwAutolink, previous: previousWww} const protocolAutolink = { tokenize: tokenizeProtocolAutolink, previous: previousProtocol } const emailAutolink = {tokenize: tokenizeEmailAutolink, previous: previousEmail} /** @type {ConstructRecord} */ const text = {} /** * Create an extension for `micromark` to support GitHub autolink literal * syntax. * * @returns {Extension} * Extension for `micromark` that can be passed in `extensions` to enable GFM * autolink literal syntax. */ function gfmAutolinkLiteral() { return {text} } /** @type {Code} */ let code = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.digit0 // Add alphanumerics. while (code < micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftCurlyBrace) { text[code] = emailAutolink code++ if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.colon) code = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.uppercaseA else if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket) code = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lowercaseA } text[micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.plusSign] = emailAutolink text[micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.dash] = emailAutolink text[micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.dot] = emailAutolink text[micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.underscore] = emailAutolink text[micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.uppercaseH] = [emailAutolink, protocolAutolink] text[micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lowercaseH] = [emailAutolink, protocolAutolink] text[micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.uppercaseW] = [emailAutolink, wwwAutolink] text[micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lowercaseW] = [emailAutolink, wwwAutolink] // To do: perform email autolink literals on events, afterwards. // That’s where `markdown-rs` and `cmark-gfm` perform it. // It should look for `@`, then for atext backwards, and then for a label // forwards. // To do: `mailto:`, `xmpp:` protocol as prefix. /** * Email autolink literal. * * ```markdown * > | a contact@example.org b * ^^^^^^^^^^^^^^^^^^^ * ``` * * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeEmailAutolink(effects, ok, nok) { const self = this /** @type {boolean | undefined} */ let dot /** @type {boolean} */ let data return start /** * Start of email autolink literal. * * ```markdown * > | a contact@example.org b * ^ * ``` * * @type {State} */ function start(code) { if ( !gfmAtext(code) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events) ) { return nok(code) } effects.enter('literalAutolink') effects.enter('literalAutolinkEmail') return atext(code) } /** * In email atext. * * ```markdown * > | a contact@example.org b * ^ * ``` * * @type {State} */ function atext(code) { if (gfmAtext(code)) { effects.consume(code) return atext } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.atSign) { effects.consume(code) return emailDomain } return nok(code) } /** * In email domain. * * The reference code is a bit overly complex as it handles the `@`, of which * there may be just one. * Source: * * ```markdown * > | a contact@example.org b * ^ * ``` * * @type {State} */ function emailDomain(code) { // Dot followed by alphanumerical (not `-` or `_`). if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.dot) { return effects.check( emailDomainDotTrail, emailDomainAfter, emailDomainDot )(code) } // Alphanumerical, `-`, and `_`. if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.dash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.underscore || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.asciiAlphanumeric)(code) ) { data = true effects.consume(code) return emailDomain } // To do: `/` if xmpp. // Note: normally we’d truncate trailing punctuation from the link. // However, email autolink literals cannot contain any of those markers, // except for `.`, but that can only occur if it isn’t trailing. // So we can ignore truncating! return emailDomainAfter(code) } /** * In email domain, on dot that is not a trail. * * ```markdown * > | a contact@example.org b * ^ * ``` * * @type {State} */ function emailDomainDot(code) { effects.consume(code) dot = true return emailDomain } /** * After email domain. * * ```markdown * > | a contact@example.org b * ^ * ``` * * @type {State} */ function emailDomainAfter(code) { // Domain must not be empty, must include a dot, and must end in alphabetical. // Source: . if (data && dot && (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.asciiAlpha)(self.previous)) { effects.exit('literalAutolinkEmail') effects.exit('literalAutolink') return ok(code) } return nok(code) } } /** * `www` autolink literal. * * ```markdown * > | a www.example.org b * ^^^^^^^^^^^^^^^ * ``` * * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeWwwAutolink(effects, ok, nok) { const self = this return wwwStart /** * Start of www autolink literal. * * ```markdown * > | www.example.com/a?b#c * ^ * ``` * * @type {State} */ function wwwStart(code) { if ( (code !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.uppercaseW && code !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lowercaseW) || !previousWww.call(self, self.previous) || previousUnbalanced(self.events) ) { return nok(code) } effects.enter('literalAutolink') effects.enter('literalAutolinkWww') // Note: we *check*, so we can discard the `www.` we parsed. // If it worked, we consider it as a part of the domain. return effects.check( wwwPrefix, effects.attempt(domain, effects.attempt(path, wwwAfter), nok), nok )(code) } /** * After a www autolink literal. * * ```markdown * > | www.example.com/a?b#c * ^ * ``` * * @type {State} */ function wwwAfter(code) { effects.exit('literalAutolinkWww') effects.exit('literalAutolink') return ok(code) } } /** * Protocol autolink literal. * * ```markdown * > | a https://example.org b * ^^^^^^^^^^^^^^^^^^^ * ``` * * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeProtocolAutolink(effects, ok, nok) { const self = this let buffer = '' let seen = false return protocolStart /** * Start of protocol autolink literal. * * ```markdown * > | https://example.com/a?b#c * ^ * ``` * * @type {State} */ function protocolStart(code) { if ( (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.uppercaseH || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lowercaseH) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events) ) { effects.enter('literalAutolink') effects.enter('literalAutolinkHttp') buffer += String.fromCodePoint(code) effects.consume(code) return protocolPrefixInside } return nok(code) } /** * In protocol. * * ```markdown * > | https://example.com/a?b#c * ^^^^^ * ``` * * @type {State} */ function protocolPrefixInside(code) { // `5` is size of `https` if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.asciiAlpha)(code) && buffer.length < 5) { // @ts-expect-error: definitely number. buffer += String.fromCodePoint(code) effects.consume(code) return protocolPrefixInside } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.colon) { const protocol = buffer.toLowerCase() if (protocol === 'http' || protocol === 'https') { effects.consume(code) return protocolSlashesInside } } return nok(code) } /** * In slashes. * * ```markdown * > | https://example.com/a?b#c * ^^ * ``` * * @type {State} */ function protocolSlashesInside(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.slash) { effects.consume(code) if (seen) { return afterProtocol } seen = true return protocolSlashesInside } return nok(code) } /** * After protocol, before domain. * * ```markdown * > | https://example.com/a?b#c * ^ * ``` * * @type {State} */ function afterProtocol(code) { // To do: this is different from `markdown-rs`: // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182 return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.asciiControl)(code) || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEndingOrSpace)(code) || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.unicodeWhitespace)(code) || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.unicodePunctuation)(code) ? nok(code) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code) } /** * After a protocol autolink literal. * * ```markdown * > | https://example.com/a?b#c * ^ * ``` * * @type {State} */ function protocolAfter(code) { effects.exit('literalAutolinkHttp') effects.exit('literalAutolink') return ok(code) } } /** * `www` prefix. * * ```markdown * > | a www.example.org b * ^^^^ * ``` * * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeWwwPrefix(effects, ok, nok) { let size = 0 return wwwPrefixInside /** * In www prefix. * * ```markdown * > | www.example.com * ^^^^ * ``` * * @type {State} */ function wwwPrefixInside(code) { if ((code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.uppercaseW || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lowercaseW) && size < 3) { size++ effects.consume(code) return wwwPrefixInside } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.dot && size === 3) { effects.consume(code) return wwwPrefixAfter } return nok(code) } /** * After www prefix. * * ```markdown * > | www.example.com * ^ * ``` * * @type {State} */ function wwwPrefixAfter(code) { // If there is *anything*, we can link. return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof ? nok(code) : ok(code) } } /** * Domain. * * ```markdown * > | a https://example.org b * ^^^^^^^^^^^ * ``` * * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeDomain(effects, ok, nok) { /** @type {boolean | undefined} */ let underscoreInLastSegment /** @type {boolean | undefined} */ let underscoreInLastLastSegment /** @type {boolean | undefined} */ let seen return domainInside /** * In domain. * * ```markdown * > | https://example.com/a * ^^^^^^^^^^^ * ``` * * @type {State} */ function domainInside(code) { // Check whether this marker, which is a trailing punctuation // marker, optionally followed by more trailing markers, and then // followed by an end. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.dot || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.underscore) { return effects.check(trail, domainAfter, domainAtPunctuation)(code) } // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can // occur, which sounds like ASCII only, but they also support `www.點看.com`, // so that’s Unicode. // Instead of some new production for Unicode alphanumerics, markdown // already has that for Unicode punctuation and whitespace, so use those. // Source: . if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEndingOrSpace)(code) || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.unicodeWhitespace)(code) || (code !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.dash && (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.unicodePunctuation)(code)) ) { return domainAfter(code) } seen = true effects.consume(code) return domainInside } /** * In domain, at potential trailing punctuation, that was not trailing. * * ```markdown * > | https://example.com * ^ * ``` * * @type {State} */ function domainAtPunctuation(code) { // There is an underscore in the last segment of the domain if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.underscore) { underscoreInLastSegment = true } // Otherwise, it’s a `.`: save the last segment underscore in the // penultimate segment slot. else { underscoreInLastLastSegment = underscoreInLastSegment underscoreInLastSegment = undefined } effects.consume(code) return domainInside } /** * After domain. * * ```markdown * > | https://example.com/a * ^ * ``` * * @type {State} */ function domainAfter(code) { // Note: that’s GH says a dot is needed, but it’s not true: // if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) { return nok(code) } return ok(code) } } /** * Path. * * ```markdown * > | a https://example.org/stuff b * ^^^^^^ * ``` * * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizePath(effects, ok) { let sizeOpen = 0 let sizeClose = 0 return pathInside /** * In path. * * ```markdown * > | https://example.com/a * ^^ * ``` * * @type {State} */ function pathInside(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftParenthesis) { sizeOpen++ effects.consume(code) return pathInside } // To do: `markdown-rs` also needs this. // If this is a paren, and there are less closings than openings, // we don’t check for a trail. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightParenthesis && sizeClose < sizeOpen) { return pathAtPunctuation(code) } // Check whether this trailing punctuation marker is optionally // followed by more trailing markers, and then followed // by an end. if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.exclamationMark || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.quotationMark || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.ampersand || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.apostrophe || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightParenthesis || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.asterisk || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.comma || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.dot || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.colon || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.semicolon || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lessThan || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.questionMark || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightSquareBracket || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.underscore || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.tilde ) { return effects.check(trail, ok, pathAtPunctuation)(code) } if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEndingOrSpace)(code) || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.unicodeWhitespace)(code) ) { return ok(code) } effects.consume(code) return pathInside } /** * In path, at potential trailing punctuation, that was not trailing. * * ```markdown * > | https://example.com/a"b * ^ * ``` * * @type {State} */ function pathAtPunctuation(code) { // Count closing parens. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightParenthesis) { sizeClose++ } effects.consume(code) return pathInside } } /** * Trail. * * This calls `ok` if this *is* the trail, followed by an end, which means * the entire trail is not part of the link. * It calls `nok` if this *is* part of the link. * * ```markdown * > | https://example.com"). * ^^^ * ``` * * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeTrail(effects, ok, nok) { return trail /** * In trail of domain or path. * * ```markdown * > | https://example.com"). * ^ * ``` * * @type {State} */ function trail(code) { // Regular trailing punctuation. if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.exclamationMark || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.quotationMark || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.apostrophe || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightParenthesis || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.asterisk || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.comma || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.dot || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.colon || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.semicolon || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.questionMark || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.underscore || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.tilde ) { effects.consume(code) return trail } // `&` followed by one or more alphabeticals and then a `;`, is // as a whole considered as trailing punctuation. // In all other cases, it is considered as continuation of the URL. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.ampersand) { effects.consume(code) return trailCharRefStart } // Needed because we allow literals after `[`, as we fix: // . // Check that it is not followed by `(` or `[`. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightSquareBracket) { effects.consume(code) return trailBracketAfter } if ( // `<` is an end. code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lessThan || // So is whitespace. code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEndingOrSpace)(code) || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.unicodeWhitespace)(code) ) { return ok(code) } return nok(code) } /** * In trail, after `]`. * * > 👉 **Note**: this deviates from `cmark-gfm` to fix a bug. * > See end of for more. * * ```markdown * > | https://example.com]( * ^ * ``` * * @type {State} */ function trailBracketAfter(code) { // Whitespace or something that could start a resource or reference is the end. // Switch back to trail otherwise. if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftParenthesis || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEndingOrSpace)(code) || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.unicodeWhitespace)(code) ) { return ok(code) } return trail(code) } /** * In character-reference like trail, after `&`. * * ```markdown * > | https://example.com&). * ^ * ``` * * @type {State} */ function trailCharRefStart(code) { // When non-alpha, it’s not a trail. return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.asciiAlpha)(code) ? trailCharRefInside(code) : nok(code) } /** * In character-reference like trail. * * ```markdown * > | https://example.com&). * ^ * ``` * * @type {State} */ function trailCharRefInside(code) { // Switch back to trail if this is well-formed. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.semicolon) { effects.consume(code) return trail } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.asciiAlpha)(code)) { effects.consume(code) return trailCharRefInside } // It’s not a trail. return nok(code) } } /** * Dot in email domain trail. * * This calls `ok` if this *is* the trail, followed by an end, which means * the trail is not part of the link. * It calls `nok` if this *is* part of the link. * * ```markdown * > | contact@example.org. * ^ * ``` * * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeEmailDomainDotTrail(effects, ok, nok) { return start /** * Dot. * * ```markdown * > | contact@example.org. * ^ ^ * ``` * * @type {State} */ function start(code) { // Must be dot. effects.consume(code) return after } /** * After dot. * * ```markdown * > | contact@example.org. * ^ ^ * ``` * * @type {State} */ function after(code) { // Not a trail if alphanumeric. return (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.asciiAlphanumeric)(code) ? nok(code) : ok(code) } } /** * See: * . * * @type {Previous} */ function previousWww(code) { return ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftParenthesis || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.asterisk || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.underscore || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightSquareBracket || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.tilde || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEndingOrSpace)(code) ) } /** * See: * . * * @type {Previous} */ function previousProtocol(code) { return !(0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.asciiAlpha)(code) } /** * @this {TokenizeContext} * @type {Previous} */ function previousEmail(code) { // Do not allow a slash “inside” atext. // The reference code is a bit weird, but that’s what it results in. // Source: . // Other than slash, every preceding character is allowed. return !(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.slash || gfmAtext(code)) } /** * @param {Code} code * @returns {boolean} */ function gfmAtext(code) { return ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.plusSign || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.dash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.dot || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.underscore || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.asciiAlphanumeric)(code) ) } /** * @param {Array} events * @returns {boolean} */ function previousUnbalanced(events) { let index = events.length let result = false while (index--) { const token = events[index][1] if ( (token.type === 'labelLink' || token.type === 'labelImage') && !token._balanced ) { result = true break } // If we’ve seen this token, and it was marked as not having any unbalanced // bracket before it, we can exit. if (token._gfmAutolinkLiteralWalkedInto) { result = false break } } if (events.length > 0 && !result) { // Mark the last token as “walked into” w/o finding // anything. events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true } return result } /***/ }), /***/ "./node_modules/micromark-extension-gfm-footnote/dev/lib/html.js": /*!***********************************************************************!*\ !*** ./node_modules/micromark-extension-gfm-footnote/dev/lib/html.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ defaultBackLabel: () => (/* binding */ defaultBackLabel), /* harmony export */ gfmFootnoteHtml: () => (/* binding */ gfmFootnoteHtml) /* harmony export */ }); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /* harmony import */ var micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-normalize-identifier */ "./node_modules/micromark-util-normalize-identifier/dev/index.js"); /* harmony import */ var micromark_util_sanitize_uri__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-sanitize-uri */ "./node_modules/micromark-util-sanitize-uri/dev/index.js"); /** * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension */ /** * @callback BackLabelTemplate * Generate a back label dynamically. * * For the following markdown: * * ```markdown * Alpha[^micromark], bravo[^micromark], and charlie[^remark]. * * [^remark]: things about remark * [^micromark]: things about micromark * ``` * * This function will be called with: * * * `0` and `0` for the backreference from `things about micromark` to * `alpha`, as it is the first used definition, and the first call to it * * `0` and `1` for the backreference from `things about micromark` to * `bravo`, as it is the first used definition, and the second call to it * * `1` and `0` for the backreference from `things about remark` to * `charlie`, as it is the second used definition * @param {number} referenceIndex * Index of the definition in the order that they are first referenced, * 0-indexed. * @param {number} rereferenceIndex * Index of calls to the same definition, 0-indexed. * @returns {string} * Back label to use when linking back from definitions to their reference. */ /** * @typedef Options * Configuration. * @property {string | null | undefined} [clobberPrefix='user-content-'] * Prefix to use before the `id` attribute on footnotes to prevent them from * *clobbering* (default: `'user-content-'`). * * Pass `''` for trusted markdown and when you are careful with * polyfilling. * You could pass a different prefix. * * DOM clobbering is this: * * ```html *

* * ``` * * The above example shows that elements are made available by browsers, by * their ID, on the `window` object. * This is a security risk because you might be expecting some other variable * at that place. * It can also break polyfills. * Using a prefix solves these problems. * @property {string | null | undefined} [label='Footnotes'] * Textual label to use for the footnotes section (default: `'Footnotes'`). * * Change it when the markdown is not in English. * * This label is typically hidden visually (assuming a `sr-only` CSS class * is defined that does that) and so affects screen readers only. * If you do have such a class, but want to show this section to everyone, * pass different attributes with the `labelAttributes` option. * @property {string | null | undefined} [labelAttributes='class="sr-only"'] * Attributes to use on the footnote label (default: `'class="sr-only"'`). * * Change it to show the label and add other attributes. * * This label is typically hidden visually (assuming an `sr-only` CSS class * is defined that does that) and so affects screen readers only. * If you do have such a class, but want to show this section to everyone, * pass an empty string. * You can also add different attributes. * * > 👉 **Note**: `id="footnote-label"` is always added, because footnote * > calls use it with `aria-describedby` to provide an accessible label. * @property {string | null | undefined} [labelTagName='h2'] * HTML tag name to use for the footnote label element (default: `'h2'`). * * Change it to match your document structure. * * This label is typically hidden visually (assuming a `sr-only` CSS class * is defined that does that) and so affects screen readers only. * If you do have such a class, but want to show this section to everyone, * pass different attributes with the `labelAttributes` option. * @property {BackLabelTemplate | string | null | undefined} [backLabel] * Textual label to describe the backreference back to references (default: * `defaultBackLabel`). * * The default value is: * * ```js * function defaultBackLabel(referenceIndex, rereferenceIndex) { * return ( * 'Back to reference ' + * (referenceIndex + 1) + * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '') * ) * } * ``` * * Change it when the markdown is not in English. * * This label is used in the `aria-label` attribute on each backreference * (the `↩` links). * It affects users of assistive technology. */ const own = {}.hasOwnProperty /** @type {Options} */ const emptyOptions = {} /** * Generate the default label that GitHub uses on backreferences. * * @param {number} referenceIndex * Index of the definition in the order that they are first referenced, * 0-indexed. * @param {number} rereferenceIndex * Index of calls to the same definition, 0-indexed. * @returns {string} * Default label. */ function defaultBackLabel(referenceIndex, rereferenceIndex) { return ( 'Back to reference ' + (referenceIndex + 1) + (rereferenceIndex > 1 ? '-' + rereferenceIndex : '') ) } /** * Create an extension for `micromark` to support GFM footnotes when * serializing to HTML. * * @param {Options | null | undefined} [options={}] * Configuration (optional). * @returns {HtmlExtension} * Extension for `micromark` that can be passed in `htmlExtensions` to * support GFM footnotes when serializing to HTML. */ function gfmFootnoteHtml(options) { const config = options || emptyOptions const label = config.label || 'Footnotes' const labelTagName = config.labelTagName || 'h2' const labelAttributes = config.labelAttributes === null || config.labelAttributes === undefined ? 'class="sr-only"' : config.labelAttributes const backLabel = config.backLabel || defaultBackLabel const clobberPrefix = config.clobberPrefix === null || config.clobberPrefix === undefined ? 'user-content-' : config.clobberPrefix return { enter: { gfmFootnoteDefinition() { const stack = this.getData('tightStack') stack.push(false) }, gfmFootnoteDefinitionLabelString() { this.buffer() }, gfmFootnoteCallString() { this.buffer() } }, exit: { gfmFootnoteDefinition() { let definitions = this.getData('gfmFootnoteDefinitions') const footnoteStack = this.getData('gfmFootnoteDefinitionStack') ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(footnoteStack, 'expected `footnoteStack`') const tightStack = this.getData('tightStack') const current = footnoteStack.pop() const value = this.resume() ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(current, 'expected to be in a footnote') if (!definitions) { this.setData('gfmFootnoteDefinitions', (definitions = {})) } if (!own.call(definitions, current)) definitions[current] = value tightStack.pop() this.setData('slurpOneLineEnding', true) // “Hack” to prevent a line ending from showing up if we’re in a definition in // an empty list item. this.setData('lastWasTag') }, gfmFootnoteDefinitionLabelString(token) { let footnoteStack = this.getData('gfmFootnoteDefinitionStack') if (!footnoteStack) { this.setData('gfmFootnoteDefinitionStack', (footnoteStack = [])) } footnoteStack.push((0,micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_1__.normalizeIdentifier)(this.sliceSerialize(token))) this.resume() // Drop the label. this.buffer() // Get ready for a value. }, gfmFootnoteCallString(token) { let calls = this.getData('gfmFootnoteCallOrder') let counts = this.getData('gfmFootnoteCallCounts') const id = (0,micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_1__.normalizeIdentifier)(this.sliceSerialize(token)) /** @type {number} */ let counter this.resume() if (!calls) this.setData('gfmFootnoteCallOrder', (calls = [])) if (!counts) this.setData('gfmFootnoteCallCounts', (counts = {})) const index = calls.indexOf(id) const safeId = (0,micromark_util_sanitize_uri__WEBPACK_IMPORTED_MODULE_2__.sanitizeUri)(id.toLowerCase()) if (index === -1) { calls.push(id) counts[id] = 1 counter = calls.length } else { counts[id]++ counter = index + 1 } const reuseCounter = counts[id] this.tag( '' + String(counter) + '' ) }, null() { const calls = this.getData('gfmFootnoteCallOrder') || [] const counts = this.getData('gfmFootnoteCallCounts') || {} const definitions = this.getData('gfmFootnoteDefinitions') || {} let index = -1 if (calls.length > 0) { this.lineEndingIfNeeded() this.tag( '
<' + labelTagName + ' id="footnote-label"' + (labelAttributes ? ' ' + labelAttributes : '') + '>' ) this.raw(this.encode(label)) this.tag('') this.lineEndingIfNeeded() this.tag('
    ') } while (++index < calls.length) { // Called definitions are always defined. const id = calls[index] const safeId = (0,micromark_util_sanitize_uri__WEBPACK_IMPORTED_MODULE_2__.sanitizeUri)(id.toLowerCase()) let referenceIndex = 0 /** @type {Array} */ const references = [] while (++referenceIndex <= counts[id]) { references.push( '↩' + (referenceIndex > 1 ? '' + referenceIndex + '' : '') + '' ) } const reference = references.join(' ') let injected = false this.lineEndingIfNeeded() this.tag('
  1. ') this.lineEndingIfNeeded() this.tag( definitions[id].replace(/<\/p>(?:\r?\n|\r)?$/, function ($0) { injected = true return ' ' + reference + $0 }) ) if (!injected) { this.lineEndingIfNeeded() this.tag(reference) } this.lineEndingIfNeeded() this.tag('
  2. ') } if (calls.length > 0) { this.lineEndingIfNeeded() this.tag('
') this.lineEndingIfNeeded() this.tag('
') } } } } } /***/ }), /***/ "./node_modules/micromark-extension-gfm-footnote/dev/lib/syntax.js": /*!*************************************************************************!*\ !*** ./node_modules/micromark-extension-gfm-footnote/dev/lib/syntax.js ***! \*************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ gfmFootnote: () => (/* binding */ gfmFootnote) /* harmony export */ }); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/blank-line.js"); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-normalize-identifier */ "./node_modules/micromark-util-normalize-identifier/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /** * @typedef {import('micromark-util-types').Event} Event * @typedef {import('micromark-util-types').Exiter} Exiter * @typedef {import('micromark-util-types').Extension} Extension * @typedef {import('micromark-util-types').Resolver} Resolver * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').Token} Token * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ const indent = {tokenize: tokenizeIndent, partial: true} // To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only // affects label start (image). // That will let us drop `tokenizePotentialGfmFootnote*`. // It currently has a `_hiddenFootnoteSupport`, which affects that and more. // That can be removed when `micromark-extension-footnote` is archived. /** * Create an extension for `micromark` to enable GFM footnote syntax. * * @returns {Extension} * Extension for `micromark` that can be passed in `extensions` to * enable GFM footnote syntax. */ function gfmFootnote() { /** @type {Extension} */ return { document: { [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket]: { tokenize: tokenizeDefinitionStart, continuation: {tokenize: tokenizeDefinitionContinuation}, exit: gfmFootnoteDefinitionEnd } }, text: { [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket]: {tokenize: tokenizeGfmFootnoteCall}, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightSquareBracket]: { add: 'after', tokenize: tokenizePotentialGfmFootnoteCall, resolveTo: resolveToPotentialGfmFootnoteCall } } } } // To do: remove after micromark update. /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizePotentialGfmFootnoteCall(effects, ok, nok) { const self = this let index = self.events.length const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []) /** @type {Token} */ let labelStart // Find an opening. while (index--) { const token = self.events[index][1] if (token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.labelImage) { labelStart = token break } // Exit if we’ve walked far enough. if ( token.type === 'gfmFootnoteCall' || token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.labelLink || token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.label || token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.image || token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.link ) { break } } return start /** * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_2__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightSquareBracket, 'expected `]`') if (!labelStart || !labelStart._balanced) { return nok(code) } const id = (0,micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_3__.normalizeIdentifier)( self.sliceSerialize({start: labelStart.end, end: self.now()}) ) if (id.codePointAt(0) !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.caret || !defined.includes(id.slice(1))) { return nok(code) } effects.enter('gfmFootnoteCallLabelMarker') effects.consume(code) effects.exit('gfmFootnoteCallLabelMarker') return ok(code) } } // To do: remove after micromark update. /** @type {Resolver} */ function resolveToPotentialGfmFootnoteCall(events, context) { let index = events.length /** @type {Token | undefined} */ let labelStart // Find an opening. while (index--) { if ( events[index][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.labelImage && events[index][0] === 'enter' ) { labelStart = events[index][1] break } } (0,devlop__WEBPACK_IMPORTED_MODULE_2__.ok)(labelStart, 'expected `labelStart` to resolve') // Change the `labelImageMarker` to a `data`. events[index + 1][1].type = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.data events[index + 3][1].type = 'gfmFootnoteCallLabelMarker' // The whole (without `!`): /** @type {Token} */ const call = { type: 'gfmFootnoteCall', start: Object.assign({}, events[index + 3][1].start), end: Object.assign({}, events[events.length - 1][1].end) } // The `^` marker /** @type {Token} */ const marker = { type: 'gfmFootnoteCallMarker', start: Object.assign({}, events[index + 3][1].end), end: Object.assign({}, events[index + 3][1].end) } // Increment the end 1 character. marker.end.column++ marker.end.offset++ marker.end._bufferIndex++ /** @type {Token} */ const string = { type: 'gfmFootnoteCallString', start: Object.assign({}, marker.end), end: Object.assign({}, events[events.length - 1][1].start) } /** @type {Token} */ const chunk = { type: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.chunkString, contentType: 'string', start: Object.assign({}, string.start), end: Object.assign({}, string.end) } /** @type {Array} */ const replacement = [ // Take the `labelImageMarker` (now `data`, the `!`) events[index + 1], events[index + 2], ['enter', call, context], // The `[` events[index + 3], events[index + 4], // The `^`. ['enter', marker, context], ['exit', marker, context], // Everything in between. ['enter', string, context], ['enter', chunk, context], ['exit', chunk, context], ['exit', string, context], // The ending (`]`, properly parsed and labelled). events[events.length - 2], events[events.length - 1], ['exit', call, context] ] events.splice(index, events.length - index + 1, ...replacement) return events } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeGfmFootnoteCall(effects, ok, nok) { const self = this const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []) let size = 0 /** @type {boolean} */ let data // Note: the implementation of `markdown-rs` is different, because it houses // core *and* extensions in one project. // Therefore, it can include footnote logic inside `label-end`. // We can’t do that, but luckily, we can parse footnotes in a simpler way than // needed for labels. return start /** * Start of footnote label. * * ```markdown * > | a [^b] c * ^ * ``` * * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_2__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket, 'expected `[`') effects.enter('gfmFootnoteCall') effects.enter('gfmFootnoteCallLabelMarker') effects.consume(code) effects.exit('gfmFootnoteCallLabelMarker') return callStart } /** * After `[`, at `^`. * * ```markdown * > | a [^b] c * ^ * ``` * * @type {State} */ function callStart(code) { if (code !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.caret) return nok(code) effects.enter('gfmFootnoteCallMarker') effects.consume(code) effects.exit('gfmFootnoteCallMarker') effects.enter('gfmFootnoteCallString') effects.enter('chunkString').contentType = 'string' return callData } /** * In label. * * ```markdown * > | a [^b] c * ^ * ``` * * @type {State} */ function callData(code) { if ( // Too long. size > micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.linkReferenceSizeMax || // Closing brace with nothing. (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightSquareBracket && !data) || // Space or tab is not supported by GFM for some reason. // `\n` and `[` not being supported makes sense. code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEndingOrSpace)(code) ) { return nok(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightSquareBracket) { effects.exit('chunkString') const token = effects.exit('gfmFootnoteCallString') if (!defined.includes((0,micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_3__.normalizeIdentifier)(self.sliceSerialize(token)))) { return nok(code) } effects.enter('gfmFootnoteCallLabelMarker') effects.consume(code) effects.exit('gfmFootnoteCallLabelMarker') effects.exit('gfmFootnoteCall') return ok } if (!(0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEndingOrSpace)(code)) { data = true } size++ effects.consume(code) return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.backslash ? callEscape : callData } /** * On character after escape. * * ```markdown * > | a [^b\c] d * ^ * ``` * * @type {State} */ function callEscape(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.backslash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightSquareBracket ) { effects.consume(code) size++ return callData } return callData(code) } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeDefinitionStart(effects, ok, nok) { const self = this const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []) /** @type {string} */ let identifier let size = 0 /** @type {boolean | undefined} */ let data return start /** * Start of GFM footnote definition. * * ```markdown * > | [^a]: b * ^ * ``` * * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_2__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket, 'expected `[`') effects.enter('gfmFootnoteDefinition')._container = true effects.enter('gfmFootnoteDefinitionLabel') effects.enter('gfmFootnoteDefinitionLabelMarker') effects.consume(code) effects.exit('gfmFootnoteDefinitionLabelMarker') return labelAtMarker } /** * In label, at caret. * * ```markdown * > | [^a]: b * ^ * ``` * * @type {State} */ function labelAtMarker(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.caret) { effects.enter('gfmFootnoteDefinitionMarker') effects.consume(code) effects.exit('gfmFootnoteDefinitionMarker') effects.enter('gfmFootnoteDefinitionLabelString') effects.enter('chunkString').contentType = 'string' return labelInside } return nok(code) } /** * In label. * * > 👉 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote * > definition labels. * * ```markdown * > | [^a]: b * ^ * ``` * * @type {State} */ function labelInside(code) { if ( // Too long. size > micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.linkReferenceSizeMax || // Closing brace with nothing. (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightSquareBracket && !data) || // Space or tab is not supported by GFM for some reason. // `\n` and `[` not being supported makes sense. code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEndingOrSpace)(code) ) { return nok(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightSquareBracket) { effects.exit('chunkString') const token = effects.exit('gfmFootnoteDefinitionLabelString') identifier = (0,micromark_util_normalize_identifier__WEBPACK_IMPORTED_MODULE_3__.normalizeIdentifier)(self.sliceSerialize(token)) effects.enter('gfmFootnoteDefinitionLabelMarker') effects.consume(code) effects.exit('gfmFootnoteDefinitionLabelMarker') effects.exit('gfmFootnoteDefinitionLabel') return labelAfter } if (!(0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEndingOrSpace)(code)) { data = true } size++ effects.consume(code) return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.backslash ? labelEscape : labelInside } /** * After `\`, at a special character. * * > 👉 **Note**: `cmark-gfm` currently does not support escaped brackets: * > * * ```markdown * > | [^a\*b]: c * ^ * ``` * * @type {State} */ function labelEscape(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.backslash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightSquareBracket ) { effects.consume(code) size++ return labelInside } return labelInside(code) } /** * After definition label. * * ```markdown * > | [^a]: b * ^ * ``` * * @type {State} */ function labelAfter(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.colon) { effects.enter('definitionMarker') effects.consume(code) effects.exit('definitionMarker') if (!defined.includes(identifier)) { defined.push(identifier) } // Any whitespace after the marker is eaten, forming indented code // is not possible. // No space is also fine, just like a block quote marker. return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__.factorySpace)( effects, whitespaceAfter, 'gfmFootnoteDefinitionWhitespace' ) } return nok(code) } /** * After definition prefix. * * ```markdown * > | [^a]: b * ^ * ``` * * @type {State} */ function whitespaceAfter(code) { // `markdown-rs` has a wrapping token for the prefix that is closed here. return ok(code) } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeDefinitionContinuation(effects, ok, nok) { /// Start of footnote definition continuation. /// /// ```markdown /// | [^a]: b /// > | c /// ^ /// ``` // // Either a blank line, which is okay, or an indented thing. return effects.check(micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_7__.blankLine, ok, effects.attempt(indent, ok, nok)) } /** @type {Exiter} */ function gfmFootnoteDefinitionEnd(effects) { effects.exit('gfmFootnoteDefinition') } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeIndent(effects, ok, nok) { const self = this return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__.factorySpace)( effects, afterPrefix, 'gfmFootnoteDefinitionIndent', micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.tabSize + 1 ) /** * @type {State} */ function afterPrefix(code) { const tail = self.events[self.events.length - 1] return tail && tail[1].type === 'gfmFootnoteDefinitionIndent' && tail[2].sliceSerialize(tail[1], true).length === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.tabSize ? ok(code) : nok(code) } } /***/ }), /***/ "./node_modules/micromark-extension-gfm-strikethrough/dev/lib/html.js": /*!****************************************************************************!*\ !*** ./node_modules/micromark-extension-gfm-strikethrough/dev/lib/html.js ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ gfmStrikethroughHtml: () => (/* binding */ gfmStrikethroughHtml) /* harmony export */ }); /** * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension */ /** * Create an HTML extension for `micromark` to support GFM strikethrough when * serializing to HTML. * * @returns {HtmlExtension} * Extension for `micromark` that can be passed in `htmlExtensions`, to * support GFM strikethrough when serializing to HTML. */ function gfmStrikethroughHtml() { return { enter: { strikethrough() { this.tag('') } }, exit: { strikethrough() { this.tag('') } } } } /***/ }), /***/ "./node_modules/micromark-extension-gfm-strikethrough/dev/lib/syntax.js": /*!******************************************************************************!*\ !*** ./node_modules/micromark-extension-gfm-strikethrough/dev/lib/syntax.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ gfmStrikethrough: () => (/* binding */ gfmStrikethrough) /* harmony export */ }); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-chunked */ "./node_modules/micromark-util-chunked/dev/index.js"); /* harmony import */ var micromark_util_classify_character__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-classify-character */ "./node_modules/micromark-util-classify-character/dev/index.js"); /* harmony import */ var micromark_util_resolve_all__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-resolve-all */ "./node_modules/micromark-util-resolve-all/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /** * @typedef {import('micromark-util-types').Event} Event * @typedef {import('micromark-util-types').Extension} Extension * @typedef {import('micromark-util-types').Resolver} Resolver * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').Token} Token * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer * * @typedef Options * Configuration (optional). * @property {boolean | null | undefined} [singleTilde=true] * Whether to support strikethrough with a single tilde (default: `true`). * * Single tildes work on github.com, but are technically prohibited by the * GFM spec. */ /** * Create an extension for `micromark` to enable GFM strikethrough syntax. * * @param {Options | null | undefined} [options={}] * Configuration. * @returns {Extension} * Extension for `micromark` that can be passed in `extensions`, to * enable GFM strikethrough syntax. */ function gfmStrikethrough(options) { const options_ = options || {} let single = options_.singleTilde const tokenizer = { tokenize: tokenizeStrikethrough, resolveAll: resolveAllStrikethrough } if (single === null || single === undefined) { single = true } return { text: {[micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.tilde]: tokenizer}, insideSpan: {null: [tokenizer]}, attentionMarkers: {null: [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.tilde]} } /** * Take events and resolve strikethrough. * * @type {Resolver} */ function resolveAllStrikethrough(events, context) { let index = -1 // Walk through all events. while (++index < events.length) { // Find a token that can close. if ( events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close ) { let open = index // Now walk back to find an opener. while (open--) { // Find a token that can open the closer. if ( events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open && // If the sizes are the same: events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset ) { events[index][1].type = 'strikethroughSequence' events[open][1].type = 'strikethroughSequence' /** @type {Token} */ const strikethrough = { type: 'strikethrough', start: Object.assign({}, events[open][1].start), end: Object.assign({}, events[index][1].end) } /** @type {Token} */ const text = { type: 'strikethroughText', start: Object.assign({}, events[open][1].end), end: Object.assign({}, events[index][1].start) } // Opening. /** @type {Array} */ const nextEvents = [ ['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context] ] const insideSpan = context.parser.constructs.insideSpan.null if (insideSpan) { // Between. (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_1__.splice)( nextEvents, nextEvents.length, 0, (0,micromark_util_resolve_all__WEBPACK_IMPORTED_MODULE_2__.resolveAll)(insideSpan, events.slice(open + 1, index), context) ) } // Closing. (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_1__.splice)(nextEvents, nextEvents.length, 0, [ ['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context] ]) ;(0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_1__.splice)(events, open - 1, index - open + 3, nextEvents) index = open + nextEvents.length - 2 break } } } } index = -1 while (++index < events.length) { if (events[index][1].type === 'strikethroughSequenceTemporary') { events[index][1].type = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.data } } return events } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeStrikethrough(effects, ok, nok) { const previous = this.previous const events = this.events let size = 0 return start /** @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.tilde, 'expected `~`') if ( previous === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.tilde && events[events.length - 1][1].type !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.characterEscape ) { return nok(code) } effects.enter('strikethroughSequenceTemporary') return more(code) } /** @type {State} */ function more(code) { const before = (0,micromark_util_classify_character__WEBPACK_IMPORTED_MODULE_5__.classifyCharacter)(previous) if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.tilde) { // If this is the third marker, exit. if (size > 1) return nok(code) effects.consume(code) size++ return more } if (size < 2 && !single) return nok(code) const token = effects.exit('strikethroughSequenceTemporary') const after = (0,micromark_util_classify_character__WEBPACK_IMPORTED_MODULE_5__.classifyCharacter)(code) token._open = !after || (after === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_6__.constants.attentionSideAfter && Boolean(before)) token._close = !before || (before === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_6__.constants.attentionSideAfter && Boolean(after)) return ok(code) } } } /***/ }), /***/ "./node_modules/micromark-extension-gfm-table/dev/lib/edit-map.js": /*!************************************************************************!*\ !*** ./node_modules/micromark-extension-gfm-table/dev/lib/edit-map.js ***! \************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ EditMap: () => (/* binding */ EditMap) /* harmony export */ }); /** * @typedef {import('micromark-util-types').Event} Event */ // Port of `edit_map.rs` from `markdown-rs`. // This should move to `markdown-js` later. // Deal with several changes in events, batching them together. // // Preferably, changes should be kept to a minimum. // Sometimes, it’s needed to change the list of events, because parsing can be // messy, and it helps to expose a cleaner interface of events to the compiler // and other users. // It can also help to merge many adjacent similar events. // And, in other cases, it’s needed to parse subcontent: pass some events // through another tokenizer and inject the result. /** * @typedef {[number, number, Array]} Change * @typedef {[number, number, number]} Jump */ /** * Tracks a bunch of edits. */ class EditMap { /** * Create a new edit map. */ constructor() { /** * Record of changes. * * @type {Array} */ this.map = [] } /** * Create an edit: a remove and/or add at a certain place. * * @param {number} index * @param {number} remove * @param {Array} add * @returns {undefined} */ add(index, remove, add) { addImpl(this, index, remove, add) } // To do: add this when moving to `micromark`. // /** // * Create an edit: but insert `add` before existing additions. // * // * @param {number} index // * @param {number} remove // * @param {Array} add // * @returns {undefined} // */ // addBefore(index, remove, add) { // addImpl(this, index, remove, add, true) // } /** * Done, change the events. * * @param {Array} events * @returns {undefined} */ consume(events) { this.map.sort(function (a, b) { return a[0] - b[0] }) /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */ if (this.map.length === 0) { return } // To do: if links are added in events, like they are in `markdown-rs`, // this is needed. // // Calculate jumps: where items in the current list move to. // /** @type {Array} */ // const jumps = [] // let index = 0 // let addAcc = 0 // let removeAcc = 0 // while (index < this.map.length) { // const [at, remove, add] = this.map[index] // removeAcc += remove // addAcc += add.length // jumps.push([at, removeAcc, addAcc]) // index += 1 // } // // . shiftLinks(events, jumps) let index = this.map.length /** @type {Array>} */ const vecs = [] while (index > 0) { index -= 1 vecs.push( events.slice(this.map[index][0] + this.map[index][1]), this.map[index][2] ) // Truncate rest. events.length = this.map[index][0] } vecs.push([...events]) events.length = 0 let slice = vecs.pop() while (slice) { events.push(...slice) slice = vecs.pop() } // Truncate everything. this.map.length = 0 } } /** * Create an edit. * * @param {EditMap} editMap * @param {number} at * @param {number} remove * @param {Array} add * @returns {undefined} */ function addImpl(editMap, at, remove, add) { let index = 0 /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */ if (remove === 0 && add.length === 0) { return } while (index < editMap.map.length) { if (editMap.map[index][0] === at) { editMap.map[index][1] += remove // To do: before not used by tables, use when moving to micromark. // if (before) { // add.push(...editMap.map[index][2]) // editMap.map[index][2] = add // } else { editMap.map[index][2].push(...add) // } return } index += 1 } editMap.map.push([at, remove, add]) } // /** // * Shift `previous` and `next` links according to `jumps`. // * // * This fixes links in case there are events removed or added between them. // * // * @param {Array} events // * @param {Array} jumps // */ // function shiftLinks(events, jumps) { // let jumpIndex = 0 // let index = 0 // let add = 0 // let rm = 0 // while (index < events.length) { // const rmCurr = rm // while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) { // add = jumps[jumpIndex][2] // rm = jumps[jumpIndex][1] // jumpIndex += 1 // } // // Ignore items that will be removed. // if (rm > rmCurr) { // index += rm - rmCurr // } else { // // ? // // if let Some(link) = &events[index].link { // // if let Some(next) = link.next { // // events[next].link.as_mut().unwrap().previous = Some(index + add - rm); // // while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next { // // add = jumps[jumpIndex].2; // // rm = jumps[jumpIndex].1; // // jumpIndex += 1; // // } // // events[index].link.as_mut().unwrap().next = Some(next + add - rm); // // index = next; // // continue; // // } // // } // index += 1 // } // } // } /***/ }), /***/ "./node_modules/micromark-extension-gfm-table/dev/lib/html.js": /*!********************************************************************!*\ !*** ./node_modules/micromark-extension-gfm-table/dev/lib/html.js ***! \********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ gfmTableHtml: () => (/* binding */ gfmTableHtml) /* harmony export */ }); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension */ /** * @typedef {import('./infer.js').Align} Align */ const alignment = { none: '', left: ' align="left"', right: ' align="right"', center: ' align="center"' } // To do: micromark@5: use `infer` here, when all events are exposed. /** * Create an HTML extension for `micromark` to support GitHub tables when * serializing to HTML. * * @returns {HtmlExtension} * Extension for `micromark` that can be passed in `htmlExtensions` to * support GitHub tables when serializing to HTML. */ function gfmTableHtml() { return { enter: { table(token) { const tableAlign = token._align ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(tableAlign, 'expected `_align`') this.lineEndingIfNeeded() this.tag('') this.setData('tableAlign', tableAlign) }, tableBody() { this.tag('') }, tableData() { const tableAlign = this.getData('tableAlign') const tableColumn = this.getData('tableColumn') ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(tableAlign, 'expected `tableAlign`') ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(typeof tableColumn === 'number', 'expected `tableColumn`') const align = alignment[tableAlign[tableColumn]] if (align === undefined) { // Capture results to ignore them. this.buffer() } else { this.lineEndingIfNeeded() this.tag('') } }, tableHead() { this.lineEndingIfNeeded() this.tag('') }, tableHeader() { const tableAlign = this.getData('tableAlign') const tableColumn = this.getData('tableColumn') ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(tableAlign, 'expected `tableAlign`') ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(typeof tableColumn === 'number', 'expected `tableColumn`') const align = alignment[tableAlign[tableColumn]] this.lineEndingIfNeeded() this.tag('') }, tableRow() { this.setData('tableColumn', 0) this.lineEndingIfNeeded() this.tag('') } }, exit: { // Overwrite the default code text data handler to unescape escaped pipes when // they are in tables. codeTextData(token) { let value = this.sliceSerialize(token) if (this.getData('tableAlign')) { value = value.replace(/\\([\\|])/g, replace) } this.raw(this.encode(value)) }, table() { this.setData('tableAlign') // Note: we don’t set `slurpAllLineEndings` anymore, in delimiter rows, // but we do need to reset it to match a funky newline GH generates for // list items combined with tables. this.setData('slurpAllLineEndings') this.lineEndingIfNeeded() this.tag('
') }, tableBody() { this.lineEndingIfNeeded() this.tag('') }, tableData() { const tableAlign = this.getData('tableAlign') const tableColumn = this.getData('tableColumn') ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(tableAlign, 'expected `tableAlign`') ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(typeof tableColumn === 'number', 'expected `tableColumn`') if (tableColumn in tableAlign) { this.tag('') this.setData('tableColumn', tableColumn + 1) } else { // Stop capturing. this.resume() } }, tableHead() { this.lineEndingIfNeeded() this.tag('') }, tableHeader() { const tableColumn = this.getData('tableColumn') ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(typeof tableColumn === 'number', 'expected `tableColumn`') this.tag('') this.setData('tableColumn', tableColumn + 1) }, tableRow() { const tableAlign = this.getData('tableAlign') let tableColumn = this.getData('tableColumn') ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(tableAlign, 'expected `tableAlign`') ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(typeof tableColumn === 'number', 'expected `tableColumn`') while (tableColumn < tableAlign.length) { this.lineEndingIfNeeded() this.tag('') tableColumn++ } this.setData('tableColumn', tableColumn) this.lineEndingIfNeeded() this.tag('') } } } } /** * @param {string} $0 * @param {string} $1 * @returns {string} */ function replace($0, $1) { // Pipes work, backslashes don’t (but can’t escape pipes). return $1 === '|' ? $1 : $0 } /***/ }), /***/ "./node_modules/micromark-extension-gfm-table/dev/lib/infer.js": /*!*********************************************************************!*\ !*** ./node_modules/micromark-extension-gfm-table/dev/lib/infer.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ gfmTableAlign: () => (/* binding */ gfmTableAlign) /* harmony export */ }); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Event} Event */ /** * @typedef {'center' | 'left' | 'none' | 'right'} Align */ /** * Figure out the alignment of a GFM table. * * @param {Readonly>} events * List of events. * @param {number} index * Table enter event. * @returns {Array} * List of aligns. */ function gfmTableAlign(events, index) { (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(events[index][1].type === 'table', 'expected table') let inDelimiterRow = false /** @type {Array} */ const align = [] while (index < events.length) { const event = events[index] if (inDelimiterRow) { if (event[0] === 'enter') { // Start of alignment value: set a new column. // To do: `markdown-rs` uses `tableDelimiterCellValue`. if (event[1].type === 'tableContent') { align.push( events[index + 1][1].type === 'tableDelimiterMarker' ? 'left' : 'none' ) } } // Exits: // End of alignment value: change the column. // To do: `markdown-rs` uses `tableDelimiterCellValue`. else if (event[1].type === 'tableContent') { if (events[index - 1][1].type === 'tableDelimiterMarker') { const alignIndex = align.length - 1 align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right' } } // Done! else if (event[1].type === 'tableDelimiterRow') { break } } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') { inDelimiterRow = true } index += 1 } return align } /***/ }), /***/ "./node_modules/micromark-extension-gfm-table/dev/lib/syntax.js": /*!**********************************************************************!*\ !*** ./node_modules/micromark-extension-gfm-table/dev/lib/syntax.js ***! \**********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ gfmTable: () => (/* binding */ gfmTable) /* harmony export */ }); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var _edit_map_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./edit-map.js */ "./node_modules/micromark-extension-gfm-table/dev/lib/edit-map.js"); /* harmony import */ var _infer_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./infer.js */ "./node_modules/micromark-extension-gfm-table/dev/lib/infer.js"); /** * @typedef {import('micromark-util-types').Event} Event * @typedef {import('micromark-util-types').Extension} Extension * @typedef {import('micromark-util-types').Point} Point * @typedef {import('micromark-util-types').Resolver} Resolver * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').Token} Token * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** * @typedef {[number, number, number, number]} Range * Cell info. * * @typedef {0 | 1 | 2 | 3} RowKind * Where we are: `1` for head row, `2` for delimiter row, `3` for body row. */ /** * Create an HTML extension for `micromark` to support GitHub tables syntax. * * @returns {Extension} * Extension for `micromark` that can be passed in `extensions` to enable GFM * table syntax. */ function gfmTable() { return { flow: {null: {tokenize: tokenizeTable, resolveAll: resolveTable}} } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeTable(effects, ok, nok) { const self = this let size = 0 let sizeB = 0 /** @type {boolean | undefined} */ let seen return start /** * Start of a GFM table. * * If there is a valid table row or table head before, then we try to parse * another row. * Otherwise, we try to parse a head. * * ```markdown * > | | a | * ^ * | | - | * > | | b | * ^ * ``` * @type {State} */ function start(code) { let index = self.events.length - 1 while (index > -1) { const type = self.events[index][1].type if ( type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding || // Note: markdown-rs uses `whitespace` instead of `linePrefix` type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.linePrefix ) index-- else break } const tail = index > -1 ? self.events[index][1].type : null const next = tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore // Don’t allow lazy body rows. if (next === bodyRowStart && self.parser.lazy[self.now().line]) { return nok(code) } return next(code) } /** * Before table head row. * * ```markdown * > | | a | * ^ * | | - | * | | b | * ``` * * @type {State} */ function headRowBefore(code) { effects.enter('tableHead') effects.enter('tableRow') return headRowStart(code) } /** * Before table head row, after whitespace. * * ```markdown * > | | a | * ^ * | | - | * | | b | * ``` * * @type {State} */ function headRowStart(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.verticalBar) { return headRowBreak(code) } // To do: micromark-js should let us parse our own whitespace in extensions, // like `markdown-rs`: // // ```js // // 4+ spaces. // if (markdownSpace(code)) { // return nok(code) // } // ``` seen = true // Count the first character, that isn’t a pipe, double. sizeB += 1 return headRowBreak(code) } /** * At break in table head row. * * ```markdown * > | | a | * ^ * ^ * ^ * | | - | * | | b | * ``` * * @type {State} */ function headRowBreak(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof) { // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t. return nok(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownLineEnding)(code)) { // If anything other than one pipe (ignoring whitespace) was used, it’s fine. if (sizeB > 1) { sizeB = 0 // To do: check if this works. // Feel free to interrupt: self.interrupt = true effects.exit('tableRow') effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding) return headDelimiterStart } // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t. return nok(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownSpace)(code)) { // To do: check if this is fine. // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok) // State::Retry(space_or_tab(tokenizer)) return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__.factorySpace)(effects, headRowBreak, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.whitespace)(code) } sizeB += 1 if (seen) { seen = false // Header cell count. size += 1 } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.verticalBar) { effects.enter('tableCellDivider') effects.consume(code) effects.exit('tableCellDivider') // Whether a delimiter was seen. seen = true return headRowBreak } // Anything else is cell data. effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.data) return headRowData(code) } /** * In table head row data. * * ```markdown * > | | a | * ^ * | | - | * | | b | * ``` * * @type {State} */ function headRowData(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.verticalBar || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownLineEndingOrSpace)(code) ) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.data) return headRowBreak(code) } effects.consume(code) return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.backslash ? headRowEscape : headRowData } /** * In table head row escape. * * ```markdown * > | | a\-b | * ^ * | | ---- | * | | c | * ``` * * @type {State} */ function headRowEscape(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.backslash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.verticalBar) { effects.consume(code) return headRowData } return headRowData(code) } /** * Before delimiter row. * * ```markdown * | | a | * > | | - | * ^ * | | b | * ``` * * @type {State} */ function headDelimiterStart(code) { // Reset `interrupt`. self.interrupt = false // Note: in `markdown-rs`, we need to handle piercing here too. if (self.parser.lazy[self.now().line]) { return nok(code) } effects.enter('tableDelimiterRow') // Track if we’ve seen a `:` or `|`. seen = false if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownSpace)(code)) { (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(self.parser.constructs.disable.null, 'expected `disabled.null`') return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__.factorySpace)( effects, headDelimiterBefore, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.linePrefix, self.parser.constructs.disable.null.includes('codeIndented') ? undefined : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.constants.tabSize )(code) } return headDelimiterBefore(code) } /** * Before delimiter row, after optional whitespace. * * Reused when a `|` is found later, to parse another cell. * * ```markdown * | | a | * > | | - | * ^ * | | b | * ``` * * @type {State} */ function headDelimiterBefore(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.colon) { return headDelimiterValueBefore(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.verticalBar) { seen = true // If we start with a pipe, we open a cell marker. effects.enter('tableCellDivider') effects.consume(code) effects.exit('tableCellDivider') return headDelimiterCellBefore } // More whitespace / empty row not allowed at start. return headDelimiterNok(code) } /** * After `|`, before delimiter cell. * * ```markdown * | | a | * > | | - | * ^ * ``` * * @type {State} */ function headDelimiterCellBefore(code) { if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownSpace)(code)) { return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__.factorySpace)( effects, headDelimiterValueBefore, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.whitespace )(code) } return headDelimiterValueBefore(code) } /** * Before delimiter cell value. * * ```markdown * | | a | * > | | - | * ^ * ``` * * @type {State} */ function headDelimiterValueBefore(code) { // Align: left. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.colon) { sizeB += 1 seen = true effects.enter('tableDelimiterMarker') effects.consume(code) effects.exit('tableDelimiterMarker') return headDelimiterLeftAlignmentAfter } // Align: none. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash) { sizeB += 1 // To do: seems weird that this *isn’t* left aligned, but that state is used? return headDelimiterLeftAlignmentAfter(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownLineEnding)(code)) { return headDelimiterCellAfter(code) } return headDelimiterNok(code) } /** * After delimiter cell left alignment marker. * * ```markdown * | | a | * > | | :- | * ^ * ``` * * @type {State} */ function headDelimiterLeftAlignmentAfter(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash) { effects.enter('tableDelimiterFiller') return headDelimiterFiller(code) } // Anything else is not ok after the left-align colon. return headDelimiterNok(code) } /** * In delimiter cell filler. * * ```markdown * | | a | * > | | - | * ^ * ``` * * @type {State} */ function headDelimiterFiller(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.dash) { effects.consume(code) return headDelimiterFiller } // Align is `center` if it was `left`, `right` otherwise. if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.colon) { seen = true effects.exit('tableDelimiterFiller') effects.enter('tableDelimiterMarker') effects.consume(code) effects.exit('tableDelimiterMarker') return headDelimiterRightAlignmentAfter } effects.exit('tableDelimiterFiller') return headDelimiterRightAlignmentAfter(code) } /** * After delimiter cell right alignment marker. * * ```markdown * | | a | * > | | -: | * ^ * ``` * * @type {State} */ function headDelimiterRightAlignmentAfter(code) { if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownSpace)(code)) { return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__.factorySpace)( effects, headDelimiterCellAfter, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.whitespace )(code) } return headDelimiterCellAfter(code) } /** * After delimiter cell. * * ```markdown * | | a | * > | | -: | * ^ * ``` * * @type {State} */ function headDelimiterCellAfter(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.verticalBar) { return headDelimiterBefore(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownLineEnding)(code)) { // Exit when: // * there was no `:` or `|` at all (it’s a thematic break or setext // underline instead) // * the header cell count is not the delimiter cell count if (!seen || size !== sizeB) { return headDelimiterNok(code) } // Note: in markdown-rs`, a reset is needed here. effects.exit('tableDelimiterRow') effects.exit('tableHead') // To do: in `markdown-rs`, resolvers need to be registered manually. // effects.register_resolver(ResolveName::GfmTable) return ok(code) } return headDelimiterNok(code) } /** * In delimiter row, at a disallowed byte. * * ```markdown * | | a | * > | | x | * ^ * ``` * * @type {State} */ function headDelimiterNok(code) { // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t. return nok(code) } /** * Before table body row. * * ```markdown * | | a | * | | - | * > | | b | * ^ * ``` * * @type {State} */ function bodyRowStart(code) { // Note: in `markdown-rs` we need to manually take care of a prefix, // but in `micromark-js` that is done for us, so if we’re here, we’re // never at whitespace. effects.enter('tableRow') return bodyRowBreak(code) } /** * At break in table body row. * * ```markdown * | | a | * | | - | * > | | b | * ^ * ^ * ^ * ``` * * @type {State} */ function bodyRowBreak(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.verticalBar) { effects.enter('tableCellDivider') effects.consume(code) effects.exit('tableCellDivider') return bodyRowBreak } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownLineEnding)(code)) { effects.exit('tableRow') return ok(code) } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownSpace)(code)) { return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__.factorySpace)(effects, bodyRowBreak, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.whitespace)(code) } // Anything else is cell content. effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.data) return bodyRowData(code) } /** * In table body row data. * * ```markdown * | | a | * | | - | * > | | b | * ^ * ``` * * @type {State} */ function bodyRowData(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.verticalBar || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownLineEndingOrSpace)(code) ) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.data) return bodyRowBreak(code) } effects.consume(code) return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.backslash ? bodyRowEscape : bodyRowData } /** * In table body row escape. * * ```markdown * | | a | * | | ---- | * > | | b\-c | * ^ * ``` * * @type {State} */ function bodyRowEscape(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.backslash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.verticalBar) { effects.consume(code) return bodyRowData } return bodyRowData(code) } } /** @type {Resolver} */ function resolveTable(events, context) { let index = -1 let inFirstCellAwaitingPipe = true /** @type {RowKind} */ let rowKind = 0 /** @type {Range} */ let lastCell = [0, 0, 0, 0] /** @type {Range} */ let cell = [0, 0, 0, 0] let afterHeadAwaitingFirstBodyRow = false let lastTableEnd = 0 /** @type {Token | undefined} */ let currentTable /** @type {Token | undefined} */ let currentBody /** @type {Token | undefined} */ let currentCell const map = new _edit_map_js__WEBPACK_IMPORTED_MODULE_6__.EditMap() while (++index < events.length) { const event = events[index] const token = event[1] if (event[0] === 'enter') { // Start of head. if (token.type === 'tableHead') { afterHeadAwaitingFirstBodyRow = false // Inject previous (body end and) table end. if (lastTableEnd !== 0) { (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(currentTable, 'there should be a table opening') flushTableEnd(map, context, lastTableEnd, currentTable, currentBody) currentBody = undefined lastTableEnd = 0 } // Inject table start. currentTable = { type: 'table', start: Object.assign({}, token.start), // Note: correct end is set later. end: Object.assign({}, token.end) } map.add(index, 0, [['enter', currentTable, context]]) } else if ( token.type === 'tableRow' || token.type === 'tableDelimiterRow' ) { inFirstCellAwaitingPipe = true currentCell = undefined lastCell = [0, 0, 0, 0] cell = [0, index + 1, 0, 0] // Inject table body start. if (afterHeadAwaitingFirstBodyRow) { afterHeadAwaitingFirstBodyRow = false currentBody = { type: 'tableBody', start: Object.assign({}, token.start), // Note: correct end is set later. end: Object.assign({}, token.end) } map.add(index, 0, [['enter', currentBody, context]]) } rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1 } // Cell data. else if ( rowKind && (token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.data || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller') ) { inFirstCellAwaitingPipe = false // First value in cell. if (cell[2] === 0) { if (lastCell[1] !== 0) { cell[0] = cell[1] currentCell = flushCell( map, context, lastCell, rowKind, undefined, currentCell ) lastCell = [0, 0, 0, 0] } cell[2] = index } } else if (token.type === 'tableCellDivider') { if (inFirstCellAwaitingPipe) { inFirstCellAwaitingPipe = false } else { if (lastCell[1] !== 0) { cell[0] = cell[1] currentCell = flushCell( map, context, lastCell, rowKind, undefined, currentCell ) } lastCell = cell cell = [lastCell[1], index, 0, 0] } } } // Exit events. else if (token.type === 'tableHead') { afterHeadAwaitingFirstBodyRow = true lastTableEnd = index } else if ( token.type === 'tableRow' || token.type === 'tableDelimiterRow' ) { lastTableEnd = index if (lastCell[1] !== 0) { cell[0] = cell[1] currentCell = flushCell( map, context, lastCell, rowKind, index, currentCell ) } else if (cell[1] !== 0) { currentCell = flushCell(map, context, cell, rowKind, index, currentCell) } rowKind = 0 } else if ( rowKind && (token.type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.data || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller') ) { cell[3] = index } } if (lastTableEnd !== 0) { (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(currentTable, 'expected table opening') flushTableEnd(map, context, lastTableEnd, currentTable, currentBody) } map.consume(context.events) // To do: move this into `html`, when events are exposed there. // That’s what `markdown-rs` does. // That needs updates to `mdast-util-gfm-table`. index = -1 while (++index < context.events.length) { const event = context.events[index] if (event[0] === 'enter' && event[1].type === 'table') { event[1]._align = (0,_infer_js__WEBPACK_IMPORTED_MODULE_7__.gfmTableAlign)(context.events, index) } } return events } /** * Generate a cell. * * @param {EditMap} map * @param {Readonly} context * @param {Readonly} range * @param {RowKind} rowKind * @param {number | undefined} rowEnd * @param {Token | undefined} previousCell * @returns {Token | undefined} */ // eslint-disable-next-line max-params function flushCell(map, context, range, rowKind, rowEnd, previousCell) { // `markdown-rs` uses: // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell' const groupName = rowKind === 1 ? 'tableHeader' : rowKind === 2 ? 'tableDelimiter' : 'tableData' // `markdown-rs` uses: // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText' const valueName = 'tableContent' // Insert an exit for the previous cell, if there is one. // // ```markdown // > | | aa | bb | cc | // ^-- exit // ^^^^-- this cell // ``` if (range[0] !== 0) { (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(previousCell, 'expected previous cell enter') previousCell.end = Object.assign({}, getPoint(context.events, range[0])) map.add(range[0], 0, [['exit', previousCell, context]]) } // Insert enter of this cell. // // ```markdown // > | | aa | bb | cc | // ^-- enter // ^^^^-- this cell // ``` const now = getPoint(context.events, range[1]) previousCell = { type: groupName, start: Object.assign({}, now), // Note: correct end is set later. end: Object.assign({}, now) } map.add(range[1], 0, [['enter', previousCell, context]]) // Insert text start at first data start and end at last data end, and // remove events between. // // ```markdown // > | | aa | bb | cc | // ^-- enter // ^-- exit // ^^^^-- this cell // ``` if (range[2] !== 0) { const relatedStart = getPoint(context.events, range[2]) const relatedEnd = getPoint(context.events, range[3]) /** @type {Token} */ const valueToken = { type: valueName, start: Object.assign({}, relatedStart), end: Object.assign({}, relatedEnd) } map.add(range[2], 0, [['enter', valueToken, context]]) ;(0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(range[3] !== 0) if (rowKind !== 2) { // Fix positional info on remaining events const start = context.events[range[2]] const end = context.events[range[3]] start[1].end = Object.assign({}, end[1].end) start[1].type = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.chunkText start[1].contentType = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.constants.contentTypeText // Remove if needed. if (range[3] > range[2] + 1) { const a = range[2] + 1 const b = range[3] - range[2] - 1 map.add(a, b, []) } } map.add(range[3] + 1, 0, [['exit', valueToken, context]]) } // Insert an exit for the last cell, if at the row end. // // ```markdown // > | | aa | bb | cc | // ^-- exit // ^^^^^^-- this cell (the last one contains two “between” parts) // ``` if (rowEnd !== undefined) { previousCell.end = Object.assign({}, getPoint(context.events, rowEnd)) map.add(rowEnd, 0, [['exit', previousCell, context]]) previousCell = undefined } return previousCell } /** * Generate table end (and table body end). * * @param {Readonly} map * @param {Readonly} context * @param {number} index * @param {Token} table * @param {Token | undefined} tableBody */ // eslint-disable-next-line max-params function flushTableEnd(map, context, index, table, tableBody) { /** @type {Array} */ const exits = [] const related = getPoint(context.events, index) if (tableBody) { tableBody.end = Object.assign({}, related) exits.push(['exit', tableBody, context]) } table.end = Object.assign({}, related) exits.push(['exit', table, context]) map.add(index + 1, 0, exits) } /** * @param {Readonly>} events * @param {number} index * @returns {Readonly} */ function getPoint(events, index) { const event = events[index] const side = event[0] === 'enter' ? 'start' : 'end' return event[1][side] } /***/ }), /***/ "./node_modules/micromark-extension-gfm-tagfilter/lib/index.js": /*!*********************************************************************!*\ !*** ./node_modules/micromark-extension-gfm-tagfilter/lib/index.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ gfmTagfilterHtml: () => (/* binding */ gfmTagfilterHtml) /* harmony export */ }); /** * @typedef {import('micromark-util-types').CompileContext} CompileContext * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension * @typedef {import('micromark-util-types').Token} Token */ // An opening or closing tag start, followed by a case-insensitive specific tag name, // followed by HTML whitespace, a greater than, or a slash. const reFlow = /<(\/?)(iframe|noembed|noframes|plaintext|script|style|title|textarea|xmp)(?=[\t\n\f\r />])/gi // As HTML (text) parses tags separately (and very strictly), we don’t need to be // global. const reText = new RegExp('^' + reFlow.source, 'i') /** * Create an HTML extension for `micromark` to support GitHubs weird and * useless tagfilter when serializing to HTML. * * @returns {HtmlExtension} * Extension for `micromark` that can be passed in `htmlExtensions` to support * GitHubs weird and useless tagfilter when serializing to HTML. */ function gfmTagfilterHtml() { return { exit: { htmlFlowData(token) { exitHtmlData.call(this, token, reFlow) }, htmlTextData(token) { exitHtmlData.call(this, token, reText) } } } } /** * @this {CompileContext} * @param {Token} token * @param {RegExp} filter * @returns {undefined} */ function exitHtmlData(token, filter) { let value = this.sliceSerialize(token) if (this.options.allowDangerousHtml) { value = value.replace(filter, '<$1$2') } this.raw(this.encode(value)) } /***/ }), /***/ "./node_modules/micromark-extension-gfm-task-list-item/dev/lib/html.js": /*!*****************************************************************************!*\ !*** ./node_modules/micromark-extension-gfm-task-list-item/dev/lib/html.js ***! \*****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ gfmTaskListItemHtml: () => (/* binding */ gfmTaskListItemHtml) /* harmony export */ }); /** * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension */ /** * Create an HTML extension for `micromark` to support GFM task list items when * serializing to HTML. * * @returns {HtmlExtension} * Extension for `micromark` that can be passed in `htmlExtensions` to * support GFM task list items when serializing to HTML. */ function gfmTaskListItemHtml() { return { enter: { taskListCheck() { this.tag('') }, taskListCheckValueChecked() { this.tag('checked="" ') } } } } /***/ }), /***/ "./node_modules/micromark-extension-gfm-task-list-item/dev/lib/syntax.js": /*!*******************************************************************************!*\ !*** ./node_modules/micromark-extension-gfm-task-list-item/dev/lib/syntax.js ***! \*******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ gfmTaskListItem: () => (/* binding */ gfmTaskListItem) /* harmony export */ }); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /** * @typedef {import('micromark-util-types').Extension} Extension * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ const tasklistCheck = {tokenize: tokenizeTasklistCheck} /** * Create an HTML extension for `micromark` to support GFM task list items * syntax. * * @returns {Extension} * Extension for `micromark` that can be passed in `htmlExtensions` to * support GFM task list items when serializing to HTML. */ function gfmTaskListItem() { return { text: {[micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket]: tasklistCheck} } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeTasklistCheck(effects, ok, nok) { const self = this return open /** * At start of task list item check. * * ```markdown * > | * [x] y. * ^ * ``` * * @type {State} */ function open(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket, 'expected `[`') if ( // Exit if there’s stuff before. self.previous !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || // Exit if not in the first content that is the first child of a list // item. !self._gfmTasklistFirstContentOfListItem ) { return nok(code) } effects.enter('taskListCheck') effects.enter('taskListCheckMarker') effects.consume(code) effects.exit('taskListCheckMarker') return inside } /** * In task list item check. * * ```markdown * > | * [x] y. * ^ * ``` * * @type {State} */ function inside(code) { // Currently we match how GH works in files. // To match how GH works in comments, use `markdownSpace` (`[\t ]`) instead // of `markdownLineEndingOrSpace` (`[\t\n\r ]`). if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownLineEndingOrSpace)(code)) { effects.enter('taskListCheckValueUnchecked') effects.consume(code) effects.exit('taskListCheckValueUnchecked') return close } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.uppercaseX || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lowercaseX) { effects.enter('taskListCheckValueChecked') effects.consume(code) effects.exit('taskListCheckValueChecked') return close } return nok(code) } /** * At close of task list item check. * * ```markdown * > | * [x] y. * ^ * ``` * * @type {State} */ function close(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightSquareBracket) { effects.enter('taskListCheckMarker') effects.consume(code) effects.exit('taskListCheckMarker') effects.exit('taskListCheck') return after } return nok(code) } /** * @type {State} */ function after(code) { // EOL in paragraph means there must be something else after it. if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownLineEnding)(code)) { return ok(code) } // Space or tab? // Check what comes after. if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownSpace)(code)) { return effects.check({tokenize: spaceThenNonSpace}, ok, nok)(code) } // EOF, or non-whitespace, both wrong. return nok(code) } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function spaceThenNonSpace(effects, ok, nok) { return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__.factorySpace)(effects, after, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.whitespace) /** * After whitespace, after task list item check. * * ```markdown * > | * [x] y. * ^ * ``` * * @type {State} */ function after(code) { // EOF means there was nothing, so bad. // EOL means there’s content after it, so good. // Impossible to have more spaces. // Anything else is good. return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof ? nok(code) : ok(code) } } /***/ }), /***/ "./node_modules/micromark-extension-gfm/index.js": /*!*******************************************************!*\ !*** ./node_modules/micromark-extension-gfm/index.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ gfm: () => (/* binding */ gfm), /* harmony export */ gfmHtml: () => (/* binding */ gfmHtml) /* harmony export */ }); /* harmony import */ var micromark_util_combine_extensions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-combine-extensions */ "./node_modules/micromark-util-combine-extensions/index.js"); /* harmony import */ var micromark_extension_gfm_autolink_literal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-extension-gfm-autolink-literal */ "./node_modules/micromark-extension-gfm-autolink-literal/dev/lib/syntax.js"); /* harmony import */ var micromark_extension_gfm_autolink_literal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-extension-gfm-autolink-literal */ "./node_modules/micromark-extension-gfm-autolink-literal/dev/lib/html.js"); /* harmony import */ var micromark_extension_gfm_footnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-extension-gfm-footnote */ "./node_modules/micromark-extension-gfm-footnote/dev/lib/syntax.js"); /* harmony import */ var micromark_extension_gfm_footnote__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! micromark-extension-gfm-footnote */ "./node_modules/micromark-extension-gfm-footnote/dev/lib/html.js"); /* harmony import */ var micromark_extension_gfm_strikethrough__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-extension-gfm-strikethrough */ "./node_modules/micromark-extension-gfm-strikethrough/dev/lib/syntax.js"); /* harmony import */ var micromark_extension_gfm_strikethrough__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! micromark-extension-gfm-strikethrough */ "./node_modules/micromark-extension-gfm-strikethrough/dev/lib/html.js"); /* harmony import */ var micromark_extension_gfm_table__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-extension-gfm-table */ "./node_modules/micromark-extension-gfm-table/dev/lib/syntax.js"); /* harmony import */ var micromark_extension_gfm_table__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! micromark-extension-gfm-table */ "./node_modules/micromark-extension-gfm-table/dev/lib/html.js"); /* harmony import */ var micromark_extension_gfm_tagfilter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! micromark-extension-gfm-tagfilter */ "./node_modules/micromark-extension-gfm-tagfilter/lib/index.js"); /* harmony import */ var micromark_extension_gfm_task_list_item__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-extension-gfm-task-list-item */ "./node_modules/micromark-extension-gfm-task-list-item/dev/lib/syntax.js"); /* harmony import */ var micromark_extension_gfm_task_list_item__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! micromark-extension-gfm-task-list-item */ "./node_modules/micromark-extension-gfm-task-list-item/dev/lib/html.js"); /** * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options * @typedef {import('micromark-util-types').Extension} Extension * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension */ /** * Create an extension for `micromark` to enable GFM syntax. * * @param {Options | null | undefined} [options] * Configuration (optional). * * Passed to `micromark-extens-gfm-strikethrough`. * @returns {Extension} * Extension for `micromark` that can be passed in `extensions` to enable GFM * syntax. */ function gfm(options) { return (0,micromark_util_combine_extensions__WEBPACK_IMPORTED_MODULE_0__.combineExtensions)([ (0,micromark_extension_gfm_autolink_literal__WEBPACK_IMPORTED_MODULE_1__.gfmAutolinkLiteral)(), (0,micromark_extension_gfm_footnote__WEBPACK_IMPORTED_MODULE_2__.gfmFootnote)(), (0,micromark_extension_gfm_strikethrough__WEBPACK_IMPORTED_MODULE_3__.gfmStrikethrough)(options), (0,micromark_extension_gfm_table__WEBPACK_IMPORTED_MODULE_4__.gfmTable)(), (0,micromark_extension_gfm_task_list_item__WEBPACK_IMPORTED_MODULE_5__.gfmTaskListItem)() ]) } /** * Create an extension for `micromark` to support GFM when serializing to HTML. * * @param {HtmlOptions | null | undefined} [options] * Configuration (optional). * * Passed to `micromark-extens-gfm-footnote`. * @returns {HtmlExtension} * Extension for `micromark` that can be passed in `htmlExtensions` to * support GFM when serializing to HTML. */ function gfmHtml(options) { return (0,micromark_util_combine_extensions__WEBPACK_IMPORTED_MODULE_0__.combineHtmlExtensions)([ (0,micromark_extension_gfm_autolink_literal__WEBPACK_IMPORTED_MODULE_6__.gfmAutolinkLiteralHtml)(), (0,micromark_extension_gfm_footnote__WEBPACK_IMPORTED_MODULE_7__.gfmFootnoteHtml)(options), (0,micromark_extension_gfm_strikethrough__WEBPACK_IMPORTED_MODULE_8__.gfmStrikethroughHtml)(), (0,micromark_extension_gfm_table__WEBPACK_IMPORTED_MODULE_9__.gfmTableHtml)(), (0,micromark_extension_gfm_tagfilter__WEBPACK_IMPORTED_MODULE_10__.gfmTagfilterHtml)(), (0,micromark_extension_gfm_task_list_item__WEBPACK_IMPORTED_MODULE_11__.gfmTaskListItemHtml)() ]) } /***/ }), /***/ "./node_modules/micromark-factory-destination/dev/index.js": /*!*****************************************************************!*\ !*** ./node_modules/micromark-factory-destination/dev/index.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ factoryDestination: () => (/* binding */ factoryDestination) /* harmony export */ }); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /** * @typedef {import('micromark-util-types').Effects} Effects * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenType} TokenType */ /** * Parse destinations. * * ###### Examples * * ```markdown * * b> * * * a * a\)b * a(b)c * a(b) * ``` * * @param {Effects} effects * Context. * @param {State} ok * State switched to when successful. * @param {State} nok * State switched to when unsuccessful. * @param {TokenType} type * Type for whole (`` or `b`). * @param {TokenType} literalType * Type when enclosed (``). * @param {TokenType} literalMarkerType * Type for enclosing (`<` and `>`). * @param {TokenType} rawType * Type when not enclosed (`b`). * @param {TokenType} stringType * Type for the value (`a` or `b`). * @param {number | undefined} [max=Infinity] * Depth of nested parens (inclusive). * @returns {State} * Start state. */ // eslint-disable-next-line max-params function factoryDestination( effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max ) { const limit = max || Number.POSITIVE_INFINITY let balance = 0 return start /** * Start of destination. * * ```markdown * > | * ^ * > | aa * ^ * ``` * * @type {State} */ function start(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lessThan) { effects.enter(type) effects.enter(literalType) effects.enter(literalMarkerType) effects.consume(code) effects.exit(literalMarkerType) return enclosedBefore } // ASCII control, space, closing paren. if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.space || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightParenthesis || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.asciiControl)(code) ) { return nok(code) } effects.enter(type) effects.enter(rawType) effects.enter(stringType) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.chunkString, {contentType: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.contentTypeString}) return raw(code) } /** * After `<`, at an enclosed destination. * * ```markdown * > | * ^ * ``` * * @type {State} */ function enclosedBefore(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.greaterThan) { effects.enter(literalMarkerType) effects.consume(code) effects.exit(literalMarkerType) effects.exit(literalType) effects.exit(type) return ok } effects.enter(stringType) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.chunkString, {contentType: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.contentTypeString}) return enclosed(code) } /** * In enclosed destination. * * ```markdown * > | * ^ * ``` * * @type {State} */ function enclosed(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.greaterThan) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.chunkString) effects.exit(stringType) return enclosedBefore(code) } if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lessThan || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code) ) { return nok(code) } effects.consume(code) return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.backslash ? enclosedEscape : enclosed } /** * After `\`, at a special character. * * ```markdown * > | * ^ * ``` * * @type {State} */ function enclosedEscape(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lessThan || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.greaterThan || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.backslash ) { effects.consume(code) return enclosed } return enclosed(code) } /** * In raw destination. * * ```markdown * > | aa * ^ * ``` * * @type {State} */ function raw(code) { if ( !balance && (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightParenthesis || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEndingOrSpace)(code)) ) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.chunkString) effects.exit(stringType) effects.exit(rawType) effects.exit(type) return ok(code) } if (balance < limit && code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftParenthesis) { effects.consume(code) balance++ return raw } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightParenthesis) { effects.consume(code) balance-- return raw } // ASCII control (but *not* `\0`) and space and `(`. // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it // doesn’t. if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.space || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftParenthesis || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.asciiControl)(code) ) { return nok(code) } effects.consume(code) return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.backslash ? rawEscape : raw } /** * After `\`, at special character. * * ```markdown * > | a\*a * ^ * ``` * * @type {State} */ function rawEscape(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftParenthesis || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightParenthesis || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.backslash ) { effects.consume(code) return raw } return raw(code) } } /***/ }), /***/ "./node_modules/micromark-factory-label/dev/index.js": /*!***********************************************************!*\ !*** ./node_modules/micromark-factory-label/dev/index.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ factoryLabel: () => (/* binding */ factoryLabel) /* harmony export */ }); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Effects} Effects * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').TokenType} TokenType */ /** * Parse labels. * * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. * * ###### Examples * * ```markdown * [a] * [a * b] * [a\]b] * ``` * * @this {TokenizeContext} * Tokenize context. * @param {Effects} effects * Context. * @param {State} ok * State switched to when successful. * @param {State} nok * State switched to when unsuccessful. * @param {TokenType} type * Type of the whole label (`[a]`). * @param {TokenType} markerType * Type for the markers (`[` and `]`). * @param {TokenType} stringType * Type for the identifier (`a`). * @returns {State} * Start state. */ // eslint-disable-next-line max-params function factoryLabel(effects, ok, nok, type, markerType, stringType) { const self = this let size = 0 /** @type {boolean} */ let seen return start /** * Start of label. * * ```markdown * > | [a] * ^ * ``` * * @type {State} */ function start(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.leftSquareBracket, 'expected `[`') effects.enter(type) effects.enter(markerType) effects.consume(code) effects.exit(markerType) effects.enter(stringType) return atBreak } /** * In label, at something, before something else. * * ```markdown * > | [a] * ^ * ``` * * @type {State} */ function atBreak(code) { if ( size > micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.constants.linkReferenceSizeMax || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.leftSquareBracket || (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.rightSquareBracket && !seen) || // To do: remove in the future once we’ve switched from // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, // which doesn’t need this. // Hidden footnotes hook. /* c8 ignore next 3 */ (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.caret && !size && '_hiddenFootnoteSupport' in self.parser.constructs) ) { return nok(code) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.rightSquareBracket) { effects.exit(stringType) effects.enter(markerType) effects.consume(code) effects.exit(markerType) effects.exit(type) return ok } // To do: indent? Link chunks and EOLs together? if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code)) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.lineEnding) return atBreak } effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.chunkString, {contentType: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.constants.contentTypeString}) return labelInside(code) } /** * In label, in text. * * ```markdown * > | [a] * ^ * ``` * * @type {State} */ function labelInside(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.leftSquareBracket || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.rightSquareBracket || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownLineEnding)(code) || size++ > micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.constants.linkReferenceSizeMax ) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.types.chunkString) return atBreak(code) } effects.consume(code) if (!seen) seen = !(0,micromark_util_character__WEBPACK_IMPORTED_MODULE_3__.markdownSpace)(code) return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.backslash ? labelEscape : labelInside } /** * After `\`, at a special character. * * ```markdown * > | [a\*a] * ^ * ``` * * @type {State} */ function labelEscape(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.leftSquareBracket || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.backslash || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.rightSquareBracket ) { effects.consume(code) size++ return labelInside } return labelInside(code) } } /***/ }), /***/ "./node_modules/micromark-factory-space/dev/index.js": /*!***********************************************************!*\ !*** ./node_modules/micromark-factory-space/dev/index.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ factorySpace: () => (/* binding */ factorySpace) /* harmony export */ }); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /** * @typedef {import('micromark-util-types').Effects} Effects * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenType} TokenType */ // To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. /** * Parse spaces and tabs. * * There is no `nok` parameter: * * * spaces in markdown are often optional, in which case this factory can be * used and `ok` will be switched to whether spaces were found or not * * one line ending or space can be detected with `markdownSpace(code)` right * before using `factorySpace` * * ###### Examples * * Where `␉` represents a tab (plus how much it expands) and `␠` represents a * single space. * * ```markdown * ␉ * ␠␠␠␠ * ␉␠ * ``` * * @param {Effects} effects * Context. * @param {State} ok * State switched to when successful. * @param {TokenType} type * Type (`' \t'`). * @param {number | undefined} [max=Infinity] * Max (exclusive). * @returns {State} * Start state. */ function factorySpace(effects, ok, type, max) { const limit = max ? max - 1 : Number.POSITIVE_INFINITY let size = 0 return start /** @type {State} */ function start(code) { if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_0__.markdownSpace)(code)) { effects.enter(type) return prefix(code) } return ok(code) } /** @type {State} */ function prefix(code) { if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_0__.markdownSpace)(code) && size++ < limit) { effects.consume(code) return prefix } effects.exit(type) return ok(code) } } /***/ }), /***/ "./node_modules/micromark-factory-title/dev/index.js": /*!***********************************************************!*\ !*** ./node_modules/micromark-factory-title/dev/index.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ factoryTitle: () => (/* binding */ factoryTitle) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /** * @typedef {import('micromark-util-types').Code} Code * @typedef {import('micromark-util-types').Effects} Effects * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenType} TokenType */ /** * Parse titles. * * ###### Examples * * ```markdown * "a" * 'b' * (c) * "a * b" * 'a * b' * (a\)b) * ``` * * @param {Effects} effects * Context. * @param {State} ok * State switched to when successful. * @param {State} nok * State switched to when unsuccessful. * @param {TokenType} type * Type of the whole title (`"a"`, `'b'`, `(c)`). * @param {TokenType} markerType * Type for the markers (`"`, `'`, `(`, and `)`). * @param {TokenType} stringType * Type for the value (`a`). * @returns {State} * Start state. */ // eslint-disable-next-line max-params function factoryTitle(effects, ok, nok, type, markerType, stringType) { /** @type {NonNullable} */ let marker return start /** * Start of title. * * ```markdown * > | "a" * ^ * ``` * * @type {State} */ function start(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.quotationMark || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.apostrophe || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftParenthesis ) { effects.enter(type) effects.enter(markerType) effects.consume(code) effects.exit(markerType) marker = code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftParenthesis ? micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightParenthesis : code return begin } return nok(code) } /** * After opening marker. * * This is also used at the closing marker. * * ```markdown * > | "a" * ^ * ``` * * @type {State} */ function begin(code) { if (code === marker) { effects.enter(markerType) effects.consume(code) effects.exit(markerType) effects.exit(type) return ok } effects.enter(stringType) return atBreak(code) } /** * At something, before something else. * * ```markdown * > | "a" * ^ * ``` * * @type {State} */ function atBreak(code) { if (code === marker) { effects.exit(stringType) return begin(marker) } if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof) { return nok(code) } // Note: blank lines can’t exist in content. if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code)) { // To do: use `space_or_tab_eol_with_options`, connect. effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.lineEnding) return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_3__.factorySpace)(effects, atBreak, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.linePrefix) } effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.chunkString, {contentType: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.contentTypeString}) return inside(code) } /** * * * @type {State} */ function inside(code) { if (code === marker || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEnding)(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.types.chunkString) return atBreak(code) } effects.consume(code) return code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.backslash ? escape : inside } /** * After `\`, at a special character. * * ```markdown * > | "a\*b" * ^ * ``` * * @type {State} */ function escape(code) { if (code === marker || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.backslash) { effects.consume(code) return inside } return inside(code) } } /***/ }), /***/ "./node_modules/micromark-factory-whitespace/dev/index.js": /*!****************************************************************!*\ !*** ./node_modules/micromark-factory-whitespace/dev/index.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ factoryWhitespace: () => (/* binding */ factoryWhitespace) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /** * @typedef {import('micromark-util-types').Effects} Effects * @typedef {import('micromark-util-types').State} State */ /** * Parse spaces and tabs. * * There is no `nok` parameter: * * * line endings or spaces in markdown are often optional, in which case this * factory can be used and `ok` will be switched to whether spaces were found * or not * * one line ending or space can be detected with * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` * * @param {Effects} effects * Context. * @param {State} ok * State switched to when successful. * @returns {State} * Start state. */ function factoryWhitespace(effects, ok) { /** @type {boolean} */ let seen return start /** @type {State} */ function start(code) { if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_0__.markdownLineEnding)(code)) { effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding) seen = true return start } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_0__.markdownSpace)(code)) { return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_2__.factorySpace)( effects, start, seen ? micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.linePrefix : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.lineSuffix )(code) } return ok(code) } } /***/ }), /***/ "./node_modules/micromark-util-character/dev/index.js": /*!************************************************************!*\ !*** ./node_modules/micromark-util-character/dev/index.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ asciiAlpha: () => (/* binding */ asciiAlpha), /* harmony export */ asciiAlphanumeric: () => (/* binding */ asciiAlphanumeric), /* harmony export */ asciiAtext: () => (/* binding */ asciiAtext), /* harmony export */ asciiControl: () => (/* binding */ asciiControl), /* harmony export */ asciiDigit: () => (/* binding */ asciiDigit), /* harmony export */ asciiHexDigit: () => (/* binding */ asciiHexDigit), /* harmony export */ asciiPunctuation: () => (/* binding */ asciiPunctuation), /* harmony export */ markdownLineEnding: () => (/* binding */ markdownLineEnding), /* harmony export */ markdownLineEndingOrSpace: () => (/* binding */ markdownLineEndingOrSpace), /* harmony export */ markdownSpace: () => (/* binding */ markdownSpace), /* harmony export */ unicodePunctuation: () => (/* binding */ unicodePunctuation), /* harmony export */ unicodeWhitespace: () => (/* binding */ unicodeWhitespace) /* harmony export */ }); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /** * @typedef {import('micromark-util-types').Code} Code */ /** * Check whether the character code represents an ASCII alpha (`a` through `z`, * case insensitive). * * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. * * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) * to U+005A (`Z`). * * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) * to U+007A (`z`). * * @param code * Code. * @returns {boolean} * Whether it matches. */ const asciiAlpha = regexCheck(/[A-Za-z]/) /** * Check whether the character code represents an ASCII alphanumeric (`a` * through `z`, case insensitive, or `0` through `9`). * * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha * (see `asciiAlpha`). * * @param code * Code. * @returns {boolean} * Whether it matches. */ const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) /** * Check whether the character code represents an ASCII atext. * * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE * (`{`) to U+007E TILDE (`~`). * * See: * **\[RFC5322]**: * [Internet Message Format](https://tools.ietf.org/html/rfc5322). * P. Resnick. * IETF. * * @param code * Code. * @returns {boolean} * Whether it matches. */ const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) /** * Check whether a character code is an ASCII control character. * * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) * to U+001F (US), or U+007F (DEL). * * @param {Code} code * Code. * @returns {boolean} * Whether it matches. */ function asciiControl(code) { return ( // Special whitespace codes (which have negative values), C0 and Control // character DEL code !== null && (code < micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.space || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.del) ) } /** * Check whether the character code represents an ASCII digit (`0` through `9`). * * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to * U+0039 (`9`). * * @param code * Code. * @returns {boolean} * Whether it matches. */ const asciiDigit = regexCheck(/\d/) /** * Check whether the character code represents an ASCII hex digit (`a` through * `f`, case insensitive, or `0` through `9`). * * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex * digit, or an ASCII lower hex digit. * * An **ASCII upper hex digit** is a character in the inclusive range U+0041 * (`A`) to U+0046 (`F`). * * An **ASCII lower hex digit** is a character in the inclusive range U+0061 * (`a`) to U+0066 (`f`). * * @param code * Code. * @returns {boolean} * Whether it matches. */ const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) /** * Check whether the character code represents ASCII punctuation. * * An **ASCII punctuation** is a character in the inclusive ranges U+0021 * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). * * @param code * Code. * @returns {boolean} * Whether it matches. */ const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) /** * Check whether a character code is a markdown line ending. * * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). * * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE * RETURN (CR) are replaced by these virtual characters depending on whether * they occurred together. * * @param {Code} code * Code. * @returns {boolean} * Whether it matches. */ function markdownLineEnding(code) { return code !== null && code < micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.horizontalTab } /** * Check whether a character code is a markdown line ending (see * `markdownLineEnding`) or markdown space (see `markdownSpace`). * * @param {Code} code * Code. * @returns {boolean} * Whether it matches. */ function markdownLineEndingOrSpace(code) { return code !== null && (code < micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.nul || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.space) } /** * Check whether a character code is a markdown space. * * A **markdown space** is the concrete character U+0020 SPACE (SP) and the * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). * * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL * SPACE (VS) characters, depending on the column at which the tab occurred. * * @param {Code} code * Code. * @returns {boolean} * Whether it matches. */ function markdownSpace(code) { return ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.horizontalTab || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.virtualSpace || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.space ) } // Size note: removing ASCII from the regex and using `asciiPunctuation` here // In fact adds to the bundle size. /** * Check whether the character code represents Unicode punctuation. * * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII * punctuation (see `asciiPunctuation`). * * See: * **\[UNICODE]**: * [The Unicode Standard](https://www.unicode.org/versions/). * Unicode Consortium. * * @param code * Code. * @returns * Whether it matches. */ const unicodePunctuation = regexCheck(/\p{P}|\p{S}/u) /** * Check whether the character code represents Unicode whitespace. * * Note that this does handle micromark specific markdown whitespace characters. * See `markdownLineEndingOrSpace` to check that. * * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). * * See: * **\[UNICODE]**: * [The Unicode Standard](https://www.unicode.org/versions/). * Unicode Consortium. * * @param code * Code. * @returns * Whether it matches. */ const unicodeWhitespace = regexCheck(/\s/) /** * Create a code check from a regex. * * @param {RegExp} regex * @returns {(code: Code) => boolean} */ function regexCheck(regex) { return check /** * Check whether a code matches the bound regex. * * @param {Code} code * Character code. * @returns {boolean} * Whether the character code matches the bound regex. */ function check(code) { return code !== null && code > -1 && regex.test(String.fromCharCode(code)) } } /***/ }), /***/ "./node_modules/micromark-util-chunked/dev/index.js": /*!**********************************************************!*\ !*** ./node_modules/micromark-util-chunked/dev/index.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ push: () => (/* binding */ push), /* harmony export */ splice: () => (/* binding */ splice) /* harmony export */ }); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /** * Like `Array#splice`, but smarter for giant arrays. * * `Array#splice` takes all items to be inserted as individual argument which * causes a stack overflow in V8 when trying to insert 100k items for instance. * * Otherwise, this does not return the removed items, and takes `items` as an * array instead of rest parameters. * * @template {unknown} T * Item type. * @param {Array} list * List to operate on. * @param {number} start * Index to remove/insert at (can be negative). * @param {number} remove * Number of items to remove. * @param {Array} items * Items to inject into `list`. * @returns {undefined} * Nothing. */ function splice(list, start, remove, items) { const end = list.length let chunkStart = 0 /** @type {Array} */ let parameters // Make start between zero and `end` (included). if (start < 0) { start = -start > end ? 0 : end + start } else { start = start > end ? end : start } remove = remove > 0 ? remove : 0 // No need to chunk the items if there’s only a couple (10k) items. if (items.length < micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.constants.v8MaxSafeChunkSize) { parameters = Array.from(items) parameters.unshift(start, remove) // @ts-expect-error Hush, it’s fine. list.splice(...parameters) } else { // Delete `remove` items starting from `start` if (remove) list.splice(start, remove) // Insert the items in chunks to not cause stack overflows. while (chunkStart < items.length) { parameters = items.slice( chunkStart, chunkStart + micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.constants.v8MaxSafeChunkSize ) parameters.unshift(start, 0) // @ts-expect-error Hush, it’s fine. list.splice(...parameters) chunkStart += micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.constants.v8MaxSafeChunkSize start += micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.constants.v8MaxSafeChunkSize } } } /** * Append `items` (an array) at the end of `list` (another array). * When `list` was empty, returns `items` instead. * * This prevents a potentially expensive operation when `list` is empty, * and adds items in batches to prevent V8 from hanging. * * @template {unknown} T * Item type. * @param {Array} list * List to operate on. * @param {Array} items * Items to add to `list`. * @returns {Array} * Either `list` or `items`. */ function push(list, items) { if (list.length > 0) { splice(list, list.length, 0, items) return list } return items } /***/ }), /***/ "./node_modules/micromark-util-classify-character/dev/index.js": /*!*********************************************************************!*\ !*** ./node_modules/micromark-util-classify-character/dev/index.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ classifyCharacter: () => (/* binding */ classifyCharacter) /* harmony export */ }); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /** * @typedef {import('micromark-util-types').Code} Code */ /** * Classify whether a code represents whitespace, punctuation, or something * else. * * Used for attention (emphasis, strong), whose sequences can open or close * based on the class of surrounding characters. * * > 👉 **Note**: eof (`null`) is seen as whitespace. * * @param {Code} code * Code. * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} * Group. */ function classifyCharacter(code) { if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.markdownLineEndingOrSpace)(code) || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.unicodeWhitespace)(code) ) { return micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.constants.characterGroupWhitespace } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_1__.unicodePunctuation)(code)) { return micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.constants.characterGroupPunctuation } } /***/ }), /***/ "./node_modules/micromark-util-combine-extensions/index.js": /*!*****************************************************************!*\ !*** ./node_modules/micromark-util-combine-extensions/index.js ***! \*****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ combineExtensions: () => (/* binding */ combineExtensions), /* harmony export */ combineHtmlExtensions: () => (/* binding */ combineHtmlExtensions) /* harmony export */ }); /* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-chunked */ "./node_modules/micromark-util-chunked/dev/index.js"); /** * @typedef {import('micromark-util-types').Extension} Extension * @typedef {import('micromark-util-types').Handles} Handles * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension */ const hasOwnProperty = {}.hasOwnProperty /** * Combine multiple syntax extensions into one. * * @param {Array} extensions * List of syntax extensions. * @returns {NormalizedExtension} * A single combined extension. */ function combineExtensions(extensions) { /** @type {NormalizedExtension} */ const all = {} let index = -1 while (++index < extensions.length) { syntaxExtension(all, extensions[index]) } return all } /** * Merge `extension` into `all`. * * @param {NormalizedExtension} all * Extension to merge into. * @param {Extension} extension * Extension to merge. * @returns {undefined} */ function syntaxExtension(all, extension) { /** @type {keyof Extension} */ let hook for (hook in extension) { const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined /** @type {Record} */ const left = maybe || (all[hook] = {}) /** @type {Record | undefined} */ const right = extension[hook] /** @type {string} */ let code if (right) { for (code in right) { if (!hasOwnProperty.call(left, code)) left[code] = [] const value = right[code] constructs( // @ts-expect-error Looks like a list. left[code], Array.isArray(value) ? value : value ? [value] : [] ) } } } } /** * Merge `list` into `existing` (both lists of constructs). * Mutates `existing`. * * @param {Array} existing * @param {Array} list * @returns {undefined} */ function constructs(existing, list) { let index = -1 /** @type {Array} */ const before = [] while (++index < list.length) { // @ts-expect-error Looks like an object. ;(list[index].add === 'after' ? existing : before).push(list[index]) } (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_0__.splice)(existing, 0, 0, before) } /** * Combine multiple HTML extensions into one. * * @param {Array} htmlExtensions * List of HTML extensions. * @returns {HtmlExtension} * A single combined HTML extension. */ function combineHtmlExtensions(htmlExtensions) { /** @type {HtmlExtension} */ const handlers = {} let index = -1 while (++index < htmlExtensions.length) { htmlExtension(handlers, htmlExtensions[index]) } return handlers } /** * Merge `extension` into `all`. * * @param {HtmlExtension} all * Extension to merge into. * @param {HtmlExtension} extension * Extension to merge. * @returns {undefined} */ function htmlExtension(all, extension) { /** @type {keyof HtmlExtension} */ let hook for (hook in extension) { const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined const left = maybe || (all[hook] = {}) const right = extension[hook] /** @type {keyof Handles} */ let type if (right) { for (type in right) { // @ts-expect-error assume document vs regular handler are managed correctly. left[type] = right[type] } } } } /***/ }), /***/ "./node_modules/micromark-util-decode-numeric-character-reference/dev/index.js": /*!*************************************************************************************!*\ !*** ./node_modules/micromark-util-decode-numeric-character-reference/dev/index.js ***! \*************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ decodeNumericCharacterReference: () => (/* binding */ decodeNumericCharacterReference) /* harmony export */ }); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/values.js"); /** * Turn the number (in string form as either hexa- or plain decimal) coming from * a numeric character reference into a character. * * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes * non-characters and control characters safe. * * @param {string} value * Value to decode. * @param {number} base * Numeric base. * @returns {string} * Character. */ function decodeNumericCharacterReference(value, base) { const code = Number.parseInt(value, base) if ( // C0 except for HT, LF, FF, CR, space. code < micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.ht || code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.vt || (code > micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.cr && code < micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.space) || // Control character (DEL) of C0, and C1 controls. (code > micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.tilde && code < 160) || // Lone high surrogates and low surrogates. (code > 55_295 && code < 57_344) || // Noncharacters. (code > 64_975 && code < 65_008) || /* eslint-disable no-bitwise */ (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */ // Out of range code > 1_114_111 ) { return micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.values.replacementCharacter } return String.fromCodePoint(code) } /***/ }), /***/ "./node_modules/micromark-util-decode-string/dev/index.js": /*!****************************************************************!*\ !*** ./node_modules/micromark-util-decode-string/dev/index.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ decodeString: () => (/* binding */ decodeString) /* harmony export */ }); /* harmony import */ var decode_named_character_reference__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! decode-named-character-reference */ "./node_modules/decode-named-character-reference/index.dom.js"); /* harmony import */ var micromark_util_decode_numeric_character_reference__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-decode-numeric-character-reference */ "./node_modules/micromark-util-decode-numeric-character-reference/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); const characterEscapeOrReference = /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi /** * Decode markdown strings (which occur in places such as fenced code info * strings, destinations, labels, and titles). * * The “string” content type allows character escapes and -references. * This decodes those. * * @param {string} value * Value to decode. * @returns {string} * Decoded value. */ function decodeString(value) { return value.replace(characterEscapeOrReference, decode) } /** * @param {string} $0 * @param {string} $1 * @param {string} $2 * @returns {string} */ function decode($0, $1, $2) { if ($1) { // Escape. return $1 } // Reference. const head = $2.charCodeAt(0) if (head === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.numberSign) { const head = $2.charCodeAt(1) const hex = head === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lowercaseX || head === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.uppercaseX return (0,micromark_util_decode_numeric_character_reference__WEBPACK_IMPORTED_MODULE_1__.decodeNumericCharacterReference)( $2.slice(hex ? 2 : 1), hex ? micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.constants.numericBaseHexadecimal : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_2__.constants.numericBaseDecimal ) } return (0,decode_named_character_reference__WEBPACK_IMPORTED_MODULE_3__.decodeNamedCharacterReference)($2) || $0 } /***/ }), /***/ "./node_modules/micromark-util-encode/index.js": /*!*****************************************************!*\ !*** ./node_modules/micromark-util-encode/index.js ***! \*****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ encode: () => (/* binding */ encode) /* harmony export */ }); const characterReferences = {'"': 'quot', '&': 'amp', '<': 'lt', '>': 'gt'} /** * Encode only the dangerous HTML characters. * * This ensures that certain characters which have special meaning in HTML are * dealt with. * Technically, we can skip `>` and `"` in many cases, but CM includes them. * * @param {string} value * Value to encode. * @returns {string} * Encoded value. */ function encode(value) { return value.replace(/["&<>]/g, replace) /** * @param {string} value * @returns {string} */ function replace(value) { // @ts-expect-error Hush, it’s fine. return '&' + characterReferences[value] + ';' } } /***/ }), /***/ "./node_modules/micromark-util-html-tag-name/index.js": /*!************************************************************!*\ !*** ./node_modules/micromark-util-html-tag-name/index.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ htmlBlockNames: () => (/* binding */ htmlBlockNames), /* harmony export */ htmlRawNames: () => (/* binding */ htmlRawNames) /* harmony export */ }); /** * List of lowercase HTML “block” tag names. * * The list, when parsing HTML (flow), results in more relaxed rules (condition * 6). * Because they are known blocks, the HTML-like syntax doesn’t have to be * strictly parsed. * For tag names not in this list, a more strict algorithm (condition 7) is used * to detect whether the HTML-like syntax is seen as HTML (flow) or not. * * This is copied from: * . * * > 👉 **Note**: `search` was added in `CommonMark@0.31`. */ const htmlBlockNames = [ 'address', 'article', 'aside', 'base', 'basefont', 'blockquote', 'body', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dialog', 'dir', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hr', 'html', 'iframe', 'legend', 'li', 'link', 'main', 'menu', 'menuitem', 'nav', 'noframes', 'ol', 'optgroup', 'option', 'p', 'param', 'search', 'section', 'summary', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul' ] /** * List of lowercase HTML “raw” tag names. * * The list, when parsing HTML (flow), results in HTML that can include lines * without exiting, until a closing tag also in this list is found (condition * 1). * * This module is copied from: * . * * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. */ const htmlRawNames = ['pre', 'script', 'style', 'textarea'] /***/ }), /***/ "./node_modules/micromark-util-normalize-identifier/dev/index.js": /*!***********************************************************************!*\ !*** ./node_modules/micromark-util-normalize-identifier/dev/index.js ***! \***********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ normalizeIdentifier: () => (/* binding */ normalizeIdentifier) /* harmony export */ }); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/values.js"); /** * Normalize an identifier (as found in references, definitions). * * Collapses markdown whitespace, trim, and then lower- and uppercase. * * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different * uppercase character (U+0398 (`Θ`)). * So, to get a canonical form, we perform both lower- and uppercase. * * Using uppercase last makes sure keys will never interact with default * prototypal values (such as `constructor`): nothing in the prototype of * `Object` is uppercase. * * @param {string} value * Identifier to normalize. * @returns {string} * Normalized identifier. */ function normalizeIdentifier(value) { return ( value // Collapse markdown whitespace. .replace(/[\t\n\r ]+/g, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.values.space) // Trim. .replace(/^ | $/g, '') // Some characters are considered “uppercase”, but if their lowercase // counterpart is uppercased will result in a different uppercase // character. // Hence, to get that form, we perform both lower- and uppercase. // Upper case makes sure keys will not interact with default prototypal // methods: no method is uppercase. .toLowerCase() .toUpperCase() ) } /***/ }), /***/ "./node_modules/micromark-util-resolve-all/index.js": /*!**********************************************************!*\ !*** ./node_modules/micromark-util-resolve-all/index.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ resolveAll: () => (/* binding */ resolveAll) /* harmony export */ }); /** * @typedef {import('micromark-util-types').Event} Event * @typedef {import('micromark-util-types').Resolver} Resolver * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext */ /** * Call all `resolveAll`s. * * @param {Array<{resolveAll?: Resolver | undefined}>} constructs * List of constructs, optionally with `resolveAll`s. * @param {Array} events * List of events. * @param {TokenizeContext} context * Context used by `tokenize`. * @returns {Array} * Changed events. */ function resolveAll(constructs, events, context) { /** @type {Array} */ const called = [] let index = -1 while (++index < constructs.length) { const resolve = constructs[index].resolveAll if (resolve && !called.includes(resolve)) { events = resolve(events, context) called.push(resolve) } } return events } /***/ }), /***/ "./node_modules/micromark-util-sanitize-uri/dev/index.js": /*!***************************************************************!*\ !*** ./node_modules/micromark-util-sanitize-uri/dev/index.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ normalizeUri: () => (/* binding */ normalizeUri), /* harmony export */ sanitizeUri: () => (/* binding */ sanitizeUri) /* harmony export */ }); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_encode__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-encode */ "./node_modules/micromark-util-encode/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/values.js"); /** * Make a value safe for injection as a URL. * * This encodes unsafe characters with percent-encoding and skips already * encoded sequences (see `normalizeUri`). * Further unsafe characters are encoded as character references (see * `micromark-util-encode`). * * A regex of allowed protocols can be given, in which case the URL is * sanitized. * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or * `/^https?$/i` for `img[src]` (this is what `github.com` allows). * If the URL includes an unknown protocol (one not matched by `protocol`, such * as a dangerous example, `javascript:`), the value is ignored. * * @param {string | null | undefined} url * URI to sanitize. * @param {RegExp | null | undefined} [protocol] * Allowed protocols. * @returns {string} * Sanitized URI. */ function sanitizeUri(url, protocol) { const value = (0,micromark_util_encode__WEBPACK_IMPORTED_MODULE_0__.encode)(normalizeUri(url || '')) if (!protocol) { return value } const colon = value.indexOf(':') const questionMark = value.indexOf('?') const numberSign = value.indexOf('#') const slash = value.indexOf('/') if ( // If there is no protocol, it’s relative. colon < 0 || // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol. (slash > -1 && colon > slash) || (questionMark > -1 && colon > questionMark) || (numberSign > -1 && colon > numberSign) || // It is a protocol, it should be allowed. protocol.test(value.slice(0, colon)) ) { return value } return '' } /** * Normalize a URL. * * Encode unsafe characters with percent-encoding, skipping already encoded * sequences. * * @param {string} value * URI to normalize. * @returns {string} * Normalized URI. */ function normalizeUri(value) { /** @type {Array} */ const result = [] let index = -1 let start = 0 let skip = 0 while (++index < value.length) { const code = value.charCodeAt(index) /** @type {string} */ let replace = '' // A correct percent encoded value. if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.percentSign && (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.asciiAlphanumeric)(value.charCodeAt(index + 1)) && (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.asciiAlphanumeric)(value.charCodeAt(index + 2)) ) { skip = 2 } // ASCII. else if (code < 128) { if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) { replace = String.fromCharCode(code) } } // Astral. else if (code > 55_295 && code < 57_344) { const next = value.charCodeAt(index + 1) // A correct surrogate pair. if (code < 56_320 && next > 56_319 && next < 57_344) { replace = String.fromCharCode(code, next) skip = 1 } // Lone surrogate. else { replace = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.values.replacementCharacter } } // Unicode. else { replace = String.fromCharCode(code) } if (replace) { result.push(value.slice(start, index), encodeURIComponent(replace)) start = index + skip + 1 replace = '' } if (skip) { index += skip skip = 0 } } return result.join('') + value.slice(start) } /***/ }), /***/ "./node_modules/micromark-util-subtokenize/dev/index.js": /*!**************************************************************!*\ !*** ./node_modules/micromark-util-subtokenize/dev/index.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ subtokenize: () => (/* binding */ subtokenize) /* harmony export */ }); /* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-chunked */ "./node_modules/micromark-util-chunked/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Chunk} Chunk * @typedef {import('micromark-util-types').Event} Event * @typedef {import('micromark-util-types').Token} Token */ /** * Tokenize subcontent. * * @param {Array} events * List of events. * @returns {boolean} * Whether subtokens were found. */ // eslint-disable-next-line complexity function subtokenize(events) { /** @type {Record} */ const jumps = {} let index = -1 /** @type {Event} */ let event /** @type {number | undefined} */ let lineIndex /** @type {number} */ let otherIndex /** @type {Event} */ let otherEvent /** @type {Array} */ let parameters /** @type {Array} */ let subevents /** @type {boolean | undefined} */ let more while (++index < events.length) { while (index in jumps) { index = jumps[index] } event = events[index] // Add a hook for the GFM tasklist extension, which needs to know if text // is in the first content of a list item. if ( index && event[1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.chunkFlow && events[index - 1][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.listItemPrefix ) { (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(event[1]._tokenizer, 'expected `_tokenizer` on subtokens') subevents = event[1]._tokenizer.events otherIndex = 0 if ( otherIndex < subevents.length && subevents[otherIndex][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEndingBlank ) { otherIndex += 2 } if ( otherIndex < subevents.length && subevents[otherIndex][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.content ) { while (++otherIndex < subevents.length) { if (subevents[otherIndex][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.content) { break } if (subevents[otherIndex][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.chunkText) { subevents[otherIndex][1]._isInFirstContentOfListItem = true otherIndex++ } } } } // Enter. if (event[0] === 'enter') { if (event[1].contentType) { Object.assign(jumps, subcontent(events, index)) index = jumps[index] more = true } } // Exit. else if (event[1]._container) { otherIndex = index lineIndex = undefined while (otherIndex--) { otherEvent = events[otherIndex] if ( otherEvent[1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding || otherEvent[1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEndingBlank ) { if (otherEvent[0] === 'enter') { if (lineIndex) { events[lineIndex][1].type = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEndingBlank } otherEvent[1].type = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.types.lineEnding lineIndex = otherIndex } } else { break } } if (lineIndex) { // Fix position. event[1].end = Object.assign({}, events[lineIndex][1].start) // Switch container exit w/ line endings. parameters = events.slice(lineIndex, index) parameters.unshift(event) ;(0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.splice)(events, lineIndex, index - lineIndex + 1, parameters) } } } return !more } /** * Tokenize embedded tokens. * * @param {Array} events * @param {number} eventIndex * @returns {Record} */ function subcontent(events, eventIndex) { const token = events[eventIndex][1] const context = events[eventIndex][2] let startPosition = eventIndex - 1 /** @type {Array} */ const startPositions = [] ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(token.contentType, 'expected `contentType` on subtokens') const tokenizer = token._tokenizer || context.parser[token.contentType](token.start) const childEvents = tokenizer.events /** @type {Array<[number, number]>} */ const jumps = [] /** @type {Record} */ const gaps = {} /** @type {Array} */ let stream /** @type {Token | undefined} */ let previous let index = -1 /** @type {Token | undefined} */ let current = token let adjust = 0 let start = 0 const breaks = [start] // Loop forward through the linked tokens to pass them in order to the // subtokenizer. while (current) { // Find the position of the event for this token. while (events[++startPosition][1] !== current) { // Empty. } (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)( !previous || current.previous === previous, 'expected previous to match' ) ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(!previous || previous.next === current, 'expected next to match') startPositions.push(startPosition) if (!current._tokenizer) { stream = context.sliceStream(current) if (!current.next) { stream.push(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.codes.eof) } if (previous) { tokenizer.defineSkip(current.start) } if (current._isInFirstContentOfListItem) { tokenizer._gfmTasklistFirstContentOfListItem = true } tokenizer.write(stream) if (current._isInFirstContentOfListItem) { tokenizer._gfmTasklistFirstContentOfListItem = undefined } } // Unravel the next token. previous = current current = current.next } // Now, loop back through all events (and linked tokens), to figure out which // parts belong where. current = token while (++index < childEvents.length) { if ( // Find a void token that includes a break. childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line ) { (0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(current, 'expected a current token') start = index + 1 breaks.push(start) // Help GC. current._tokenizer = undefined current.previous = undefined current = current.next } } // Help GC. tokenizer.events = [] // If there’s one more token (which is the cases for lines that end in an // EOF), that’s perfect: the last point we found starts it. // If there isn’t then make sure any remaining content is added to it. if (current) { // Help GC. current._tokenizer = undefined current.previous = undefined ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(!current.next, 'expected no next token') } else { breaks.pop() } // Now splice the events from the subtokenizer into the current events, // moving back to front so that splice indices aren’t affected. index = breaks.length while (index--) { const slice = childEvents.slice(breaks[index], breaks[index + 1]) const start = startPositions.pop() ;(0,devlop__WEBPACK_IMPORTED_MODULE_1__.ok)(start !== undefined, 'expected a start position when splicing') jumps.unshift([start, start + slice.length - 1]) ;(0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.splice)(events, start, 2, slice) } index = -1 while (++index < jumps.length) { gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] adjust += jumps[index][1] - jumps[index][0] - 1 } return gaps } /***/ }), /***/ "./node_modules/micromark-util-symbol/lib/codes.js": /*!*********************************************************!*\ !*** ./node_modules/micromark-util-symbol/lib/codes.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ codes: () => (/* binding */ codes) /* harmony export */ }); /** * Character codes. * * This module is compiled away! * * micromark works based on character codes. * This module contains constants for the ASCII block and the replacement * character. * A couple of them are handled in a special way, such as the line endings * (CR, LF, and CR+LF, commonly known as end-of-line: EOLs), the tab (horizontal * tab) and its expansion based on what column it’s at (virtual space), * and the end-of-file (eof) character. * As values are preprocessed before handling them, the actual characters LF, * CR, HT, and NUL (which is present as the replacement character), are * guaranteed to not exist. * * Unicode basic latin block. */ const codes = /** @type {const} */ ({ carriageReturn: -5, lineFeed: -4, carriageReturnLineFeed: -3, horizontalTab: -2, virtualSpace: -1, eof: null, nul: 0, soh: 1, stx: 2, etx: 3, eot: 4, enq: 5, ack: 6, bel: 7, bs: 8, ht: 9, // `\t` lf: 10, // `\n` vt: 11, // `\v` ff: 12, // `\f` cr: 13, // `\r` so: 14, si: 15, dle: 16, dc1: 17, dc2: 18, dc3: 19, dc4: 20, nak: 21, syn: 22, etb: 23, can: 24, em: 25, sub: 26, esc: 27, fs: 28, gs: 29, rs: 30, us: 31, space: 32, exclamationMark: 33, // `!` quotationMark: 34, // `"` numberSign: 35, // `#` dollarSign: 36, // `$` percentSign: 37, // `%` ampersand: 38, // `&` apostrophe: 39, // `'` leftParenthesis: 40, // `(` rightParenthesis: 41, // `)` asterisk: 42, // `*` plusSign: 43, // `+` comma: 44, // `,` dash: 45, // `-` dot: 46, // `.` slash: 47, // `/` digit0: 48, // `0` digit1: 49, // `1` digit2: 50, // `2` digit3: 51, // `3` digit4: 52, // `4` digit5: 53, // `5` digit6: 54, // `6` digit7: 55, // `7` digit8: 56, // `8` digit9: 57, // `9` colon: 58, // `:` semicolon: 59, // `;` lessThan: 60, // `<` equalsTo: 61, // `=` greaterThan: 62, // `>` questionMark: 63, // `?` atSign: 64, // `@` uppercaseA: 65, // `A` uppercaseB: 66, // `B` uppercaseC: 67, // `C` uppercaseD: 68, // `D` uppercaseE: 69, // `E` uppercaseF: 70, // `F` uppercaseG: 71, // `G` uppercaseH: 72, // `H` uppercaseI: 73, // `I` uppercaseJ: 74, // `J` uppercaseK: 75, // `K` uppercaseL: 76, // `L` uppercaseM: 77, // `M` uppercaseN: 78, // `N` uppercaseO: 79, // `O` uppercaseP: 80, // `P` uppercaseQ: 81, // `Q` uppercaseR: 82, // `R` uppercaseS: 83, // `S` uppercaseT: 84, // `T` uppercaseU: 85, // `U` uppercaseV: 86, // `V` uppercaseW: 87, // `W` uppercaseX: 88, // `X` uppercaseY: 89, // `Y` uppercaseZ: 90, // `Z` leftSquareBracket: 91, // `[` backslash: 92, // `\` rightSquareBracket: 93, // `]` caret: 94, // `^` underscore: 95, // `_` graveAccent: 96, // `` ` `` lowercaseA: 97, // `a` lowercaseB: 98, // `b` lowercaseC: 99, // `c` lowercaseD: 100, // `d` lowercaseE: 101, // `e` lowercaseF: 102, // `f` lowercaseG: 103, // `g` lowercaseH: 104, // `h` lowercaseI: 105, // `i` lowercaseJ: 106, // `j` lowercaseK: 107, // `k` lowercaseL: 108, // `l` lowercaseM: 109, // `m` lowercaseN: 110, // `n` lowercaseO: 111, // `o` lowercaseP: 112, // `p` lowercaseQ: 113, // `q` lowercaseR: 114, // `r` lowercaseS: 115, // `s` lowercaseT: 116, // `t` lowercaseU: 117, // `u` lowercaseV: 118, // `v` lowercaseW: 119, // `w` lowercaseX: 120, // `x` lowercaseY: 121, // `y` lowercaseZ: 122, // `z` leftCurlyBrace: 123, // `{` verticalBar: 124, // `|` rightCurlyBrace: 125, // `}` tilde: 126, // `~` del: 127, // Unicode Specials block. byteOrderMarker: 65279, // Unicode Specials block. replacementCharacter: 65533 // `�` }) /***/ }), /***/ "./node_modules/micromark-util-symbol/lib/constants.js": /*!*************************************************************!*\ !*** ./node_modules/micromark-util-symbol/lib/constants.js ***! \*************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ constants: () => (/* binding */ constants) /* harmony export */ }); /** * This module is compiled away! * * Parsing markdown comes with a couple of constants, such as minimum or maximum * sizes of certain sequences. * Additionally, there are a couple symbols used inside micromark. * These are all defined here, but compiled away by scripts. */ const constants = /** @type {const} */ ({ attentionSideBefore: 1, // Symbol to mark an attention sequence as before content: `*a` attentionSideAfter: 2, // Symbol to mark an attention sequence as after content: `a*` atxHeadingOpeningFenceSizeMax: 6, // 6 number signs is fine, 7 isn’t. autolinkDomainSizeMax: 63, // 63 characters is fine, 64 is too many. autolinkSchemeSizeMax: 32, // 32 characters is fine, 33 is too many. cdataOpeningString: 'CDATA[', // And preceded by `` htmlComment: 2, // Symbol for `` htmlInstruction: 3, // Symbol for `` htmlDeclaration: 4, // Symbol for `` htmlCdata: 5, // Symbol for `` htmlBasic: 6, // Symbol for `` htmlRawSizeMax: 8, // Length of `textarea`. linkResourceDestinationBalanceMax: 32, // See: , linkReferenceSizeMax: 999, // See: listItemValueSizeMax: 10, // See: numericBaseDecimal: 10, numericBaseHexadecimal: 0x10, tabSize: 4, // Tabs have a hard-coded size of 4, per CommonMark. thematicBreakMarkerCountMin: 3, // At least 3 asterisks, dashes, or underscores are needed. v8MaxSafeChunkSize: 10000 // V8 (and potentially others) have problems injecting giant arrays into other arrays, hence we operate in chunks. }) /***/ }), /***/ "./node_modules/micromark-util-symbol/lib/types.js": /*!*********************************************************!*\ !*** ./node_modules/micromark-util-symbol/lib/types.js ***! \*********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ types: () => (/* binding */ types) /* harmony export */ }); /** * This module is compiled away! * * Here is the list of all types of tokens exposed by micromark, with a short * explanation of what they include and where they are found. * In picking names, generally, the rule is to be as explicit as possible * instead of reusing names. * For example, there is a `definitionDestination` and a `resourceDestination`, * instead of one shared name. */ // Note: when changing the next record, you must also change `TokenTypeMap` // in `micromark-util-types/index.d.ts`. const types = /** @type {const} */ ({ // Generic type for data, such as in a title, a destination, etc. data: 'data', // Generic type for syntactic whitespace (tabs, virtual spaces, spaces). // Such as, between a fenced code fence and an info string. whitespace: 'whitespace', // Generic type for line endings (line feed, carriage return, carriage return + // line feed). lineEnding: 'lineEnding', // A line ending, but ending a blank line. lineEndingBlank: 'lineEndingBlank', // Generic type for whitespace (tabs, virtual spaces, spaces) at the start of a // line. linePrefix: 'linePrefix', // Generic type for whitespace (tabs, virtual spaces, spaces) at the end of a // line. lineSuffix: 'lineSuffix', // Whole ATX heading: // // ```markdown // # // ## Alpha // ### Bravo ### // ``` // // Includes `atxHeadingSequence`, `whitespace`, `atxHeadingText`. atxHeading: 'atxHeading', // Sequence of number signs in an ATX heading (`###`). atxHeadingSequence: 'atxHeadingSequence', // Content in an ATX heading (`alpha`). // Includes text. atxHeadingText: 'atxHeadingText', // Whole autolink (`` or ``) // Includes `autolinkMarker` and `autolinkProtocol` or `autolinkEmail`. autolink: 'autolink', // Email autolink w/o markers (`admin@example.com`) autolinkEmail: 'autolinkEmail', // Marker around an `autolinkProtocol` or `autolinkEmail` (`<` or `>`). autolinkMarker: 'autolinkMarker', // Protocol autolink w/o markers (`https://example.com`) autolinkProtocol: 'autolinkProtocol', // A whole character escape (`\-`). // Includes `escapeMarker` and `characterEscapeValue`. characterEscape: 'characterEscape', // The escaped character (`-`). characterEscapeValue: 'characterEscapeValue', // A whole character reference (`&`, `≠`, or `𝌆`). // Includes `characterReferenceMarker`, an optional // `characterReferenceMarkerNumeric`, in which case an optional // `characterReferenceMarkerHexadecimal`, and a `characterReferenceValue`. characterReference: 'characterReference', // The start or end marker (`&` or `;`). characterReferenceMarker: 'characterReferenceMarker', // Mark reference as numeric (`#`). characterReferenceMarkerNumeric: 'characterReferenceMarkerNumeric', // Mark reference as numeric (`x` or `X`). characterReferenceMarkerHexadecimal: 'characterReferenceMarkerHexadecimal', // Value of character reference w/o markers (`amp`, `8800`, or `1D306`). characterReferenceValue: 'characterReferenceValue', // Whole fenced code: // // ````markdown // ```js // alert(1) // ``` // ```` codeFenced: 'codeFenced', // A fenced code fence, including whitespace, sequence, info, and meta // (` ```js `). codeFencedFence: 'codeFencedFence', // Sequence of grave accent or tilde characters (` ``` `) in a fence. codeFencedFenceSequence: 'codeFencedFenceSequence', // Info word (`js`) in a fence. // Includes string. codeFencedFenceInfo: 'codeFencedFenceInfo', // Meta words (`highlight="1"`) in a fence. // Includes string. codeFencedFenceMeta: 'codeFencedFenceMeta', // A line of code. codeFlowValue: 'codeFlowValue', // Whole indented code: // // ```markdown // alert(1) // ``` // // Includes `lineEnding`, `linePrefix`, and `codeFlowValue`. codeIndented: 'codeIndented', // A text code (``` `alpha` ```). // Includes `codeTextSequence`, `codeTextData`, `lineEnding`, and can include // `codeTextPadding`. codeText: 'codeText', codeTextData: 'codeTextData', // A space or line ending right after or before a tick. codeTextPadding: 'codeTextPadding', // A text code fence (` `` `). codeTextSequence: 'codeTextSequence', // Whole content: // // ```markdown // [a]: b // c // = // d // ``` // // Includes `paragraph` and `definition`. content: 'content', // Whole definition: // // ```markdown // [micromark]: https://github.com/micromark/micromark // ``` // // Includes `definitionLabel`, `definitionMarker`, `whitespace`, // `definitionDestination`, and optionally `lineEnding` and `definitionTitle`. definition: 'definition', // Destination of a definition (`https://github.com/micromark/micromark` or // ``). // Includes `definitionDestinationLiteral` or `definitionDestinationRaw`. definitionDestination: 'definitionDestination', // Enclosed destination of a definition // (``). // Includes `definitionDestinationLiteralMarker` and optionally // `definitionDestinationString`. definitionDestinationLiteral: 'definitionDestinationLiteral', // Markers of an enclosed definition destination (`<` or `>`). definitionDestinationLiteralMarker: 'definitionDestinationLiteralMarker', // Unenclosed destination of a definition // (`https://github.com/micromark/micromark`). // Includes `definitionDestinationString`. definitionDestinationRaw: 'definitionDestinationRaw', // Text in an destination (`https://github.com/micromark/micromark`). // Includes string. definitionDestinationString: 'definitionDestinationString', // Label of a definition (`[micromark]`). // Includes `definitionLabelMarker` and `definitionLabelString`. definitionLabel: 'definitionLabel', // Markers of a definition label (`[` or `]`). definitionLabelMarker: 'definitionLabelMarker', // Value of a definition label (`micromark`). // Includes string. definitionLabelString: 'definitionLabelString', // Marker between a label and a destination (`:`). definitionMarker: 'definitionMarker', // Title of a definition (`"x"`, `'y'`, or `(z)`). // Includes `definitionTitleMarker` and optionally `definitionTitleString`. definitionTitle: 'definitionTitle', // Marker around a title of a definition (`"`, `'`, `(`, or `)`). definitionTitleMarker: 'definitionTitleMarker', // Data without markers in a title (`z`). // Includes string. definitionTitleString: 'definitionTitleString', // Emphasis (`*alpha*`). // Includes `emphasisSequence` and `emphasisText`. emphasis: 'emphasis', // Sequence of emphasis markers (`*` or `_`). emphasisSequence: 'emphasisSequence', // Emphasis text (`alpha`). // Includes text. emphasisText: 'emphasisText', // The character escape marker (`\`). escapeMarker: 'escapeMarker', // A hard break created with a backslash (`\\n`). // Note: does not include the line ending. hardBreakEscape: 'hardBreakEscape', // A hard break created with trailing spaces (` \n`). // Does not include the line ending. hardBreakTrailing: 'hardBreakTrailing', // Flow HTML: // // ```markdown //
b`). // Includes `lineEnding`, `htmlTextData`. htmlText: 'htmlText', htmlTextData: 'htmlTextData', // Whole image (`![alpha](bravo)`, `![alpha][bravo]`, `![alpha][]`, or // `![alpha]`). // Includes `label` and an optional `resource` or `reference`. image: 'image', // Whole link label (`[*alpha*]`). // Includes `labelLink` or `labelImage`, `labelText`, and `labelEnd`. label: 'label', // Text in an label (`*alpha*`). // Includes text. labelText: 'labelText', // Start a link label (`[`). // Includes a `labelMarker`. labelLink: 'labelLink', // Start an image label (`![`). // Includes `labelImageMarker` and `labelMarker`. labelImage: 'labelImage', // Marker of a label (`[` or `]`). labelMarker: 'labelMarker', // Marker to start an image (`!`). labelImageMarker: 'labelImageMarker', // End a label (`]`). // Includes `labelMarker`. labelEnd: 'labelEnd', // Whole link (`[alpha](bravo)`, `[alpha][bravo]`, `[alpha][]`, or `[alpha]`). // Includes `label` and an optional `resource` or `reference`. link: 'link', // Whole paragraph: // // ```markdown // alpha // bravo. // ``` // // Includes text. paragraph: 'paragraph', // A reference (`[alpha]` or `[]`). // Includes `referenceMarker` and an optional `referenceString`. reference: 'reference', // A reference marker (`[` or `]`). referenceMarker: 'referenceMarker', // Reference text (`alpha`). // Includes string. referenceString: 'referenceString', // A resource (`(https://example.com "alpha")`). // Includes `resourceMarker`, an optional `resourceDestination` with an optional // `whitespace` and `resourceTitle`. resource: 'resource', // A resource destination (`https://example.com`). // Includes `resourceDestinationLiteral` or `resourceDestinationRaw`. resourceDestination: 'resourceDestination', // A literal resource destination (``). // Includes `resourceDestinationLiteralMarker` and optionally // `resourceDestinationString`. resourceDestinationLiteral: 'resourceDestinationLiteral', // A resource destination marker (`<` or `>`). resourceDestinationLiteralMarker: 'resourceDestinationLiteralMarker', // A raw resource destination (`https://example.com`). // Includes `resourceDestinationString`. resourceDestinationRaw: 'resourceDestinationRaw', // Resource destination text (`https://example.com`). // Includes string. resourceDestinationString: 'resourceDestinationString', // A resource marker (`(` or `)`). resourceMarker: 'resourceMarker', // A resource title (`"alpha"`, `'alpha'`, or `(alpha)`). // Includes `resourceTitleMarker` and optionally `resourceTitleString`. resourceTitle: 'resourceTitle', // A resource title marker (`"`, `'`, `(`, or `)`). resourceTitleMarker: 'resourceTitleMarker', // Resource destination title (`alpha`). // Includes string. resourceTitleString: 'resourceTitleString', // Whole setext heading: // // ```markdown // alpha // bravo // ===== // ``` // // Includes `setextHeadingText`, `lineEnding`, `linePrefix`, and // `setextHeadingLine`. setextHeading: 'setextHeading', // Content in a setext heading (`alpha\nbravo`). // Includes text. setextHeadingText: 'setextHeadingText', // Underline in a setext heading, including whitespace suffix (`==`). // Includes `setextHeadingLineSequence`. setextHeadingLine: 'setextHeadingLine', // Sequence of equals or dash characters in underline in a setext heading (`-`). setextHeadingLineSequence: 'setextHeadingLineSequence', // Strong (`**alpha**`). // Includes `strongSequence` and `strongText`. strong: 'strong', // Sequence of strong markers (`**` or `__`). strongSequence: 'strongSequence', // Strong text (`alpha`). // Includes text. strongText: 'strongText', // Whole thematic break: // // ```markdown // * * * // ``` // // Includes `thematicBreakSequence` and `whitespace`. thematicBreak: 'thematicBreak', // A sequence of one or more thematic break markers (`***`). thematicBreakSequence: 'thematicBreakSequence', // Whole block quote: // // ```markdown // > a // > // > b // ``` // // Includes `blockQuotePrefix` and flow. blockQuote: 'blockQuote', // The `>` or `> ` of a block quote. blockQuotePrefix: 'blockQuotePrefix', // The `>` of a block quote prefix. blockQuoteMarker: 'blockQuoteMarker', // The optional ` ` of a block quote prefix. blockQuotePrefixWhitespace: 'blockQuotePrefixWhitespace', // Whole unordered list: // // ```markdown // - a // b // ``` // // Includes `listItemPrefix`, flow, and optionally `listItemIndent` on further // lines. listOrdered: 'listOrdered', // Whole ordered list: // // ```markdown // 1. a // b // ``` // // Includes `listItemPrefix`, flow, and optionally `listItemIndent` on further // lines. listUnordered: 'listUnordered', // The indent of further list item lines. listItemIndent: 'listItemIndent', // A marker, as in, `*`, `+`, `-`, `.`, or `)`. listItemMarker: 'listItemMarker', // The thing that starts a list item, such as `1. `. // Includes `listItemValue` if ordered, `listItemMarker`, and // `listItemPrefixWhitespace` (unless followed by a line ending). listItemPrefix: 'listItemPrefix', // The whitespace after a marker. listItemPrefixWhitespace: 'listItemPrefixWhitespace', // The numerical value of an ordered item. listItemValue: 'listItemValue', // Internal types used for subtokenizers, compiled away chunkDocument: 'chunkDocument', chunkContent: 'chunkContent', chunkFlow: 'chunkFlow', chunkText: 'chunkText', chunkString: 'chunkString' }) /***/ }), /***/ "./node_modules/micromark-util-symbol/lib/values.js": /*!**********************************************************!*\ !*** ./node_modules/micromark-util-symbol/lib/values.js ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ values: () => (/* binding */ values) /* harmony export */ }); /** * This module is compiled away! * * While micromark works based on character codes, this module includes the * string versions of ’em. * The C0 block, except for LF, CR, HT, and w/ the replacement character added, * are available here. */ const values = /** @type {const} */ ({ ht: '\t', lf: '\n', cr: '\r', space: ' ', exclamationMark: '!', quotationMark: '"', numberSign: '#', dollarSign: '$', percentSign: '%', ampersand: '&', apostrophe: "'", leftParenthesis: '(', rightParenthesis: ')', asterisk: '*', plusSign: '+', comma: ',', dash: '-', dot: '.', slash: '/', digit0: '0', digit1: '1', digit2: '2', digit3: '3', digit4: '4', digit5: '5', digit6: '6', digit7: '7', digit8: '8', digit9: '9', colon: ':', semicolon: ';', lessThan: '<', equalsTo: '=', greaterThan: '>', questionMark: '?', atSign: '@', uppercaseA: 'A', uppercaseB: 'B', uppercaseC: 'C', uppercaseD: 'D', uppercaseE: 'E', uppercaseF: 'F', uppercaseG: 'G', uppercaseH: 'H', uppercaseI: 'I', uppercaseJ: 'J', uppercaseK: 'K', uppercaseL: 'L', uppercaseM: 'M', uppercaseN: 'N', uppercaseO: 'O', uppercaseP: 'P', uppercaseQ: 'Q', uppercaseR: 'R', uppercaseS: 'S', uppercaseT: 'T', uppercaseU: 'U', uppercaseV: 'V', uppercaseW: 'W', uppercaseX: 'X', uppercaseY: 'Y', uppercaseZ: 'Z', leftSquareBracket: '[', backslash: '\\', rightSquareBracket: ']', caret: '^', underscore: '_', graveAccent: '`', lowercaseA: 'a', lowercaseB: 'b', lowercaseC: 'c', lowercaseD: 'd', lowercaseE: 'e', lowercaseF: 'f', lowercaseG: 'g', lowercaseH: 'h', lowercaseI: 'i', lowercaseJ: 'j', lowercaseK: 'k', lowercaseL: 'l', lowercaseM: 'm', lowercaseN: 'n', lowercaseO: 'o', lowercaseP: 'p', lowercaseQ: 'q', lowercaseR: 'r', lowercaseS: 's', lowercaseT: 't', lowercaseU: 'u', lowercaseV: 'v', lowercaseW: 'w', lowercaseX: 'x', lowercaseY: 'y', lowercaseZ: 'z', leftCurlyBrace: '{', verticalBar: '|', rightCurlyBrace: '}', tilde: '~', replacementCharacter: '�' }) /***/ }), /***/ "./node_modules/micromark/dev/lib/constructs.js": /*!******************************************************!*\ !*** ./node_modules/micromark/dev/lib/constructs.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ attentionMarkers: () => (/* binding */ attentionMarkers), /* harmony export */ contentInitial: () => (/* binding */ contentInitial), /* harmony export */ disable: () => (/* binding */ disable), /* harmony export */ document: () => (/* binding */ document), /* harmony export */ flow: () => (/* binding */ flow), /* harmony export */ flowInitial: () => (/* binding */ flowInitial), /* harmony export */ insideSpan: () => (/* binding */ insideSpan), /* harmony export */ string: () => (/* binding */ string), /* harmony export */ text: () => (/* binding */ text) /* harmony export */ }); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/list.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/block-quote.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/definition.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/code-indented.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/heading-atx.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/thematic-break.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/setext-underline.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/html-flow.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/code-fenced.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/character-reference.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/character-escape.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/line-ending.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/label-start-image.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/attention.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/autolink.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/html-text.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/label-start-link.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/hard-break-escape.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/label-end.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/code-text.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var _initialize_text_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./initialize/text.js */ "./node_modules/micromark/dev/lib/initialize/text.js"); /** * @typedef {import('micromark-util-types').Extension} Extension */ /** @satisfies {Extension['document']} */ const document = { [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.asterisk]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.plusSign]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.dash]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.digit0]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.digit1]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.digit2]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.digit3]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.digit4]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.digit5]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.digit6]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.digit7]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.digit8]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.digit9]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_1__.list, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.greaterThan]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_2__.blockQuote } /** @satisfies {Extension['contentInitial']} */ const contentInitial = { [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_3__.definition } /** @satisfies {Extension['flowInitial']} */ const flowInitial = { [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.horizontalTab]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_4__.codeIndented, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.virtualSpace]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_4__.codeIndented, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.space]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_4__.codeIndented } /** @satisfies {Extension['flow']} */ const flow = { [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.numberSign]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_5__.headingAtx, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.asterisk]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_6__.thematicBreak, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.dash]: [micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_7__.setextUnderline, micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_6__.thematicBreak], [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lessThan]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_8__.htmlFlow, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.equalsTo]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_7__.setextUnderline, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.underscore]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_6__.thematicBreak, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.graveAccent]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_9__.codeFenced, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.tilde]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_9__.codeFenced } /** @satisfies {Extension['string']} */ const string = { [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.ampersand]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_10__.characterReference, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.backslash]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_11__.characterEscape } /** @satisfies {Extension['text']} */ const text = { [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.carriageReturn]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_12__.lineEnding, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lineFeed]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_12__.lineEnding, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.carriageReturnLineFeed]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_12__.lineEnding, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.exclamationMark]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_13__.labelStartImage, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.ampersand]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_10__.characterReference, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.asterisk]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_14__.attention, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lessThan]: [micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_15__.autolink, micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_16__.htmlText], [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.leftSquareBracket]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_17__.labelStartLink, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.backslash]: [micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_18__.hardBreakEscape, micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_11__.characterEscape], [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.rightSquareBracket]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_19__.labelEnd, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.underscore]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_14__.attention, [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.graveAccent]: micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_20__.codeText } /** @satisfies {Extension['insideSpan']} */ const insideSpan = {null: [micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_14__.attention, _initialize_text_js__WEBPACK_IMPORTED_MODULE_21__.resolver]} /** @satisfies {Extension['attentionMarkers']} */ const attentionMarkers = {null: [micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.asterisk, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.underscore]} /** @satisfies {Extension['disable']} */ const disable = {null: []} /***/ }), /***/ "./node_modules/micromark/dev/lib/create-tokenizer.js": /*!************************************************************!*\ !*** ./node_modules/micromark/dev/lib/create-tokenizer.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createTokenizer: () => (/* binding */ createTokenizer) /* harmony export */ }); /* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-chunked */ "./node_modules/micromark-util-chunked/dev/index.js"); /* harmony import */ var micromark_util_resolve_all__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-resolve-all */ "./node_modules/micromark-util-resolve-all/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/values.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Chunk} Chunk * @typedef {import('micromark-util-types').Code} Code * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord * @typedef {import('micromark-util-types').Effects} Effects * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct * @typedef {import('micromark-util-types').ParseContext} ParseContext * @typedef {import('micromark-util-types').Point} Point * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').Token} Token * @typedef {import('micromark-util-types').TokenType} TokenType * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext */ /** * @callback Restore * @returns {undefined} * * @typedef Info * @property {Restore} restore * @property {number} from * * @callback ReturnHandle * Handle a successful run. * @param {Construct} construct * @param {Info} info * @returns {undefined} */ const debug = debug__WEBPACK_IMPORTED_MODULE_0__('micromark') /** * Create a tokenizer. * Tokenizers deal with one type of data (e.g., containers, flow, text). * The parser is the object dealing with it all. * `initialize` works like other constructs, except that only its `tokenize` * function is used, in which case it doesn’t receive an `ok` or `nok`. * `from` can be given to set the point before the first character, although * when further lines are indented, they must be set with `defineSkip`. * * @param {ParseContext} parser * @param {InitialConstruct} initialize * @param {Omit | undefined} [from] * @returns {TokenizeContext} */ function createTokenizer(parser, initialize, from) { /** @type {Point} */ let point = Object.assign( from ? Object.assign({}, from) : {line: 1, column: 1, offset: 0}, {_index: 0, _bufferIndex: -1} ) /** @type {Record} */ const columnStart = {} /** @type {Array} */ const resolveAllConstructs = [] /** @type {Array} */ let chunks = [] /** @type {Array} */ let stack = [] /** @type {boolean | undefined} */ let consumed = true /** * Tools used for tokenizing. * * @type {Effects} */ const effects = { consume, enter, exit, attempt: constructFactory(onsuccessfulconstruct), check: constructFactory(onsuccessfulcheck), interrupt: constructFactory(onsuccessfulcheck, {interrupt: true}) } /** * State and tools for resolving and serializing. * * @type {TokenizeContext} */ const context = { previous: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof, code: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof, containerState: {}, events: [], parser, sliceStream, sliceSerialize, now, defineSkip, write } /** * The state function. * * @type {State | undefined} */ let state = initialize.tokenize.call(context, effects) /** * Track which character we expect to be consumed, to catch bugs. * * @type {Code} */ let expectedCode if (initialize.resolveAll) { resolveAllConstructs.push(initialize) } return context /** @type {TokenizeContext['write']} */ function write(slice) { chunks = (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.push)(chunks, slice) main() // Exit if we’re not done, resolve might change stuff. if (chunks[chunks.length - 1] !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof) { return [] } addResult(initialize, 0) // Otherwise, resolve, and exit. context.events = (0,micromark_util_resolve_all__WEBPACK_IMPORTED_MODULE_3__.resolveAll)(resolveAllConstructs, context.events, context) return context.events } // // Tools. // /** @type {TokenizeContext['sliceSerialize']} */ function sliceSerialize(token, expandTabs) { return serializeChunks(sliceStream(token), expandTabs) } /** @type {TokenizeContext['sliceStream']} */ function sliceStream(token) { return sliceChunks(chunks, token) } /** @type {TokenizeContext['now']} */ function now() { // This is a hot path, so we clone manually instead of `Object.assign({}, point)` const {line, column, offset, _index, _bufferIndex} = point return {line, column, offset, _index, _bufferIndex} } /** @type {TokenizeContext['defineSkip']} */ function defineSkip(value) { columnStart[value.line] = value.column accountForPotentialSkip() debug('position: define skip: `%j`', point) } // // State management. // /** * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by * `consume`). * Here is where we walk through the chunks, which either include strings of * several characters, or numerical character codes. * The reason to do this in a loop instead of a call is so the stack can * drain. * * @returns {undefined} */ function main() { /** @type {number} */ let chunkIndex while (point._index < chunks.length) { const chunk = chunks[point._index] // If we’re in a buffer chunk, loop through it. if (typeof chunk === 'string') { chunkIndex = point._index if (point._bufferIndex < 0) { point._bufferIndex = 0 } while ( point._index === chunkIndex && point._bufferIndex < chunk.length ) { go(chunk.charCodeAt(point._bufferIndex)) } } else { go(chunk) } } } /** * Deal with one code. * * @param {Code} code * @returns {undefined} */ function go(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(consumed === true, 'expected character to be consumed') consumed = undefined debug('main: passing `%s` to %s', code, state && state.name) expectedCode = code ;(0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(typeof state === 'function', 'expected state') state = state(code) } /** @type {Effects['consume']} */ function consume(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(code === expectedCode, 'expected given code to equal expected code') debug('consume: `%s`', code) ;(0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)( consumed === undefined, 'expected code to not have been consumed: this might be because `return x(code)` instead of `return x` was used' ) ;(0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)( code === null ? context.events.length === 0 || context.events[context.events.length - 1][0] === 'exit' : context.events[context.events.length - 1][0] === 'enter', 'expected last token to be open' ) if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEnding)(code)) { point.line++ point.column = 1 point.offset += code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.carriageReturnLineFeed ? 2 : 1 accountForPotentialSkip() debug('position: after eol: `%j`', point) } else if (code !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.virtualSpace) { point.column++ point.offset++ } // Not in a string chunk. if (point._bufferIndex < 0) { point._index++ } else { point._bufferIndex++ // At end of string chunk. // @ts-expect-error Points w/ non-negative `_bufferIndex` reference // strings. if (point._bufferIndex === chunks[point._index].length) { point._bufferIndex = -1 point._index++ } } // Expose the previous character. context.previous = code // Mark as consumed. consumed = true } /** @type {Effects['enter']} */ function enter(type, fields) { /** @type {Token} */ // @ts-expect-error Patch instead of assign required fields to help GC. const token = fields || {} token.type = type token.start = now() ;(0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(typeof type === 'string', 'expected string type') ;(0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(type.length > 0, 'expected non-empty string') debug('enter: `%s`', type) context.events.push(['enter', token, context]) stack.push(token) return token } /** @type {Effects['exit']} */ function exit(type) { (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(typeof type === 'string', 'expected string type') ;(0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(type.length > 0, 'expected non-empty string') const token = stack.pop() ;(0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(token, 'cannot close w/o open tokens') token.end = now() ;(0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(type === token.type, 'expected exit token to match current token') ;(0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)( !( token.start._index === token.end._index && token.start._bufferIndex === token.end._bufferIndex ), 'expected non-empty token (`' + type + '`)' ) debug('exit: `%s`', token.type) context.events.push(['exit', token, context]) return token } /** * Use results. * * @type {ReturnHandle} */ function onsuccessfulconstruct(construct, info) { addResult(construct, info.from) } /** * Discard results. * * @type {ReturnHandle} */ function onsuccessfulcheck(_, info) { info.restore() } /** * Factory to attempt/check/interrupt. * * @param {ReturnHandle} onreturn * @param {{interrupt?: boolean | undefined} | undefined} [fields] */ function constructFactory(onreturn, fields) { return hook /** * Handle either an object mapping codes to constructs, a list of * constructs, or a single construct. * * @param {Array | Construct | ConstructRecord} constructs * @param {State} returnState * @param {State | undefined} [bogusState] * @returns {State} */ function hook(constructs, returnState, bogusState) { /** @type {Array} */ let listOfConstructs /** @type {number} */ let constructIndex /** @type {Construct} */ let currentConstruct /** @type {Info} */ let info return Array.isArray(constructs) ? /* c8 ignore next 1 */ handleListOfConstructs(constructs) : 'tokenize' in constructs ? // @ts-expect-error Looks like a construct. handleListOfConstructs([constructs]) : handleMapOfConstructs(constructs) /** * Handle a list of construct. * * @param {ConstructRecord} map * @returns {State} */ function handleMapOfConstructs(map) { return start /** @type {State} */ function start(code) { const def = code !== null && map[code] const all = code !== null && map.null const list = [ // To do: add more extension tests. /* c8 ignore next 2 */ ...(Array.isArray(def) ? def : def ? [def] : []), ...(Array.isArray(all) ? all : all ? [all] : []) ] return handleListOfConstructs(list)(code) } } /** * Handle a list of construct. * * @param {Array} list * @returns {State} */ function handleListOfConstructs(list) { listOfConstructs = list constructIndex = 0 if (list.length === 0) { (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(bogusState, 'expected `bogusState` to be given') return bogusState } return handleConstruct(list[constructIndex]) } /** * Handle a single construct. * * @param {Construct} construct * @returns {State} */ function handleConstruct(construct) { return start /** @type {State} */ function start(code) { // To do: not needed to store if there is no bogus state, probably? // Currently doesn’t work because `inspect` in document does a check // w/o a bogus, which doesn’t make sense. But it does seem to help perf // by not storing. info = store() currentConstruct = construct if (!construct.partial) { context.currentConstruct = construct } // Always populated by defaults. (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)( context.parser.constructs.disable.null, 'expected `disable.null` to be populated' ) if ( construct.name && context.parser.constructs.disable.null.includes(construct.name) ) { return nok(code) } return construct.tokenize.call( // If we do have fields, create an object w/ `context` as its // prototype. // This allows a “live binding”, which is needed for `interrupt`. fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok )(code) } } /** @type {State} */ function ok(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(code === expectedCode, 'expected code') consumed = true onreturn(currentConstruct, info) return returnState } /** @type {State} */ function nok(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(code === expectedCode, 'expected code') consumed = true info.restore() if (++constructIndex < listOfConstructs.length) { return handleConstruct(listOfConstructs[constructIndex]) } return bogusState } } } /** * @param {Construct} construct * @param {number} from * @returns {undefined} */ function addResult(construct, from) { if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { resolveAllConstructs.push(construct) } if (construct.resolve) { (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.splice)( context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context) ) } if (construct.resolveTo) { context.events = construct.resolveTo(context.events, context) } (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)( construct.partial || context.events.length === 0 || context.events[context.events.length - 1][0] === 'exit', 'expected last token to end' ) } /** * Store state. * * @returns {Info} */ function store() { const startPoint = now() const startPrevious = context.previous const startCurrentConstruct = context.currentConstruct const startEventsIndex = context.events.length const startStack = Array.from(stack) return {restore, from: startEventsIndex} /** * Restore state. * * @returns {undefined} */ function restore() { point = startPoint context.previous = startPrevious context.currentConstruct = startCurrentConstruct context.events.length = startEventsIndex stack = startStack accountForPotentialSkip() debug('position: restore: `%j`', point) } } /** * Move the current point a bit forward in the line when it’s on a column * skip. * * @returns {undefined} */ function accountForPotentialSkip() { if (point.line in columnStart && point.column < 2) { point.column = columnStart[point.line] point.offset += columnStart[point.line] - 1 } } } /** * Get the chunks from a slice of chunks in the range of a token. * * @param {Array} chunks * @param {Pick} token * @returns {Array} */ function sliceChunks(chunks, token) { const startIndex = token.start._index const startBufferIndex = token.start._bufferIndex const endIndex = token.end._index const endBufferIndex = token.end._bufferIndex /** @type {Array} */ let view if (startIndex === endIndex) { (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(endBufferIndex > -1, 'expected non-negative end buffer index') ;(0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(startBufferIndex > -1, 'expected non-negative start buffer index') // @ts-expect-error `_bufferIndex` is used on string chunks. view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] } else { view = chunks.slice(startIndex, endIndex) if (startBufferIndex > -1) { const head = view[0] if (typeof head === 'string') { view[0] = head.slice(startBufferIndex) } else { (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(startBufferIndex === 0, 'expected `startBufferIndex` to be `0`') view.shift() } } if (endBufferIndex > 0) { // @ts-expect-error `_bufferIndex` is used on string chunks. view.push(chunks[endIndex].slice(0, endBufferIndex)) } } return view } /** * Get the string value of a slice of chunks. * * @param {Array} chunks * @param {boolean | undefined} [expandTabs=false] * @returns {string} */ function serializeChunks(chunks, expandTabs) { let index = -1 /** @type {Array} */ const result = [] /** @type {boolean | undefined} */ let atTab while (++index < chunks.length) { const chunk = chunks[index] /** @type {string} */ let value if (typeof chunk === 'string') { value = chunk } else switch (chunk) { case micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.carriageReturn: { value = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_6__.values.cr break } case micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.lineFeed: { value = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_6__.values.lf break } case micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.carriageReturnLineFeed: { value = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_6__.values.cr + micromark_util_symbol__WEBPACK_IMPORTED_MODULE_6__.values.lf break } case micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.horizontalTab: { value = expandTabs ? micromark_util_symbol__WEBPACK_IMPORTED_MODULE_6__.values.space : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_6__.values.ht break } case micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.virtualSpace: { if (!expandTabs && atTab) continue value = micromark_util_symbol__WEBPACK_IMPORTED_MODULE_6__.values.space break } default: { (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)(typeof chunk === 'number', 'expected number') // Currently only replacement character. value = String.fromCharCode(chunk) } } atTab = chunk === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.horizontalTab result.push(value) } return result.join('') } /***/ }), /***/ "./node_modules/micromark/dev/lib/initialize/content.js": /*!**************************************************************!*\ !*** ./node_modules/micromark/dev/lib/initialize/content.js ***! \**************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ content: () => (/* binding */ content) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct * @typedef {import('micromark-util-types').Initializer} Initializer * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').Token} Token * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext */ /** @type {InitialConstruct} */ const content = {tokenize: initializeContent} /** * @this {TokenizeContext} * @type {Initializer} */ function initializeContent(effects) { const contentStart = effects.attempt( this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial ) /** @type {Token} */ let previous return contentStart /** @type {State} */ function afterContentStartConstruct(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownLineEnding)(code), 'expected eol or eof' ) if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof) { effects.consume(code) return } effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.lineEnding) return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_4__.factorySpace)(effects, contentStart, micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.linePrefix) } /** @type {State} */ function paragraphInitial(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)( code !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof && !(0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownLineEnding)(code), 'expected anything other than a line ending or EOF' ) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.paragraph) return lineStart(code) } /** @type {State} */ function lineStart(code) { const token = effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.chunkText, { contentType: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.constants.contentTypeText, previous }) if (previous) { previous.next = token } previous = token return data(code) } /** @type {State} */ function data(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.codes.eof) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.chunkText) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.paragraph) effects.consume(code) return } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_2__.markdownLineEnding)(code)) { effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.chunkText) return lineStart } // Data. effects.consume(code) return data } } /***/ }), /***/ "./node_modules/micromark/dev/lib/initialize/document.js": /*!***************************************************************!*\ !*** ./node_modules/micromark/dev/lib/initialize/document.js ***! \***************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ document: () => (/* binding */ document) /* harmony export */ }); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-util-chunked */ "./node_modules/micromark-util-chunked/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Construct} Construct * @typedef {import('micromark-util-types').ContainerState} ContainerState * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct * @typedef {import('micromark-util-types').Initializer} Initializer * @typedef {import('micromark-util-types').Point} Point * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').Token} Token * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext * @typedef {import('micromark-util-types').Tokenizer} Tokenizer */ /** * @typedef {[Construct, ContainerState]} StackItem */ /** @type {InitialConstruct} */ const document = {tokenize: initializeDocument} /** @type {Construct} */ const containerConstruct = {tokenize: tokenizeContainer} /** * @this {TokenizeContext} * @type {Initializer} */ function initializeDocument(effects) { const self = this /** @type {Array} */ const stack = [] let continued = 0 /** @type {TokenizeContext | undefined} */ let childFlow /** @type {Token | undefined} */ let childToken /** @type {number} */ let lineStartOffset return start /** @type {State} */ function start(code) { // First we iterate through the open blocks, starting with the root // document, and descending through last children down to the last open // block. // Each block imposes a condition that the line must satisfy if the block is // to remain open. // For example, a block quote requires a `>` character. // A paragraph requires a non-blank line. // In this phase we may match all or just some of the open blocks. // But we cannot close unmatched blocks yet, because we may have a lazy // continuation line. if (continued < stack.length) { const item = stack[continued] self.containerState = item[1] ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)( item[0].continuation, 'expected `continuation` to be defined on container construct' ) return effects.attempt( item[0].continuation, documentContinue, checkNewContainers )(code) } // Done. return checkNewContainers(code) } /** @type {State} */ function documentContinue(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)( self.containerState, 'expected `containerState` to be defined after continuation' ) continued++ // Note: this field is called `_closeFlow` but it also closes containers. // Perhaps a good idea to rename it but it’s already used in the wild by // extensions. if (self.containerState._closeFlow) { self.containerState._closeFlow = undefined if (childFlow) { closeFlow() } // Note: this algorithm for moving events around is similar to the // algorithm when dealing with lazy lines in `writeToChild`. const indexBeforeExits = self.events.length let indexBeforeFlow = indexBeforeExits /** @type {Point | undefined} */ let point // Find the flow chunk. while (indexBeforeFlow--) { if ( self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.chunkFlow ) { point = self.events[indexBeforeFlow][1].end break } } (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(point, 'could not find previous flow chunk') exitContainers(continued) // Fix positions. let index = indexBeforeExits while (index < self.events.length) { self.events[index][1].end = Object.assign({}, point) index++ } // Inject the exits earlier (they’re still also at the end). (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.splice)( self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits) ) // Discard the duplicate exits. self.events.length = index return checkNewContainers(code) } return start(code) } /** @type {State} */ function checkNewContainers(code) { // Next, after consuming the continuation markers for existing blocks, we // look for new block starts (e.g. `>` for a block quote). // If we encounter a new block start, we close any blocks unmatched in // step 1 before creating the new block as a child of the last matched // block. if (continued === stack.length) { // No need to `check` whether there’s a container, of `exitContainers` // would be moot. // We can instead immediately `attempt` to parse one. if (!childFlow) { return documentContinued(code) } // If we have concrete content, such as block HTML or fenced code, // we can’t have containers “pierce” into them, so we can immediately // start. if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { return flowStart(code) } // If we do have flow, it could still be a blank line, // but we’d be interrupting it w/ a new container if there’s a current // construct. // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer // needed in micromark-extension-gfm-table@1.0.6). self.interrupt = Boolean( childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack ) } // Check if there is a new container. self.containerState = {} return effects.check( containerConstruct, thereIsANewContainer, thereIsNoNewContainer )(code) } /** @type {State} */ function thereIsANewContainer(code) { if (childFlow) closeFlow() exitContainers(continued) return documentContinued(code) } /** @type {State} */ function thereIsNoNewContainer(code) { self.parser.lazy[self.now().line] = continued !== stack.length lineStartOffset = self.now().offset return flowStart(code) } /** @type {State} */ function documentContinued(code) { // Try new containers. self.containerState = {} return effects.attempt( containerConstruct, containerContinue, flowStart )(code) } /** @type {State} */ function containerContinue(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)( self.currentConstruct, 'expected `currentConstruct` to be defined on tokenizer' ) ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)( self.containerState, 'expected `containerState` to be defined on tokenizer' ) continued++ stack.push([self.currentConstruct, self.containerState]) // Try another. return documentContinued(code) } /** @type {State} */ function flowStart(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.codes.eof) { if (childFlow) closeFlow() exitContainers(0) effects.consume(code) return } childFlow = childFlow || self.parser.flow(self.now()) effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.chunkFlow, { contentType: micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.contentTypeFlow, previous: childToken, _tokenizer: childFlow }) return flowContinue(code) } /** @type {State} */ function flowContinue(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.codes.eof) { writeToChild(effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.chunkFlow), true) exitContainers(0) effects.consume(code) return } if ((0,micromark_util_character__WEBPACK_IMPORTED_MODULE_5__.markdownLineEnding)(code)) { effects.consume(code) writeToChild(effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.chunkFlow)) // Get ready for the next line. continued = 0 self.interrupt = undefined return start } effects.consume(code) return flowContinue } /** * @param {Token} token * @param {boolean | undefined} [eof] * @returns {undefined} */ function writeToChild(token, eof) { (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(childFlow, 'expected `childFlow` to be defined when continuing') const stream = self.sliceStream(token) if (eof) stream.push(null) token.previous = childToken if (childToken) childToken.next = token childToken = token childFlow.defineSkip(token.start) childFlow.write(stream) // Alright, so we just added a lazy line: // // ```markdown // > a // b. // // Or: // // > ~~~c // d // // Or: // // > | e | // f // ``` // // The construct in the second example (fenced code) does not accept lazy // lines, so it marked itself as done at the end of its first line, and // then the content construct parses `d`. // Most constructs in markdown match on the first line: if the first line // forms a construct, a non-lazy line can’t “unmake” it. // // The construct in the third example is potentially a GFM table, and // those are *weird*. // It *could* be a table, from the first line, if the following line // matches a condition. // In this case, that second line is lazy, which “unmakes” the first line // and turns the whole into one content block. // // We’ve now parsed the non-lazy and the lazy line, and can figure out // whether the lazy line started a new flow block. // If it did, we exit the current containers between the two flow blocks. if (self.parser.lazy[token.start.line]) { let index = childFlow.events.length while (index--) { if ( // The token starts before the line ending… childFlow.events[index][1].start.offset < lineStartOffset && // …and either is not ended yet… (!childFlow.events[index][1].end || // …or ends after it. childFlow.events[index][1].end.offset > lineStartOffset) ) { // Exit: there’s still something open, which means it’s a lazy line // part of something. return } } // Note: this algorithm for moving events around is similar to the // algorithm when closing flow in `documentContinue`. const indexBeforeExits = self.events.length let indexBeforeFlow = indexBeforeExits /** @type {boolean | undefined} */ let seen /** @type {Point | undefined} */ let point // Find the previous chunk (the one before the lazy line). while (indexBeforeFlow--) { if ( self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.chunkFlow ) { if (seen) { point = self.events[indexBeforeFlow][1].end break } seen = true } } (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(point, 'could not find previous flow chunk') exitContainers(continued) // Fix positions. index = indexBeforeExits while (index < self.events.length) { self.events[index][1].end = Object.assign({}, point) index++ } // Inject the exits earlier (they’re still also at the end). (0,micromark_util_chunked__WEBPACK_IMPORTED_MODULE_2__.splice)( self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits) ) // Discard the duplicate exits. self.events.length = index } } /** * @param {number} size * @returns {undefined} */ function exitContainers(size) { let index = stack.length // Exit open containers. while (index-- > size) { const entry = stack[index] self.containerState = entry[1] ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)( entry[0].exit, 'expected `exit` to be defined on container construct' ) entry[0].exit.call(self, effects) } stack.length = size } function closeFlow() { (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)( self.containerState, 'expected `containerState` to be defined when closing flow' ) ;(0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)(childFlow, 'expected `childFlow` to be defined when closing it') childFlow.write([micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.codes.eof]) childToken = undefined childFlow = undefined self.containerState._closeFlow = undefined } } /** * @this {TokenizeContext} * @type {Tokenizer} */ function tokenizeContainer(effects, ok, nok) { // Always populated by defaults. (0,devlop__WEBPACK_IMPORTED_MODULE_0__.ok)( this.parser.constructs.disable.null, 'expected `disable.null` to be populated' ) return (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_6__.factorySpace)( effects, effects.attempt(this.parser.constructs.document, ok, nok), micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.linePrefix, this.parser.constructs.disable.null.includes('codeIndented') ? undefined : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_4__.constants.tabSize ) } /***/ }), /***/ "./node_modules/micromark/dev/lib/initialize/flow.js": /*!***********************************************************!*\ !*** ./node_modules/micromark/dev/lib/initialize/flow.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ flow: () => (/* binding */ flow) /* harmony export */ }); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/blank-line.js"); /* harmony import */ var micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! micromark-core-commonmark */ "./node_modules/micromark-core-commonmark/dev/lib/content.js"); /* harmony import */ var micromark_factory_space__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-factory-space */ "./node_modules/micromark-factory-space/dev/index.js"); /* harmony import */ var micromark_util_character__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! micromark-util-character */ "./node_modules/micromark-util-character/dev/index.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct * @typedef {import('micromark-util-types').Initializer} Initializer * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext */ /** @type {InitialConstruct} */ const flow = {tokenize: initializeFlow} /** * @this {TokenizeContext} * @type {Initializer} */ function initializeFlow(effects) { const self = this const initial = effects.attempt( // Try to parse a blank line. micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_0__.blankLine, atBlankEnding, // Try to parse initial flow (essentially, only code). effects.attempt( this.parser.constructs.flowInitial, afterConstruct, (0,micromark_factory_space__WEBPACK_IMPORTED_MODULE_1__.factorySpace)( effects, effects.attempt( this.parser.constructs.flow, afterConstruct, effects.attempt(micromark_core_commonmark__WEBPACK_IMPORTED_MODULE_2__.content, afterConstruct) ), micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.linePrefix ) ) ) return initial /** @type {State} */ function atBlankEnding(code) { ;(0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_6__.markdownLineEnding)(code), 'expected eol or eof' ) if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.codes.eof) { effects.consume(code) return } effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.lineEndingBlank) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.lineEndingBlank) self.currentConstruct = undefined return initial } /** @type {State} */ function afterConstruct(code) { (0,devlop__WEBPACK_IMPORTED_MODULE_4__.ok)( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.codes.eof || (0,micromark_util_character__WEBPACK_IMPORTED_MODULE_6__.markdownLineEnding)(code), 'expected eol or eof' ) if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_5__.codes.eof) { effects.consume(code) return } effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.lineEnding) effects.consume(code) effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.types.lineEnding) self.currentConstruct = undefined return initial } } /***/ }), /***/ "./node_modules/micromark/dev/lib/initialize/text.js": /*!***********************************************************!*\ !*** ./node_modules/micromark/dev/lib/initialize/text.js ***! \***********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ resolver: () => (/* binding */ resolver), /* harmony export */ string: () => (/* binding */ string), /* harmony export */ text: () => (/* binding */ text) /* harmony export */ }); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/types.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /* harmony import */ var devlop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! devlop */ "./node_modules/devlop/lib/development.js"); /** * @typedef {import('micromark-util-types').Code} Code * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct * @typedef {import('micromark-util-types').Initializer} Initializer * @typedef {import('micromark-util-types').Resolver} Resolver * @typedef {import('micromark-util-types').State} State * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext */ const resolver = {resolveAll: createResolver()} const string = initializeFactory('string') const text = initializeFactory('text') /** * @param {'string' | 'text'} field * @returns {InitialConstruct} */ function initializeFactory(field) { return { tokenize: initializeText, resolveAll: createResolver( field === 'text' ? resolveAllLineSuffixes : undefined ) } /** * @this {TokenizeContext} * @type {Initializer} */ function initializeText(effects) { const self = this const constructs = this.parser.constructs[field] const text = effects.attempt(constructs, start, notText) return start /** @type {State} */ function start(code) { return atBreak(code) ? text(code) : notText(code) } /** @type {State} */ function notText(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof) { effects.consume(code) return } effects.enter(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.data) effects.consume(code) return data } /** @type {State} */ function data(code) { if (atBreak(code)) { effects.exit(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.data) return text(code) } // Data. effects.consume(code) return data } /** * @param {Code} code * @returns {boolean} */ function atBreak(code) { if (code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof) { return true } const list = constructs[code] let index = -1 if (list) { // Always populated by defaults. (0,devlop__WEBPACK_IMPORTED_MODULE_2__.ok)(Array.isArray(list), 'expected `disable.null` to be populated') while (++index < list.length) { const item = list[index] if (!item.previous || item.previous.call(self, self.previous)) { return true } } } return false } } } /** * @param {Resolver | undefined} [extraResolver] * @returns {Resolver} */ function createResolver(extraResolver) { return resolveAllText /** @type {Resolver} */ function resolveAllText(events, context) { let index = -1 /** @type {number | undefined} */ let enter // A rather boring computation (to merge adjacent `data` events) which // improves mm performance by 29%. while (++index <= events.length) { if (enter === undefined) { if (events[index] && events[index][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.data) { enter = index index++ } } else if (!events[index] || events[index][1].type !== micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.data) { // Don’t do anything if there is one data token. if (index !== enter + 2) { events[enter][1].end = events[index - 1][1].end events.splice(enter + 2, index - enter - 2) index = enter + 2 } enter = undefined } } return extraResolver ? extraResolver(events, context) : events } } /** * A rather ugly set of instructions which again looks at chunks in the input * stream. * The reason to do this here is that it is *much* faster to parse in reverse. * And that we can’t hook into `null` to split the line suffix before an EOF. * To do: figure out if we can make this into a clean utility, or even in core. * As it will be useful for GFMs literal autolink extension (and maybe even * tables?) * * @type {Resolver} */ function resolveAllLineSuffixes(events, context) { let eventIndex = 0 // Skip first. while (++eventIndex <= events.length) { if ( (eventIndex === events.length || events[eventIndex][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.lineEnding) && events[eventIndex - 1][1].type === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.data ) { const data = events[eventIndex - 1][1] const chunks = context.sliceStream(data) let index = chunks.length let bufferIndex = -1 let size = 0 /** @type {boolean | undefined} */ let tabs while (index--) { const chunk = chunks[index] if (typeof chunk === 'string') { bufferIndex = chunk.length while (chunk.charCodeAt(bufferIndex - 1) === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.space) { size++ bufferIndex-- } if (bufferIndex) break bufferIndex = -1 } // Number else if (chunk === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.horizontalTab) { tabs = true size++ } else if (chunk === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.virtualSpace) { // Empty } else { // Replacement character, exit. index++ break } } if (size) { const token = { type: eventIndex === events.length || tabs || size < micromark_util_symbol__WEBPACK_IMPORTED_MODULE_3__.constants.hardBreakPrefixSizeMin ? micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.lineSuffix : micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.types.hardBreakTrailing, start: { line: data.end.line, column: data.end.column - size, offset: data.end.offset - size, _index: data.start._index + index, _bufferIndex: index ? bufferIndex : data.start._bufferIndex + bufferIndex }, end: Object.assign({}, data.end) } data.end = Object.assign({}, token.start) if (data.start.offset === data.end.offset) { Object.assign(data, token) } else { events.splice( eventIndex, 0, ['enter', token, context], ['exit', token, context] ) eventIndex += 2 } } eventIndex++ } } return events } /***/ }), /***/ "./node_modules/micromark/dev/lib/parse.js": /*!*************************************************!*\ !*** ./node_modules/micromark/dev/lib/parse.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ parse: () => (/* binding */ parse) /* harmony export */ }); /* harmony import */ var micromark_util_combine_extensions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-combine-extensions */ "./node_modules/micromark-util-combine-extensions/index.js"); /* harmony import */ var _initialize_content_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./initialize/content.js */ "./node_modules/micromark/dev/lib/initialize/content.js"); /* harmony import */ var _initialize_document_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./initialize/document.js */ "./node_modules/micromark/dev/lib/initialize/document.js"); /* harmony import */ var _initialize_flow_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./initialize/flow.js */ "./node_modules/micromark/dev/lib/initialize/flow.js"); /* harmony import */ var _initialize_text_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./initialize/text.js */ "./node_modules/micromark/dev/lib/initialize/text.js"); /* harmony import */ var _create_tokenizer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./create-tokenizer.js */ "./node_modules/micromark/dev/lib/create-tokenizer.js"); /* harmony import */ var _constructs_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constructs.js */ "./node_modules/micromark/dev/lib/constructs.js"); /** * @typedef {import('micromark-util-types').Create} Create * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct * @typedef {import('micromark-util-types').ParseContext} ParseContext * @typedef {import('micromark-util-types').ParseOptions} ParseOptions */ /** * @param {ParseOptions | null | undefined} [options] * @returns {ParseContext} */ function parse(options) { const settings = options || {} const constructs = /** @type {FullNormalizedExtension} */ ( (0,micromark_util_combine_extensions__WEBPACK_IMPORTED_MODULE_0__.combineExtensions)([_constructs_js__WEBPACK_IMPORTED_MODULE_1__, ...(settings.extensions || [])]) ) /** @type {ParseContext} */ const parser = { defined: [], lazy: {}, constructs, content: create(_initialize_content_js__WEBPACK_IMPORTED_MODULE_2__.content), document: create(_initialize_document_js__WEBPACK_IMPORTED_MODULE_3__.document), flow: create(_initialize_flow_js__WEBPACK_IMPORTED_MODULE_4__.flow), string: create(_initialize_text_js__WEBPACK_IMPORTED_MODULE_5__.string), text: create(_initialize_text_js__WEBPACK_IMPORTED_MODULE_5__.text) } return parser /** * @param {InitialConstruct} initial */ function create(initial) { return creator /** @type {Create} */ function creator(from) { return (0,_create_tokenizer_js__WEBPACK_IMPORTED_MODULE_6__.createTokenizer)(parser, initial, from) } } } /***/ }), /***/ "./node_modules/micromark/dev/lib/postprocess.js": /*!*******************************************************!*\ !*** ./node_modules/micromark/dev/lib/postprocess.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ postprocess: () => (/* binding */ postprocess) /* harmony export */ }); /* harmony import */ var micromark_util_subtokenize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-subtokenize */ "./node_modules/micromark-util-subtokenize/dev/index.js"); /** * @typedef {import('micromark-util-types').Event} Event */ /** * @param {Array} events * @returns {Array} */ function postprocess(events) { while (!(0,micromark_util_subtokenize__WEBPACK_IMPORTED_MODULE_0__.subtokenize)(events)) { // Empty } return events } /***/ }), /***/ "./node_modules/micromark/dev/lib/preprocess.js": /*!******************************************************!*\ !*** ./node_modules/micromark/dev/lib/preprocess.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ preprocess: () => (/* binding */ preprocess) /* harmony export */ }); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/codes.js"); /* harmony import */ var micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! micromark-util-symbol */ "./node_modules/micromark-util-symbol/lib/constants.js"); /** * @typedef {import('micromark-util-types').Chunk} Chunk * @typedef {import('micromark-util-types').Code} Code * @typedef {import('micromark-util-types').Encoding} Encoding * @typedef {import('micromark-util-types').Value} Value */ /** * @callback Preprocessor * @param {Value} value * @param {Encoding | null | undefined} [encoding] * @param {boolean | null | undefined} [end=false] * @returns {Array} */ const search = /[\0\t\n\r]/g /** * @returns {Preprocessor} */ function preprocess() { let column = 1 let buffer = '' /** @type {boolean | undefined} */ let start = true /** @type {boolean | undefined} */ let atCarriageReturn return preprocessor /** @type {Preprocessor} */ // eslint-disable-next-line complexity function preprocessor(value, encoding, end) { /** @type {Array} */ const chunks = [] /** @type {RegExpMatchArray | null} */ let match /** @type {number} */ let next /** @type {number} */ let startPosition /** @type {number} */ let endPosition /** @type {Code} */ let code value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value)) startPosition = 0 buffer = '' if (start) { // To do: `markdown-rs` actually parses BOMs (byte order mark). if (value.charCodeAt(0) === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.byteOrderMarker) { startPosition++ } start = undefined } while (startPosition < value.length) { search.lastIndex = startPosition match = search.exec(value) endPosition = match && match.index !== undefined ? match.index : value.length code = value.charCodeAt(endPosition) if (!match) { buffer = value.slice(startPosition) break } if ( code === micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lf && startPosition === endPosition && atCarriageReturn ) { chunks.push(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.carriageReturnLineFeed) atCarriageReturn = undefined } else { if (atCarriageReturn) { chunks.push(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.carriageReturn) atCarriageReturn = undefined } if (startPosition < endPosition) { chunks.push(value.slice(startPosition, endPosition)) column += endPosition - startPosition } switch (code) { case micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.nul: { chunks.push(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.replacementCharacter) column++ break } case micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.ht: { next = Math.ceil(column / micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.constants.tabSize) * micromark_util_symbol__WEBPACK_IMPORTED_MODULE_1__.constants.tabSize chunks.push(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.horizontalTab) while (column++ < next) chunks.push(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.virtualSpace) break } case micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lf: { chunks.push(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.lineFeed) column = 1 break } default: { atCarriageReturn = true column = 1 } } } startPosition = endPosition + 1 } if (end) { if (atCarriageReturn) chunks.push(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.carriageReturn) if (buffer) chunks.push(buffer) chunks.push(micromark_util_symbol__WEBPACK_IMPORTED_MODULE_0__.codes.eof) } return chunks } } /***/ }), /***/ "./node_modules/nanoid/non-secure/index.js": /*!*************************************************!*\ !*** ./node_modules/nanoid/non-secure/index.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ customAlphabet: () => (/* binding */ customAlphabet), /* harmony export */ nanoid: () => (/* binding */ nanoid) /* harmony export */ }); let urlAlphabet = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict' let customAlphabet = (alphabet, defaultSize = 21) => { return (size = defaultSize) => { let id = '' let i = size while (i--) { id += alphabet[(Math.random() * alphabet.length) | 0] } return id } } let nanoid = (size = 21) => { let id = '' let i = size while (i--) { id += urlAlphabet[(Math.random() * 64) | 0] } return id } /***/ }), /***/ "./node_modules/pinia/dist/pinia.mjs": /*!*******************************************!*\ !*** ./node_modules/pinia/dist/pinia.mjs ***! \*******************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ MutationType: () => (/* binding */ MutationType), /* harmony export */ PiniaVuePlugin: () => (/* binding */ PiniaVuePlugin), /* harmony export */ acceptHMRUpdate: () => (/* binding */ acceptHMRUpdate), /* harmony export */ createPinia: () => (/* binding */ createPinia), /* harmony export */ defineStore: () => (/* binding */ defineStore), /* harmony export */ getActivePinia: () => (/* binding */ getActivePinia), /* harmony export */ mapActions: () => (/* binding */ mapActions), /* harmony export */ mapGetters: () => (/* binding */ mapGetters), /* harmony export */ mapState: () => (/* binding */ mapState), /* harmony export */ mapStores: () => (/* binding */ mapStores), /* harmony export */ mapWritableState: () => (/* binding */ mapWritableState), /* harmony export */ setActivePinia: () => (/* binding */ setActivePinia), /* harmony export */ setMapStoreSuffix: () => (/* binding */ setMapStoreSuffix), /* harmony export */ skipHydrate: () => (/* binding */ skipHydrate), /* harmony export */ storeToRefs: () => (/* binding */ storeToRefs) /* harmony export */ }); /* harmony import */ var vue_demi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-demi */ "./node_modules/pinia/node_modules/vue-demi/lib/index.mjs"); /* harmony import */ var _vue_devtools_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @vue/devtools-api */ "./node_modules/@vue/devtools-api/lib/esm/index.js"); /*! * pinia v2.1.7 * (c) 2023 Eduardo San Martin Morote * @license MIT */ /** * setActivePinia must be called to handle SSR at the top of functions like * `fetch`, `setup`, `serverPrefetch` and others */ let activePinia; /** * Sets or unsets the active pinia. Used in SSR and internally when calling * actions and getters * * @param pinia - Pinia instance */ // @ts-expect-error: cannot constrain the type of the return const setActivePinia = (pinia) => (activePinia = pinia); /** * Get the currently active pinia if there is any. */ const getActivePinia = () => ((0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.hasInjectionContext)() && (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.inject)(piniaSymbol)) || activePinia; const piniaSymbol = (( true) ? Symbol('pinia') : /* istanbul ignore next */ 0); function isPlainObject( // eslint-disable-next-line @typescript-eslint/no-explicit-any o) { return (o && typeof o === 'object' && Object.prototype.toString.call(o) === '[object Object]' && typeof o.toJSON !== 'function'); } // type DeepReadonly = { readonly [P in keyof T]: DeepReadonly } // TODO: can we change these to numbers? /** * Possible types for SubscriptionCallback */ var MutationType; (function (MutationType) { /** * Direct mutation of the state: * * - `store.name = 'new name'` * - `store.$state.name = 'new name'` * - `store.list.push('new item')` */ MutationType["direct"] = "direct"; /** * Mutated the state with `$patch` and an object * * - `store.$patch({ name: 'newName' })` */ MutationType["patchObject"] = "patch object"; /** * Mutated the state with `$patch` and a function * * - `store.$patch(state => state.name = 'newName')` */ MutationType["patchFunction"] = "patch function"; // maybe reset? for $state = {} and $reset })(MutationType || (MutationType = {})); const IS_CLIENT = typeof window !== 'undefined'; /** * Should we add the devtools plugins. * - only if dev mode or forced through the prod devtools flag * - not in test * - only if window exists (could change in the future) */ const USE_DEVTOOLS = true && IS_CLIENT; /* * FileSaver.js A saveAs() FileSaver implementation. * * Originally by Eli Grey, adapted as an ESM module by Eduardo San Martin * Morote. * * License : MIT */ // The one and only way of getting global scope in all environments // https://stackoverflow.com/q/3277182/1008999 const _global = /*#__PURE__*/ (() => typeof window === 'object' && window.window === window ? window : typeof self === 'object' && self.self === self ? self : typeof global === 'object' && global.global === global ? global : typeof globalThis === 'object' ? globalThis : { HTMLElement: null })(); function bom(blob, { autoBom = false } = {}) { // prepend BOM for UTF-8 XML and text/* types (including HTML) // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF if (autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { return new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type }); } return blob; } function download(url, name, opts) { const xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.responseType = 'blob'; xhr.onload = function () { saveAs(xhr.response, name, opts); }; xhr.onerror = function () { console.error('could not download file'); }; xhr.send(); } function corsEnabled(url) { const xhr = new XMLHttpRequest(); // use sync to avoid popup blocker xhr.open('HEAD', url, false); try { xhr.send(); } catch (e) { } return xhr.status >= 200 && xhr.status <= 299; } // `a.click()` doesn't work for all browsers (#465) function click(node) { try { node.dispatchEvent(new MouseEvent('click')); } catch (e) { const evt = document.createEvent('MouseEvents'); evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null); node.dispatchEvent(evt); } } const _navigator = typeof navigator === 'object' ? navigator : { userAgent: '' }; // Detect WebView inside a native macOS app by ruling out all browsers // We just need to check for 'Safari' because all other browsers (besides Firefox) include that too // https://www.whatismybrowser.com/guides/the-latest-user-agent/macos const isMacOSWebView = /*#__PURE__*/ (() => /Macintosh/.test(_navigator.userAgent) && /AppleWebKit/.test(_navigator.userAgent) && !/Safari/.test(_navigator.userAgent))(); const saveAs = !IS_CLIENT ? () => { } // noop : // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView or mini program typeof HTMLAnchorElement !== 'undefined' && 'download' in HTMLAnchorElement.prototype && !isMacOSWebView ? downloadSaveAs : // Use msSaveOrOpenBlob as a second approach 'msSaveOrOpenBlob' in _navigator ? msSaveAs : // Fallback to using FileReader and a popup fileSaverSaveAs; function downloadSaveAs(blob, name = 'download', opts) { const a = document.createElement('a'); a.download = name; a.rel = 'noopener'; // tabnabbing // TODO: detect chrome extensions & packaged apps // a.target = '_blank' if (typeof blob === 'string') { // Support regular links a.href = blob; if (a.origin !== location.origin) { if (corsEnabled(a.href)) { download(blob, name, opts); } else { a.target = '_blank'; click(a); } } else { click(a); } } else { // Support blobs a.href = URL.createObjectURL(blob); setTimeout(function () { URL.revokeObjectURL(a.href); }, 4e4); // 40s setTimeout(function () { click(a); }, 0); } } function msSaveAs(blob, name = 'download', opts) { if (typeof blob === 'string') { if (corsEnabled(blob)) { download(blob, name, opts); } else { const a = document.createElement('a'); a.href = blob; a.target = '_blank'; setTimeout(function () { click(a); }); } } else { // @ts-ignore: works on windows navigator.msSaveOrOpenBlob(bom(blob, opts), name); } } function fileSaverSaveAs(blob, name, opts, popup) { // Open a popup immediately do go around popup blocker // Mostly only available on user interaction and the fileReader is async so... popup = popup || open('', '_blank'); if (popup) { popup.document.title = popup.document.body.innerText = 'downloading...'; } if (typeof blob === 'string') return download(blob, name, opts); const force = blob.type === 'application/octet-stream'; const isSafari = /constructor/i.test(String(_global.HTMLElement)) || 'safari' in _global; const isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent); if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') { // Safari doesn't allow downloading of blob URLs const reader = new FileReader(); reader.onloadend = function () { let url = reader.result; if (typeof url !== 'string') { popup = null; throw new Error('Wrong reader.result type'); } url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;'); if (popup) { popup.location.href = url; } else { location.assign(url); } popup = null; // reverse-tabnabbing #460 }; reader.readAsDataURL(blob); } else { const url = URL.createObjectURL(blob); if (popup) popup.location.assign(url); else location.href = url; popup = null; // reverse-tabnabbing #460 setTimeout(function () { URL.revokeObjectURL(url); }, 4e4); // 40s } } /** * Shows a toast or console.log * * @param message - message to log * @param type - different color of the tooltip */ function toastMessage(message, type) { const piniaMessage = '🍍 ' + message; if (typeof __VUE_DEVTOOLS_TOAST__ === 'function') { // No longer available :( __VUE_DEVTOOLS_TOAST__(piniaMessage, type); } else if (type === 'error') { console.error(piniaMessage); } else if (type === 'warn') { console.warn(piniaMessage); } else { console.log(piniaMessage); } } function isPinia(o) { return '_a' in o && 'install' in o; } /** * This file contain devtools actions, they are not Pinia actions. */ // --- function checkClipboardAccess() { if (!('clipboard' in navigator)) { toastMessage(`Your browser doesn't support the Clipboard API`, 'error'); return true; } } function checkNotFocusedError(error) { if (error instanceof Error && error.message.toLowerCase().includes('document is not focused')) { toastMessage('You need to activate the "Emulate a focused page" setting in the "Rendering" panel of devtools.', 'warn'); return true; } return false; } async function actionGlobalCopyState(pinia) { if (checkClipboardAccess()) return; try { await navigator.clipboard.writeText(JSON.stringify(pinia.state.value)); toastMessage('Global state copied to clipboard.'); } catch (error) { if (checkNotFocusedError(error)) return; toastMessage(`Failed to serialize the state. Check the console for more details.`, 'error'); console.error(error); } } async function actionGlobalPasteState(pinia) { if (checkClipboardAccess()) return; try { loadStoresState(pinia, JSON.parse(await navigator.clipboard.readText())); toastMessage('Global state pasted from clipboard.'); } catch (error) { if (checkNotFocusedError(error)) return; toastMessage(`Failed to deserialize the state from clipboard. Check the console for more details.`, 'error'); console.error(error); } } async function actionGlobalSaveState(pinia) { try { saveAs(new Blob([JSON.stringify(pinia.state.value)], { type: 'text/plain;charset=utf-8', }), 'pinia-state.json'); } catch (error) { toastMessage(`Failed to export the state as JSON. Check the console for more details.`, 'error'); console.error(error); } } let fileInput; function getFileOpener() { if (!fileInput) { fileInput = document.createElement('input'); fileInput.type = 'file'; fileInput.accept = '.json'; } function openFile() { return new Promise((resolve, reject) => { fileInput.onchange = async () => { const files = fileInput.files; if (!files) return resolve(null); const file = files.item(0); if (!file) return resolve(null); return resolve({ text: await file.text(), file }); }; // @ts-ignore: TODO: changed from 4.3 to 4.4 fileInput.oncancel = () => resolve(null); fileInput.onerror = reject; fileInput.click(); }); } return openFile; } async function actionGlobalOpenStateFile(pinia) { try { const open = getFileOpener(); const result = await open(); if (!result) return; const { text, file } = result; loadStoresState(pinia, JSON.parse(text)); toastMessage(`Global state imported from "${file.name}".`); } catch (error) { toastMessage(`Failed to import the state from JSON. Check the console for more details.`, 'error'); console.error(error); } } function loadStoresState(pinia, state) { for (const key in state) { const storeState = pinia.state.value[key]; // store is already instantiated, patch it if (storeState) { Object.assign(storeState, state[key]); } else { // store is not instantiated, set the initial state pinia.state.value[key] = state[key]; } } } function formatDisplay(display) { return { _custom: { display, }, }; } const PINIA_ROOT_LABEL = '🍍 Pinia (root)'; const PINIA_ROOT_ID = '_root'; function formatStoreForInspectorTree(store) { return isPinia(store) ? { id: PINIA_ROOT_ID, label: PINIA_ROOT_LABEL, } : { id: store.$id, label: store.$id, }; } function formatStoreForInspectorState(store) { if (isPinia(store)) { const storeNames = Array.from(store._s.keys()); const storeMap = store._s; const state = { state: storeNames.map((storeId) => ({ editable: true, key: storeId, value: store.state.value[storeId], })), getters: storeNames .filter((id) => storeMap.get(id)._getters) .map((id) => { const store = storeMap.get(id); return { editable: false, key: id, value: store._getters.reduce((getters, key) => { getters[key] = store[key]; return getters; }, {}), }; }), }; return state; } const state = { state: Object.keys(store.$state).map((key) => ({ editable: true, key, value: store.$state[key], })), }; // avoid adding empty getters if (store._getters && store._getters.length) { state.getters = store._getters.map((getterName) => ({ editable: false, key: getterName, value: store[getterName], })); } if (store._customProperties.size) { state.customProperties = Array.from(store._customProperties).map((key) => ({ editable: true, key, value: store[key], })); } return state; } function formatEventData(events) { if (!events) return {}; if (Array.isArray(events)) { // TODO: handle add and delete for arrays and objects return events.reduce((data, event) => { data.keys.push(event.key); data.operations.push(event.type); data.oldValue[event.key] = event.oldValue; data.newValue[event.key] = event.newValue; return data; }, { oldValue: {}, keys: [], operations: [], newValue: {}, }); } else { return { operation: formatDisplay(events.type), key: formatDisplay(events.key), oldValue: events.oldValue, newValue: events.newValue, }; } } function formatMutationType(type) { switch (type) { case MutationType.direct: return 'mutation'; case MutationType.patchFunction: return '$patch'; case MutationType.patchObject: return '$patch'; default: return 'unknown'; } } // timeline can be paused when directly changing the state let isTimelineActive = true; const componentStateTypes = []; const MUTATIONS_LAYER_ID = 'pinia:mutations'; const INSPECTOR_ID = 'pinia'; const { assign: assign$1 } = Object; /** * Gets the displayed name of a store in devtools * * @param id - id of the store * @returns a formatted string */ const getStoreType = (id) => '🍍 ' + id; /** * Add the pinia plugin without any store. Allows displaying a Pinia plugin tab * as soon as it is added to the application. * * @param app - Vue application * @param pinia - pinia instance */ function registerPiniaDevtools(app, pinia) { (0,_vue_devtools_api__WEBPACK_IMPORTED_MODULE_1__.setupDevtoolsPlugin)({ id: 'dev.esm.pinia', label: 'Pinia 🍍', logo: 'https://pinia.vuejs.org/logo.svg', packageName: 'pinia', homepage: 'https://pinia.vuejs.org', componentStateTypes, app, }, (api) => { if (typeof api.now !== 'function') { toastMessage('You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.'); } api.addTimelineLayer({ id: MUTATIONS_LAYER_ID, label: `Pinia 🍍`, color: 0xe5df88, }); api.addInspector({ id: INSPECTOR_ID, label: 'Pinia 🍍', icon: 'storage', treeFilterPlaceholder: 'Search stores', actions: [ { icon: 'content_copy', action: () => { actionGlobalCopyState(pinia); }, tooltip: 'Serialize and copy the state', }, { icon: 'content_paste', action: async () => { await actionGlobalPasteState(pinia); api.sendInspectorTree(INSPECTOR_ID); api.sendInspectorState(INSPECTOR_ID); }, tooltip: 'Replace the state with the content of your clipboard', }, { icon: 'save', action: () => { actionGlobalSaveState(pinia); }, tooltip: 'Save the state as a JSON file', }, { icon: 'folder_open', action: async () => { await actionGlobalOpenStateFile(pinia); api.sendInspectorTree(INSPECTOR_ID); api.sendInspectorState(INSPECTOR_ID); }, tooltip: 'Import the state from a JSON file', }, ], nodeActions: [ { icon: 'restore', tooltip: 'Reset the state (with "$reset")', action: (nodeId) => { const store = pinia._s.get(nodeId); if (!store) { toastMessage(`Cannot reset "${nodeId}" store because it wasn't found.`, 'warn'); } else if (typeof store.$reset !== 'function') { toastMessage(`Cannot reset "${nodeId}" store because it doesn't have a "$reset" method implemented.`, 'warn'); } else { store.$reset(); toastMessage(`Store "${nodeId}" reset.`); } }, }, ], }); api.on.inspectComponent((payload, ctx) => { const proxy = (payload.componentInstance && payload.componentInstance.proxy); if (proxy && proxy._pStores) { const piniaStores = payload.componentInstance.proxy._pStores; Object.values(piniaStores).forEach((store) => { payload.instanceData.state.push({ type: getStoreType(store.$id), key: 'state', editable: true, value: store._isOptionsAPI ? { _custom: { value: (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.toRaw)(store.$state), actions: [ { icon: 'restore', tooltip: 'Reset the state of this store', action: () => store.$reset(), }, ], }, } : // NOTE: workaround to unwrap transferred refs Object.keys(store.$state).reduce((state, key) => { state[key] = store.$state[key]; return state; }, {}), }); if (store._getters && store._getters.length) { payload.instanceData.state.push({ type: getStoreType(store.$id), key: 'getters', editable: false, value: store._getters.reduce((getters, key) => { try { getters[key] = store[key]; } catch (error) { // @ts-expect-error: we just want to show it in devtools getters[key] = error; } return getters; }, {}), }); } }); } }); api.on.getInspectorTree((payload) => { if (payload.app === app && payload.inspectorId === INSPECTOR_ID) { let stores = [pinia]; stores = stores.concat(Array.from(pinia._s.values())); payload.rootNodes = (payload.filter ? stores.filter((store) => '$id' in store ? store.$id .toLowerCase() .includes(payload.filter.toLowerCase()) : PINIA_ROOT_LABEL.toLowerCase().includes(payload.filter.toLowerCase())) : stores).map(formatStoreForInspectorTree); } }); api.on.getInspectorState((payload) => { if (payload.app === app && payload.inspectorId === INSPECTOR_ID) { const inspectedStore = payload.nodeId === PINIA_ROOT_ID ? pinia : pinia._s.get(payload.nodeId); if (!inspectedStore) { // this could be the selected store restored for a different project // so it's better not to say anything here return; } if (inspectedStore) { payload.state = formatStoreForInspectorState(inspectedStore); } } }); api.on.editInspectorState((payload, ctx) => { if (payload.app === app && payload.inspectorId === INSPECTOR_ID) { const inspectedStore = payload.nodeId === PINIA_ROOT_ID ? pinia : pinia._s.get(payload.nodeId); if (!inspectedStore) { return toastMessage(`store "${payload.nodeId}" not found`, 'error'); } const { path } = payload; if (!isPinia(inspectedStore)) { // access only the state if (path.length !== 1 || !inspectedStore._customProperties.has(path[0]) || path[0] in inspectedStore.$state) { path.unshift('$state'); } } else { // Root access, we can omit the `.value` because the devtools API does it for us path.unshift('state'); } isTimelineActive = false; payload.set(inspectedStore, path, payload.state.value); isTimelineActive = true; } }); api.on.editComponentState((payload) => { if (payload.type.startsWith('🍍')) { const storeId = payload.type.replace(/^🍍\s*/, ''); const store = pinia._s.get(storeId); if (!store) { return toastMessage(`store "${storeId}" not found`, 'error'); } const { path } = payload; if (path[0] !== 'state') { return toastMessage(`Invalid path for store "${storeId}":\n${path}\nOnly state can be modified.`); } // rewrite the first entry to be able to directly set the state as // well as any other path path[0] = '$state'; isTimelineActive = false; payload.set(store, path, payload.state.value); isTimelineActive = true; } }); }); } function addStoreToDevtools(app, store) { if (!componentStateTypes.includes(getStoreType(store.$id))) { componentStateTypes.push(getStoreType(store.$id)); } (0,_vue_devtools_api__WEBPACK_IMPORTED_MODULE_1__.setupDevtoolsPlugin)({ id: 'dev.esm.pinia', label: 'Pinia 🍍', logo: 'https://pinia.vuejs.org/logo.svg', packageName: 'pinia', homepage: 'https://pinia.vuejs.org', componentStateTypes, app, settings: { logStoreChanges: { label: 'Notify about new/deleted stores', type: 'boolean', defaultValue: true, }, // useEmojis: { // label: 'Use emojis in messages ⚡️', // type: 'boolean', // defaultValue: true, // }, }, }, (api) => { // gracefully handle errors const now = typeof api.now === 'function' ? api.now.bind(api) : Date.now; store.$onAction(({ after, onError, name, args }) => { const groupId = runningActionId++; api.addTimelineEvent({ layerId: MUTATIONS_LAYER_ID, event: { time: now(), title: '🛫 ' + name, subtitle: 'start', data: { store: formatDisplay(store.$id), action: formatDisplay(name), args, }, groupId, }, }); after((result) => { activeAction = undefined; api.addTimelineEvent({ layerId: MUTATIONS_LAYER_ID, event: { time: now(), title: '🛬 ' + name, subtitle: 'end', data: { store: formatDisplay(store.$id), action: formatDisplay(name), args, result, }, groupId, }, }); }); onError((error) => { activeAction = undefined; api.addTimelineEvent({ layerId: MUTATIONS_LAYER_ID, event: { time: now(), logType: 'error', title: '💥 ' + name, subtitle: 'end', data: { store: formatDisplay(store.$id), action: formatDisplay(name), args, error, }, groupId, }, }); }); }, true); store._customProperties.forEach((name) => { (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.watch)(() => (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.unref)(store[name]), (newValue, oldValue) => { api.notifyComponentUpdate(); api.sendInspectorState(INSPECTOR_ID); if (isTimelineActive) { api.addTimelineEvent({ layerId: MUTATIONS_LAYER_ID, event: { time: now(), title: 'Change', subtitle: name, data: { newValue, oldValue, }, groupId: activeAction, }, }); } }, { deep: true }); }); store.$subscribe(({ events, type }, state) => { api.notifyComponentUpdate(); api.sendInspectorState(INSPECTOR_ID); if (!isTimelineActive) return; // rootStore.state[store.id] = state const eventData = { time: now(), title: formatMutationType(type), data: assign$1({ store: formatDisplay(store.$id) }, formatEventData(events)), groupId: activeAction, }; if (type === MutationType.patchFunction) { eventData.subtitle = '⤵️'; } else if (type === MutationType.patchObject) { eventData.subtitle = '🧩'; } else if (events && !Array.isArray(events)) { eventData.subtitle = events.type; } if (events) { eventData.data['rawEvent(s)'] = { _custom: { display: 'DebuggerEvent', type: 'object', tooltip: 'raw DebuggerEvent[]', value: events, }, }; } api.addTimelineEvent({ layerId: MUTATIONS_LAYER_ID, event: eventData, }); }, { detached: true, flush: 'sync' }); const hotUpdate = store._hotUpdate; store._hotUpdate = (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.markRaw)((newStore) => { hotUpdate(newStore); api.addTimelineEvent({ layerId: MUTATIONS_LAYER_ID, event: { time: now(), title: '🔥 ' + store.$id, subtitle: 'HMR update', data: { store: formatDisplay(store.$id), info: formatDisplay(`HMR update`), }, }, }); // update the devtools too api.notifyComponentUpdate(); api.sendInspectorTree(INSPECTOR_ID); api.sendInspectorState(INSPECTOR_ID); }); const { $dispose } = store; store.$dispose = () => { $dispose(); api.notifyComponentUpdate(); api.sendInspectorTree(INSPECTOR_ID); api.sendInspectorState(INSPECTOR_ID); api.getSettings().logStoreChanges && toastMessage(`Disposed "${store.$id}" store 🗑`); }; // trigger an update so it can display new registered stores api.notifyComponentUpdate(); api.sendInspectorTree(INSPECTOR_ID); api.sendInspectorState(INSPECTOR_ID); api.getSettings().logStoreChanges && toastMessage(`"${store.$id}" store installed 🆕`); }); } let runningActionId = 0; let activeAction; /** * Patches a store to enable action grouping in devtools by wrapping the store with a Proxy that is passed as the * context of all actions, allowing us to set `runningAction` on each access and effectively associating any state * mutation to the action. * * @param store - store to patch * @param actionNames - list of actionst to patch */ function patchActionForGrouping(store, actionNames, wrapWithProxy) { // original actions of the store as they are given by pinia. We are going to override them const actions = actionNames.reduce((storeActions, actionName) => { // use toRaw to avoid tracking #541 storeActions[actionName] = (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.toRaw)(store)[actionName]; return storeActions; }, {}); for (const actionName in actions) { store[actionName] = function () { // the running action id is incremented in a before action hook const _actionId = runningActionId; const trackedStore = wrapWithProxy ? new Proxy(store, { get(...args) { activeAction = _actionId; return Reflect.get(...args); }, set(...args) { activeAction = _actionId; return Reflect.set(...args); }, }) : store; // For Setup Stores we need https://github.com/tc39/proposal-async-context activeAction = _actionId; const retValue = actions[actionName].apply(trackedStore, arguments); // this is safer as async actions in Setup Stores would associate mutations done outside of the action activeAction = undefined; return retValue; }; } } /** * pinia.use(devtoolsPlugin) */ function devtoolsPlugin({ app, store, options }) { // HMR module if (store.$id.startsWith('__hot:')) { return; } // detect option api vs setup api store._isOptionsAPI = !!options.state; patchActionForGrouping(store, Object.keys(options.actions), store._isOptionsAPI); // Upgrade the HMR to also update the new actions const originalHotUpdate = store._hotUpdate; (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.toRaw)(store)._hotUpdate = function (newStore) { originalHotUpdate.apply(this, arguments); patchActionForGrouping(store, Object.keys(newStore._hmrPayload.actions), !!store._isOptionsAPI); }; addStoreToDevtools(app, // FIXME: is there a way to allow the assignment from Store to StoreGeneric? store); } /** * Creates a Pinia instance to be used by the application */ function createPinia() { const scope = (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.effectScope)(true); // NOTE: here we could check the window object for a state and directly set it // if there is anything like it with Vue 3 SSR const state = scope.run(() => (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.ref)({})); let _p = []; // plugins added before calling app.use(pinia) let toBeInstalled = []; const pinia = (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.markRaw)({ install(app) { // this allows calling useStore() outside of a component setup after // installing pinia's plugin setActivePinia(pinia); if (!vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2) { pinia._a = app; app.provide(piniaSymbol, pinia); app.config.globalProperties.$pinia = pinia; /* istanbul ignore else */ if (USE_DEVTOOLS) { registerPiniaDevtools(app, pinia); } toBeInstalled.forEach((plugin) => _p.push(plugin)); toBeInstalled = []; } }, use(plugin) { if (!this._a && !vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2) { toBeInstalled.push(plugin); } else { _p.push(plugin); } return this; }, _p, // it's actually undefined here // @ts-expect-error _a: null, _e: scope, _s: new Map(), state, }); // pinia devtools rely on dev only features so they cannot be forced unless // the dev build of Vue is used. Avoid old browsers like IE11. if (USE_DEVTOOLS && typeof Proxy !== 'undefined') { pinia.use(devtoolsPlugin); } return pinia; } /** * Checks if a function is a `StoreDefinition`. * * @param fn - object to test * @returns true if `fn` is a StoreDefinition */ const isUseStore = (fn) => { return typeof fn === 'function' && typeof fn.$id === 'string'; }; /** * Mutates in place `newState` with `oldState` to _hot update_ it. It will * remove any key not existing in `newState` and recursively merge plain * objects. * * @param newState - new state object to be patched * @param oldState - old state that should be used to patch newState * @returns - newState */ function patchObject(newState, oldState) { // no need to go through symbols because they cannot be serialized anyway for (const key in oldState) { const subPatch = oldState[key]; // skip the whole sub tree if (!(key in newState)) { continue; } const targetValue = newState[key]; if (isPlainObject(targetValue) && isPlainObject(subPatch) && !(0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.isRef)(subPatch) && !(0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.isReactive)(subPatch)) { newState[key] = patchObject(targetValue, subPatch); } else { // objects are either a bit more complex (e.g. refs) or primitives, so we // just set the whole thing if (vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2) { (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.set)(newState, key, subPatch); } else { newState[key] = subPatch; } } } return newState; } /** * Creates an _accept_ function to pass to `import.meta.hot` in Vite applications. * * @example * ```js * const useUser = defineStore(...) * if (import.meta.hot) { * import.meta.hot.accept(acceptHMRUpdate(useUser, import.meta.hot)) * } * ``` * * @param initialUseStore - return of the defineStore to hot update * @param hot - `import.meta.hot` */ function acceptHMRUpdate(initialUseStore, hot) { // strip as much as possible from iife.prod if (false) {} return (newModule) => { const pinia = hot.data.pinia || initialUseStore._pinia; if (!pinia) { // this store is still not used return; } // preserve the pinia instance across loads hot.data.pinia = pinia; // console.log('got data', newStore) for (const exportName in newModule) { const useStore = newModule[exportName]; // console.log('checking for', exportName) if (isUseStore(useStore) && pinia._s.has(useStore.$id)) { // console.log('Accepting update for', useStore.$id) const id = useStore.$id; if (id !== initialUseStore.$id) { console.warn(`The id of the store changed from "${initialUseStore.$id}" to "${id}". Reloading.`); // return import.meta.hot.invalidate() return hot.invalidate(); } const existingStore = pinia._s.get(id); if (!existingStore) { console.log(`[Pinia]: skipping hmr because store doesn't exist yet`); return; } useStore(pinia, existingStore); } } }; } const noop = () => { }; function addSubscription(subscriptions, callback, detached, onCleanup = noop) { subscriptions.push(callback); const removeSubscription = () => { const idx = subscriptions.indexOf(callback); if (idx > -1) { subscriptions.splice(idx, 1); onCleanup(); } }; if (!detached && (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)()) { (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.onScopeDispose)(removeSubscription); } return removeSubscription; } function triggerSubscriptions(subscriptions, ...args) { subscriptions.slice().forEach((callback) => { callback(...args); }); } const fallbackRunWithContext = (fn) => fn(); function mergeReactiveObjects(target, patchToApply) { // Handle Map instances if (target instanceof Map && patchToApply instanceof Map) { patchToApply.forEach((value, key) => target.set(key, value)); } // Handle Set instances if (target instanceof Set && patchToApply instanceof Set) { patchToApply.forEach(target.add, target); } // no need to go through symbols because they cannot be serialized anyway for (const key in patchToApply) { if (!patchToApply.hasOwnProperty(key)) continue; const subPatch = patchToApply[key]; const targetValue = target[key]; if (isPlainObject(targetValue) && isPlainObject(subPatch) && target.hasOwnProperty(key) && !(0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.isRef)(subPatch) && !(0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.isReactive)(subPatch)) { // NOTE: here I wanted to warn about inconsistent types but it's not possible because in setup stores one might // start the value of a property as a certain type e.g. a Map, and then for some reason, during SSR, change that // to `undefined`. When trying to hydrate, we want to override the Map with `undefined`. target[key] = mergeReactiveObjects(targetValue, subPatch); } else { // @ts-expect-error: subPatch is a valid value target[key] = subPatch; } } return target; } const skipHydrateSymbol = ( true) ? Symbol('pinia:skipHydration') : /* istanbul ignore next */ 0; const skipHydrateMap = /*#__PURE__*/ new WeakMap(); /** * Tells Pinia to skip the hydration process of a given object. This is useful in setup stores (only) when you return a * stateful object in the store but it isn't really state. e.g. returning a router instance in a setup store. * * @param obj - target object * @returns obj */ function skipHydrate(obj) { return vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2 ? // in @vue/composition-api, the refs are sealed so defineProperty doesn't work... /* istanbul ignore next */ skipHydrateMap.set(obj, 1) && obj : Object.defineProperty(obj, skipHydrateSymbol, {}); } /** * Returns whether a value should be hydrated * * @param obj - target variable * @returns true if `obj` should be hydrated */ function shouldHydrate(obj) { return vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2 ? /* istanbul ignore next */ !skipHydrateMap.has(obj) : !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol); } const { assign } = Object; function isComputed(o) { return !!((0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.isRef)(o) && o.effect); } function createOptionsStore(id, options, pinia, hot) { const { state, actions, getters } = options; const initialState = pinia.state.value[id]; let store; function setup() { if (!initialState && ( false || !hot)) { /* istanbul ignore if */ if (vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2) { (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.set)(pinia.state.value, id, state ? state() : {}); } else { pinia.state.value[id] = state ? state() : {}; } } // avoid creating a state in pinia.state.value const localState = ( true) && hot ? // use ref() to unwrap refs inside state TODO: check if this is still necessary (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.toRefs)((0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.ref)(state ? state() : {}).value) : (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.toRefs)(pinia.state.value[id]); return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => { if (( true) && name in localState) { console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with "${name}" in store "${id}".`); } computedGetters[name] = (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.markRaw)((0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.computed)(() => { setActivePinia(pinia); // it was created just before const store = pinia._s.get(id); // allow cross using stores /* istanbul ignore next */ if (vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2 && !store._r) return; // @ts-expect-error // return getters![name].call(context, context) // TODO: avoid reading the getter while assigning with a global variable return getters[name].call(store, store); })); return computedGetters; }, {})); } store = createSetupStore(id, setup, options, pinia, hot, true); return store; } function createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) { let scope; const optionsForPlugin = assign({ actions: {} }, options); /* istanbul ignore if */ if (( true) && !pinia._e.active) { throw new Error('Pinia destroyed'); } // watcher options for $subscribe const $subscribeOptions = { deep: true, // flush: 'post', }; /* istanbul ignore else */ if (( true) && !vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2) { $subscribeOptions.onTrigger = (event) => { /* istanbul ignore else */ if (isListening) { debuggerEvents = event; // avoid triggering this while the store is being built and the state is being set in pinia } else if (isListening == false && !store._hotUpdating) { // let patch send all the events together later /* istanbul ignore else */ if (Array.isArray(debuggerEvents)) { debuggerEvents.push(event); } else { console.error('🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.'); } } }; } // internal state let isListening; // set to true at the end let isSyncListening; // set to true at the end let subscriptions = []; let actionSubscriptions = []; let debuggerEvents; const initialState = pinia.state.value[$id]; // avoid setting the state for option stores if it is set // by the setup if (!isOptionsStore && !initialState && ( false || !hot)) { /* istanbul ignore if */ if (vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2) { (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.set)(pinia.state.value, $id, {}); } else { pinia.state.value[$id] = {}; } } const hotState = (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.ref)({}); // avoid triggering too many listeners // https://github.com/vuejs/pinia/issues/1129 let activeListener; function $patch(partialStateOrMutator) { let subscriptionMutation; isListening = isSyncListening = false; // reset the debugger events since patches are sync /* istanbul ignore else */ if ((true)) { debuggerEvents = []; } if (typeof partialStateOrMutator === 'function') { partialStateOrMutator(pinia.state.value[$id]); subscriptionMutation = { type: MutationType.patchFunction, storeId: $id, events: debuggerEvents, }; } else { mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator); subscriptionMutation = { type: MutationType.patchObject, payload: partialStateOrMutator, storeId: $id, events: debuggerEvents, }; } const myListenerId = (activeListener = Symbol()); (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.nextTick)().then(() => { if (activeListener === myListenerId) { isListening = true; } }); isSyncListening = true; // because we paused the watcher, we need to manually call the subscriptions triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]); } const $reset = isOptionsStore ? function $reset() { const { state } = options; const newState = state ? state() : {}; // we use a patch to group all changes into one single subscription this.$patch(($state) => { assign($state, newState); }); } : /* istanbul ignore next */ ( true) ? () => { throw new Error(`🍍: Store "${$id}" is built using the setup syntax and does not implement $reset().`); } : 0; function $dispose() { scope.stop(); subscriptions = []; actionSubscriptions = []; pinia._s.delete($id); } /** * Wraps an action to handle subscriptions. * * @param name - name of the action * @param action - action to wrap * @returns a wrapped action to handle subscriptions */ function wrapAction(name, action) { return function () { setActivePinia(pinia); const args = Array.from(arguments); const afterCallbackList = []; const onErrorCallbackList = []; function after(callback) { afterCallbackList.push(callback); } function onError(callback) { onErrorCallbackList.push(callback); } // @ts-expect-error triggerSubscriptions(actionSubscriptions, { args, name, store, after, onError, }); let ret; try { ret = action.apply(this && this.$id === $id ? this : store, args); // handle sync errors } catch (error) { triggerSubscriptions(onErrorCallbackList, error); throw error; } if (ret instanceof Promise) { return ret .then((value) => { triggerSubscriptions(afterCallbackList, value); return value; }) .catch((error) => { triggerSubscriptions(onErrorCallbackList, error); return Promise.reject(error); }); } // trigger after callbacks triggerSubscriptions(afterCallbackList, ret); return ret; }; } const _hmrPayload = /*#__PURE__*/ (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.markRaw)({ actions: {}, getters: {}, state: [], hotState, }); const partialStore = { _p: pinia, // _s: scope, $id, $onAction: addSubscription.bind(null, actionSubscriptions), $patch, $reset, $subscribe(callback, options = {}) { const removeSubscription = addSubscription(subscriptions, callback, options.detached, () => stopWatcher()); const stopWatcher = scope.run(() => (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.watch)(() => pinia.state.value[$id], (state) => { if (options.flush === 'sync' ? isSyncListening : isListening) { callback({ storeId: $id, type: MutationType.direct, events: debuggerEvents, }, state); } }, assign({}, $subscribeOptions, options))); return removeSubscription; }, $dispose, }; /* istanbul ignore if */ if (vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2) { // start as non ready partialStore._r = false; } const store = (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.reactive)( true ? assign({ _hmrPayload, _customProperties: (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.markRaw)(new Set()), // devtools custom properties }, partialStore // must be added later // setupStore ) : 0); // store the partial store now so the setup of stores can instantiate each other before they are finished without // creating infinite loops. pinia._s.set($id, store); const runWithContext = (pinia._a && pinia._a.runWithContext) || fallbackRunWithContext; // TODO: idea create skipSerialize that marks properties as non serializable and they are skipped const setupStore = runWithContext(() => pinia._e.run(() => (scope = (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.effectScope)()).run(setup))); // overwrite existing actions to support $onAction for (const key in setupStore) { const prop = setupStore[key]; if (((0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.isRef)(prop) && !isComputed(prop)) || (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.isReactive)(prop)) { // mark it as a piece of state to be serialized if (( true) && hot) { (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.set)(hotState.value, key, (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.toRef)(setupStore, key)); // createOptionStore directly sets the state in pinia.state.value so we // can just skip that } else if (!isOptionsStore) { // in setup stores we must hydrate the state and sync pinia state tree with the refs the user just created if (initialState && shouldHydrate(prop)) { if ((0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.isRef)(prop)) { prop.value = initialState[key]; } else { // probably a reactive object, lets recursively assign // @ts-expect-error: prop is unknown mergeReactiveObjects(prop, initialState[key]); } } // transfer the ref to the pinia state to keep everything in sync /* istanbul ignore if */ if (vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2) { (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.set)(pinia.state.value[$id], key, prop); } else { pinia.state.value[$id][key] = prop; } } /* istanbul ignore else */ if ((true)) { _hmrPayload.state.push(key); } // action } else if (typeof prop === 'function') { // @ts-expect-error: we are overriding the function we avoid wrapping if const actionValue = ( true) && hot ? prop : wrapAction(key, prop); // this a hot module replacement store because the hotUpdate method needs // to do it with the right context /* istanbul ignore if */ if (vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2) { (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.set)(setupStore, key, actionValue); } else { // @ts-expect-error setupStore[key] = actionValue; } /* istanbul ignore else */ if ((true)) { _hmrPayload.actions[key] = prop; } // list actions so they can be used in plugins // @ts-expect-error optionsForPlugin.actions[key] = prop; } else if ((true)) { // add getters for devtools if (isComputed(prop)) { _hmrPayload.getters[key] = isOptionsStore ? // @ts-expect-error options.getters[key] : prop; if (IS_CLIENT) { const getters = setupStore._getters || // @ts-expect-error: same (setupStore._getters = (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.markRaw)([])); getters.push(key); } } } } // add the state, getters, and action properties /* istanbul ignore if */ if (vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2) { Object.keys(setupStore).forEach((key) => { (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.set)(store, key, setupStore[key]); }); } else { assign(store, setupStore); // allows retrieving reactive objects with `storeToRefs()`. Must be called after assigning to the reactive object. // Make `storeToRefs()` work with `reactive()` #799 assign((0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.toRaw)(store), setupStore); } // use this instead of a computed with setter to be able to create it anywhere // without linking the computed lifespan to wherever the store is first // created. Object.defineProperty(store, '$state', { get: () => (( true) && hot ? hotState.value : pinia.state.value[$id]), set: (state) => { /* istanbul ignore if */ if (( true) && hot) { throw new Error('cannot set hotState'); } $patch(($state) => { assign($state, state); }); }, }); // add the hotUpdate before plugins to allow them to override it /* istanbul ignore else */ if ((true)) { store._hotUpdate = (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.markRaw)((newStore) => { store._hotUpdating = true; newStore._hmrPayload.state.forEach((stateKey) => { if (stateKey in store.$state) { const newStateTarget = newStore.$state[stateKey]; const oldStateSource = store.$state[stateKey]; if (typeof newStateTarget === 'object' && isPlainObject(newStateTarget) && isPlainObject(oldStateSource)) { patchObject(newStateTarget, oldStateSource); } else { // transfer the ref newStore.$state[stateKey] = oldStateSource; } } // patch direct access properties to allow store.stateProperty to work as // store.$state.stateProperty (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.set)(store, stateKey, (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.toRef)(newStore.$state, stateKey)); }); // remove deleted state properties Object.keys(store.$state).forEach((stateKey) => { if (!(stateKey in newStore.$state)) { (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.del)(store, stateKey); } }); // avoid devtools logging this as a mutation isListening = false; isSyncListening = false; pinia.state.value[$id] = (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.toRef)(newStore._hmrPayload, 'hotState'); isSyncListening = true; (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.nextTick)().then(() => { isListening = true; }); for (const actionName in newStore._hmrPayload.actions) { const action = newStore[actionName]; (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.set)(store, actionName, wrapAction(actionName, action)); } // TODO: does this work in both setup and option store? for (const getterName in newStore._hmrPayload.getters) { const getter = newStore._hmrPayload.getters[getterName]; const getterValue = isOptionsStore ? // special handling of options api (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.computed)(() => { setActivePinia(pinia); return getter.call(store, store); }) : getter; (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.set)(store, getterName, getterValue); } // remove deleted getters Object.keys(store._hmrPayload.getters).forEach((key) => { if (!(key in newStore._hmrPayload.getters)) { (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.del)(store, key); } }); // remove old actions Object.keys(store._hmrPayload.actions).forEach((key) => { if (!(key in newStore._hmrPayload.actions)) { (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.del)(store, key); } }); // update the values used in devtools and to allow deleting new properties later on store._hmrPayload = newStore._hmrPayload; store._getters = newStore._getters; store._hotUpdating = false; }); } if (USE_DEVTOOLS) { const nonEnumerable = { writable: true, configurable: true, // avoid warning on devtools trying to display this property enumerable: false, }; ['_p', '_hmrPayload', '_getters', '_customProperties'].forEach((p) => { Object.defineProperty(store, p, assign({ value: store[p] }, nonEnumerable)); }); } /* istanbul ignore if */ if (vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2) { // mark the store as ready before plugins store._r = true; } // apply all plugins pinia._p.forEach((extender) => { /* istanbul ignore else */ if (USE_DEVTOOLS) { const extensions = scope.run(() => extender({ store, app: pinia._a, pinia, options: optionsForPlugin, })); Object.keys(extensions || {}).forEach((key) => store._customProperties.add(key)); assign(store, extensions); } else { assign(store, scope.run(() => extender({ store, app: pinia._a, pinia, options: optionsForPlugin, }))); } }); if (( true) && store.$state && typeof store.$state === 'object' && typeof store.$state.constructor === 'function' && !store.$state.constructor.toString().includes('[native code]')) { console.warn(`[🍍]: The "state" must be a plain object. It cannot be\n` + `\tstate: () => new MyClass()\n` + `Found in store "${store.$id}".`); } // only apply hydrate to option stores with an initial state in pinia if (initialState && isOptionsStore && options.hydrate) { options.hydrate(store.$state, initialState); } isListening = true; isSyncListening = true; return store; } function defineStore( // TODO: add proper types from above idOrOptions, setup, setupOptions) { let id; let options; const isSetupStore = typeof setup === 'function'; if (typeof idOrOptions === 'string') { id = idOrOptions; // the option store setup will contain the actual options in this case options = isSetupStore ? setupOptions : setup; } else { options = idOrOptions; id = idOrOptions.id; if (( true) && typeof id !== 'string') { throw new Error(`[🍍]: "defineStore()" must be passed a store id as its first argument.`); } } function useStore(pinia, hot) { const hasContext = (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.hasInjectionContext)(); pinia = // in test mode, ignore the argument provided as we can always retrieve a // pinia instance with getActivePinia() ( false ? 0 : pinia) || (hasContext ? (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.inject)(piniaSymbol, null) : null); if (pinia) setActivePinia(pinia); if (( true) && !activePinia) { throw new Error(`[🍍]: "getActivePinia()" was called but there was no active Pinia. Are you trying to use a store before calling "app.use(pinia)"?\n` + `See https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help.\n` + `This will fail in production.`); } pinia = activePinia; if (!pinia._s.has(id)) { // creating the store registers it in `pinia._s` if (isSetupStore) { createSetupStore(id, setup, options, pinia); } else { createOptionsStore(id, options, pinia); } /* istanbul ignore else */ if ((true)) { // @ts-expect-error: not the right inferred type useStore._pinia = pinia; } } const store = pinia._s.get(id); if (( true) && hot) { const hotId = '__hot:' + id; const newStore = isSetupStore ? createSetupStore(hotId, setup, options, pinia, true) : createOptionsStore(hotId, assign({}, options), pinia, true); hot._hotUpdate(newStore); // cleanup the state properties and the store from the cache delete pinia.state.value[hotId]; pinia._s.delete(hotId); } if (( true) && IS_CLIENT) { const currentInstance = (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.getCurrentInstance)(); // save stores in instances to access them devtools if (currentInstance && currentInstance.proxy && // avoid adding stores that are just built for hot module replacement !hot) { const vm = currentInstance.proxy; const cache = '_pStores' in vm ? vm._pStores : (vm._pStores = {}); cache[id] = store; } } // StoreGeneric cannot be casted towards Store return store; } useStore.$id = id; return useStore; } let mapStoreSuffix = 'Store'; /** * Changes the suffix added by `mapStores()`. Can be set to an empty string. * Defaults to `"Store"`. Make sure to extend the MapStoresCustomization * interface if you are using TypeScript. * * @param suffix - new suffix */ function setMapStoreSuffix(suffix // could be 'Store' but that would be annoying for JS ) { mapStoreSuffix = suffix; } /** * Allows using stores without the composition API (`setup()`) by generating an * object to be spread in the `computed` field of a component. It accepts a list * of store definitions. * * @example * ```js * export default { * computed: { * // other computed properties * ...mapStores(useUserStore, useCartStore) * }, * * created() { * this.userStore // store with id "user" * this.cartStore // store with id "cart" * } * } * ``` * * @param stores - list of stores to map to an object */ function mapStores(...stores) { if (( true) && Array.isArray(stores[0])) { console.warn(`[🍍]: Directly pass all stores to "mapStores()" without putting them in an array:\n` + `Replace\n` + `\tmapStores([useAuthStore, useCartStore])\n` + `with\n` + `\tmapStores(useAuthStore, useCartStore)\n` + `This will fail in production if not fixed.`); stores = stores[0]; } return stores.reduce((reduced, useStore) => { // @ts-expect-error: $id is added by defineStore reduced[useStore.$id + mapStoreSuffix] = function () { return useStore(this.$pinia); }; return reduced; }, {}); } /** * Allows using state and getters from one store without using the composition * API (`setup()`) by generating an object to be spread in the `computed` field * of a component. * * @param useStore - store to map from * @param keysOrMapper - array or object */ function mapState(useStore, keysOrMapper) { return Array.isArray(keysOrMapper) ? keysOrMapper.reduce((reduced, key) => { reduced[key] = function () { return useStore(this.$pinia)[key]; }; return reduced; }, {}) : Object.keys(keysOrMapper).reduce((reduced, key) => { // @ts-expect-error reduced[key] = function () { const store = useStore(this.$pinia); const storeKey = keysOrMapper[key]; // for some reason TS is unable to infer the type of storeKey to be a // function return typeof storeKey === 'function' ? storeKey.call(this, store) : store[storeKey]; }; return reduced; }, {}); } /** * Alias for `mapState()`. You should use `mapState()` instead. * @deprecated use `mapState()` instead. */ const mapGetters = mapState; /** * Allows directly using actions from your store without using the composition * API (`setup()`) by generating an object to be spread in the `methods` field * of a component. * * @param useStore - store to map from * @param keysOrMapper - array or object */ function mapActions(useStore, keysOrMapper) { return Array.isArray(keysOrMapper) ? keysOrMapper.reduce((reduced, key) => { // @ts-expect-error reduced[key] = function (...args) { return useStore(this.$pinia)[key](...args); }; return reduced; }, {}) : Object.keys(keysOrMapper).reduce((reduced, key) => { // @ts-expect-error reduced[key] = function (...args) { return useStore(this.$pinia)[keysOrMapper[key]](...args); }; return reduced; }, {}); } /** * Allows using state and getters from one store without using the composition * API (`setup()`) by generating an object to be spread in the `computed` field * of a component. * * @param useStore - store to map from * @param keysOrMapper - array or object */ function mapWritableState(useStore, keysOrMapper) { return Array.isArray(keysOrMapper) ? keysOrMapper.reduce((reduced, key) => { // @ts-ignore reduced[key] = { get() { return useStore(this.$pinia)[key]; }, set(value) { // it's easier to type it here as any return (useStore(this.$pinia)[key] = value); }, }; return reduced; }, {}) : Object.keys(keysOrMapper).reduce((reduced, key) => { // @ts-ignore reduced[key] = { get() { return useStore(this.$pinia)[keysOrMapper[key]]; }, set(value) { // it's easier to type it here as any return (useStore(this.$pinia)[keysOrMapper[key]] = value); }, }; return reduced; }, {}); } /** * Creates an object of references with all the state, getters, and plugin-added * state properties of the store. Similar to `toRefs()` but specifically * designed for Pinia stores so methods and non reactive properties are * completely ignored. * * @param store - store to extract the refs from */ function storeToRefs(store) { // See https://github.com/vuejs/pinia/issues/852 // It's easier to just use toRefs() even if it includes more stuff if (vue_demi__WEBPACK_IMPORTED_MODULE_0__.isVue2) { // @ts-expect-error: toRefs include methods and others return (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.toRefs)(store); } else { store = (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.toRaw)(store); const refs = {}; for (const key in store) { const value = store[key]; if ((0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.isRef)(value) || (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.isReactive)(value)) { // @ts-expect-error: the key is state or getter refs[key] = // --- (0,vue_demi__WEBPACK_IMPORTED_MODULE_0__.toRef)(store, key); } } return refs; } } /** * Vue 2 Plugin that must be installed for pinia to work. Note **you don't need * this plugin if you are using Nuxt.js**. Use the `buildModule` instead: * https://pinia.vuejs.org/ssr/nuxt.html. * * @example * ```js * import Vue from 'vue' * import { PiniaVuePlugin, createPinia } from 'pinia' * * Vue.use(PiniaVuePlugin) * const pinia = createPinia() * * new Vue({ * el: '#app', * // ... * pinia, * }) * ``` * * @param _Vue - `Vue` imported from 'vue'. */ const PiniaVuePlugin = function (_Vue) { // Equivalent of // app.config.globalProperties.$pinia = pinia _Vue.mixin({ beforeCreate() { const options = this.$options; if (options.pinia) { const pinia = options.pinia; // HACK: taken from provide(): https://github.com/vuejs/composition-api/blob/main/src/apis/inject.ts#L31 /* istanbul ignore else */ if (!this._provided) { const provideCache = {}; Object.defineProperty(this, '_provided', { get: () => provideCache, set: (v) => Object.assign(provideCache, v), }); } this._provided[piniaSymbol] = pinia; // propagate the pinia instance in an SSR friendly way // avoid adding it to nuxt twice /* istanbul ignore else */ if (!this.$pinia) { this.$pinia = pinia; } pinia._a = this; if (IS_CLIENT) { // this allows calling useStore() outside of a component setup after // installing pinia's plugin setActivePinia(pinia); } if (USE_DEVTOOLS) { registerPiniaDevtools(pinia._a, pinia); } } else if (!this.$pinia && options.parent && options.parent.$pinia) { this.$pinia = options.parent.$pinia; } }, destroyed() { delete this._pStores; }, }); }; /***/ }), /***/ "./node_modules/pinia/node_modules/vue-demi/lib/index.mjs": /*!****************************************************************!*\ !*** ./node_modules/pinia/node_modules/vue-demi/lib/index.mjs ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ EffectScope: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.EffectScope), /* harmony export */ Fragment: () => (/* binding */ Fragment), /* harmony export */ KeepAlive: () => (/* binding */ KeepAlive), /* harmony export */ Suspense: () => (/* binding */ Suspense), /* harmony export */ Teleport: () => (/* binding */ Teleport), /* harmony export */ Transition: () => (/* binding */ Transition), /* harmony export */ TransitionGroup: () => (/* binding */ TransitionGroup), /* harmony export */ Vue: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__["default"]), /* harmony export */ Vue2: () => (/* binding */ Vue2), /* harmony export */ computed: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.computed), /* harmony export */ createApp: () => (/* binding */ createApp), /* harmony export */ customRef: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.customRef), /* harmony export */ defineAsyncComponent: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.defineAsyncComponent), /* harmony export */ defineComponent: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.defineComponent), /* harmony export */ del: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.del), /* harmony export */ effectScope: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.effectScope), /* harmony export */ getCurrentInstance: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.getCurrentInstance), /* harmony export */ getCurrentScope: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope), /* harmony export */ h: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.h), /* harmony export */ hasInjectionContext: () => (/* binding */ hasInjectionContext), /* harmony export */ inject: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.inject), /* harmony export */ install: () => (/* binding */ install), /* harmony export */ isProxy: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.isProxy), /* harmony export */ isReactive: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.isReactive), /* harmony export */ isReadonly: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.isReadonly), /* harmony export */ isRef: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.isRef), /* harmony export */ isShallow: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.isShallow), /* harmony export */ isVue2: () => (/* binding */ isVue2), /* harmony export */ isVue3: () => (/* binding */ isVue3), /* harmony export */ markRaw: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.markRaw), /* harmony export */ mergeDefaults: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.mergeDefaults), /* harmony export */ nextTick: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.nextTick), /* harmony export */ onActivated: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.onActivated), /* harmony export */ onBeforeMount: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.onBeforeMount), /* harmony export */ onBeforeUnmount: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.onBeforeUnmount), /* harmony export */ onBeforeUpdate: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.onBeforeUpdate), /* harmony export */ onDeactivated: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.onDeactivated), /* harmony export */ onErrorCaptured: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.onErrorCaptured), /* harmony export */ onMounted: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.onMounted), /* harmony export */ onRenderTracked: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.onRenderTracked), /* harmony export */ onRenderTriggered: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.onRenderTriggered), /* harmony export */ onScopeDispose: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.onScopeDispose), /* harmony export */ onServerPrefetch: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.onServerPrefetch), /* harmony export */ onUnmounted: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.onUnmounted), /* harmony export */ onUpdated: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.onUpdated), /* harmony export */ provide: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.provide), /* harmony export */ proxyRefs: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.proxyRefs), /* harmony export */ reactive: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.reactive), /* harmony export */ readonly: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.readonly), /* harmony export */ ref: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.ref), /* harmony export */ set: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.set), /* harmony export */ shallowReactive: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.shallowReactive), /* harmony export */ shallowReadonly: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.shallowReadonly), /* harmony export */ shallowRef: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.shallowRef), /* harmony export */ toRaw: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.toRaw), /* harmony export */ toRef: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.toRef), /* harmony export */ toRefs: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.toRefs), /* harmony export */ triggerRef: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.triggerRef), /* harmony export */ unref: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.unref), /* harmony export */ useAttrs: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.useAttrs), /* harmony export */ useCssModule: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.useCssModule), /* harmony export */ useCssVars: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.useCssVars), /* harmony export */ useListeners: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.useListeners), /* harmony export */ useSlots: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.useSlots), /* harmony export */ version: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.version), /* harmony export */ warn: () => (/* binding */ warn), /* harmony export */ watch: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.watch), /* harmony export */ watchEffect: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.watchEffect), /* harmony export */ watchPostEffect: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.watchPostEffect), /* harmony export */ watchSyncEffect: () => (/* reexport safe */ vue__WEBPACK_IMPORTED_MODULE_0__.watchSyncEffect) /* harmony export */ }); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); var isVue2 = true var isVue3 = false var Vue2 = vue__WEBPACK_IMPORTED_MODULE_0__["default"] var warn = vue__WEBPACK_IMPORTED_MODULE_0__["default"].util.warn function install() {} // createApp polyfill function createApp(rootComponent, rootProps) { var vm var provide = {} var app = { config: vue__WEBPACK_IMPORTED_MODULE_0__["default"].config, use: vue__WEBPACK_IMPORTED_MODULE_0__["default"].use.bind(vue__WEBPACK_IMPORTED_MODULE_0__["default"]), mixin: vue__WEBPACK_IMPORTED_MODULE_0__["default"].mixin.bind(vue__WEBPACK_IMPORTED_MODULE_0__["default"]), component: vue__WEBPACK_IMPORTED_MODULE_0__["default"].component.bind(vue__WEBPACK_IMPORTED_MODULE_0__["default"]), provide: function (key, value) { provide[key] = value return this }, directive: function (name, dir) { if (dir) { vue__WEBPACK_IMPORTED_MODULE_0__["default"].directive(name, dir) return app } else { return vue__WEBPACK_IMPORTED_MODULE_0__["default"].directive(name) } }, mount: function (el, hydrating) { if (!vm) { vm = new vue__WEBPACK_IMPORTED_MODULE_0__["default"](Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) })) vm.$mount(el, hydrating) return vm } else { return vm } }, unmount: function () { if (vm) { vm.$destroy() vm = undefined } }, } return app } // Vue 3 components mock function createMockComponent(name) { return { setup() { throw new Error('[vue-demi] ' + name + ' is not supported in Vue 2. It\'s provided to avoid compiler errors.') } } } var Fragment = /*#__PURE__*/ createMockComponent('Fragment') var Transition = /*#__PURE__*/ createMockComponent('Transition') var TransitionGroup = /*#__PURE__*/ createMockComponent('TransitionGroup') var Teleport = /*#__PURE__*/ createMockComponent('Teleport') var Suspense = /*#__PURE__*/ createMockComponent('Suspense') var KeepAlive = /*#__PURE__*/ createMockComponent('KeepAlive') // Not implemented https://github.com/vuejs/core/pull/8111, falls back to getCurrentInstance() function hasInjectionContext() { return !!(0,vue__WEBPACK_IMPORTED_MODULE_0__.getCurrentInstance)() } /***/ }), /***/ "./node_modules/property-information/index.js": /*!****************************************************!*\ !*** ./node_modules/property-information/index.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ find: () => (/* reexport safe */ _lib_find_js__WEBPACK_IMPORTED_MODULE_0__.find), /* harmony export */ hastToReact: () => (/* reexport safe */ _lib_hast_to_react_js__WEBPACK_IMPORTED_MODULE_1__.hastToReact), /* harmony export */ html: () => (/* binding */ html), /* harmony export */ normalize: () => (/* reexport safe */ _lib_normalize_js__WEBPACK_IMPORTED_MODULE_2__.normalize), /* harmony export */ svg: () => (/* binding */ svg) /* harmony export */ }); /* harmony import */ var _lib_util_merge_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/util/merge.js */ "./node_modules/property-information/lib/util/merge.js"); /* harmony import */ var _lib_xlink_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/xlink.js */ "./node_modules/property-information/lib/xlink.js"); /* harmony import */ var _lib_xml_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/xml.js */ "./node_modules/property-information/lib/xml.js"); /* harmony import */ var _lib_xmlns_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/xmlns.js */ "./node_modules/property-information/lib/xmlns.js"); /* harmony import */ var _lib_aria_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lib/aria.js */ "./node_modules/property-information/lib/aria.js"); /* harmony import */ var _lib_html_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./lib/html.js */ "./node_modules/property-information/lib/html.js"); /* harmony import */ var _lib_svg_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./lib/svg.js */ "./node_modules/property-information/lib/svg.js"); /* harmony import */ var _lib_find_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/find.js */ "./node_modules/property-information/lib/find.js"); /* harmony import */ var _lib_hast_to_react_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/hast-to-react.js */ "./node_modules/property-information/lib/hast-to-react.js"); /* harmony import */ var _lib_normalize_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/normalize.js */ "./node_modules/property-information/lib/normalize.js"); /** * @typedef {import('./lib/util/info.js').Info} Info * @typedef {import('./lib/util/schema.js').Schema} Schema */ const html = (0,_lib_util_merge_js__WEBPACK_IMPORTED_MODULE_3__.merge)([_lib_xml_js__WEBPACK_IMPORTED_MODULE_4__.xml, _lib_xlink_js__WEBPACK_IMPORTED_MODULE_5__.xlink, _lib_xmlns_js__WEBPACK_IMPORTED_MODULE_6__.xmlns, _lib_aria_js__WEBPACK_IMPORTED_MODULE_7__.aria, _lib_html_js__WEBPACK_IMPORTED_MODULE_8__.html], 'html') const svg = (0,_lib_util_merge_js__WEBPACK_IMPORTED_MODULE_3__.merge)([_lib_xml_js__WEBPACK_IMPORTED_MODULE_4__.xml, _lib_xlink_js__WEBPACK_IMPORTED_MODULE_5__.xlink, _lib_xmlns_js__WEBPACK_IMPORTED_MODULE_6__.xmlns, _lib_aria_js__WEBPACK_IMPORTED_MODULE_7__.aria, _lib_svg_js__WEBPACK_IMPORTED_MODULE_9__.svg], 'svg') /***/ }), /***/ "./node_modules/property-information/lib/aria.js": /*!*******************************************************!*\ !*** ./node_modules/property-information/lib/aria.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ aria: () => (/* binding */ aria) /* harmony export */ }); /* harmony import */ var _util_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/types.js */ "./node_modules/property-information/lib/util/types.js"); /* harmony import */ var _util_create_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util/create.js */ "./node_modules/property-information/lib/util/create.js"); const aria = (0,_util_create_js__WEBPACK_IMPORTED_MODULE_0__.create)({ transform(_, prop) { return prop === 'role' ? prop : 'aria-' + prop.slice(4).toLowerCase() }, properties: { ariaActiveDescendant: null, ariaAtomic: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.booleanish, ariaAutoComplete: null, ariaBusy: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.booleanish, ariaChecked: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.booleanish, ariaColCount: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.number, ariaColIndex: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.number, ariaColSpan: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.number, ariaControls: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.spaceSeparated, ariaCurrent: null, ariaDescribedBy: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.spaceSeparated, ariaDetails: null, ariaDisabled: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.booleanish, ariaDropEffect: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.spaceSeparated, ariaErrorMessage: null, ariaExpanded: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.booleanish, ariaFlowTo: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.spaceSeparated, ariaGrabbed: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.booleanish, ariaHasPopup: null, ariaHidden: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.booleanish, ariaInvalid: null, ariaKeyShortcuts: null, ariaLabel: null, ariaLabelledBy: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.spaceSeparated, ariaLevel: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.number, ariaLive: null, ariaModal: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.booleanish, ariaMultiLine: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.booleanish, ariaMultiSelectable: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.booleanish, ariaOrientation: null, ariaOwns: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.spaceSeparated, ariaPlaceholder: null, ariaPosInSet: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.number, ariaPressed: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.booleanish, ariaReadOnly: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.booleanish, ariaRelevant: null, ariaRequired: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.booleanish, ariaRoleDescription: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.spaceSeparated, ariaRowCount: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.number, ariaRowIndex: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.number, ariaRowSpan: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.number, ariaSelected: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.booleanish, ariaSetSize: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.number, ariaSort: null, ariaValueMax: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.number, ariaValueMin: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.number, ariaValueNow: _util_types_js__WEBPACK_IMPORTED_MODULE_1__.number, ariaValueText: null, role: null } }) /***/ }), /***/ "./node_modules/property-information/lib/find.js": /*!*******************************************************!*\ !*** ./node_modules/property-information/lib/find.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ find: () => (/* binding */ find) /* harmony export */ }); /* harmony import */ var _normalize_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./normalize.js */ "./node_modules/property-information/lib/normalize.js"); /* harmony import */ var _util_defined_info_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/defined-info.js */ "./node_modules/property-information/lib/util/defined-info.js"); /* harmony import */ var _util_info_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/info.js */ "./node_modules/property-information/lib/util/info.js"); /** * @typedef {import('./util/schema.js').Schema} Schema */ const valid = /^data[-\w.:]+$/i const dash = /-[a-z]/g const cap = /[A-Z]/g /** * @param {Schema} schema * @param {string} value * @returns {Info} */ function find(schema, value) { const normal = (0,_normalize_js__WEBPACK_IMPORTED_MODULE_0__.normalize)(value) let prop = value let Type = _util_info_js__WEBPACK_IMPORTED_MODULE_1__.Info if (normal in schema.normal) { return schema.property[schema.normal[normal]] } if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) { // Attribute or property. if (value.charAt(4) === '-') { // Turn it into a property. const rest = value.slice(5).replace(dash, camelcase) prop = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1) } else { // Turn it into an attribute. const rest = value.slice(4) if (!dash.test(rest)) { let dashes = rest.replace(cap, kebab) if (dashes.charAt(0) !== '-') { dashes = '-' + dashes } value = 'data' + dashes } } Type = _util_defined_info_js__WEBPACK_IMPORTED_MODULE_2__.DefinedInfo } return new Type(prop, value) } /** * @param {string} $0 * @returns {string} */ function kebab($0) { return '-' + $0.toLowerCase() } /** * @param {string} $0 * @returns {string} */ function camelcase($0) { return $0.charAt(1).toUpperCase() } /***/ }), /***/ "./node_modules/property-information/lib/hast-to-react.js": /*!****************************************************************!*\ !*** ./node_modules/property-information/lib/hast-to-react.js ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ hastToReact: () => (/* binding */ hastToReact) /* harmony export */ }); /** * `hast` is close to `React`, but differs in a couple of cases. * * To get a React property from a hast property, check if it is in * `hastToReact`, if it is, then use the corresponding value, * otherwise, use the hast property. * * @type {Record} */ const hastToReact = { classId: 'classID', dataType: 'datatype', itemId: 'itemID', strokeDashArray: 'strokeDasharray', strokeDashOffset: 'strokeDashoffset', strokeLineCap: 'strokeLinecap', strokeLineJoin: 'strokeLinejoin', strokeMiterLimit: 'strokeMiterlimit', typeOf: 'typeof', xLinkActuate: 'xlinkActuate', xLinkArcRole: 'xlinkArcrole', xLinkHref: 'xlinkHref', xLinkRole: 'xlinkRole', xLinkShow: 'xlinkShow', xLinkTitle: 'xlinkTitle', xLinkType: 'xlinkType', xmlnsXLink: 'xmlnsXlink' } /***/ }), /***/ "./node_modules/property-information/lib/html.js": /*!*******************************************************!*\ !*** ./node_modules/property-information/lib/html.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ html: () => (/* binding */ html) /* harmony export */ }); /* harmony import */ var _util_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/types.js */ "./node_modules/property-information/lib/util/types.js"); /* harmony import */ var _util_create_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util/create.js */ "./node_modules/property-information/lib/util/create.js"); /* harmony import */ var _util_case_insensitive_transform_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/case-insensitive-transform.js */ "./node_modules/property-information/lib/util/case-insensitive-transform.js"); const html = (0,_util_create_js__WEBPACK_IMPORTED_MODULE_0__.create)({ space: 'html', attributes: { acceptcharset: 'accept-charset', classname: 'class', htmlfor: 'for', httpequiv: 'http-equiv' }, transform: _util_case_insensitive_transform_js__WEBPACK_IMPORTED_MODULE_1__.caseInsensitiveTransform, mustUseProperty: ['checked', 'multiple', 'muted', 'selected'], properties: { // Standard Properties. abbr: null, accept: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.commaSeparated, acceptCharset: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, accessKey: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, action: null, allow: null, allowFullScreen: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, allowPaymentRequest: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, allowUserMedia: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, alt: null, as: null, async: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, autoCapitalize: null, autoComplete: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, autoFocus: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, autoPlay: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, capture: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, charSet: null, checked: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, cite: null, className: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, cols: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, colSpan: null, content: null, contentEditable: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.booleanish, controls: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, controlsList: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, coords: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number | _util_types_js__WEBPACK_IMPORTED_MODULE_2__.commaSeparated, crossOrigin: null, data: null, dateTime: null, decoding: null, default: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, defer: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, dir: null, dirName: null, disabled: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, download: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.overloadedBoolean, draggable: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.booleanish, encType: null, enterKeyHint: null, form: null, formAction: null, formEncType: null, formMethod: null, formNoValidate: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, formTarget: null, headers: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, height: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, hidden: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, high: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, href: null, hrefLang: null, htmlFor: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, httpEquiv: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, id: null, imageSizes: null, imageSrcSet: null, inputMode: null, integrity: null, is: null, isMap: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, itemId: null, itemProp: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, itemRef: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, itemScope: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, itemType: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, kind: null, label: null, lang: null, language: null, list: null, loading: null, loop: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, low: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, manifest: null, max: null, maxLength: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, media: null, method: null, min: null, minLength: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, multiple: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, muted: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, name: null, nonce: null, noModule: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, noValidate: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, onAbort: null, onAfterPrint: null, onAuxClick: null, onBeforeMatch: null, onBeforePrint: null, onBeforeUnload: null, onBlur: null, onCancel: null, onCanPlay: null, onCanPlayThrough: null, onChange: null, onClick: null, onClose: null, onContextLost: null, onContextMenu: null, onContextRestored: null, onCopy: null, onCueChange: null, onCut: null, onDblClick: null, onDrag: null, onDragEnd: null, onDragEnter: null, onDragExit: null, onDragLeave: null, onDragOver: null, onDragStart: null, onDrop: null, onDurationChange: null, onEmptied: null, onEnded: null, onError: null, onFocus: null, onFormData: null, onHashChange: null, onInput: null, onInvalid: null, onKeyDown: null, onKeyPress: null, onKeyUp: null, onLanguageChange: null, onLoad: null, onLoadedData: null, onLoadedMetadata: null, onLoadEnd: null, onLoadStart: null, onMessage: null, onMessageError: null, onMouseDown: null, onMouseEnter: null, onMouseLeave: null, onMouseMove: null, onMouseOut: null, onMouseOver: null, onMouseUp: null, onOffline: null, onOnline: null, onPageHide: null, onPageShow: null, onPaste: null, onPause: null, onPlay: null, onPlaying: null, onPopState: null, onProgress: null, onRateChange: null, onRejectionHandled: null, onReset: null, onResize: null, onScroll: null, onScrollEnd: null, onSecurityPolicyViolation: null, onSeeked: null, onSeeking: null, onSelect: null, onSlotChange: null, onStalled: null, onStorage: null, onSubmit: null, onSuspend: null, onTimeUpdate: null, onToggle: null, onUnhandledRejection: null, onUnload: null, onVolumeChange: null, onWaiting: null, onWheel: null, open: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, optimum: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, pattern: null, ping: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, placeholder: null, playsInline: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, poster: null, preload: null, readOnly: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, referrerPolicy: null, rel: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, required: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, reversed: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, rows: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, rowSpan: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, sandbox: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, scope: null, scoped: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, seamless: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, selected: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, shape: null, size: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, sizes: null, slot: null, span: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, spellCheck: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.booleanish, src: null, srcDoc: null, srcLang: null, srcSet: null, start: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, step: null, style: null, tabIndex: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, target: null, title: null, translate: null, type: null, typeMustMatch: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, useMap: null, value: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.booleanish, width: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, wrap: null, // Legacy. // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis align: null, // Several. Use CSS `text-align` instead, aLink: null, // ``. Use CSS `a:active {color}` instead archive: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.spaceSeparated, // ``. List of URIs to archives axis: null, // `` and ``. Use `scope` on `` background: null, // ``. Use CSS `background-image` instead bgColor: null, // `` and table elements. Use CSS `background-color` instead border: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, // ``. Use CSS `border-width` instead, borderColor: null, // `
`. Use CSS `border-color` instead, bottomMargin: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.number, // `` cellPadding: null, // `
` cellSpacing: null, // `
` char: null, // Several table elements. When `align=char`, sets the character to align on charOff: null, // Several table elements. When `char`, offsets the alignment classId: null, // `` clear: null, // `
`. Use CSS `clear` instead code: null, // `` codeBase: null, // `` codeType: null, // `` color: null, // `` and `
`. Use CSS instead compact: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, // Lists. Use CSS to reduce space between items instead declare: _util_types_js__WEBPACK_IMPORTED_MODULE_2__.boolean, // `` event: null, // ` * ``` * * Elements by their ID are made available by browsers on the `window` object, * which is a security risk. * Using a prefix solves this problem. * * More information on how to handle clobbering and the prefix is explained in * *Example: headings (DOM clobbering)* in `rehype-sanitize`. * * ###### Unknown nodes * * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`. * The default behavior for unknown nodes is: * * * when the node has a `value` (and doesn’t have `data.hName`, * `data.hProperties`, or `data.hChildren`, see later), create a hast `text` * node * * otherwise, create a `
` element (which could be changed with * `data.hName`), with its children mapped from mdast to hast as well * * This behavior can be changed by passing an `unknownHandler`. * * @overload * @param {Processor} processor * @param {Readonly | null | undefined} [options] * @returns {TransformBridge} * * @overload * @param {Readonly | null | undefined} [options] * @returns {TransformMutate} * * @param {Readonly | Processor | null | undefined} [destination] * Processor or configuration (optional). * @param {Readonly | null | undefined} [options] * When a processor was given, configuration (optional). * @returns {TransformBridge | TransformMutate} * Transform. */ function remarkRehype(destination, options) { if (destination && 'run' in destination) { /** * @type {TransformBridge} */ return async function (tree, file) { // Cast because root in -> root out. const hastTree = /** @type {HastRoot} */ ( (0,mdast_util_to_hast__WEBPACK_IMPORTED_MODULE_0__.toHast)(tree, {file, ...options}) ) await destination.run(hastTree, file) } } /** * @type {TransformMutate} */ return function (tree, file) { // Cast because root in -> root out. return /** @type {HastRoot} */ ( (0,mdast_util_to_hast__WEBPACK_IMPORTED_MODULE_0__.toHast)(tree, {file, ...(options || destination)}) ) } } /***/ }), /***/ "./node_modules/space-separated-tokens/index.js": /*!******************************************************!*\ !*** ./node_modules/space-separated-tokens/index.js ***! \******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ parse: () => (/* binding */ parse), /* harmony export */ stringify: () => (/* binding */ stringify) /* harmony export */ }); /** * Parse space-separated tokens to an array of strings. * * @param {string} value * Space-separated tokens. * @returns {Array} * List of tokens. */ function parse(value) { const input = String(value || '').trim() return input ? input.split(/[ \t\n\r\f]+/g) : [] } /** * Serialize an array of strings as space separated-tokens. * * @param {Array} values * List of tokens. * @returns {string} * Space-separated tokens. */ function stringify(values) { return values.join(' ').trim() } /***/ }), /***/ "./node_modules/string-length/index.js": /*!*********************************************!*\ !*** ./node_modules/string-length/index.js ***! \*********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ stringLength) /* harmony export */ }); /* harmony import */ var strip_ansi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! strip-ansi */ "./node_modules/string-length/node_modules/strip-ansi/index.js"); /* harmony import */ var char_regex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! char-regex */ "./node_modules/char-regex/index.js"); function stringLength(string, {countAnsiEscapeCodes = false} = {}) { if (string === '') { return 0; } if (!countAnsiEscapeCodes) { string = (0,strip_ansi__WEBPACK_IMPORTED_MODULE_0__["default"])(string); } if (string === '') { return 0; } return string.match((0,char_regex__WEBPACK_IMPORTED_MODULE_1__["default"])()).length; } /***/ }), /***/ "./node_modules/string-length/node_modules/ansi-regex/index.js": /*!*********************************************************************!*\ !*** ./node_modules/string-length/node_modules/ansi-regex/index.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ ansiRegex) /* harmony export */ }); function ansiRegex({onlyFirst = false} = {}) { const pattern = [ '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' ].join('|'); return new RegExp(pattern, onlyFirst ? undefined : 'g'); } /***/ }), /***/ "./node_modules/string-length/node_modules/strip-ansi/index.js": /*!*********************************************************************!*\ !*** ./node_modules/string-length/node_modules/strip-ansi/index.js ***! \*********************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ stripAnsi) /* harmony export */ }); /* harmony import */ var ansi_regex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ansi-regex */ "./node_modules/string-length/node_modules/ansi-regex/index.js"); function stripAnsi(string) { if (typeof string !== 'string') { throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``); } return string.replace((0,ansi_regex__WEBPACK_IMPORTED_MODULE_0__["default"])(), ''); } /***/ }), /***/ "./node_modules/style-to-object/index.mjs": /*!************************************************!*\ !*** ./node_modules/style-to-object/index.mjs ***! \************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "./node_modules/style-to-object/index.js"); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_index_js__WEBPACK_IMPORTED_MODULE_0__); /***/ }), /***/ "./node_modules/trim-lines/index.js": /*!******************************************!*\ !*** ./node_modules/trim-lines/index.js ***! \******************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ trimLines: () => (/* binding */ trimLines) /* harmony export */ }); const tab = 9 /* `\t` */ const space = 32 /* ` ` */ /** * Remove initial and final spaces and tabs at the line breaks in `value`. * Does not trim initial and final spaces and tabs of the value itself. * * @param {string} value * Value to trim. * @returns {string} * Trimmed value. */ function trimLines(value) { const source = String(value) const search = /\r?\n|\r/g let match = search.exec(source) let last = 0 /** @type {Array} */ const lines = [] while (match) { lines.push( trimLine(source.slice(last, match.index), last > 0, true), match[0] ) last = match.index + match[0].length match = search.exec(source) } lines.push(trimLine(source.slice(last), last > 0, false)) return lines.join('') } /** * @param {string} value * Line to trim. * @param {boolean} start * Whether to trim the start of the line. * @param {boolean} end * Whether to trim the end of the line. * @returns {string} * Trimmed line. */ function trimLine(value, start, end) { let startIndex = 0 let endIndex = value.length if (start) { let code = value.codePointAt(startIndex) while (code === tab || code === space) { startIndex++ code = value.codePointAt(startIndex) } } if (end) { let code = value.codePointAt(endIndex - 1) while (code === tab || code === space) { endIndex-- code = value.codePointAt(endIndex - 1) } } return endIndex > startIndex ? value.slice(startIndex, endIndex) : '' } /***/ }), /***/ "./node_modules/trough/index.js": /*!**************************************!*\ !*** ./node_modules/trough/index.js ***! \**************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ trough: () => (/* binding */ trough), /* harmony export */ wrap: () => (/* binding */ wrap) /* harmony export */ }); /** * @typedef {(error?: Error|null|undefined, ...output: Array) => void} Callback * @typedef {(...input: Array) => any} Middleware * * @typedef {(...input: Array) => void} Run * Call all middleware. * @typedef {(fn: Middleware) => Pipeline} Use * Add `fn` (middleware) to the list. * @typedef {{run: Run, use: Use}} Pipeline * Middleware. */ /** * Create new middleware. * * @returns {Pipeline} */ function trough() { /** @type {Array} */ const fns = [] /** @type {Pipeline} */ const pipeline = {run, use} return pipeline /** @type {Run} */ function run(...values) { let middlewareIndex = -1 /** @type {Callback} */ const callback = values.pop() if (typeof callback !== 'function') { throw new TypeError('Expected function as last argument, not ' + callback) } next(null, ...values) /** * Run the next `fn`, or we’re done. * * @param {Error|null|undefined} error * @param {Array} output */ function next(error, ...output) { const fn = fns[++middlewareIndex] let index = -1 if (error) { callback(error) return } // Copy non-nullish input into values. while (++index < values.length) { if (output[index] === null || output[index] === undefined) { output[index] = values[index] } } // Save the newly created `output` for the next call. values = output // Next or done. if (fn) { wrap(fn, next)(...output) } else { callback(null, ...output) } } } /** @type {Use} */ function use(middelware) { if (typeof middelware !== 'function') { throw new TypeError( 'Expected `middelware` to be a function, not ' + middelware ) } fns.push(middelware) return pipeline } } /** * Wrap `middleware`. * Can be sync or async; return a promise, receive a callback, or return new * values and errors. * * @param {Middleware} middleware * @param {Callback} callback */ function wrap(middleware, callback) { /** @type {boolean} */ let called return wrapped /** * Call `middleware`. * @this {any} * @param {Array} parameters * @returns {void} */ function wrapped(...parameters) { const fnExpectsCallback = middleware.length > parameters.length /** @type {any} */ let result if (fnExpectsCallback) { parameters.push(done) } try { result = middleware.apply(this, parameters) } catch (error) { const exception = /** @type {Error} */ (error) // Well, this is quite the pickle. // `middleware` received a callback and called it synchronously, but that // threw an error. // The only thing left to do is to throw the thing instead. if (fnExpectsCallback && called) { throw exception } return done(exception) } if (!fnExpectsCallback) { if (result instanceof Promise) { result.then(then, done) } else if (result instanceof Error) { done(result) } else { then(result) } } } /** * Call `callback`, only once. * @type {Callback} */ function done(error, ...output) { if (!called) { called = true callback(error, ...output) } } /** * Call `done` with one value. * * @param {any} [value] */ function then(value) { done(null, value) } } /***/ }), /***/ "./node_modules/unist-builder/lib/index.js": /*!*************************************************!*\ !*** ./node_modules/unist-builder/lib/index.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ u: () => (/* binding */ u) /* harmony export */ }); /** * @typedef {import('unist').Node} Node */ /** * @typedef {Array | string} ChildrenOrValue * List to use as `children` or value to use as `value`. * * @typedef {Record} Props * Other fields to add to the node. */ /** * Build a node. * * @template {string} T * @template {Props} P * @template {Array} C * * @overload * @param {T} type * @returns {{type: T}} * * @overload * @param {T} type * @param {P} props * @returns {{type: T} & P} * * @overload * @param {T} type * @param {string} value * @returns {{type: T, value: string}} * * @overload * @param {T} type * @param {P} props * @param {string} value * @returns {{type: T, value: string} & P} * * @overload * @param {T} type * @param {C} children * @returns {{type: T, children: C}} * * @overload * @param {T} type * @param {P} props * @param {C} children * @returns {{type: T, children: C} & P} * * @param {string} type * Node type. * @param {ChildrenOrValue | Props | null | undefined} [props] * Fields assigned to node (default: `undefined`). * @param {ChildrenOrValue | null | undefined} [value] * Children of node or value of `node` (cast to string). * @returns {Node} * Built node. */ function u(type, props, value) { /** @type {Node} */ const node = {type: String(type)} if ( (value === undefined || value === null) && (typeof props === 'string' || Array.isArray(props)) ) { value = props } else { Object.assign(node, props) } if (Array.isArray(value)) { // @ts-expect-error: create a parent. node.children = value } else if (value !== undefined && value !== null) { // @ts-expect-error: create a literal. node.value = String(value) } return node } /***/ }), /***/ "./node_modules/unist-util-is/lib/index.js": /*!*************************************************!*\ !*** ./node_modules/unist-util-is/lib/index.js ***! \*************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ convert: () => (/* binding */ convert), /* harmony export */ is: () => (/* binding */ is) /* harmony export */ }); /** * @typedef {import('unist').Node} Node * @typedef {import('unist').Parent} Parent */ /** * @template Fn * @template Fallback * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate */ /** * @callback Check * Check that an arbitrary value is a node. * @param {unknown} this * The given context. * @param {unknown} [node] * Anything (typically a node). * @param {number | null | undefined} [index] * The node’s position in its parent. * @param {Parent | null | undefined} [parent] * The node’s parent. * @returns {boolean} * Whether this is a node and passes a test. * * @typedef {Record | Node} Props * Object to check for equivalence. * * Note: `Node` is included as it is common but is not indexable. * * @typedef {Array | Props | TestFunction | string | null | undefined} Test * Check for an arbitrary node. * * @callback TestFunction * Check if a node passes a test. * @param {unknown} this * The given context. * @param {Node} node * A node. * @param {number | undefined} [index] * The node’s position in its parent. * @param {Parent | undefined} [parent] * The node’s parent. * @returns {boolean | undefined | void} * Whether this node passes the test. * * Note: `void` is included until TS sees no return as `undefined`. */ /** * Check if `node` is a `Node` and whether it passes the given test. * * @param {unknown} node * Thing to check, typically `Node`. * @param {Test} test * A check for a specific node. * @param {number | null | undefined} index * The node’s position in its parent. * @param {Parent | null | undefined} parent * The node’s parent. * @param {unknown} context * Context object (`this`) to pass to `test` functions. * @returns {boolean} * Whether `node` is a node and passes a test. */ const is = // Note: overloads in JSDoc can’t yet use different `@template`s. /** * @type {( * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) & * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) & * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) & * ((node?: null | undefined) => false) & * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) & * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean) * )} */ ( /** * @param {unknown} [node] * @param {Test} [test] * @param {number | null | undefined} [index] * @param {Parent | null | undefined} [parent] * @param {unknown} [context] * @returns {boolean} */ // eslint-disable-next-line max-params function (node, test, index, parent, context) { const check = convert(test) if ( index !== undefined && index !== null && (typeof index !== 'number' || index < 0 || index === Number.POSITIVE_INFINITY) ) { throw new Error('Expected positive finite index') } if ( parent !== undefined && parent !== null && (!is(parent) || !parent.children) ) { throw new Error('Expected parent node') } if ( (parent === undefined || parent === null) !== (index === undefined || index === null) ) { throw new Error('Expected both parent and index') } return looksLikeANode(node) ? check.call(context, node, index, parent) : false } ) /** * Generate an assertion from a test. * * Useful if you’re going to test many nodes, for example when creating a * utility where something else passes a compatible test. * * The created function is a bit faster because it expects valid input only: * a `node`, `index`, and `parent`. * * @param {Test} test * * when nullish, checks if `node` is a `Node`. * * when `string`, works like passing `(node) => node.type === test`. * * when `function` checks if function passed the node is true. * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values. * * when `array`, checks if any one of the subtests pass. * @returns {Check} * An assertion. */ const convert = // Note: overloads in JSDoc can’t yet use different `@template`s. /** * @type {( * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) & * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) & * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) & * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) & * ((test?: Test) => Check) * )} */ ( /** * @param {Test} [test] * @returns {Check} */ function (test) { if (test === null || test === undefined) { return ok } if (typeof test === 'function') { return castFactory(test) } if (typeof test === 'object') { return Array.isArray(test) ? anyFactory(test) : propsFactory(test) } if (typeof test === 'string') { return typeFactory(test) } throw new Error('Expected function, string, or object as test') } ) /** * @param {Array} tests * @returns {Check} */ function anyFactory(tests) { /** @type {Array} */ const checks = [] let index = -1 while (++index < tests.length) { checks[index] = convert(tests[index]) } return castFactory(any) /** * @this {unknown} * @type {TestFunction} */ function any(...parameters) { let index = -1 while (++index < checks.length) { if (checks[index].apply(this, parameters)) return true } return false } } /** * Turn an object into a test for a node with a certain fields. * * @param {Props} check * @returns {Check} */ function propsFactory(check) { const checkAsRecord = /** @type {Record} */ (check) return castFactory(all) /** * @param {Node} node * @returns {boolean} */ function all(node) { const nodeAsRecord = /** @type {Record} */ ( /** @type {unknown} */ (node) ) /** @type {string} */ let key for (key in check) { if (nodeAsRecord[key] !== checkAsRecord[key]) return false } return true } } /** * Turn a string into a test for a node with a certain type. * * @param {string} check * @returns {Check} */ function typeFactory(check) { return castFactory(type) /** * @param {Node} node */ function type(node) { return node && node.type === check } } /** * Turn a custom test into a test for a node that passes that test. * * @param {TestFunction} testFunction * @returns {Check} */ function castFactory(testFunction) { return check /** * @this {unknown} * @type {Check} */ function check(value, index, parent) { return Boolean( looksLikeANode(value) && testFunction.call( this, value, typeof index === 'number' ? index : undefined, parent || undefined ) ) } } function ok() { return true } /** * @param {unknown} value * @returns {value is Node} */ function looksLikeANode(value) { return value !== null && typeof value === 'object' && 'type' in value } /***/ }), /***/ "./node_modules/unist-util-position/lib/index.js": /*!*******************************************************!*\ !*** ./node_modules/unist-util-position/lib/index.js ***! \*******************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ pointEnd: () => (/* binding */ pointEnd), /* harmony export */ pointStart: () => (/* binding */ pointStart), /* harmony export */ position: () => (/* binding */ position) /* harmony export */ }); /** * @typedef {import('unist').Node} Node * @typedef {import('unist').Point} Point * @typedef {import('unist').Position} Position */ /** * @typedef NodeLike * @property {string} type * @property {PositionLike | null | undefined} [position] * * @typedef PositionLike * @property {PointLike | null | undefined} [start] * @property {PointLike | null | undefined} [end] * * @typedef PointLike * @property {number | null | undefined} [line] * @property {number | null | undefined} [column] * @property {number | null | undefined} [offset] */ /** * Get the ending point of `node`. * * @param node * Node. * @returns * Point. */ const pointEnd = point('end') /** * Get the starting point of `node`. * * @param node * Node. * @returns * Point. */ const pointStart = point('start') /** * Get the positional info of `node`. * * @param {'end' | 'start'} type * Side. * @returns * Getter. */ function point(type) { return point /** * Get the point info of `node` at a bound side. * * @param {Node | NodeLike | null | undefined} [node] * @returns {Point | undefined} */ function point(node) { const point = (node && node.position && node.position[type]) || {} if ( typeof point.line === 'number' && point.line > 0 && typeof point.column === 'number' && point.column > 0 ) { return { line: point.line, column: point.column, offset: typeof point.offset === 'number' && point.offset > -1 ? point.offset : undefined } } } } /** * Get the positional info of `node`. * * @param {Node | NodeLike | null | undefined} [node] * Node. * @returns {Position | undefined} * Position. */ function position(node) { const start = pointStart(node) const end = pointEnd(node) if (start && end) { return {start, end} } } /***/ }), /***/ "./node_modules/unist-util-visit-parents/lib/color.js": /*!************************************************************!*\ !*** ./node_modules/unist-util-visit-parents/lib/color.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ color: () => (/* binding */ color) /* harmony export */ }); /** * @param {string} d * @returns {string} */ function color(d) { return d } /***/ }), /***/ "./node_modules/unist-util-visit-parents/lib/index.js": /*!************************************************************!*\ !*** ./node_modules/unist-util-visit-parents/lib/index.js ***! \************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ CONTINUE: () => (/* binding */ CONTINUE), /* harmony export */ EXIT: () => (/* binding */ EXIT), /* harmony export */ SKIP: () => (/* binding */ SKIP), /* harmony export */ visitParents: () => (/* binding */ visitParents) /* harmony export */ }); /* harmony import */ var unist_util_is__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! unist-util-is */ "./node_modules/unist-util-is/lib/index.js"); /* harmony import */ var unist_util_visit_parents_do_not_use_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! unist-util-visit-parents/do-not-use-color */ "./node_modules/unist-util-visit-parents/lib/color.js"); /** * @typedef {import('unist').Node} UnistNode * @typedef {import('unist').Parent} UnistParent */ /** * @typedef {Exclude | undefined} Test * Test from `unist-util-is`. * * Note: we have remove and add `undefined`, because otherwise when generating * automatic `.d.ts` files, TS tries to flatten paths from a local perspective, * which doesn’t work when publishing on npm. */ /** * @typedef {( * Fn extends (value: any) => value is infer Thing * ? Thing * : Fallback * )} Predicate * Get the value of a type guard `Fn`. * @template Fn * Value; typically function that is a type guard (such as `(x): x is Y`). * @template Fallback * Value to yield if `Fn` is not a type guard. */ /** * @typedef {( * Check extends null | undefined // No test. * ? Value * : Value extends {type: Check} // String (type) test. * ? Value * : Value extends Check // Partial test. * ? Value * : Check extends Function // Function test. * ? Predicate extends Value * ? Predicate * : never * : never // Some other test? * )} MatchesOne * Check whether a node matches a primitive check in the type system. * @template Value * Value; typically unist `Node`. * @template Check * Value; typically `unist-util-is`-compatible test, but not arrays. */ /** * @typedef {( * Check extends Array * ? MatchesOne * : MatchesOne * )} Matches * Check whether a node matches a check in the type system. * @template Value * Value; typically unist `Node`. * @template Check * Value; typically `unist-util-is`-compatible test. */ /** * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint * Number; capped reasonably. */ /** * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment * Increment a number in the type system. * @template {Uint} [I=0] * Index. */ /** * @typedef {( * Node extends UnistParent * ? Node extends {children: Array} * ? Child extends Children ? Node : never * : never * : never * )} InternalParent * Collect nodes that can be parents of `Child`. * @template {UnistNode} Node * All node types in a tree. * @template {UnistNode} Child * Node to search for. */ /** * @typedef {InternalParent, Child>} Parent * Collect nodes in `Tree` that can be parents of `Child`. * @template {UnistNode} Tree * All node types in a tree. * @template {UnistNode} Child * Node to search for. */ /** * @typedef {( * Depth extends Max * ? never * : * | InternalParent * | InternalAncestor, Max, Increment> * )} InternalAncestor * Collect nodes in `Tree` that can be ancestors of `Child`. * @template {UnistNode} Node * All node types in a tree. * @template {UnistNode} Child * Node to search for. * @template {Uint} [Max=10] * Max; searches up to this depth. * @template {Uint} [Depth=0] * Current depth. */ /** * @typedef {InternalAncestor, Child>} Ancestor * Collect nodes in `Tree` that can be ancestors of `Child`. * @template {UnistNode} Tree * All node types in a tree. * @template {UnistNode} Child * Node to search for. */ /** * @typedef {( * Tree extends UnistParent * ? Depth extends Max * ? Tree * : Tree | InclusiveDescendant> * : Tree * )} InclusiveDescendant * Collect all (inclusive) descendants of `Tree`. * * > 👉 **Note**: for performance reasons, this seems to be the fastest way to * > recurse without actually running into an infinite loop, which the * > previous version did. * > * > Practically, a max of `2` is typically enough assuming a `Root` is * > passed, but it doesn’t improve performance. * > It gets higher with `List > ListItem > Table > TableRow > TableCell`. * > Using up to `10` doesn’t hurt or help either. * @template {UnistNode} Tree * Tree type. * @template {Uint} [Max=10] * Max; searches up to this depth. * @template {Uint} [Depth=0] * Current depth. */ /** * @typedef {'skip' | boolean} Action * Union of the action types. * * @typedef {number} Index * Move to the sibling at `index` next (after node itself is completely * traversed). * * Useful if mutating the tree, such as removing the node the visitor is * currently on, or any of its previous siblings. * Results less than 0 or greater than or equal to `children.length` stop * traversing the parent. * * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple * List with one or two values, the first an action, the second an index. * * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult * Any value that can be returned from a visitor. */ /** * @callback Visitor * Handle a node (matching `test`, if given). * * Visitors are free to transform `node`. * They can also transform the parent of node (the last of `ancestors`). * * Replacing `node` itself, if `SKIP` is not returned, still causes its * descendants to be walked (which is a bug). * * When adding or removing previous siblings of `node` (or next siblings, in * case of reverse), the `Visitor` should return a new `Index` to specify the * sibling to traverse after `node` is traversed. * Adding or removing next siblings of `node` (or previous siblings, in case * of reverse) is handled as expected without needing to return a new `Index`. * * Removing the children property of an ancestor still results in them being * traversed. * @param {Visited} node * Found node. * @param {Array} ancestors * Ancestors of `node`. * @returns {VisitorResult} * What to do next. * * An `Index` is treated as a tuple of `[CONTINUE, Index]`. * An `Action` is treated as a tuple of `[Action]`. * * Passing a tuple back only makes sense if the `Action` is `SKIP`. * When the `Action` is `EXIT`, that action can be returned. * When the `Action` is `CONTINUE`, `Index` can be returned. * @template {UnistNode} [Visited=UnistNode] * Visited node type. * @template {UnistParent} [VisitedParents=UnistParent] * Ancestor type. */ /** * @typedef {Visitor, Check>, Ancestor, Check>>>} BuildVisitor * Build a typed `Visitor` function from a tree and a test. * * It will infer which values are passed as `node` and which as `parents`. * @template {UnistNode} [Tree=UnistNode] * Tree type. * @template {Test} [Check=Test] * Test type. */ /** @type {Readonly} */ const empty = [] /** * Continue traversing as normal. */ const CONTINUE = true /** * Stop traversing immediately. */ const EXIT = false /** * Do not traverse this node’s children. */ const SKIP = 'skip' /** * Visit nodes, with ancestral information. * * This algorithm performs *depth-first* *tree traversal* in *preorder* * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**). * * You can choose for which nodes `visitor` is called by passing a `test`. * For complex tests, you should test yourself in `visitor`, as it will be * faster and will have improved type information. * * Walking the tree is an intensive task. * Make use of the return values of the visitor when possible. * Instead of walking a tree multiple times, walk it once, use `unist-util-is` * to check if a node matches, and then perform different operations. * * You can change the tree. * See `Visitor` for more info. * * @overload * @param {Tree} tree * @param {Check} check * @param {BuildVisitor} visitor * @param {boolean | null | undefined} [reverse] * @returns {undefined} * * @overload * @param {Tree} tree * @param {BuildVisitor} visitor * @param {boolean | null | undefined} [reverse] * @returns {undefined} * * @param {UnistNode} tree * Tree to traverse. * @param {Visitor | Test} test * `unist-util-is`-compatible test * @param {Visitor | boolean | null | undefined} [visitor] * Handle each node. * @param {boolean | null | undefined} [reverse] * Traverse in reverse preorder (NRL) instead of the default preorder (NLR). * @returns {undefined} * Nothing. * * @template {UnistNode} Tree * Node type. * @template {Test} Check * `unist-util-is`-compatible test. */ function visitParents(tree, test, visitor, reverse) { /** @type {Test} */ let check if (typeof test === 'function' && typeof visitor !== 'function') { reverse = visitor // @ts-expect-error no visitor given, so `visitor` is test. visitor = test } else { // @ts-expect-error visitor given, so `test` isn’t a visitor. check = test } const is = (0,unist_util_is__WEBPACK_IMPORTED_MODULE_0__.convert)(check) const step = reverse ? -1 : 1 factory(tree, undefined, [])() /** * @param {UnistNode} node * @param {number | undefined} index * @param {Array} parents */ function factory(node, index, parents) { const value = /** @type {Record} */ ( node && typeof node === 'object' ? node : {} ) if (typeof value.type === 'string') { const name = // `hast` typeof value.tagName === 'string' ? value.tagName : // `xast` typeof value.name === 'string' ? value.name : undefined Object.defineProperty(visit, 'name', { value: 'node (' + (0,unist_util_visit_parents_do_not_use_color__WEBPACK_IMPORTED_MODULE_1__.color)(node.type + (name ? '<' + name + '>' : '')) + ')' }) } return visit function visit() { /** @type {Readonly} */ let result = empty /** @type {Readonly} */ let subresult /** @type {number} */ let offset /** @type {Array} */ let grandparents if (!test || is(node, index, parents[parents.length - 1] || undefined)) { // @ts-expect-error: `visitor` is now a visitor. result = toResult(visitor(node, parents)) if (result[0] === EXIT) { return result } } if ('children' in node && node.children) { const nodeAsParent = /** @type {UnistParent} */ (node) if (nodeAsParent.children && result[0] !== SKIP) { offset = (reverse ? nodeAsParent.children.length : -1) + step grandparents = parents.concat(nodeAsParent) while (offset > -1 && offset < nodeAsParent.children.length) { const child = nodeAsParent.children[offset] subresult = factory(child, offset, grandparents)() if (subresult[0] === EXIT) { return subresult } offset = typeof subresult[1] === 'number' ? subresult[1] : offset + step } } } return result } } } /** * Turn a return value into a clean result. * * @param {VisitorResult} value * Valid return values from visitors. * @returns {Readonly} * Clean result. */ function toResult(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { return [CONTINUE, value] } return value === null || value === undefined ? empty : [value] } /***/ }), /***/ "./node_modules/unist-util-visit/lib/index.js": /*!****************************************************!*\ !*** ./node_modules/unist-util-visit/lib/index.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ CONTINUE: () => (/* reexport safe */ unist_util_visit_parents__WEBPACK_IMPORTED_MODULE_0__.CONTINUE), /* harmony export */ EXIT: () => (/* reexport safe */ unist_util_visit_parents__WEBPACK_IMPORTED_MODULE_0__.EXIT), /* harmony export */ SKIP: () => (/* reexport safe */ unist_util_visit_parents__WEBPACK_IMPORTED_MODULE_0__.SKIP), /* harmony export */ visit: () => (/* binding */ visit) /* harmony export */ }); /* harmony import */ var unist_util_visit_parents__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! unist-util-visit-parents */ "./node_modules/unist-util-visit-parents/lib/index.js"); /** * @typedef {import('unist').Node} UnistNode * @typedef {import('unist').Parent} UnistParent * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult */ /** * @typedef {Exclude | undefined} Test * Test from `unist-util-is`. * * Note: we have remove and add `undefined`, because otherwise when generating * automatic `.d.ts` files, TS tries to flatten paths from a local perspective, * which doesn’t work when publishing on npm. */ // To do: use types from `unist-util-visit-parents` when it’s released. /** * @typedef {( * Fn extends (value: any) => value is infer Thing * ? Thing * : Fallback * )} Predicate * Get the value of a type guard `Fn`. * @template Fn * Value; typically function that is a type guard (such as `(x): x is Y`). * @template Fallback * Value to yield if `Fn` is not a type guard. */ /** * @typedef {( * Check extends null | undefined // No test. * ? Value * : Value extends {type: Check} // String (type) test. * ? Value * : Value extends Check // Partial test. * ? Value * : Check extends Function // Function test. * ? Predicate extends Value * ? Predicate * : never * : never // Some other test? * )} MatchesOne * Check whether a node matches a primitive check in the type system. * @template Value * Value; typically unist `Node`. * @template Check * Value; typically `unist-util-is`-compatible test, but not arrays. */ /** * @typedef {( * Check extends Array * ? MatchesOne * : MatchesOne * )} Matches * Check whether a node matches a check in the type system. * @template Value * Value; typically unist `Node`. * @template Check * Value; typically `unist-util-is`-compatible test. */ /** * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint * Number; capped reasonably. */ /** * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment * Increment a number in the type system. * @template {Uint} [I=0] * Index. */ /** * @typedef {( * Node extends UnistParent * ? Node extends {children: Array} * ? Child extends Children ? Node : never * : never * : never * )} InternalParent * Collect nodes that can be parents of `Child`. * @template {UnistNode} Node * All node types in a tree. * @template {UnistNode} Child * Node to search for. */ /** * @typedef {InternalParent, Child>} Parent * Collect nodes in `Tree` that can be parents of `Child`. * @template {UnistNode} Tree * All node types in a tree. * @template {UnistNode} Child * Node to search for. */ /** * @typedef {( * Depth extends Max * ? never * : * | InternalParent * | InternalAncestor, Max, Increment> * )} InternalAncestor * Collect nodes in `Tree` that can be ancestors of `Child`. * @template {UnistNode} Node * All node types in a tree. * @template {UnistNode} Child * Node to search for. * @template {Uint} [Max=10] * Max; searches up to this depth. * @template {Uint} [Depth=0] * Current depth. */ /** * @typedef {( * Tree extends UnistParent * ? Depth extends Max * ? Tree * : Tree | InclusiveDescendant> * : Tree * )} InclusiveDescendant * Collect all (inclusive) descendants of `Tree`. * * > 👉 **Note**: for performance reasons, this seems to be the fastest way to * > recurse without actually running into an infinite loop, which the * > previous version did. * > * > Practically, a max of `2` is typically enough assuming a `Root` is * > passed, but it doesn’t improve performance. * > It gets higher with `List > ListItem > Table > TableRow > TableCell`. * > Using up to `10` doesn’t hurt or help either. * @template {UnistNode} Tree * Tree type. * @template {Uint} [Max=10] * Max; searches up to this depth. * @template {Uint} [Depth=0] * Current depth. */ /** * @callback Visitor * Handle a node (matching `test`, if given). * * Visitors are free to transform `node`. * They can also transform `parent`. * * Replacing `node` itself, if `SKIP` is not returned, still causes its * descendants to be walked (which is a bug). * * When adding or removing previous siblings of `node` (or next siblings, in * case of reverse), the `Visitor` should return a new `Index` to specify the * sibling to traverse after `node` is traversed. * Adding or removing next siblings of `node` (or previous siblings, in case * of reverse) is handled as expected without needing to return a new `Index`. * * Removing the children property of `parent` still results in them being * traversed. * @param {Visited} node * Found node. * @param {Visited extends UnistNode ? number | undefined : never} index * Index of `node` in `parent`. * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent * Parent of `node`. * @returns {VisitorResult} * What to do next. * * An `Index` is treated as a tuple of `[CONTINUE, Index]`. * An `Action` is treated as a tuple of `[Action]`. * * Passing a tuple back only makes sense if the `Action` is `SKIP`. * When the `Action` is `EXIT`, that action can be returned. * When the `Action` is `CONTINUE`, `Index` can be returned. * @template {UnistNode} [Visited=UnistNode] * Visited node type. * @template {UnistParent} [Ancestor=UnistParent] * Ancestor type. */ /** * @typedef {Visitor>} BuildVisitorFromMatch * Build a typed `Visitor` function from a node and all possible parents. * * It will infer which values are passed as `node` and which as `parent`. * @template {UnistNode} Visited * Node type. * @template {UnistParent} Ancestor * Parent type. */ /** * @typedef {( * BuildVisitorFromMatch< * Matches, * Extract * > * )} BuildVisitorFromDescendants * Build a typed `Visitor` function from a list of descendants and a test. * * It will infer which values are passed as `node` and which as `parent`. * @template {UnistNode} Descendant * Node type. * @template {Test} Check * Test type. */ /** * @typedef {( * BuildVisitorFromDescendants< * InclusiveDescendant, * Check * > * )} BuildVisitor * Build a typed `Visitor` function from a tree and a test. * * It will infer which values are passed as `node` and which as `parent`. * @template {UnistNode} [Tree=UnistNode] * Node type. * @template {Test} [Check=Test] * Test type. */ /** * Visit nodes. * * This algorithm performs *depth-first* *tree traversal* in *preorder* * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**). * * You can choose for which nodes `visitor` is called by passing a `test`. * For complex tests, you should test yourself in `visitor`, as it will be * faster and will have improved type information. * * Walking the tree is an intensive task. * Make use of the return values of the visitor when possible. * Instead of walking a tree multiple times, walk it once, use `unist-util-is` * to check if a node matches, and then perform different operations. * * You can change the tree. * See `Visitor` for more info. * * @overload * @param {Tree} tree * @param {Check} check * @param {BuildVisitor} visitor * @param {boolean | null | undefined} [reverse] * @returns {undefined} * * @overload * @param {Tree} tree * @param {BuildVisitor} visitor * @param {boolean | null | undefined} [reverse] * @returns {undefined} * * @param {UnistNode} tree * Tree to traverse. * @param {Visitor | Test} testOrVisitor * `unist-util-is`-compatible test (optional, omit to pass a visitor). * @param {Visitor | boolean | null | undefined} [visitorOrReverse] * Handle each node (when test is omitted, pass `reverse`). * @param {boolean | null | undefined} [maybeReverse=false] * Traverse in reverse preorder (NRL) instead of the default preorder (NLR). * @returns {undefined} * Nothing. * * @template {UnistNode} Tree * Node type. * @template {Test} Check * `unist-util-is`-compatible test. */ function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) { /** @type {boolean | null | undefined} */ let reverse /** @type {Test} */ let test /** @type {Visitor} */ let visitor if ( typeof testOrVisitor === 'function' && typeof visitorOrReverse !== 'function' ) { test = undefined visitor = testOrVisitor reverse = visitorOrReverse } else { // @ts-expect-error: assume the overload with test was given. test = testOrVisitor // @ts-expect-error: assume the overload with test was given. visitor = visitorOrReverse reverse = maybeReverse } (0,unist_util_visit_parents__WEBPACK_IMPORTED_MODULE_0__.visitParents)(tree, test, overload, reverse) /** * @param {UnistNode} node * @param {Array} parents */ function overload(node, parents) { const parent = parents[parents.length - 1] const index = parent ? parent.children.indexOf(node) : undefined return visitor(node, index, parent) } } /***/ }), /***/ "./node_modules/web-namespaces/index.js": /*!**********************************************!*\ !*** ./node_modules/web-namespaces/index.js ***! \**********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ webNamespaces: () => (/* binding */ webNamespaces) /* harmony export */ }); /** * Map of web namespaces. * * @type {Record} */ const webNamespaces = { html: 'http://www.w3.org/1999/xhtml', mathml: 'http://www.w3.org/1998/Math/MathML', svg: 'http://www.w3.org/2000/svg', xlink: 'http://www.w3.org/1999/xlink', xml: 'http://www.w3.org/XML/1998/namespace', xmlns: 'http://www.w3.org/2000/xmlns/' } /***/ }), /***/ "./node_modules/webdav/dist/web/index.js": /*!***********************************************!*\ !*** ./node_modules/webdav/dist/web/index.js ***! \***********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AuthType: () => (/* binding */ o), /* harmony export */ ErrorCode: () => (/* binding */ i), /* harmony export */ Request: () => (/* binding */ s), /* harmony export */ Response: () => (/* binding */ a), /* harmony export */ createClient: () => (/* binding */ c), /* harmony export */ getPatcher: () => (/* binding */ u), /* harmony export */ parseStat: () => (/* binding */ l), /* harmony export */ parseXML: () => (/* binding */ h), /* harmony export */ processResponsePayload: () => (/* binding */ f), /* harmony export */ translateDiskSpace: () => (/* binding */ p) /* harmony export */ }); /* provided dependency */ var process = __webpack_require__(/*! ./node_modules/process/browser.js */ "./node_modules/process/browser.js"); /*! For license information please see index.js.LICENSE.txt */ var t={2:t=>{function e(t,e,o){t instanceof RegExp&&(t=n(t,o)),e instanceof RegExp&&(e=n(e,o));var i=r(t,e,o);return i&&{start:i[0],end:i[1],pre:o.slice(0,i[0]),body:o.slice(i[0]+t.length,i[1]),post:o.slice(i[1]+e.length)}}function n(t,e){var n=e.match(t);return n?n[0]:null}function r(t,e,n){var r,o,i,s,a,c=n.indexOf(t),u=n.indexOf(e,c+1),l=c;if(c>=0&&u>0){for(r=[],i=n.length;l>=0&&!a;)l==c?(r.push(l),c=n.indexOf(t,l+1)):1==r.length?a=[r.pop(),u]:((o=r.pop())=0?c:u;r.length&&(a=[i,s])}return a}t.exports=e,e.range=r},101:function(t,e,n){var r;t=n.nmd(t),function(o){var i=(t&&t.exports,"object"==typeof global&&global);i.global!==i&&i.window;var s=function(t){this.message=t};(s.prototype=new Error).name="InvalidCharacterError";var a=function(t){throw new s(t)},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=/[\t\n\f\r ]/g,l={encode:function(t){t=String(t),/[^\0-\xFF]/.test(t)&&a("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,l=t.length-i;++u>18&63)+c.charAt(o>>12&63)+c.charAt(o>>6&63)+c.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),s+=c.charAt((o=e+n)>>10)+c.charAt(o>>4&63)+c.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=c.charAt(o>>2)+c.charAt(o<<4&63)+"=="),s},decode:function(t){var e=(t=String(t).replace(u,"")).length;e%4==0&&(e=(t=t.replace(/==?$/,"")).length),(e%4==1||/[^+a-zA-Z0-9/]/.test(t))&&a("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},version:"1.0.0"};void 0===(r=function(){return l}.call(e,n,e,t))||(t.exports=r)}()},172:(t,e)=>{e.d=function(t){if(!t)return 0;for(var e=(t=t.toString()).length,n=t.length;n--;){var r=t.charCodeAt(n);56320<=r&&r<=57343&&n--,127{var e={utf8:{stringToBytes:function(t){return e.bin.stringToBytes(unescape(encodeURIComponent(t)))},bytesToString:function(t){return decodeURIComponent(escape(e.bin.bytesToString(t)))}},bin:{stringToBytes:function(t){for(var e=[],n=0;n{var e,n;e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n={rotl:function(t,e){return t<>>32-e},rotr:function(t,e){return t<<32-e|t>>>e},endian:function(t){if(t.constructor==Number)return 16711935&n.rotl(t,8)|4278255360&n.rotl(t,24);for(var e=0;e0;t--)e.push(Math.floor(256*Math.random()));return e},bytesToWords:function(t){for(var e=[],n=0,r=0;n>>5]|=t[n]<<24-r%32;return e},wordsToBytes:function(t){for(var e=[],n=0;n<32*t.length;n+=8)e.push(t[n>>>5]>>>24-n%32&255);return e},bytesToHex:function(t){for(var e=[],n=0;n>>4).toString(16)),e.push((15&t[n]).toString(16));return e.join("")},hexToBytes:function(t){for(var e=[],n=0;n>>6*(3-i)&63)):n.push("=");return n.join("")},base64ToBytes:function(t){t=t.replace(/[^A-Z0-9+\/]/gi,"");for(var n=[],r=0,o=0;r>>6-2*o);return n}},t.exports=n},635:(t,e,n)=>{const r=n(31),o=n(338),i=n(221);t.exports={XMLParser:o,XMLValidator:r,XMLBuilder:i}},705:(t,e)=>{const n=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",r="["+n+"]["+n+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",o=new RegExp("^"+r+"$");e.isExist=function(t){return void 0!==t},e.isEmptyObject=function(t){return 0===Object.keys(t).length},e.merge=function(t,e,n){if(e){const r=Object.keys(e),o=r.length;for(let i=0;i{const r=n(705),o={allowBooleanAttributes:!1,unpairedTags:[]};function i(t){return" "===t||"\t"===t||"\n"===t||"\r"===t}function s(t,e){const n=e;for(;e5&&"xml"===r)return d("InvalidXml","XML declaration allowed only at the start of the document.",m(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}}return e}function a(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e"===t[e+2]){e+=2;break}}else if(t.length>e+8&&"D"===t[e+1]&&"O"===t[e+2]&&"C"===t[e+3]&&"T"===t[e+4]&&"Y"===t[e+5]&&"P"===t[e+6]&&"E"===t[e+7]){let n=1;for(e+=8;e"===t[e]&&(n--,0===n))break}else if(t.length>e+9&&"["===t[e+1]&&"C"===t[e+2]&&"D"===t[e+3]&&"A"===t[e+4]&&"T"===t[e+5]&&"A"===t[e+6]&&"["===t[e+7])for(e+=8;e"===t[e+2]){e+=2;break}return e}e.validate=function(t,e){e=Object.assign({},o,e);const n=[];let c=!1,u=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(let o=0;o"!==t[o]&&" "!==t[o]&&"\t"!==t[o]&&"\n"!==t[o]&&"\r"!==t[o];o++)y+=t[o];if(y=y.trim(),"/"===y[y.length-1]&&(y=y.substring(0,y.length-1),o--),h=y,!r.isName(h)){let e;return e=0===y.trim().length?"Invalid space after '<'.":"Tag '"+y+"' is an invalid name.",d("InvalidTag",e,m(t,o))}const b=l(t,o);if(!1===b)return d("InvalidAttr","Attributes for '"+y+"' have open quote.",m(t,o));let w=b.value;if(o=b.index,"/"===w[w.length-1]){const n=o-w.length;w=w.substring(0,w.length-1);const r=f(w,e);if(!0!==r)return d(r.err.code,r.err.msg,m(t,n+r.err.line));c=!0}else if(v){if(!b.tagClosed)return d("InvalidTag","Closing tag '"+y+"' doesn't have proper closing.",m(t,o));if(w.trim().length>0)return d("InvalidTag","Closing tag '"+y+"' can't have attributes or invalid starting.",m(t,g));{const e=n.pop();if(y!==e.tagName){let n=m(t,e.tagStartPos);return d("InvalidTag","Expected closing tag '"+e.tagName+"' (opened in line "+n.line+", col "+n.col+") instead of closing tag '"+y+"'.",m(t,g))}0==n.length&&(u=!0)}}else{const r=f(w,e);if(!0!==r)return d(r.err.code,r.err.msg,m(t,o-w.length+r.err.line));if(!0===u)return d("InvalidXml","Multiple possible root nodes found.",m(t,o));-1!==e.unpairedTags.indexOf(y)||n.push({tagName:y,tagStartPos:g}),c=!0}for(o++;o0)||d("InvalidXml","Invalid '"+JSON.stringify(n.map((t=>t.tagName)),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):d("InvalidXml","Start tag expected.",1)};const c='"',u="'";function l(t,e){let n="",r="",o=!1;for(;e"===t[e]&&""===r){o=!0;break}n+=t[e]}return""===r&&{value:n,index:e,tagClosed:o}}const h=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function f(t,e){const n=r.getAllMatches(t,h),o={};for(let t=0;t{const r=n(87),o={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1};function i(t){this.options=Object.assign({},o,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=c),this.processTextOrObjNode=s,this.options.format?(this.indentate=a,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function s(t,e,n){const r=this.j2x(t,n+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,r.attrStr,n):this.buildObjectNode(r.val,e,r.attrStr,n)}function a(t){return this.options.indentBy.repeat(t)}function c(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}i.prototype.build=function(t){return this.options.preserveOrder?r(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0).val)},i.prototype.j2x=function(t,e){let n="",r="";for(let o in t)if(void 0===t[o])this.isAttribute(o)&&(r+="");else if(null===t[o])this.isAttribute(o)?r+="":"?"===o[0]?r+=this.indentate(e)+"<"+o+"?"+this.tagEndChar:r+=this.indentate(e)+"<"+o+"/"+this.tagEndChar;else if(t[o]instanceof Date)r+=this.buildTextValNode(t[o],o,"",e);else if("object"!=typeof t[o]){const i=this.isAttribute(o);if(i)n+=this.buildAttrPairStr(i,""+t[o]);else if(o===this.options.textNodeName){let e=this.options.tagValueProcessor(o,""+t[o]);r+=this.replaceEntitiesValue(e)}else r+=this.buildTextValNode(t[o],o,"",e)}else if(Array.isArray(t[o])){const n=t[o].length;let i="";for(let s=0;s"+t+o}},i.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":">")+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(r)+"\x3c!--".concat(t,"--\x3e")+this.newLine;if("?"===e[0])return this.indentate(r)+"<"+e+n+"?"+this.tagEndChar;{let o=this.options.tagValueProcessor(e,t);return o=this.replaceEntitiesValue(o),""===o?this.indentate(r)+"<"+e+n+this.closeTag(e)+this.tagEndChar:this.indentate(r)+"<"+e+n+">"+o+"0&&this.options.processEntities)for(let e=0;e{function e(t,s,a,c){let u="",l=!1;for(let h=0;h"),l=!1;continue}if(p===s.commentPropName){u+=c+"\x3c!--".concat(f[p][0][s.textNodeName],"--\x3e"),l=!0;continue}if("?"===p[0]){const t=r(f[":@"],s),e="?xml"===p?"":c;let n=f[p][0][s.textNodeName];n=0!==n.length?" "+n:"",u+=e+"<".concat(p).concat(n).concat(t,"?>"),l=!0;continue}let g=c;""!==g&&(g+=s.indentBy);const m=r(f[":@"],s),v=c+"<".concat(p).concat(m),y=e(f[p],s,d,g);-1!==s.unpairedTags.indexOf(p)?s.suppressUnpairedNode?u+=v+">":u+=v+"/>":y&&0!==y.length||!s.suppressEmptyNode?y&&y.endsWith(">")?u+=v+">".concat(y).concat(c,""):(u+=v+">",y&&""!==c&&(y.includes("/>")||y.includes("")):u+=v+"/>",l=!0}return u}function n(t){const e=Object.keys(t);for(let t=0;t0&&e.processEntities)for(let n=0;n0&&(r="\n"),e(t,n,"",r)}},193:(t,e,n)=>{const r=n(705);function o(t,e){let n="";for(;e"===t[e]){if(f?"-"===t[e-1]&&"-"===t[e-2]&&(f=!1,r--):r--,0===r)break}else"["===t[e]?h=!0:p+=t[e];else{if(h&&s(t,e))e+=7,[entityName,val,e]=o(t,e+1),-1===val.indexOf("&")&&(n[l(entityName)]={regx:RegExp("&".concat(entityName,";"),"g"),val});else if(h&&a(t,e))e+=8;else if(h&&c(t,e))e+=8;else if(h&&u(t,e))e+=9;else{if(!i)throw new Error("Invalid DOCTYPE");f=!0}r++,p=""}if(0!==r)throw new Error("Unclosed DOCTYPE")}return{entities:n,i:e}}},63:(t,e)=>{const n={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,n){return t}};e.buildOptions=function(t){return Object.assign({},n,t)},e.defaultOptions=n},299:(t,e,n)=>{const r=n(705),o=n(365),i=n(193),s=n(494);function a(t){const e=Object.keys(t);for(let n=0;n0)){s||(t=this.replaceEntitiesValue(t));const r=this.options.tagValueProcessor(e,t,n,o,i);return null==r?t:typeof r!=typeof t||r!==t?r:this.options.trimValues||t.trim()===t?w(t,this.options.parseTagValue,this.options.numberParseOptions):t}}function u(t){if(this.options.removeNSPrefix){const e=t.split(":"),n="/"===t.charAt(0)?"/":"";if("xmlns"===e[0])return"";2===e.length&&(t=n+e[1])}return t}"<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,r.nameRegexp);const l=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function h(t,e,n){if(!this.options.ignoreAttributes&&"string"==typeof t){const n=r.getAllMatches(t,l),o=n.length,i={};for(let t=0;t",a,"Closing Tag is not closed.");let o=t.substring(a+2,e).trim();if(this.options.removeNSPrefix){const t=o.indexOf(":");-1!==t&&(o=o.substr(t+1))}this.options.transformTagName&&(o=this.options.transformTagName(o)),n&&(r=this.saveTextToParentTag(r,n,s));const i=s.substring(s.lastIndexOf(".")+1);if(o&&-1!==this.options.unpairedTags.indexOf(o))throw new Error("Unpaired tag can not be used as closing tag: "));let c=0;i&&-1!==this.options.unpairedTags.indexOf(i)?(c=s.lastIndexOf(".",s.lastIndexOf(".")-1),this.tagsNodeStack.pop()):c=s.lastIndexOf("."),s=s.substring(0,c),n=this.tagsNodeStack.pop(),r="",a=e}else if("?"===t[a+1]){let e=y(t,a,!1,"?>");if(!e)throw new Error("Pi Tag is not closed.");if(r=this.saveTextToParentTag(r,n,s),this.options.ignoreDeclaration&&"?xml"===e.tagName||this.options.ignorePiTags);else{const t=new o(e.tagName);t.add(this.options.textNodeName,""),e.tagName!==e.tagExp&&e.attrExpPresent&&(t[":@"]=this.buildAttributesMap(e.tagExp,s,e.tagName)),this.addChild(n,t,s)}a=e.closeIndex+1}else if("!--"===t.substr(a+1,3)){const e=v(t,"--\x3e",a+4,"Comment is not closed.");if(this.options.commentPropName){const o=t.substring(a+4,e-2);r=this.saveTextToParentTag(r,n,s),n.add(this.options.commentPropName,[{[this.options.textNodeName]:o}])}a=e}else if("!D"===t.substr(a+1,2)){const e=i(t,a);this.docTypeEntities=e.entities,a=e.i}else if("!["===t.substr(a+1,2)){const e=v(t,"]]>",a,"CDATA is not closed.")-2,o=t.substring(a+9,e);if(r=this.saveTextToParentTag(r,n,s),this.options.cdataPropName)n.add(this.options.cdataPropName,[{[this.options.textNodeName]:o}]);else{let t=this.parseTextData(o,n.tagname,s,!0,!1,!0);null==t&&(t=""),n.add(this.options.textNodeName,t)}a=e+2}else{let i=y(t,a,this.options.removeNSPrefix),c=i.tagName,u=i.tagExp,l=i.attrExpPresent,h=i.closeIndex;this.options.transformTagName&&(c=this.options.transformTagName(c)),n&&r&&"!xml"!==n.tagname&&(r=this.saveTextToParentTag(r,n,s,!1));const f=n;if(f&&-1!==this.options.unpairedTags.indexOf(f.tagname)&&(n=this.tagsNodeStack.pop(),s=s.substring(0,s.lastIndexOf("."))),c!==e.tagname&&(s+=s?"."+c:c),this.isItStopNode(this.options.stopNodes,s,c)){let e="";if(u.length>0&&u.lastIndexOf("/")===u.length-1)a=i.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(c))a=i.closeIndex;else{const n=this.readStopNodeData(t,c,h+1);if(!n)throw new Error("Unexpected end of ".concat(c));a=n.i,e=n.tagContent}const r=new o(c);c!==u&&l&&(r[":@"]=this.buildAttributesMap(u,s,c)),e&&(e=this.parseTextData(e,c,s,!0,l,!0,!0)),s=s.substr(0,s.lastIndexOf(".")),r.add(this.options.textNodeName,e),this.addChild(n,r,s)}else{if(u.length>0&&u.lastIndexOf("/")===u.length-1){"/"===c[c.length-1]?(c=c.substr(0,c.length-1),s=s.substr(0,s.length-1),u=c):u=u.substr(0,u.length-1),this.options.transformTagName&&(c=this.options.transformTagName(c));const t=new o(c);c!==u&&l&&(t[":@"]=this.buildAttributesMap(u,s,c)),this.addChild(n,t,s),s=s.substr(0,s.lastIndexOf("."))}else{const t=new o(c);this.tagsNodeStack.push(n),c!==u&&l&&(t[":@"]=this.buildAttributesMap(u,s,c)),this.addChild(n,t,s),n=t}r="",a=h}}else r+=t[a];return e.child};function p(t,e,n){const r=this.options.updateTag(e.tagname,n,e[":@"]);!1===r||("string"==typeof r?(e.tagname=r,t.addChild(e)):t.addChild(e))}const d=function(t){if(this.options.processEntities){for(let e in this.docTypeEntities){const n=this.docTypeEntities[e];t=t.replace(n.regx,n.val)}for(let e in this.lastEntities){const n=this.lastEntities[e];t=t.replace(n.regex,n.val)}if(this.options.htmlEntities)for(let e in this.htmlEntities){const n=this.htmlEntities[e];t=t.replace(n.regex,n.val)}t=t.replace(this.ampEntity.regex,this.ampEntity.val)}return t};function g(t,e,n,r){return t&&(void 0===r&&(r=0===Object.keys(e.child).length),void 0!==(t=this.parseTextData(t,e.tagname,n,!1,!!e[":@"]&&0!==Object.keys(e[":@"]).length,r))&&""!==t&&e.add(this.options.textNodeName,t),t=""),t}function m(t,e,n){const r="*."+n;for(const n in t){const o=t[n];if(r===o||e===o)return!0}return!1}function v(t,e,n,r){const o=t.indexOf(e,n);if(-1===o)throw new Error(r);return o+e.length-1}function y(t,e,n){const r=function(t,e){let n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:">",o="";for(let i=e;i3&&void 0!==arguments[3]?arguments[3]:">");if(!r)return;let o=r.data;const i=r.index,s=o.search(/\s/);let a=o,c=!0;if(-1!==s&&(a=o.substr(0,s).replace(/\s\s*$/,""),o=o.substr(s+1)),n){const t=a.indexOf(":");-1!==t&&(a=a.substr(t+1),c=a!==r.data.substr(t+1))}return{tagName:a,tagExp:o,closeIndex:i,attrExpPresent:c}}function b(t,e,n){const r=n;let o=1;for(;n",n,"".concat(e," is not closed"));if(t.substring(n+2,i).trim()===e&&(o--,0===o))return{tagContent:t.substring(r,n),i};n=i}else if("?"===t[n+1])n=v(t,"?>",n+1,"StopNode is not closed.");else if("!--"===t.substr(n+1,3))n=v(t,"--\x3e",n+3,"StopNode is not closed.");else if("!["===t.substr(n+1,2))n=v(t,"]]>",n,"StopNode is not closed.")-2;else{const r=y(t,n,">");r&&((r&&r.tagName)===e&&"/"!==r.tagExp[r.tagExp.length-1]&&o++,n=r.closeIndex)}}function w(t,e,n){if(e&&"string"==typeof t){const e=t.trim();return"true"===e||"false"!==e&&s(t,n)}return r.isExist(t)?t:""}t.exports=class{constructor(t){this.options=t,this.currentNode=null,this.tagsNodeStack=[],this.docTypeEntities={},this.lastEntities={apos:{regex:/&(apos|#39|#x27);/g,val:"'"},gt:{regex:/&(gt|#62|#x3E);/g,val:">"},lt:{regex:/&(lt|#60|#x3C);/g,val:"<"},quot:{regex:/&(quot|#34|#x22);/g,val:'"'}},this.ampEntity={regex:/&(amp|#38|#x26);/g,val:"&"},this.htmlEntities={space:{regex:/&(nbsp|#160);/g,val:" "},cent:{regex:/&(cent|#162);/g,val:"¢"},pound:{regex:/&(pound|#163);/g,val:"£"},yen:{regex:/&(yen|#165);/g,val:"¥"},euro:{regex:/&(euro|#8364);/g,val:"€"},copyright:{regex:/&(copy|#169);/g,val:"©"},reg:{regex:/&(reg|#174);/g,val:"®"},inr:{regex:/&(inr|#8377);/g,val:"₹"}},this.addExternalEntities=a,this.parseXml=f,this.parseTextData=c,this.resolveNameSpace=u,this.buildAttributesMap=h,this.isItStopNode=m,this.replaceEntitiesValue=d,this.readStopNodeData=b,this.saveTextToParentTag=g,this.addChild=p}}},338:(t,e,n)=>{const{buildOptions:r}=n(63),o=n(299),{prettify:i}=n(728),s=n(31);t.exports=class{constructor(t){this.externalEntities={},this.options=r(t)}parse(t,e){if("string"==typeof t);else{if(!t.toString)throw new Error("XML data is accepted in String or Bytes[] form.");t=t.toString()}if(e){!0===e&&(e={});const n=s.validate(t,e);if(!0!==n)throw Error("".concat(n.err.msg,":").concat(n.err.line,":").concat(n.err.col))}const n=new o(this.options);n.addExternalEntities(this.externalEntities);const r=n.parseXml(t);return this.options.preserveOrder||void 0===r?r:i(r,this.options)}addEntity(t,e){if(-1!==e.indexOf("&"))throw new Error("Entity value can't have '&'");if(-1!==t.indexOf("&")||-1!==t.indexOf(";"))throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for ' '");if("&"===e)throw new Error("An entity with value '&' is not permitted");this.externalEntities[t]=e}}},728:(t,e)=>{function n(t,e,s){let a;const c={};for(let u=0;u0&&(c[e.textNodeName]=a):void 0!==a&&(c[e.textNodeName]=a),c}function r(t){const e=Object.keys(t);for(let t=0;t{t.exports=class{constructor(t){this.tagname=t,this.child=[],this[":@"]={}}add(t,e){"__proto__"===t&&(t="#__proto__"),this.child.push({[t]:e})}addChild(t){"__proto__"===t.tagname&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push({[t.tagname]:t.child,":@":t[":@"]}):this.child.push({[t.tagname]:t.child})}}},135:t=>{function e(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}t.exports=function(t){return null!=t&&(e(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&e(t.slice(0,0))}(t)||!!t._isBuffer)}},542:(t,e,n)=>{var r,o,i,s,a;r=n(298),o=n(526).utf8,i=n(135),s=n(526).bin,(a=function(t,e){t.constructor==String?t=e&&"binary"===e.encoding?s.stringToBytes(t):o.stringToBytes(t):i(t)?t=Array.prototype.slice.call(t,0):Array.isArray(t)||t.constructor===Uint8Array||(t=t.toString());for(var n=r.bytesToWords(t),c=8*t.length,u=1732584193,l=-271733879,h=-1732584194,f=271733878,p=0;p>>24)|4278255360&(n[p]<<24|n[p]>>>8);n[c>>>5]|=128<>>9<<4)]=c;var d=a._ff,g=a._gg,m=a._hh,v=a._ii;for(p=0;p>>0,l=l+b>>>0,h=h+w>>>0,f=f+x>>>0}return r.endian([u,l,h,f])})._ff=function(t,e,n,r,o,i,s){var a=t+(e&n|~e&r)+(o>>>0)+s;return(a<>>32-i)+e},a._gg=function(t,e,n,r,o,i,s){var a=t+(e&r|n&~r)+(o>>>0)+s;return(a<>>32-i)+e},a._hh=function(t,e,n,r,o,i,s){var a=t+(e^n^r)+(o>>>0)+s;return(a<>>32-i)+e},a._ii=function(t,e,n,r,o,i,s){var a=t+(n^(e|~r))+(o>>>0)+s;return(a<>>32-i)+e},a._blocksize=16,a._digestsize=16,t.exports=function(t,e){if(null==t)throw new Error("Illegal argument "+t);var n=r.wordsToBytes(a(t,e));return e&&e.asBytes?n:e&&e.asString?s.bytesToString(n):r.bytesToHex(n)}},285:(t,e,n)=>{var r=n(2);t.exports=function(t){return t?("{}"===t.substr(0,2)&&(t="\\{\\}"+t.substr(2)),m(function(t){return t.split("\\\\").join(o).split("\\{").join(i).split("\\}").join(s).split("\\,").join(a).split("\\.").join(c)}(t),!0).map(l)):[]};var o="\0SLASH"+Math.random()+"\0",i="\0OPEN"+Math.random()+"\0",s="\0CLOSE"+Math.random()+"\0",a="\0COMMA"+Math.random()+"\0",c="\0PERIOD"+Math.random()+"\0";function u(t){return parseInt(t,10)==t?parseInt(t,10):t.charCodeAt(0)}function l(t){return t.split(o).join("\\").split(i).join("{").split(s).join("}").split(a).join(",").split(c).join(".")}function h(t){if(!t)return[""];var e=[],n=r("{","}",t);if(!n)return t.split(",");var o=n.pre,i=n.body,s=n.post,a=o.split(",");a[a.length-1]+="{"+i+"}";var c=h(s);return s.length&&(a[a.length-1]+=c.shift(),a.push.apply(a,c)),e.push.apply(e,a),e}function f(t){return"{"+t+"}"}function p(t){return/^-?0\d/.test(t)}function d(t,e){return t<=e}function g(t,e){return t>=e}function m(t,e){var n=[],o=r("{","}",t);if(!o)return[t];var i=o.pre,a=o.post.length?m(o.post,!1):[""];if(/\$$/.test(o.pre))for(var c=0;c=0;if(!x&&!N)return o.post.match(/,.*\}/)?m(t=o.pre+"{"+o.body+s+o.post):[t];if(x)v=o.body.split(/\.\./);else if(1===(v=h(o.body)).length&&1===(v=m(v[0],!1).map(f)).length)return a.map((function(t){return o.pre+v[0]+t}));if(x){var P=u(v[0]),A=u(v[1]),O=Math.max(v[0].length,v[1].length),E=3==v.length?Math.abs(u(v[2])):1,T=d;A0){var k=new Array(I+1).join("0");S=C<0?"-"+k+S.slice(1):k+S}}y.push(S)}}else{y=[];for(var R=0;R{function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(t)}function n(t){var e="function"==typeof Map?new Map:void 0;return n=function(t){if(null===t||(n=t,-1===Function.toString.call(n).indexOf("[native code]")))return t;var n;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,s)}function s(){return r(t,arguments,i(this).constructor)}return s.prototype=Object.create(t.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),o(s,t)},n(t)}function r(t,e,n){return r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}()?Reflect.construct:function(t,e,n){var r=[null];r.push.apply(r,e);var i=new(Function.bind.apply(t,r));return n&&o(i,n.prototype),i},r.apply(null,arguments)}function o(t,e){return o=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},o(t,e)}function i(t){return i=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},i(t)}var s=function(t){function n(t){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),(r=function(t,n){return!n||"object"!==e(n)&&"function"!=typeof n?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):n}(this,i(n).call(this,t))).name="ObjectPrototypeMutationError",r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&o(t,e)}(n,t),n}(n(Error));function a(t,n){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},o=n.split("."),i=o.length,s=function(e){var n=o[e];if(!t)return{v:void 0};if("+"===n){if(Array.isArray(t))return{v:t.map((function(n,i){var s=o.slice(e+1);return s.length>0?a(n,s.join("."),r):r(t,i,o,e)}))};var i=o.slice(0,e).join(".");throw new Error("Object at wildcard (".concat(i,") is not an array"))}t=r(t,n,o,e)},c=0;c2&&void 0!==arguments[2]?arguments[2]:{};if("object"!=e(t)||null===t)return!1;if(void 0===n)return!1;if("number"==typeof n)return n in t;try{var o=!1;return a(t,n,(function(t,e,n,i){if(!c(n,i))return t&&t[e];o=r.own?t.hasOwnProperty(e):e in t})),o}catch(t){return!1}},hasOwn:function(t,e,n){return this.has(t,e,n||{own:!0})},isIn:function(t,n,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if("object"!=e(t)||null===t)return!1;if(void 0===n)return!1;try{var i=!1,s=!1;return a(t,n,(function(t,n,o,a){return i=i||t===r||!!t&&t[n]===r,s=c(o,a)&&"object"===e(t)&&n in t,t&&t[n]})),o.validPath?i&&s:i}catch(t){return!1}},ObjectPrototypeMutationError:s}},47:(t,e,n)=>{var r=n(410),o=function(t){return"string"==typeof t};function i(t,e){for(var n=[],r=0;r=-1&&!e;n--){var r=n>=0?arguments[n]:process.cwd();if(!o(r))throw new TypeError("Arguments to path.resolve must be strings");r&&(t=r+"/"+t,e="/"===r.charAt(0))}return(e?"/":"")+(t=i(t.split("/"),!e).join("/"))||"."},a.normalize=function(t){var e=a.isAbsolute(t),n="/"===t.substr(-1);return(t=i(t.split("/"),!e).join("/"))||e||(t="."),t&&n&&(t+="/"),(e?"/":"")+t},a.isAbsolute=function(t){return"/"===t.charAt(0)},a.join=function(){for(var t="",e=0;e=0&&""===t[n];n--);return e>n?[]:t.slice(e,n+1)}t=a.resolve(t).substr(1),e=a.resolve(e).substr(1);for(var r=n(t.split("/")),o=n(e.split("/")),i=Math.min(r.length,o.length),s=i,c=0;c{var n=Object.prototype.hasOwnProperty;function r(t){try{return decodeURIComponent(t.replace(/\+/g," "))}catch(t){return null}}function o(t){try{return encodeURIComponent(t)}catch(t){return null}}e.stringify=function(t,e){e=e||"";var r,i,s=[];for(i in"string"!=typeof e&&(e="?"),t)if(n.call(t,i)){if((r=t[i])||null!=r&&!isNaN(r)||(r=""),i=o(i),r=o(r),null===i||null===r)continue;s.push(i+"="+r)}return s.length?e+s.join("&"):""},e.parse=function(t){for(var e,n=/([^=?#&]+)=?([^&]*)/g,o={};e=n.exec(t);){var i=r(e[1]),s=r(e[2]);null===i||null===s||i in o||(o[i]=s)}return o}},670:t=>{t.exports=function(t,e){if(e=e.split(":")[0],!(t=+t))return!1;switch(e){case"http":case"ws":return 80!==t;case"https":case"wss":return 443!==t;case"ftp":return 21!==t;case"gopher":return 70!==t;case"file":return!1}return 0!==t}},494:t=>{const e=/^[-+]?0x[a-fA-F0-9]+$/,n=/^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/;!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);const r={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0};t.exports=function(t){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(o=Object.assign({},r,o),!t||"string"!=typeof t)return t;let i=t.trim();if(void 0!==o.skipLike&&o.skipLike.test(i))return t;if(o.hex&&e.test(i))return Number.parseInt(i,16);{const e=n.exec(i);if(e){const n=e[1],r=e[2];let a=(s=e[3])&&-1!==s.indexOf(".")?("."===(s=s.replace(/0+$/,""))?s="0":"."===s[0]?s="0"+s:"."===s[s.length-1]&&(s=s.substr(0,s.length-1)),s):s;const c=e[4]||e[6];if(!o.leadingZeros&&r.length>0&&n&&"."!==i[2])return t;if(!o.leadingZeros&&r.length>0&&!n&&"."!==i[1])return t;{const e=Number(i),s=""+e;return-1!==s.search(/[eE]/)||c?o.eNotation?e:t:-1!==i.indexOf(".")?"0"===s&&""===a||s===a||n&&s==="-"+a?e:t:r?a===s||n+a===s?e:t:i===s||i===n+s?e:t}}return t}var s}},737:(t,e,n)=>{var r=n(670),o=n(647),i=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,s=/[\n\r\t]/g,a=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,c=/:\d+$/,u=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,l=/^[a-zA-Z]:/;function h(t){return(t||"").toString().replace(i,"")}var f=[["#","hash"],["?","query"],function(t,e){return g(e.protocol)?t.replace(/\\/g,"/"):t},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],p={hash:1,query:1};function d(t){var e,n=("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{}).location||{},r={},o=typeof(t=t||n);if("blob:"===t.protocol)r=new v(unescape(t.pathname),{});else if("string"===o)for(e in r=new v(t,{}),p)delete r[e];else if("object"===o){for(e in t)e in p||(r[e]=t[e]);void 0===r.slashes&&(r.slashes=a.test(t.href))}return r}function g(t){return"file:"===t||"ftp:"===t||"http:"===t||"https:"===t||"ws:"===t||"wss:"===t}function m(t,e){t=(t=h(t)).replace(s,""),e=e||{};var n,r=u.exec(t),o=r[1]?r[1].toLowerCase():"",i=!!r[2],a=!!r[3],c=0;return i?a?(n=r[2]+r[3]+r[4],c=r[2].length+r[3].length):(n=r[2]+r[4],c=r[2].length):a?(n=r[3]+r[4],c=r[3].length):n=r[4],"file:"===o?c>=2&&(n=n.slice(2)):g(o)?n=r[4]:o?i&&(n=n.slice(2)):c>=2&&g(e.protocol)&&(n=r[4]),{protocol:o,slashes:i||g(o),slashesCount:c,rest:n}}function v(t,e,n){if(t=(t=h(t)).replace(s,""),!(this instanceof v))return new v(t,e,n);var i,a,c,u,p,y,b=f.slice(),w=typeof e,x=this,N=0;for("object"!==w&&"string"!==w&&(n=e,e=null),n&&"function"!=typeof n&&(n=o.parse),i=!(a=m(t||"",e=d(e))).protocol&&!a.slashes,x.slashes=a.slashes||i&&e.slashes,x.protocol=a.protocol||e.protocol||"",t=a.rest,("file:"===a.protocol&&(2!==a.slashesCount||l.test(t))||!a.slashes&&(a.protocol||a.slashesCount<2||!g(x.protocol)))&&(b[3]=[/(.*)/,"pathname"]);N{},388:()=>{},805:()=>{},800:()=>{}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{n.d(r,{hT:()=>C,O4:()=>S,Kd:()=>T,YK:()=>j,UU:()=>Ke,Gu:()=>M,ky:()=>te,h4:()=>Jt,hq:()=>zt,i5:()=>ee});var t=n(737),e=n.n(t);function o(t){if(!i(t))throw new Error("Parameter was not an error")}function i(t){return"[object Error]"===(e=t,Object.prototype.toString.call(e))||t instanceof Error;var e}class s extends Error{constructor(t,e){const n=[...arguments],{options:r,shortMessage:o}=function(t){let e,n="";if(0===t.length)e={};else if(i(t[0]))e={cause:t[0]},n=t.slice(1).join(" ")||"";else if(t[0]&&"object"==typeof t[0])e=Object.assign({},t[0]),n=t.slice(1).join(" ")||"";else{if("string"!=typeof t[0])throw new Error("Invalid arguments passed to Layerr");e={},n=n=t.join(" ")||""}return{options:e,shortMessage:n}}(n);let s=o;if(r.cause&&(s="".concat(s,": ").concat(r.cause.message)),super(s),this.message=s,r.name&&"string"==typeof r.name?this.name=r.name:this.name="Layerr",r.cause&&Object.defineProperty(this,"_cause",{value:r.cause}),Object.defineProperty(this,"_info",{value:{}}),r.info&&"object"==typeof r.info&&Object.assign(this._info,r.info),Error.captureStackTrace){const t=r.constructorOpt||this.constructor;Error.captureStackTrace(this,t)}}static cause(t){return o(t),t._cause&&i(t._cause)?t._cause:null}static fullStack(t){o(t);const e=s.cause(t);return e?"".concat(t.stack,"\ncaused by: ").concat(s.fullStack(e)):t.stack}static info(t){o(t);const e={},n=s.cause(t);return n&&Object.assign(e,s.info(n)),t._info&&Object.assign(e,t._info),e}cause(){return s.cause(this)}toString(){let t=this.name||this.constructor.name||this.constructor.prototype.name;return this.message&&(t="".concat(t,": ").concat(this.message)),t}}var a=n(47),c=n.n(a);const u="__PATH_SEPARATOR_POSIX__",l="__PATH_SEPARATOR_WINDOWS__";function h(t){try{const e=t.replace(/\//g,u).replace(/\\\\/g,l);return encodeURIComponent(e).split(l).join("\\\\").split(u).join("/")}catch(t){throw new s(t,"Failed encoding path")}}function f(t){return t.startsWith("/")?t:"/"+t}function p(t){let e=t;return"/"!==e[0]&&(e="/"+e),/^.+\/$/.test(e)&&(e=e.substr(0,e.length-1)),e}function d(t){let n=new(e())(t).pathname;return n.length<=0&&(n="/"),p(n)}function g(){for(var t=arguments.length,e=new Array(t),n=0;n1){var n=t.shift();t[0]=n+t[0]}t[0].match(/^file:\/\/\//)?t[0]=t[0].replace(/^([^/:]+):\/*/,"$1:///"):t[0]=t[0].replace(/^([^/:]+):\/*/,"$1://");for(var r=0;r0&&(o=o.replace(/^[\/]+/,"")),o=r0?"?":"")+s.join("&")}("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}(e.reduce(((t,e,n)=>((0===n||"/"!==e||"/"===e&&"/"!==t[t.length-1])&&t.push(e),t)),[]))}var m=n(542),v=n.n(m);const y="abcdef0123456789";function b(t,e){const n=t.url.replace("//",""),r=-1==n.indexOf("/")?"/":n.slice(n.indexOf("/")),o=t.method?t.method.toUpperCase():"GET",i=!!/(^|,)\s*auth\s*($|,)/.test(e.qop)&&"auth",s="00000000".concat(e.nc).slice(-8),a=function(t,e,n,r,o,i,s){const a=s||v()("".concat(e,":").concat(n,":").concat(r));return t&&"md5-sess"===t.toLowerCase()?v()("".concat(a,":").concat(o,":").concat(i)):a}(e.algorithm,e.username,e.realm,e.password,e.nonce,e.cnonce,e.ha1),c=v()("".concat(o,":").concat(r)),u=i?v()("".concat(a,":").concat(e.nonce,":").concat(s,":").concat(e.cnonce,":").concat(i,":").concat(c)):v()("".concat(a,":").concat(e.nonce,":").concat(c)),l={username:e.username,realm:e.realm,nonce:e.nonce,uri:r,qop:i,response:u,nc:s,cnonce:e.cnonce,algorithm:e.algorithm,opaque:e.opaque},h=[];for(const t in l)l[t]&&("qop"===t||"nc"===t||"algorithm"===t?h.push("".concat(t,"=").concat(l[t])):h.push("".concat(t,'="').concat(l[t],'"')));return"Digest ".concat(h.join(", "))}function w(t){return"digest"===(t.headers&&t.headers.get("www-authenticate")||"").split(/\s/)[0].toLowerCase()}var x=n(101),N=n.n(x);function P(t){return N().decode(t)}function A(t,e){const n=(r="".concat(t,":").concat(e),N().encode(r));var r;return"Basic ".concat(n)}const O="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:"undefined"!=typeof window?window:globalThis,E=O.fetch.bind(O),T=(O.Headers,O.Request),j=O.Response;let C=function(t){return t.Auto="auto",t.Digest="digest",t.None="none",t.Password="password",t.Token="token",t}({}),S=function(t){return t.DataTypeNoLength="data-type-no-length",t.InvalidAuthType="invalid-auth-type",t.InvalidOutputFormat="invalid-output-format",t.LinkUnsupportedAuthType="link-unsupported-auth",t.InvalidUpdateRange="invalid-update-range",t.NotSupported="not-supported",t}({});function I(t,e,n,r,o){switch(t.authType){case C.Auto:e&&n&&(t.headers.Authorization=A(e,n));break;case C.Digest:t.digest=function(t,e,n){return{username:t,password:e,ha1:n,nc:0,algorithm:"md5",hasDigestAuth:!1}}(e,n,o);break;case C.None:break;case C.Password:t.headers.Authorization=A(e,n);break;case C.Token:t.headers.Authorization="".concat((i=r).token_type," ").concat(i.access_token);break;default:throw new s({info:{code:S.InvalidAuthType}},"Invalid auth type: ".concat(t.authType))}var i}n(800);const k="@@HOTPATCHER",R=()=>{};function L(t){return{original:t,methods:[t],final:!1}}class _{constructor(){this._configuration={registry:{},getEmptyAction:"null"},this.__type__=k}get configuration(){return this._configuration}get getEmptyAction(){return this.configuration.getEmptyAction}set getEmptyAction(t){this.configuration.getEmptyAction=t}control(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!t||t.__type__!==k)throw new Error("Failed taking control of target HotPatcher instance: Invalid type or object");return Object.keys(t.configuration.registry).forEach((n=>{this.configuration.registry.hasOwnProperty(n)?e&&(this.configuration.registry[n]=Object.assign({},t.configuration.registry[n])):this.configuration.registry[n]=Object.assign({},t.configuration.registry[n])})),t._configuration=this.configuration,this}execute(t){const e=this.get(t)||R;for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o0;)o=[e.shift().apply(i,o)];return o[0]}}(...e.methods)}isPatched(t){return!!this.configuration.registry[t]}patch(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{chain:r=!1}=n;if(this.configuration.registry[t]&&this.configuration.registry[t].final)throw new Error("Failed patching '".concat(t,"': Method marked as being final"));if("function"!=typeof e)throw new Error("Failed patching '".concat(t,"': Provided method is not a function"));if(r)this.configuration.registry[t]?this.configuration.registry[t].methods.push(e):this.configuration.registry[t]=L(e);else if(this.isPatched(t)){const{original:n}=this.configuration.registry[t];this.configuration.registry[t]=Object.assign(L(e),{original:n})}else this.configuration.registry[t]=L(e);return this}patchInline(t,e){this.isPatched(t)||this.patch(t,e);for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o1?e-1:0),r=1;r{this.patch(t,e,{chain:!0})})),this}restore(t){if(!this.isPatched(t))throw new Error("Failed restoring method: No method present for key: ".concat(t));if("function"!=typeof this.configuration.registry[t].original)throw new Error("Failed restoring method: Original method not found or of invalid type for key: ".concat(t));return this.configuration.registry[t].methods=[this.configuration.registry[t].original],this}setFinal(t){if(!this.configuration.registry.hasOwnProperty(t))throw new Error("Failed marking '".concat(t,"' as final: No method found for key"));return this.configuration.registry[t].final=!0,this}}let U=null;function M(){return U||(U=new _),U}function F(t){return function(t){if("object"!=typeof t||null===t||"[object Object]"!=Object.prototype.toString.call(t))return!1;if(null===Object.getPrototypeOf(t))return!0;let e=t;for(;null!==Object.getPrototypeOf(e);)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e}(t)?Object.assign({},t):Object.setPrototypeOf(Object.assign({},t),Object.getPrototypeOf(t))}function D(){for(var t=arguments.length,e=new Array(t),n=0;n0;){const t=o.shift();r=r?$(r,t):F(t)}return r}function $(t,e){const n=F(t);return Object.keys(e).forEach((t=>{n.hasOwnProperty(t)?Array.isArray(e[t])?n[t]=Array.isArray(n[t])?[...n[t],...e[t]]:[...e[t]]:"object"==typeof e[t]&&e[t]?n[t]="object"==typeof n[t]&&n[t]?$(n[t],e[t]):F(e[t]):n[t]=e[t]:n[t]=e[t]})),n}function B(t){const e={};for(const n of t.keys())e[n]=t.get(n);return e}function W(){for(var t=arguments.length,e=new Array(t),n=0;n(Object.keys(e).forEach((n=>{const o=n.toLowerCase();r.hasOwnProperty(o)?t[r[o]]=e[n]:(r[o]=n,t[n]=e[n])})),t)),{})}n(805);const V="function"==typeof ArrayBuffer,{toString:z}=Object.prototype;function q(t){return V&&(t instanceof ArrayBuffer||"[object ArrayBuffer]"===z.call(t))}function G(t){return null!=t&&null!=t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}function H(t){return function(){for(var e=[],n=0;ne.patchInline("fetch",E,t.url,function(t){let e={};const n={method:t.method};if(t.headers&&(e=W(e,t.headers)),void 0!==t.data){const[r,o]=function(t){if("string"==typeof t)return[t,{}];if(G(t))return[t,{}];if(q(t))return[t,{}];if(t&&"object"==typeof t)return[JSON.stringify(t),{"content-type":"application/json"}];throw new Error("Unable to convert request body: Unexpected body type: ".concat(typeof t))}(t.data);n.body=r,e=W(e,o)}return t.signal&&(n.signal=t.signal),t.withCredentials&&(n.credentials="include"),n.headers=e,n}(t))),t)}var tt=n(285);const et={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},nt=t=>t.replace(/[[\]\\-]/g,"\\$&"),rt=t=>t.join(""),ot=(t,e)=>{const n=e;if("["!==t.charAt(n))throw new Error("not in a brace expression");const r=[],o=[];let i=n+1,s=!1,a=!1,c=!1,u=!1,l=n,h="";t:for(;ih?r.push(nt(h)+"-"+nt(e)):e===h&&r.push(nt(e)),h="",i++):t.startsWith("-]",i+1)?(r.push(nt(e+"-")),i+=2):t.startsWith("-",i+1)?(h=e,i+=2):(r.push(nt(e)),i++)}else c=!0,i++}else u=!0,i++}if(l2&&void 0!==arguments[2]?arguments[2]:{};return Ft(e),!(!n.nocomment&&"#"===e.charAt(0))&&new Bt(e,n).match(t)},at=st,ct=/^\*+([^+@!?\*\[\(]*)$/,ut=t=>e=>!e.startsWith(".")&&e.endsWith(t),lt=t=>e=>e.endsWith(t),ht=t=>(t=t.toLowerCase(),e=>!e.startsWith(".")&&e.toLowerCase().endsWith(t)),ft=t=>(t=t.toLowerCase(),e=>e.toLowerCase().endsWith(t)),pt=/^\*+\.\*+$/,dt=t=>!t.startsWith(".")&&t.includes("."),gt=t=>"."!==t&&".."!==t&&t.includes("."),mt=/^\.\*+$/,vt=t=>"."!==t&&".."!==t&&t.startsWith("."),yt=/^\*+$/,bt=t=>0!==t.length&&!t.startsWith("."),wt=t=>0!==t.length&&"."!==t&&".."!==t,xt=/^\?+([^+@!?\*\[\(]*)?$/,Nt=t=>{let[e,n=""]=t;const r=Et([e]);return n?(n=n.toLowerCase(),t=>r(t)&&t.toLowerCase().endsWith(n)):r},Pt=t=>{let[e,n=""]=t;const r=Tt([e]);return n?(n=n.toLowerCase(),t=>r(t)&&t.toLowerCase().endsWith(n)):r},At=t=>{let[e,n=""]=t;const r=Tt([e]);return n?t=>r(t)&&t.endsWith(n):r},Ot=t=>{let[e,n=""]=t;const r=Et([e]);return n?t=>r(t)&&t.endsWith(n):r},Et=t=>{let[e]=t;const n=e.length;return t=>t.length===n&&!t.startsWith(".")},Tt=t=>{let[e]=t;const n=e.length;return t=>t.length===n&&"."!==t&&".."!==t},jt="object"==typeof process&&process?"object"==typeof process.env&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix";st.sep="win32"===jt?"\\":"/";const Ct=Symbol("globstar **");st.GLOBSTAR=Ct;const St={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},It="[^/]",kt=It+"*?",Rt=t=>t.split("").reduce(((t,e)=>(t[e]=!0,t)),{}),Lt=Rt("().*{}+?[]^$\\!"),_t=Rt("[.(");st.filter=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return n=>st(n,t,e)};const Ut=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.assign({},t,e)};st.defaults=t=>{if(!t||"object"!=typeof t||!Object.keys(t).length)return st;const e=st;return Object.assign((function(n,r){return e(n,r,Ut(t,arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}))}),{Minimatch:class extends e.Minimatch{constructor(e){super(e,Ut(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}))}static defaults(n){return e.defaults(Ut(t,n)).Minimatch}},unescape:function(n){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.unescape(n,Ut(t,r))},escape:function(n){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.escape(n,Ut(t,r))},filter:function(n){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.filter(n,Ut(t,r))},defaults:n=>e.defaults(Ut(t,n)),makeRe:function(n){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.makeRe(n,Ut(t,r))},braceExpand:function(n){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.braceExpand(n,Ut(t,r))},match:function(n,r){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.match(n,r,Ut(t,o))},sep:e.sep,GLOBSTAR:Ct})};const Mt=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Ft(t),e.nobrace||!/\{(?:(?!\{).)*\}/.test(t)?[t]:tt(t)};st.braceExpand=Mt;const Ft=t=>{if("string"!=typeof t)throw new TypeError("invalid pattern");if(t.length>65536)throw new TypeError("pattern is too long")};st.makeRe=function(t){return new Bt(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).makeRe()},st.match=function(t,e){const n=new Bt(e,arguments.length>2&&void 0!==arguments[2]?arguments[2]:{});return t=t.filter((t=>n.match(t))),n.options.nonull&&!t.length&&t.push(e),t};const Dt=/[?*]|[+@!]\(.*?\)|\[|\]/,$t=t=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");class Bt{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};it(this,"options",void 0),it(this,"set",void 0),it(this,"pattern",void 0),it(this,"windowsPathsNoEscape",void 0),it(this,"nonegate",void 0),it(this,"negate",void 0),it(this,"comment",void 0),it(this,"empty",void 0),it(this,"preserveMultipleSlashes",void 0),it(this,"partial",void 0),it(this,"globSet",void 0),it(this,"globParts",void 0),it(this,"nocase",void 0),it(this,"isWindows",void 0),it(this,"platform",void 0),it(this,"windowsNoMagicRoot",void 0),it(this,"regexp",void 0),Ft(t),e=e||{},this.options=e,this.pattern=t,this.platform=e.platform||jt,this.isWindows="win32"===this.platform,this.windowsPathsNoEscape=!!e.windowsPathsNoEscape||!1===e.allowWindowsEscape,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!e.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!e.nonegate,this.comment=!1,this.empty=!1,this.partial=!!e.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=void 0!==e.windowsNoMagicRoot?e.windowsNoMagicRoot:!(!this.isWindows||!this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(const t of this.set)for(const e of t)if("string"!=typeof e)return!0;return!1}debug(){}make(){const t=this.pattern,e=this.options;if(!e.nocomment&&"#"===t.charAt(0))return void(this.comment=!0);if(!t)return void(this.empty=!0);this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],e.debug&&(this.debug=function(){return console.error(...arguments)}),this.debug(this.pattern,this.globSet);const n=this.globSet.map((t=>this.slashSplit(t)));this.globParts=this.preprocess(n),this.debug(this.pattern,this.globParts);let r=this.globParts.map(((t,e,n)=>{if(this.isWindows&&this.windowsNoMagicRoot){const e=!(""!==t[0]||""!==t[1]||"?"!==t[2]&&Dt.test(t[2])||Dt.test(t[3])),n=/^[a-z]:/i.test(t[0]);if(e)return[...t.slice(0,4),...t.slice(4).map((t=>this.parse(t)))];if(n)return[t[0],...t.slice(1).map((t=>this.parse(t)))]}return t.map((t=>this.parse(t)))}));if(this.debug(this.pattern,r),this.set=r.filter((t=>-1===t.indexOf(!1))),this.isWindows)for(let t=0;t=2?(t=this.firstPhasePreProcess(t),t=this.secondPhasePreProcess(t)):t=e>=1?this.levelOneOptimize(t):this.adjascentGlobstarOptimize(t),t}adjascentGlobstarOptimize(t){return t.map((t=>{let e=-1;for(;-1!==(e=t.indexOf("**",e+1));){let n=e;for(;"**"===t[n+1];)n++;n!==e&&t.splice(e,n-e)}return t}))}levelOneOptimize(t){return t.map((t=>0===(t=t.reduce(((t,e)=>{const n=t[t.length-1];return"**"===e&&"**"===n?t:".."===e&&n&&".."!==n&&"."!==n&&"**"!==n?(t.pop(),t):(t.push(e),t)}),[])).length?[""]:t))}levelTwoFileOptimize(t){Array.isArray(t)||(t=this.slashSplit(t));let e=!1;do{if(e=!1,!this.preserveMultipleSlashes){for(let n=1;nr&&n.splice(r+1,o-r);let i=n[r+1];const s=n[r+2],a=n[r+3];if(".."!==i)continue;if(!s||"."===s||".."===s||!a||"."===a||".."===a)continue;e=!0,n.splice(r,1);const c=n.slice(0);c[r]="**",t.push(c),r--}if(!this.preserveMultipleSlashes){for(let t=1;tt.length))}partsMatch(t,e){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=0,o=0,i=[],s="";for(;r2&&void 0!==arguments[2]&&arguments[2];const r=this.options;if(this.isWindows){const n=""===t[0]&&""===t[1]&&"?"===t[2]&&"string"==typeof t[3]&&/^[a-z]:$/i.test(t[3]),r=""===e[0]&&""===e[1]&&"?"===e[2]&&"string"==typeof e[3]&&/^[a-z]:$/i.test(e[3]);if(n&&r){const n=t[3],r=e[3];n.toLowerCase()===r.toLowerCase()&&(t[3]=r)}else if(r&&"string"==typeof t[0]){const n=e[3],r=t[0];n.toLowerCase()===r.toLowerCase()&&(e[3]=r,e=e.slice(3))}else if(n&&"string"==typeof e[0]){const n=t[3];n.toLowerCase()===e[0].toLowerCase()&&(e[0]=n,t=t.slice(3))}}const{optimizationLevel:o=1}=this.options;o>=2&&(t=this.levelTwoFileOptimize(t)),this.debug("matchOne",this,{file:t,pattern:e}),this.debug("matchOne",t.length,e.length);for(var i=0,s=0,a=t.length,c=e.length;i>> no match, partial?",t,h,e,f),h!==a))}let o;if("string"==typeof u?(o=l===u,this.debug("string match",u,l,o)):(o=u.test(l),this.debug("pattern match",u,l,o)),!o)return!1}if(i===a&&s===c)return!0;if(i===a)return n;if(s===c)return i===a-1&&""===t[i];throw new Error("wtf?")}braceExpand(){return Mt(this.pattern,this.options)}parse(t){Ft(t);const e=this.options;if("**"===t)return Ct;if(""===t)return"";let n,r=null;(n=t.match(yt))?r=e.dot?wt:bt:(n=t.match(ct))?r=(e.nocase?e.dot?ft:ht:e.dot?lt:ut)(n[1]):(n=t.match(xt))?r=(e.nocase?e.dot?Pt:Nt:e.dot?At:Ot)(n):(n=t.match(pt))?r=e.dot?gt:dt:(n=t.match(mt))&&(r=vt);let o="",i=!1,s=!1;const a=[],c=[];let u,l=!1,h=!1,f="."===t.charAt(0),p=e.dot||f;const d=t=>"."===t.charAt(0)?"":e.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",g=()=>{if(l){switch(l){case"*":o+=kt,i=!0;break;case"?":o+=It,i=!0;break;default:o+="\\"+l}this.debug("clearStateChar %j %j",l,o),l=!1}};for(let n,r=0;r(n||(n="\\"),e+e+n+"|"))),this.debug("tail=%j\n %s",t,t,u,o);const e="*"===u.type?kt:"?"===u.type?It:"\\"+u.type;i=!0,o=o.slice(0,u.reStart)+e+"\\("+t}g(),s&&(o+="\\\\");const m=_t[o.charAt(0)];for(let t=c.length-1;t>-1;t--){const e=c[t],n=o.slice(0,e.reStart),r=o.slice(e.reStart,e.reEnd-8);let i=o.slice(e.reEnd);const s=o.slice(e.reEnd-8,e.reEnd)+i,a=n.split(")").length,u=n.split("(").length-a;let l=i;for(let t=0;t{const e=t.map((t=>"string"==typeof t?$t(t):t===Ct?Ct:t._src));return e.forEach(((t,r)=>{const o=e[r+1],i=e[r-1];t===Ct&&i!==Ct&&(void 0===i?void 0!==o&&o!==Ct?e[r+1]="(?:\\/|"+n+"\\/)?"+o:e[r]=n:void 0===o?e[r-1]=i+"(?:\\/|"+n+")?":o!==Ct&&(e[r-1]=i+"(?:\\/|\\/"+n+"\\/)"+o,e[r+1]=Ct))})),e.filter((t=>t!==Ct)).join("/")})).join("|");o="^(?:"+o+")$",this.negate&&(o="^(?!"+o+").*$");try{this.regexp=new RegExp(o,r)}catch(t){this.regexp=!1}return this.regexp}slashSplit(t){return this.preserveMultipleSlashes?t.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(t)?["",...t.split(/\/+/)]:t.split(/\/+/)}match(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.partial;if(this.debug("match",t,this.pattern),this.comment)return!1;if(this.empty)return""===t;if("/"===t&&e)return!0;const n=this.options;this.isWindows&&(t=t.split("\\").join("/"));const r=this.slashSplit(t);this.debug(this.pattern,"split",r);const o=this.set;this.debug(this.pattern,"set",o);let i=r[r.length-1];if(!i)for(let t=r.length-2;!i&&t>=0;t--)i=r[t];for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:"","Invalid response: ").concat(t.status," ").concat(t.statusText));return e.status=t.status,e.response=t,e}function Vt(t,e){const{status:n}=e;if(401===n&&t.digest)return e;if(n>=400)throw Wt(e);return e}function zt(t,e){return arguments.length>2&&void 0!==arguments[2]&&arguments[2]?{data:e,headers:t.headers?B(t.headers):{},status:t.status,statusText:t.statusText}:e}st.Minimatch=Bt,st.escape=function(t){let{windowsPathsNoEscape:e=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e?t.replace(/[?*()[\]]/g,"[$&]"):t.replace(/[?*()[\]\\]/g,"\\$&")},st.unescape=function(t){let{windowsPathsNoEscape:e=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e?t.replace(/\[([^\/\\])\]/g,"$1"):t.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1")};const qt=(Gt=function(t,e,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};const o=J({url:g(t.remoteURL,h(e)),method:"COPY",headers:{Destination:g(t.remoteURL,h(n)),Overwrite:!1===r.overwrite?"F":"T",Depth:r.shallow?"0":"infinity"}},t,r);return s=function(e){Vt(t,e)},(i=K(o,t))&&i.then||(i=Promise.resolve(i)),s?i.then(s):i;var i,s},function(){for(var t=[],e=0;e2&&void 0!==arguments[2]?arguments[2]:Yt.Original;const r=Zt().get(t,e);return"array"===n&&!1===Array.isArray(r)?[r]:"object"===n&&Array.isArray(r)?r[0]:r}function Jt(t){return new Promise((e=>{e(function(t){const{multistatus:e}=t;if(""===e)return{multistatus:{response:[]}};if(!e)throw new Error("Invalid response: No root multistatus found");const n={multistatus:Array.isArray(e)?e[0]:e};return Zt().set(n,"multistatus.response",Kt(n,"multistatus.response",Yt.Array)),Zt().set(n,"multistatus.response",Zt().get(n,"multistatus.response").map((t=>function(t){const e=Object.assign({},t);return e.status?Zt().set(e,"status",Kt(e,"status",Yt.Object)):(Zt().set(e,"propstat",Kt(e,"propstat",Yt.Object)),Zt().set(e,"propstat.prop",Kt(e,"propstat.prop",Yt.Object))),e}(t)))),n}(new Ht.XMLParser({removeNSPrefix:!0,numberParseOptions:{hex:!0,leadingZeros:!1}}).parse(t)))}))}function Qt(t,e){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const{getlastmodified:r=null,getcontentlength:o="0",resourcetype:i=null,getcontenttype:s=null,getetag:a=null}=t,u=i&&"object"==typeof i&&void 0!==i.collection?"directory":"file",l={filename:e,basename:c().basename(e),lastmod:r,size:parseInt(o,10),type:u,etag:"string"==typeof a?a.replace(/"/g,""):null};return"file"===u&&(l.mime=s&&"string"==typeof s?s.split(";")[0]:""),n&&(l.props=t),l}function te(t,e){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=null;try{t.multistatus.response[0].propstat&&(r=t.multistatus.response[0])}catch(t){}if(!r)throw new Error("Failed getting item stat: bad response");const{propstat:{prop:o,status:i}}=r,[s,a,c]=i.split(" ",3),u=parseInt(a,10);if(u>=400){const t=new Error("Invalid response: ".concat(u," ").concat(c));throw t.status=u,t}return Qt(o,p(e),n)}function ee(t){switch(t.toString()){case"-3":return"unlimited";case"-2":case"-1":return"unknown";default:return parseInt(t,10)}}function ne(t,e,n){return n?e?e(t):t:(t&&t.then||(t=Promise.resolve(t)),e?t.then(e):t)}const re=function(t){return function(){for(var e=[],n=0;n2&&void 0!==arguments[2]?arguments[2]:{};const{details:r=!1}=n,o=J({url:g(t.remoteURL,h(e)),method:"PROPFIND",headers:{Accept:"text/plain,application/xml",Depth:"0"}},t,n);return ne(K(o,t),(function(n){return Vt(t,n),ne(n.text(),(function(t){return ne(Jt(t),(function(t){const o=te(t,e,r);return zt(n,o,r)}))}))}))}));function oe(t,e,n){return n?e?e(t):t:(t&&t.then||(t=Promise.resolve(t)),e?t.then(e):t)}const ie=se((function(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=function(t){if(!t||"/"===t)return[];let e=t;const n=[];do{n.push(e),e=c().dirname(e)}while(e&&"/"!==e);return n}(p(e));r.sort(((t,e)=>t.length>e.length?1:e.length>t.length?-1:0));let o=!1;return function(t,e,n){if("function"==typeof t[ue]){var r,o,i,s=t[ue]();function l(t){try{for(;!(r=s.next()).done;)if((t=e(r.value))&&t.then){if(!fe(t))return void t.then(l,i||(i=le.bind(null,o=new he,2)));t=t.v}o?le(o,1,t):o=t}catch(t){le(o||(o=new he),2,t)}}if(l(),s.return){var a=function(t){try{r.done||s.return()}catch(t){}return t};if(o&&o.then)return o.then(a,(function(t){throw a(t)}));a()}return o}if(!("length"in t))throw new TypeError("Object is not iterable");for(var c=[],u=0;u2&&void 0!==arguments[2]?arguments[2]:{};if(!0===n.recursive)return ie(t,e,n);const r=J({url:g(t.remoteURL,(o=h(e),o.endsWith("/")?o:o+"/")),method:"MKCOL"},t,n);var o;return oe(K(r,t),(function(e){Vt(t,e)}))}));var de=n(388),ge=n.n(de);const me=function(t){return function(){for(var e=[],n=0;n2&&void 0!==arguments[2]?arguments[2]:{};const r={};if("object"==typeof n.range&&"number"==typeof n.range.start){let t="bytes=".concat(n.range.start,"-");"number"==typeof n.range.end&&(t="".concat(t).concat(n.range.end)),r.Range=t}const o=J({url:g(t.remoteURL,h(e)),method:"GET",headers:r},t,n);return s=function(e){if(Vt(t,e),r.Range&&206!==e.status){const t=new Error("Invalid response code for partial request: ".concat(e.status));throw t.status=e.status,t}return n.callback&&setTimeout((()=>{n.callback(e)}),0),e.body},(i=K(o,t))&&i.then||(i=Promise.resolve(i)),s?i.then(s):i;var i,s})),ve=()=>{},ye=function(t){return function(){for(var e=[],n=0;n2&&void 0!==arguments[2]?arguments[2]:{};const r=J({url:g(t.remoteURL,h(e)),method:"DELETE"},t,n);return i=function(e){Vt(t,e)},(o=K(r,t))&&o.then||(o=Promise.resolve(o)),i?o.then(i):o;var o,i})),we=function(t){return function(){for(var e=[],n=0;n2&&void 0!==arguments[2]?arguments[2]:{};return function(r,o){try{var i=(s=re(t,e,n),a=function(){return!0},c?a?a(s):s:(s&&s.then||(s=Promise.resolve(s)),a?s.then(a):s))}catch(t){return o(t)}var s,a,c;return i&&i.then?i.then(void 0,o):i}(0,(function(t){if(404===t.status)return!1;throw t}))}));function xe(t,e,n){return n?e?e(t):t:(t&&t.then||(t=Promise.resolve(t)),e?t.then(e):t)}const Ne=function(t){return function(){for(var e=[],n=0;n2&&void 0!==arguments[2]?arguments[2]:{};const r=J({url:g(t.remoteURL,h(e),"/"),method:"PROPFIND",headers:{Accept:"text/plain,application/xml",Depth:n.deep?"infinity":"1"}},t,n);return xe(K(r,t),(function(r){return Vt(t,r),xe(r.text(),(function(o){if(!o)throw new Error("Failed parsing directory contents: Empty response");return xe(Jt(o),(function(o){const i=f(e);let a=function(t,e,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];const i=c().join(e,"/"),{multistatus:{response:a}}=t,u=a.map((t=>{const e=function(t){try{return t.replace(/^https?:\/\/[^\/]+/,"")}catch(t){throw new s(t,"Failed normalising HREF")}}(t.href),{propstat:{prop:n}}=t;return Qt(n,"/"===i?decodeURIComponent(p(e)):p(c().relative(decodeURIComponent(i),decodeURIComponent(e))),r)}));return o?u:u.filter((t=>t.basename&&("file"===t.type||t.filename!==n.replace(/\/$/,""))))}(o,f(t.remoteBasePath||t.remotePath),i,n.details,n.includeSelf);return n.glob&&(a=function(t,e){return t.filter((t=>at(t.filename,e,{matchBase:!0})))}(a,n.glob)),zt(r,a,n.details)}))}))}))}));function Pe(t){return function(){for(var e=[],n=0;n2&&void 0!==arguments[2]?arguments[2]:{};const r=J({url:g(t.remoteURL,h(e)),method:"GET",headers:{Accept:"text/plain"},transformResponse:[je]},t,n);return Oe(K(r,t),(function(e){return Vt(t,e),Oe(e.text(),(function(t){return zt(e,t,n.details)}))}))}));function Oe(t,e,n){return n?e?e(t):t:(t&&t.then||(t=Promise.resolve(t)),e?t.then(e):t)}const Ee=Pe((function(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=J({url:g(t.remoteURL,h(e)),method:"GET"},t,n);return Oe(K(r,t),(function(e){let r;return Vt(t,e),function(t,e){var n=t();return n&&n.then?n.then(e):e()}((function(){return Oe(e.arrayBuffer(),(function(t){r=t}))}),(function(){return zt(e,r,n.details)}))}))})),Te=Pe((function(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{format:r="binary"}=n;if("binary"!==r&&"text"!==r)throw new s({info:{code:S.InvalidOutputFormat}},"Invalid output format: ".concat(r));return"text"===r?Ae(t,e,n):Ee(t,e,n)})),je=t=>t;function Ce(t){return new Ht.XMLBuilder({attributeNamePrefix:"@_",format:!0,ignoreAttributes:!1,suppressEmptyNode:!0}).build(Se({lockinfo:{"@_xmlns:d":"DAV:",lockscope:{exclusive:{}},locktype:{write:{}},owner:{href:t}}},"d"))}function Se(t,e){const n={...t};for(const t in n)n.hasOwnProperty(t)&&(n[t]&&"object"==typeof n[t]&&-1===t.indexOf(":")?(n["".concat(e,":").concat(t)]=Se(n[t],e),delete n[t]):!1===/^@_/.test(t)&&(n["".concat(e,":").concat(t)]=n[t],delete n[t]));return n}function Ie(t,e,n){return n?e?e(t):t:(t&&t.then||(t=Promise.resolve(t)),e?t.then(e):t)}function ke(t){return function(){for(var e=[],n=0;n3&&void 0!==arguments[3]?arguments[3]:{};const o=J({url:g(t.remoteURL,h(e)),method:"UNLOCK",headers:{"Lock-Token":n}},t,r);return Ie(K(o,t),(function(e){if(Vt(t,e),204!==e.status&&200!==e.status)throw Wt(e)}))})),Le=ke((function(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{refreshToken:r,timeout:o=_e}=n,i={Accept:"text/plain,application/xml",Timeout:o};r&&(i.If=r);const s=J({url:g(t.remoteURL,h(e)),method:"LOCK",headers:i,data:Ce(t.contactHref)},t,n);return Ie(K(s,t),(function(e){return Vt(t,e),Ie(e.text(),(function(t){const n=(i=t,new Ht.XMLParser({removeNSPrefix:!0,parseAttributeValue:!0,parseTagValue:!0}).parse(i)),r=Zt().get(n,"prop.lockdiscovery.activelock.locktoken.href"),o=Zt().get(n,"prop.lockdiscovery.activelock.timeout");var i;if(!r)throw Wt(e,"No lock token received: ");return{token:r,serverTimeout:o}}))}))})),_e="Infinite, Second-4100000000";function Ue(t,e,n){return n?e?e(t):t:(t&&t.then||(t=Promise.resolve(t)),e?t.then(e):t)}const Me=function(t){return function(){for(var e=[],n=0;n1&&void 0!==arguments[1]?arguments[1]:{};const n=e.path||"/",r=J({url:g(t.remoteURL,n),method:"PROPFIND",headers:{Accept:"text/plain,application/xml",Depth:"0"}},t,e);return Ue(K(r,t),(function(n){return Vt(t,n),Ue(n.text(),(function(t){return Ue(Jt(t),(function(t){const r=function(t){try{const[e]=t.multistatus.response,{propstat:{prop:{"quota-used-bytes":n,"quota-available-bytes":r}}}=e;return void 0!==n&&void 0!==r?{used:parseInt(n,10),available:ee(r)}:null}catch(t){}return null}(t);return zt(n,r,e.details)}))}))}))}));function Fe(t,e,n){return n?e?e(t):t:(t&&t.then||(t=Promise.resolve(t)),e?t.then(e):t)}const De=function(t){return function(){for(var e=[],n=0;n2&&void 0!==arguments[2]?arguments[2]:{};const{details:r=!1}=n,o=J({url:g(t.remoteURL,h(e)),method:"SEARCH",headers:{Accept:"text/plain,application/xml","Content-Type":t.headers["Content-Type"]||"application/xml; charset=utf-8"}},t,n);return Fe(K(o,t),(function(n){return Vt(t,n),Fe(n.text(),(function(t){return Fe(Jt(t),(function(t){const o=function(t,e,n){const r={truncated:!1,results:[]};return r.truncated=t.multistatus.response.some((t=>{var n,r;return"507"===(null===(n=(t.status||(null===(r=t.propstat)||void 0===r?void 0:r.status)).split(" ",3))||void 0===n?void 0:n[1])&&t.href.replace(/\/$/,"").endsWith(h(e).replace(/\/$/,""))})),t.multistatus.response.forEach((t=>{if(void 0===t.propstat)return;const e=t.href.split("/").map(decodeURIComponent).join("/");r.results.push(Qt(t.propstat.prop,e,n))})),r}(t,e,r);return zt(n,o,r)}))}))}))})),$e=function(t){return function(){for(var e=[],n=0;n3&&void 0!==arguments[3]?arguments[3]:{};const o=J({url:g(t.remoteURL,h(e)),method:"MOVE",headers:{Destination:g(t.remoteURL,h(n)),Overwrite:!1===r.overwrite?"F":"T"}},t,r);return s=function(e){Vt(t,e)},(i=K(o,t))&&i.then||(i=Promise.resolve(i)),s?i.then(s):i;var i,s}));var Be=n(172);const We=function(t){return function(){for(var e=[],n=0;n3&&void 0!==arguments[3]?arguments[3]:{};const{contentLength:o=!0,overwrite:i=!0}=r,a={"Content-Type":"application/octet-stream"};!1===o||(a["Content-Length"]="".concat("number"==typeof o?o:function(t){if(q(t))return t.byteLength;if(G(t))return t.length;if("string"==typeof t)return(0,Be.d)(t);throw new s({info:{code:S.DataTypeNoLength}},"Cannot calculate data length: Invalid type")}(n))),i||(a["If-None-Match"]="*");const c=J({url:g(t.remoteURL,h(e)),method:"PUT",headers:a,data:n},t,r);return l=function(e){try{Vt(t,e)}catch(t){const e=t;if(412!==e.status||i)throw e;return!1}return!0},(u=K(c,t))&&u.then||(u=Promise.resolve(u)),l?u.then(l):u;var u,l})),Ve=function(t){return function(){for(var e=[],n=0;n2&&void 0!==arguments[2]?arguments[2]:{};const r=J({url:g(t.remoteURL,h(e)),method:"OPTIONS"},t,n);return i=function(e){var n,r;try{Vt(t,e)}catch(t){throw t}return{compliance:(null!==(n=e.headers.get("DAV"))&&void 0!==n?n:"").split(",").map((t=>t.trim())),server:null!==(r=e.headers.get("Server"))&&void 0!==r?r:""}},(o=K(r,t))&&o.then||(o=Promise.resolve(o)),i?o.then(i):o;var o,i}));function ze(t,e,n){return n?e?e(t):t:(t&&t.then||(t=Promise.resolve(t)),e?t.then(e):t)}const qe=Xe((function(t,e,n,r,o){let i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};if(n>r||n<0)throw new s({info:{code:S.InvalidUpdateRange}},"Invalid update range ".concat(n," for partial update"));const a={"Content-Type":"application/octet-stream","Content-Length":"".concat(r-n+1),"Content-Range":"bytes ".concat(n,"-").concat(r,"/*")},c=J({url:g(t.remoteURL,h(e)),method:"PUT",headers:a,data:o},t,i);return ze(K(c,t),(function(e){Vt(t,e)}))}));function Ge(t,e){var n=t();return n&&n.then?n.then(e):e(n)}const He=Xe((function(t,e,n,r,o){let i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};if(n>r||n<0)throw new s({info:{code:S.InvalidUpdateRange}},"Invalid update range ".concat(n," for partial update"));const a={"Content-Type":"application/x-sabredav-partialupdate","Content-Length":"".concat(r-n+1),"X-Update-Range":"bytes=".concat(n,"-").concat(r)},c=J({url:g(t.remoteURL,h(e)),method:"PATCH",headers:a,data:o},t,i);return ze(K(c,t),(function(e){Vt(t,e)}))}));function Xe(t){return function(){for(var e=[],n=0;n5&&void 0!==arguments[5]?arguments[5]:{};return ze(Ve(t,e,i),(function(a){let c=!1;return Ge((function(){if(a.compliance.includes("sabredav-partialupdate"))return ze(He(t,e,n,r,o,i),(function(t){return c=!0,t}))}),(function(u){let l=!1;return c?u:Ge((function(){if(a.server.includes("Apache")&&a.compliance.includes(""))return ze(qe(t,e,n,r,o,i),(function(t){return l=!0,t}))}),(function(t){if(l)return t;throw new s({info:{code:S.NotSupported}},"Not supported")}))}))}))})),Ye="https://github.com/perry-mitchell/webdav-client/blob/master/LOCK_CONTACT.md";function Ke(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{authType:n=null,remoteBasePath:r,contactHref:o=Ye,ha1:i,headers:a={},httpAgent:c,httpsAgent:u,password:l,token:f,username:p,withCredentials:m}=e;let v=n;v||(v=p||l?C.Password:C.None);const y={authType:v,remoteBasePath:r,contactHref:o,ha1:i,headers:Object.assign({},a),httpAgent:c,httpsAgent:u,password:l,remotePath:d(t),remoteURL:t,token:f,username:p,withCredentials:m};return I(y,p,l,f,i),{copyFile:(t,e,n)=>qt(y,t,e,n),createDirectory:(t,e)=>pe(y,t,e),createReadStream:(t,e)=>function(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=new(0,ge().PassThrough);return me(t,e,n).then((t=>{t.pipe(r)})).catch((t=>{r.emit("error",t)})),r}(y,t,e),createWriteStream:(t,e,n)=>function(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:ve;const o=new(0,ge().PassThrough),i={};!1===n.overwrite&&(i["If-None-Match"]="*");const s=J({url:g(t.remoteURL,h(e)),method:"PUT",headers:i,data:o,maxRedirects:0},t,n);return K(s,t).then((e=>Vt(t,e))).then((t=>{setTimeout((()=>{r(t)}),0)})).catch((t=>{o.emit("error",t)})),o}(y,t,e,n),customRequest:(t,e)=>ye(y,t,e),deleteFile:(t,e)=>be(y,t,e),exists:(t,e)=>we(y,t,e),getDirectoryContents:(t,e)=>Ne(y,t,e),getFileContents:(t,e)=>Te(y,t,e),getFileDownloadLink:t=>function(t,e){let n=g(t.remoteURL,h(e));const r=/^https:/i.test(n)?"https":"http";switch(t.authType){case C.None:break;case C.Password:{const e=P(t.headers.Authorization.replace(/^Basic /i,"").trim());n=n.replace(/^https?:\/\//,"".concat(r,"://").concat(e,"@"));break}default:throw new s({info:{code:S.LinkUnsupportedAuthType}},"Unsupported auth type for file link: ".concat(t.authType))}return n}(y,t),getFileUploadLink:t=>function(t,e){let n="".concat(g(t.remoteURL,h(e)),"?Content-Type=application/octet-stream");const r=/^https:/i.test(n)?"https":"http";switch(t.authType){case C.None:break;case C.Password:{const e=P(t.headers.Authorization.replace(/^Basic /i,"").trim());n=n.replace(/^https?:\/\//,"".concat(r,"://").concat(e,"@"));break}default:throw new s({info:{code:S.LinkUnsupportedAuthType}},"Unsupported auth type for file link: ".concat(t.authType))}return n}(y,t),getHeaders:()=>Object.assign({},y.headers),getQuota:t=>Me(y,t),lock:(t,e)=>Le(y,t,e),moveFile:(t,e,n)=>$e(y,t,e,n),putFileContents:(t,e,n)=>We(y,t,e,n),partialUpdateFileContents:(t,e,n,r,o)=>Ze(y,t,e,n,r,o),getDAVCompliance:t=>Ve(y,t),search:(t,e)=>De(y,t,e),setHeaders:t=>{y.headers=Object.assign({},t)},stat:(t,e)=>re(y,t,e),unlock:(t,e,n)=>Re(y,t,e,n)}}})();var o=r.hT,i=r.O4,s=r.Kd,a=r.YK,c=r.UU,u=r.Gu,l=r.ky,h=r.h4,f=r.hq,p=r.i5; /***/ }), /***/ "./node_modules/css-color-names/css-color-names.json": /*!***********************************************************!*\ !*** ./node_modules/css-color-names/css-color-names.json ***! \***********************************************************/ /***/ ((module) => { "use strict"; module.exports = /*#__PURE__*/JSON.parse('{"aliceblue":"#f0f8ff","antiquewhite":"#faebd7","aqua":"#00ffff","aquamarine":"#7fffd4","azure":"#f0ffff","beige":"#f5f5dc","bisque":"#ffe4c4","black":"#000000","blanchedalmond":"#ffebcd","blue":"#0000ff","blueviolet":"#8a2be2","brown":"#a52a2a","burlywood":"#deb887","cadetblue":"#5f9ea0","chartreuse":"#7fff00","chocolate":"#d2691e","coral":"#ff7f50","cornflowerblue":"#6495ed","cornsilk":"#fff8dc","crimson":"#dc143c","cyan":"#00ffff","darkblue":"#00008b","darkcyan":"#008b8b","darkgoldenrod":"#b8860b","darkgray":"#a9a9a9","darkgreen":"#006400","darkgrey":"#a9a9a9","darkkhaki":"#bdb76b","darkmagenta":"#8b008b","darkolivegreen":"#556b2f","darkorange":"#ff8c00","darkorchid":"#9932cc","darkred":"#8b0000","darksalmon":"#e9967a","darkseagreen":"#8fbc8f","darkslateblue":"#483d8b","darkslategray":"#2f4f4f","darkslategrey":"#2f4f4f","darkturquoise":"#00ced1","darkviolet":"#9400d3","deeppink":"#ff1493","deepskyblue":"#00bfff","dimgray":"#696969","dimgrey":"#696969","dodgerblue":"#1e90ff","firebrick":"#b22222","floralwhite":"#fffaf0","forestgreen":"#228b22","fuchsia":"#ff00ff","gainsboro":"#dcdcdc","ghostwhite":"#f8f8ff","goldenrod":"#daa520","gold":"#ffd700","gray":"#808080","green":"#008000","greenyellow":"#adff2f","grey":"#808080","honeydew":"#f0fff0","hotpink":"#ff69b4","indianred":"#cd5c5c","indigo":"#4b0082","ivory":"#fffff0","khaki":"#f0e68c","lavenderblush":"#fff0f5","lavender":"#e6e6fa","lawngreen":"#7cfc00","lemonchiffon":"#fffacd","lightblue":"#add8e6","lightcoral":"#f08080","lightcyan":"#e0ffff","lightgoldenrodyellow":"#fafad2","lightgray":"#d3d3d3","lightgreen":"#90ee90","lightgrey":"#d3d3d3","lightpink":"#ffb6c1","lightsalmon":"#ffa07a","lightseagreen":"#20b2aa","lightskyblue":"#87cefa","lightslategray":"#778899","lightslategrey":"#778899","lightsteelblue":"#b0c4de","lightyellow":"#ffffe0","lime":"#00ff00","limegreen":"#32cd32","linen":"#faf0e6","magenta":"#ff00ff","maroon":"#800000","mediumaquamarine":"#66cdaa","mediumblue":"#0000cd","mediumorchid":"#ba55d3","mediumpurple":"#9370db","mediumseagreen":"#3cb371","mediumslateblue":"#7b68ee","mediumspringgreen":"#00fa9a","mediumturquoise":"#48d1cc","mediumvioletred":"#c71585","midnightblue":"#191970","mintcream":"#f5fffa","mistyrose":"#ffe4e1","moccasin":"#ffe4b5","navajowhite":"#ffdead","navy":"#000080","oldlace":"#fdf5e6","olive":"#808000","olivedrab":"#6b8e23","orange":"#ffa500","orangered":"#ff4500","orchid":"#da70d6","palegoldenrod":"#eee8aa","palegreen":"#98fb98","paleturquoise":"#afeeee","palevioletred":"#db7093","papayawhip":"#ffefd5","peachpuff":"#ffdab9","peru":"#cd853f","pink":"#ffc0cb","plum":"#dda0dd","powderblue":"#b0e0e6","purple":"#800080","rebeccapurple":"#663399","red":"#ff0000","rosybrown":"#bc8f8f","royalblue":"#4169e1","saddlebrown":"#8b4513","salmon":"#fa8072","sandybrown":"#f4a460","seagreen":"#2e8b57","seashell":"#fff5ee","sienna":"#a0522d","silver":"#c0c0c0","skyblue":"#87ceeb","slateblue":"#6a5acd","slategray":"#708090","slategrey":"#708090","snow":"#fffafa","springgreen":"#00ff7f","steelblue":"#4682b4","tan":"#d2b48c","teal":"#008080","thistle":"#d8bfd8","tomato":"#ff6347","turquoise":"#40e0d0","violet":"#ee82ee","wheat":"#f5deb3","white":"#ffffff","whitesmoke":"#f5f5f5","yellow":"#ffff00","yellowgreen":"#9acd32"}'); /***/ }), /***/ "./node_modules/emoji-mart-vue-fast/data/all.json": /*!********************************************************!*\ !*** ./node_modules/emoji-mart-vue-fast/data/all.json ***! \********************************************************/ /***/ ((module) => { "use strict"; module.exports = /*#__PURE__*/JSON.parse('{"compressed":true,"categories":[{"id":"smileys","name":"Smileys & Emotion","emojis":["grinning","smiley","smile","grin","laughing","sweat_smile","rolling_on_the_floor_laughing","joy","slightly_smiling_face","upside_down_face","melting_face","wink","blush","innocent","smiling_face_with_3_hearts","heart_eyes","star-struck","kissing_heart","kissing","relaxed","kissing_closed_eyes","kissing_smiling_eyes","smiling_face_with_tear","yum","stuck_out_tongue","stuck_out_tongue_winking_eye","zany_face","stuck_out_tongue_closed_eyes","money_mouth_face","hugging_face","face_with_hand_over_mouth","face_with_open_eyes_and_hand_over_mouth","face_with_peeking_eye","shushing_face","thinking_face","saluting_face","zipper_mouth_face","face_with_raised_eyebrow","neutral_face","expressionless","no_mouth","dotted_line_face","face_in_clouds","smirk","unamused","face_with_rolling_eyes","grimacing","face_exhaling","lying_face","shaking_face","relieved","pensive","sleepy","drooling_face","sleeping","mask","face_with_thermometer","face_with_head_bandage","nauseated_face","face_vomiting","sneezing_face","hot_face","cold_face","woozy_face","dizzy_face","face_with_spiral_eyes","exploding_head","face_with_cowboy_hat","partying_face","disguised_face","sunglasses","nerd_face","face_with_monocle","confused","face_with_diagonal_mouth","worried","slightly_frowning_face","white_frowning_face","open_mouth","hushed","astonished","flushed","pleading_face","face_holding_back_tears","frowning","anguished","fearful","cold_sweat","disappointed_relieved","cry","sob","scream","confounded","persevere","disappointed","sweat","weary","tired_face","yawning_face","triumph","rage","angry","face_with_symbols_on_mouth","smiling_imp","imp","skull","skull_and_crossbones","hankey","clown_face","japanese_ogre","japanese_goblin","ghost","alien","space_invader","robot_face","smiley_cat","smile_cat","joy_cat","heart_eyes_cat","smirk_cat","kissing_cat","scream_cat","crying_cat_face","pouting_cat","see_no_evil","hear_no_evil","speak_no_evil","love_letter","cupid","gift_heart","sparkling_heart","heartpulse","heartbeat","revolving_hearts","two_hearts","heart_decoration","heavy_heart_exclamation_mark_ornament","broken_heart","heart_on_fire","mending_heart","heart","pink_heart","orange_heart","yellow_heart","green_heart","blue_heart","light_blue_heart","purple_heart","brown_heart","black_heart","grey_heart","white_heart","kiss","100","anger","boom","dizzy","sweat_drops","dash","hole","speech_balloon","eye-in-speech-bubble","left_speech_bubble","right_anger_bubble","thought_balloon","zzz"]},{"id":"people","name":"People & Body","emojis":["wave","raised_back_of_hand","raised_hand_with_fingers_splayed","hand","spock-hand","rightwards_hand","leftwards_hand","palm_down_hand","palm_up_hand","leftwards_pushing_hand","rightwards_pushing_hand","ok_hand","pinched_fingers","pinching_hand","v","crossed_fingers","hand_with_index_finger_and_thumb_crossed","i_love_you_hand_sign","the_horns","call_me_hand","point_left","point_right","point_up_2","middle_finger","point_down","point_up","index_pointing_at_the_viewer","+1","-1","fist","facepunch","left-facing_fist","right-facing_fist","clap","raised_hands","heart_hands","open_hands","palms_up_together","handshake","pray","writing_hand","nail_care","selfie","muscle","mechanical_arm","mechanical_leg","leg","foot","ear","ear_with_hearing_aid","nose","brain","anatomical_heart","lungs","tooth","bone","eyes","eye","tongue","lips","biting_lip","baby","child","boy","girl","adult","person_with_blond_hair","man","bearded_person","man_with_beard","woman_with_beard","red_haired_man","curly_haired_man","white_haired_man","bald_man","woman","red_haired_woman","red_haired_person","curly_haired_woman","curly_haired_person","white_haired_woman","white_haired_person","bald_woman","bald_person","blond-haired-woman","blond-haired-man","older_adult","older_man","older_woman","person_frowning","man-frowning","woman-frowning","person_with_pouting_face","man-pouting","woman-pouting","no_good","man-gesturing-no","woman-gesturing-no","ok_woman","man-gesturing-ok","woman-gesturing-ok","information_desk_person","man-tipping-hand","woman-tipping-hand","raising_hand","man-raising-hand","woman-raising-hand","deaf_person","deaf_man","deaf_woman","bow","man-bowing","woman-bowing","face_palm","man-facepalming","woman-facepalming","shrug","man-shrugging","woman-shrugging","health_worker","male-doctor","female-doctor","student","male-student","female-student","teacher","male-teacher","female-teacher","judge","male-judge","female-judge","farmer","male-farmer","female-farmer","cook","male-cook","female-cook","mechanic","male-mechanic","female-mechanic","factory_worker","male-factory-worker","female-factory-worker","office_worker","male-office-worker","female-office-worker","scientist","male-scientist","female-scientist","technologist","male-technologist","female-technologist","singer","male-singer","female-singer","artist","male-artist","female-artist","pilot","male-pilot","female-pilot","astronaut","male-astronaut","female-astronaut","firefighter","male-firefighter","female-firefighter","cop","male-police-officer","female-police-officer","sleuth_or_spy","male-detective","female-detective","guardsman","male-guard","female-guard","ninja","construction_worker","male-construction-worker","female-construction-worker","person_with_crown","prince","princess","man_with_turban","man-wearing-turban","woman-wearing-turban","man_with_gua_pi_mao","person_with_headscarf","person_in_tuxedo","man_in_tuxedo","woman_in_tuxedo","bride_with_veil","man_with_veil","woman_with_veil","pregnant_woman","pregnant_man","pregnant_person","breast-feeding","woman_feeding_baby","man_feeding_baby","person_feeding_baby","angel","santa","mrs_claus","mx_claus","superhero","male_superhero","female_superhero","supervillain","male_supervillain","female_supervillain","mage","male_mage","female_mage","fairy","male_fairy","female_fairy","vampire","male_vampire","female_vampire","merperson","merman","mermaid","elf","male_elf","female_elf","genie","male_genie","female_genie","zombie","male_zombie","female_zombie","troll","massage","man-getting-massage","woman-getting-massage","haircut","man-getting-haircut","woman-getting-haircut","walking","man-walking","woman-walking","standing_person","man_standing","woman_standing","kneeling_person","man_kneeling","woman_kneeling","person_with_probing_cane","man_with_probing_cane","woman_with_probing_cane","person_in_motorized_wheelchair","man_in_motorized_wheelchair","woman_in_motorized_wheelchair","person_in_manual_wheelchair","man_in_manual_wheelchair","woman_in_manual_wheelchair","runner","man-running","woman-running","dancer","man_dancing","man_in_business_suit_levitating","dancers","men-with-bunny-ears-partying","women-with-bunny-ears-partying","person_in_steamy_room","man_in_steamy_room","woman_in_steamy_room","person_climbing","man_climbing","woman_climbing","fencer","horse_racing","skier","snowboarder","golfer","man-golfing","woman-golfing","surfer","man-surfing","woman-surfing","rowboat","man-rowing-boat","woman-rowing-boat","swimmer","man-swimming","woman-swimming","person_with_ball","man-bouncing-ball","woman-bouncing-ball","weight_lifter","man-lifting-weights","woman-lifting-weights","bicyclist","man-biking","woman-biking","mountain_bicyclist","man-mountain-biking","woman-mountain-biking","person_doing_cartwheel","man-cartwheeling","woman-cartwheeling","wrestlers","man-wrestling","woman-wrestling","water_polo","man-playing-water-polo","woman-playing-water-polo","handball","man-playing-handball","woman-playing-handball","juggling","man-juggling","woman-juggling","person_in_lotus_position","man_in_lotus_position","woman_in_lotus_position","bath","sleeping_accommodation","people_holding_hands","two_women_holding_hands","man_and_woman_holding_hands","two_men_holding_hands","couplekiss","woman-kiss-man","man-kiss-man","woman-kiss-woman","couple_with_heart","woman-heart-man","man-heart-man","woman-heart-woman","family","man-woman-boy","man-woman-girl","man-woman-girl-boy","man-woman-boy-boy","man-woman-girl-girl","man-man-boy","man-man-girl","man-man-girl-boy","man-man-boy-boy","man-man-girl-girl","woman-woman-boy","woman-woman-girl","woman-woman-girl-boy","woman-woman-boy-boy","woman-woman-girl-girl","man-boy","man-boy-boy","man-girl","man-girl-boy","man-girl-girl","woman-boy","woman-boy-boy","woman-girl","woman-girl-boy","woman-girl-girl","speaking_head_in_silhouette","bust_in_silhouette","busts_in_silhouette","people_hugging","footprints"]},{"id":"nature","name":"Animals & Nature","emojis":["monkey_face","monkey","gorilla","orangutan","dog","dog2","guide_dog","service_dog","poodle","wolf","fox_face","raccoon","cat","cat2","black_cat","lion_face","tiger","tiger2","leopard","horse","moose","donkey","racehorse","unicorn_face","zebra_face","deer","bison","cow","ox","water_buffalo","cow2","pig","pig2","boar","pig_nose","ram","sheep","goat","dromedary_camel","camel","llama","giraffe_face","elephant","mammoth","rhinoceros","hippopotamus","mouse","mouse2","rat","hamster","rabbit","rabbit2","chipmunk","beaver","hedgehog","bat","bear","polar_bear","koala","panda_face","sloth","otter","skunk","kangaroo","badger","feet","turkey","chicken","rooster","hatching_chick","baby_chick","hatched_chick","bird","penguin","dove_of_peace","eagle","duck","swan","owl","dodo","feather","flamingo","peacock","parrot","wing","black_bird","goose","frog","crocodile","turtle","lizard","snake","dragon_face","dragon","sauropod","t-rex","whale","whale2","dolphin","seal","fish","tropical_fish","blowfish","shark","octopus","shell","coral","jellyfish","snail","butterfly","bug","ant","bee","beetle","ladybug","cricket","cockroach","spider","spider_web","scorpion","mosquito","fly","worm","microbe","bouquet","cherry_blossom","white_flower","lotus","rosette","rose","wilted_flower","hibiscus","sunflower","blossom","tulip","hyacinth","seedling","potted_plant","evergreen_tree","deciduous_tree","palm_tree","cactus","ear_of_rice","herb","shamrock","four_leaf_clover","maple_leaf","fallen_leaf","leaves","empty_nest","nest_with_eggs","mushroom"]},{"id":"foods","name":"Food & Drink","emojis":["grapes","melon","watermelon","tangerine","lemon","banana","pineapple","mango","apple","green_apple","pear","peach","cherries","strawberry","blueberries","kiwifruit","tomato","olive","coconut","avocado","eggplant","potato","carrot","corn","hot_pepper","bell_pepper","cucumber","leafy_green","broccoli","garlic","onion","peanuts","beans","chestnut","ginger_root","pea_pod","bread","croissant","baguette_bread","flatbread","pretzel","bagel","pancakes","waffle","cheese_wedge","meat_on_bone","poultry_leg","cut_of_meat","bacon","hamburger","fries","pizza","hotdog","sandwich","taco","burrito","tamale","stuffed_flatbread","falafel","egg","fried_egg","shallow_pan_of_food","stew","fondue","bowl_with_spoon","green_salad","popcorn","butter","salt","canned_food","bento","rice_cracker","rice_ball","rice","curry","ramen","spaghetti","sweet_potato","oden","sushi","fried_shrimp","fish_cake","moon_cake","dango","dumpling","fortune_cookie","takeout_box","crab","lobster","shrimp","squid","oyster","icecream","shaved_ice","ice_cream","doughnut","cookie","birthday","cake","cupcake","pie","chocolate_bar","candy","lollipop","custard","honey_pot","baby_bottle","glass_of_milk","coffee","teapot","tea","sake","champagne","wine_glass","cocktail","tropical_drink","beer","beers","clinking_glasses","tumbler_glass","pouring_liquid","cup_with_straw","bubble_tea","beverage_box","mate_drink","ice_cube","chopsticks","knife_fork_plate","fork_and_knife","spoon","hocho","jar","amphora"]},{"id":"activity","name":"Activities","emojis":["jack_o_lantern","christmas_tree","fireworks","sparkler","firecracker","sparkles","balloon","tada","confetti_ball","tanabata_tree","bamboo","dolls","flags","wind_chime","rice_scene","red_envelope","ribbon","gift","reminder_ribbon","admission_tickets","ticket","medal","trophy","sports_medal","first_place_medal","second_place_medal","third_place_medal","soccer","baseball","softball","basketball","volleyball","football","rugby_football","tennis","flying_disc","bowling","cricket_bat_and_ball","field_hockey_stick_and_ball","ice_hockey_stick_and_puck","lacrosse","table_tennis_paddle_and_ball","badminton_racquet_and_shuttlecock","boxing_glove","martial_arts_uniform","goal_net","golf","ice_skate","fishing_pole_and_fish","diving_mask","running_shirt_with_sash","ski","sled","curling_stone","dart","yo-yo","kite","gun","8ball","crystal_ball","magic_wand","video_game","joystick","slot_machine","game_die","jigsaw","teddy_bear","pinata","mirror_ball","nesting_dolls","spades","hearts","diamonds","clubs","chess_pawn","black_joker","mahjong","flower_playing_cards","performing_arts","frame_with_picture","art","thread","sewing_needle","yarn","knot"]},{"id":"places","name":"Travel & Places","emojis":["earth_africa","earth_americas","earth_asia","globe_with_meridians","world_map","japan","compass","snow_capped_mountain","mountain","volcano","mount_fuji","camping","beach_with_umbrella","desert","desert_island","national_park","stadium","classical_building","building_construction","bricks","rock","wood","hut","house_buildings","derelict_house_building","house","house_with_garden","office","post_office","european_post_office","hospital","bank","hotel","love_hotel","convenience_store","school","department_store","factory","japanese_castle","european_castle","wedding","tokyo_tower","statue_of_liberty","church","mosque","hindu_temple","synagogue","shinto_shrine","kaaba","fountain","tent","foggy","night_with_stars","cityscape","sunrise_over_mountains","sunrise","city_sunset","city_sunrise","bridge_at_night","hotsprings","carousel_horse","playground_slide","ferris_wheel","roller_coaster","barber","circus_tent","steam_locomotive","railway_car","bullettrain_side","bullettrain_front","train2","metro","light_rail","station","tram","monorail","mountain_railway","train","bus","oncoming_bus","trolleybus","minibus","ambulance","fire_engine","police_car","oncoming_police_car","taxi","oncoming_taxi","car","oncoming_automobile","blue_car","pickup_truck","truck","articulated_lorry","tractor","racing_car","racing_motorcycle","motor_scooter","manual_wheelchair","motorized_wheelchair","auto_rickshaw","bike","scooter","skateboard","roller_skate","busstop","motorway","railway_track","oil_drum","fuelpump","wheel","rotating_light","traffic_light","vertical_traffic_light","octagonal_sign","construction","anchor","ring_buoy","boat","canoe","speedboat","passenger_ship","ferry","motor_boat","ship","airplane","small_airplane","airplane_departure","airplane_arriving","parachute","seat","helicopter","suspension_railway","mountain_cableway","aerial_tramway","satellite","rocket","flying_saucer","bellhop_bell","luggage","hourglass","hourglass_flowing_sand","watch","alarm_clock","stopwatch","timer_clock","mantelpiece_clock","clock12","clock1230","clock1","clock130","clock2","clock230","clock3","clock330","clock4","clock430","clock5","clock530","clock6","clock630","clock7","clock730","clock8","clock830","clock9","clock930","clock10","clock1030","clock11","clock1130","new_moon","waxing_crescent_moon","first_quarter_moon","moon","full_moon","waning_gibbous_moon","last_quarter_moon","waning_crescent_moon","crescent_moon","new_moon_with_face","first_quarter_moon_with_face","last_quarter_moon_with_face","thermometer","sunny","full_moon_with_face","sun_with_face","ringed_planet","star","star2","stars","milky_way","cloud","partly_sunny","thunder_cloud_and_rain","mostly_sunny","barely_sunny","partly_sunny_rain","rain_cloud","snow_cloud","lightning","tornado","fog","wind_blowing_face","cyclone","rainbow","closed_umbrella","umbrella","umbrella_with_rain_drops","umbrella_on_ground","zap","snowflake","snowman","snowman_without_snow","comet","fire","droplet","ocean"]},{"id":"objects","name":"Objects","emojis":["eyeglasses","dark_sunglasses","goggles","lab_coat","safety_vest","necktie","shirt","jeans","scarf","gloves","coat","socks","dress","kimono","sari","one-piece_swimsuit","briefs","shorts","bikini","womans_clothes","folding_hand_fan","purse","handbag","pouch","shopping_bags","school_satchel","thong_sandal","mans_shoe","athletic_shoe","hiking_boot","womans_flat_shoe","high_heel","sandal","ballet_shoes","boot","hair_pick","crown","womans_hat","tophat","mortar_board","billed_cap","military_helmet","helmet_with_white_cross","prayer_beads","lipstick","ring","gem","mute","speaker","sound","loud_sound","loudspeaker","mega","postal_horn","bell","no_bell","musical_score","musical_note","notes","studio_microphone","level_slider","control_knobs","microphone","headphones","radio","saxophone","accordion","guitar","musical_keyboard","trumpet","violin","banjo","drum_with_drumsticks","long_drum","maracas","flute","iphone","calling","phone","telephone_receiver","pager","fax","battery","low_battery","electric_plug","computer","desktop_computer","printer","keyboard","three_button_mouse","trackball","minidisc","floppy_disk","cd","dvd","abacus","movie_camera","film_frames","film_projector","clapper","tv","camera","camera_with_flash","video_camera","vhs","mag","mag_right","candle","bulb","flashlight","izakaya_lantern","diya_lamp","notebook_with_decorative_cover","closed_book","book","green_book","blue_book","orange_book","books","notebook","ledger","page_with_curl","scroll","page_facing_up","newspaper","rolled_up_newspaper","bookmark_tabs","bookmark","label","moneybag","coin","yen","dollar","euro","pound","money_with_wings","credit_card","receipt","chart","email","e-mail","incoming_envelope","envelope_with_arrow","outbox_tray","inbox_tray","package","mailbox","mailbox_closed","mailbox_with_mail","mailbox_with_no_mail","postbox","ballot_box_with_ballot","pencil2","black_nib","lower_left_fountain_pen","lower_left_ballpoint_pen","lower_left_paintbrush","lower_left_crayon","memo","briefcase","file_folder","open_file_folder","card_index_dividers","date","calendar","spiral_note_pad","spiral_calendar_pad","card_index","chart_with_upwards_trend","chart_with_downwards_trend","bar_chart","clipboard","pushpin","round_pushpin","paperclip","linked_paperclips","straight_ruler","triangular_ruler","scissors","card_file_box","file_cabinet","wastebasket","lock","unlock","lock_with_ink_pen","closed_lock_with_key","key","old_key","hammer","axe","pick","hammer_and_pick","hammer_and_wrench","dagger_knife","crossed_swords","bomb","boomerang","bow_and_arrow","shield","carpentry_saw","wrench","screwdriver","nut_and_bolt","gear","compression","scales","probing_cane","link","chains","hook","toolbox","magnet","ladder","alembic","test_tube","petri_dish","dna","microscope","telescope","satellite_antenna","syringe","drop_of_blood","pill","adhesive_bandage","crutch","stethoscope","x-ray","door","elevator","mirror","window","bed","couch_and_lamp","chair","toilet","plunger","shower","bathtub","mouse_trap","razor","lotion_bottle","safety_pin","broom","basket","roll_of_paper","bucket","soap","bubbles","toothbrush","sponge","fire_extinguisher","shopping_trolley","smoking","coffin","headstone","funeral_urn","nazar_amulet","hamsa","moyai","placard","identification_card"]},{"id":"symbols","name":"Symbols","emojis":["atm","put_litter_in_its_place","potable_water","wheelchair","mens","womens","restroom","baby_symbol","wc","passport_control","customs","baggage_claim","left_luggage","warning","children_crossing","no_entry","no_entry_sign","no_bicycles","no_smoking","do_not_litter","non-potable_water","no_pedestrians","no_mobile_phones","underage","radioactive_sign","biohazard_sign","arrow_up","arrow_upper_right","arrow_right","arrow_lower_right","arrow_down","arrow_lower_left","arrow_left","arrow_upper_left","arrow_up_down","left_right_arrow","leftwards_arrow_with_hook","arrow_right_hook","arrow_heading_up","arrow_heading_down","arrows_clockwise","arrows_counterclockwise","back","end","on","soon","top","place_of_worship","atom_symbol","om_symbol","star_of_david","wheel_of_dharma","yin_yang","latin_cross","orthodox_cross","star_and_crescent","peace_symbol","menorah_with_nine_branches","six_pointed_star","khanda","aries","taurus","gemini","cancer","leo","virgo","libra","scorpius","sagittarius","capricorn","aquarius","pisces","ophiuchus","twisted_rightwards_arrows","repeat","repeat_one","arrow_forward","fast_forward","black_right_pointing_double_triangle_with_vertical_bar","black_right_pointing_triangle_with_double_vertical_bar","arrow_backward","rewind","black_left_pointing_double_triangle_with_vertical_bar","arrow_up_small","arrow_double_up","arrow_down_small","arrow_double_down","double_vertical_bar","black_square_for_stop","black_circle_for_record","eject","cinema","low_brightness","high_brightness","signal_strength","wireless","vibration_mode","mobile_phone_off","female_sign","male_sign","transgender_symbol","heavy_multiplication_x","heavy_plus_sign","heavy_minus_sign","heavy_division_sign","heavy_equals_sign","infinity","bangbang","interrobang","question","grey_question","grey_exclamation","exclamation","wavy_dash","currency_exchange","heavy_dollar_sign","medical_symbol","recycle","fleur_de_lis","trident","name_badge","beginner","o","white_check_mark","ballot_box_with_check","heavy_check_mark","x","negative_squared_cross_mark","curly_loop","loop","part_alternation_mark","eight_spoked_asterisk","eight_pointed_black_star","sparkle","copyright","registered","tm","hash","keycap_star","zero","one","two","three","four","five","six","seven","eight","nine","keycap_ten","capital_abcd","abcd","1234","symbols","abc","a","ab","b","cl","cool","free","information_source","id","m","new","ng","o2","ok","parking","sos","up","vs","koko","sa","u6708","u6709","u6307","ideograph_advantage","u5272","u7121","u7981","accept","u7533","u5408","u7a7a","congratulations","secret","u55b6","u6e80","red_circle","large_orange_circle","large_yellow_circle","large_green_circle","large_blue_circle","large_purple_circle","large_brown_circle","black_circle","white_circle","large_red_square","large_orange_square","large_yellow_square","large_green_square","large_blue_square","large_purple_square","large_brown_square","black_large_square","white_large_square","black_medium_square","white_medium_square","black_medium_small_square","white_medium_small_square","black_small_square","white_small_square","large_orange_diamond","large_blue_diamond","small_orange_diamond","small_blue_diamond","small_red_triangle","small_red_triangle_down","diamond_shape_with_a_dot_inside","radio_button","white_square_button","black_square_button"]},{"id":"flags","name":"Flags","emojis":["checkered_flag","cn","crossed_flags","de","es","flag-ac","flag-ad","flag-ae","flag-af","flag-ag","flag-ai","flag-al","flag-am","flag-ao","flag-aq","flag-ar","flag-as","flag-at","flag-au","flag-aw","flag-ax","flag-az","flag-ba","flag-bb","flag-bd","flag-be","flag-bf","flag-bg","flag-bh","flag-bi","flag-bj","flag-bl","flag-bm","flag-bn","flag-bo","flag-bq","flag-br","flag-bs","flag-bt","flag-bv","flag-bw","flag-by","flag-bz","flag-ca","flag-cc","flag-cd","flag-cf","flag-cg","flag-ch","flag-ci","flag-ck","flag-cl","flag-cm","flag-co","flag-cp","flag-cr","flag-cu","flag-cv","flag-cw","flag-cx","flag-cy","flag-cz","flag-dg","flag-dj","flag-dk","flag-dm","flag-do","flag-dz","flag-ea","flag-ec","flag-ee","flag-eg","flag-eh","flag-england","flag-er","flag-et","flag-eu","flag-fi","flag-fj","flag-fk","flag-fm","flag-fo","flag-ga","flag-gd","flag-ge","flag-gf","flag-gg","flag-gh","flag-gi","flag-gl","flag-gm","flag-gn","flag-gp","flag-gq","flag-gr","flag-gs","flag-gt","flag-gu","flag-gw","flag-gy","flag-hk","flag-hm","flag-hn","flag-hr","flag-ht","flag-hu","flag-ic","flag-id","flag-ie","flag-il","flag-im","flag-in","flag-io","flag-iq","flag-ir","flag-is","flag-je","flag-jm","flag-jo","flag-ke","flag-kg","flag-kh","flag-ki","flag-km","flag-kn","flag-kp","flag-kw","flag-ky","flag-kz","flag-la","flag-lb","flag-lc","flag-li","flag-lk","flag-lr","flag-ls","flag-lt","flag-lu","flag-lv","flag-ly","flag-ma","flag-mc","flag-md","flag-me","flag-mf","flag-mg","flag-mh","flag-mk","flag-ml","flag-mm","flag-mn","flag-mo","flag-mp","flag-mq","flag-mr","flag-ms","flag-mt","flag-mu","flag-mv","flag-mw","flag-mx","flag-my","flag-mz","flag-na","flag-nc","flag-ne","flag-nf","flag-ng","flag-ni","flag-nl","flag-no","flag-np","flag-nr","flag-nu","flag-nz","flag-om","flag-pa","flag-pe","flag-pf","flag-pg","flag-ph","flag-pk","flag-pl","flag-pm","flag-pn","flag-pr","flag-ps","flag-pt","flag-pw","flag-py","flag-qa","flag-re","flag-ro","flag-rs","flag-rw","flag-sa","flag-sb","flag-sc","flag-scotland","flag-sd","flag-se","flag-sg","flag-sh","flag-si","flag-sj","flag-sk","flag-sl","flag-sm","flag-sn","flag-so","flag-sr","flag-ss","flag-st","flag-sv","flag-sx","flag-sy","flag-sz","flag-ta","flag-tc","flag-td","flag-tf","flag-tg","flag-th","flag-tj","flag-tk","flag-tl","flag-tm","flag-tn","flag-to","flag-tr","flag-tt","flag-tv","flag-tw","flag-tz","flag-ua","flag-ug","flag-um","flag-uy","flag-uz","flag-va","flag-vc","flag-ve","flag-vg","flag-vi","flag-vn","flag-vu","flag-wales","flag-wf","flag-ws","flag-xk","flag-ye","flag-yt","flag-za","flag-zm","flag-zw","fr","gb","it","jp","kr","pirate_flag","rainbow-flag","ru","transgender_flag","triangular_flag_on_post","us","waving_black_flag","waving_white_flag"]}],"emojis":{"100":{"subcategory":"emotion","a":"Hundred Points Symbol","b":"1F4AF","d":true,"e":true,"f":true,"h":true,"j":["hundred_points","score","perfect","numbers","century","exam","quiz","test","pass","hundred"],"k":[28,7],"o":0},"1234":{"subcategory":"alphanum","a":"Input Symbol for Numbers","b":"1F522","d":true,"e":true,"f":true,"h":true,"j":["input_numbers","numbers","blue-square","1234","1","2","3","4"],"k":[29,60],"o":0},"grinning":{"subcategory":"face-smiling","a":"Grinning Face","b":"1F600","d":true,"e":true,"f":true,"h":true,"j":["grinning_face","face","smile","happy","joy",":D","grin"],"k":[32,21],"m":":D","o":1},"smiley":{"subcategory":"face-smiling","a":"Smiling Face with Open Mouth","b":"1F603","d":true,"e":true,"f":true,"h":true,"j":["grinning_face_with_big_eyes","face","happy","joy","haha",":D",":)","smile","funny"],"k":[32,24],"l":["=)","=-)"],"m":":)","o":0},"smile":{"subcategory":"face-smiling","a":"Smiling Face with Open Mouth and Smiling Eyes","b":"1F604","d":true,"e":true,"f":true,"h":true,"j":["grinning_face_with_smiling_eyes","face","happy","joy","funny","haha","laugh","like",":D",":)","smile"],"k":[32,25],"l":["C:","c:",":D",":-D"],"m":":)","o":0},"grin":{"subcategory":"face-smiling","a":"Grinning Face with Smiling Eyes","b":"1F601","d":true,"e":true,"f":true,"h":true,"j":["beaming_face_with_smiling_eyes","face","happy","smile","joy","kawaii"],"k":[32,22],"o":0},"laughing":{"subcategory":"face-smiling","a":"Smiling Face with Open Mouth and Tightly-Closed Eyes","b":"1F606","d":true,"e":true,"f":true,"h":true,"j":["grinning_squinting_face","happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],"k":[32,27],"l":[":>",":->"],"n":["satisfied"],"o":0},"sweat_smile":{"subcategory":"face-smiling","a":"Smiling Face with Open Mouth and Cold Sweat","b":"1F605","d":true,"e":true,"f":true,"h":true,"j":["grinning_face_with_sweat","face","hot","happy","laugh","sweat","smile","relief"],"k":[32,26],"o":0},"rolling_on_the_floor_laughing":{"subcategory":"face-smiling","a":"Rolling on the Floor Laughing","b":"1F923","d":true,"e":true,"f":true,"h":true,"j":["rolling_on_the_floor_laughing","face","rolling","floor","laughing","lol","haha","rofl"],"k":[40,17],"o":3},"joy":{"subcategory":"face-smiling","a":"Face with Tears of Joy","b":"1F602","d":true,"e":true,"f":true,"h":true,"j":["face_with_tears_of_joy","face","cry","tears","weep","happy","happytears","haha"],"k":[32,23],"o":0},"slightly_smiling_face":{"subcategory":"face-smiling","a":"Slightly Smiling Face","b":"1F642","d":true,"e":true,"f":true,"h":true,"j":["slightly_smiling_face","face","smile"],"k":[33,29],"l":[":)","(:",":-)"],"o":1},"upside_down_face":{"subcategory":"face-smiling","a":"Upside-Down Face","b":"1F643","d":true,"e":true,"f":true,"h":true,"j":["upside_down_face","face","flipped","silly","smile"],"k":[33,30],"o":1},"melting_face":{"subcategory":"face-smiling","a":"Melting Face","b":"1FAE0","d":true,"e":true,"f":true,"h":true,"j":["melting face","hot","heat"],"k":[55,30],"o":14},"wink":{"subcategory":"face-smiling","a":"Winking Face","b":"1F609","d":true,"e":true,"f":true,"h":true,"j":["winking_face","face","happy","mischievous","secret",";)","smile","eye"],"k":[32,30],"l":[";)",";-)"],"m":";)","o":0},"blush":{"subcategory":"face-smiling","a":"Smiling Face with Smiling Eyes","b":"1F60A","d":true,"e":true,"f":true,"h":true,"j":["smiling_face_with_smiling_eyes","face","smile","happy","flushed","crush","embarrassed","shy","joy"],"k":[32,31],"m":":)","o":0},"innocent":{"subcategory":"face-smiling","a":"Smiling Face with Halo","b":"1F607","d":true,"e":true,"f":true,"h":true,"j":["smiling_face_with_halo","face","angel","heaven","halo","innocent"],"k":[32,28],"o":1},"smiling_face_with_3_hearts":{"subcategory":"face-affection","a":"Smiling Face with Smiling Eyes and Three Hearts","b":"1F970","d":true,"e":true,"f":true,"h":true,"j":["smiling_face_with_hearts","face","love","like","affection","valentines","infatuation","crush","hearts","adore"],"k":[43,60],"o":11},"heart_eyes":{"subcategory":"face-affection","a":"Smiling Face with Heart-Shaped Eyes","b":"1F60D","d":true,"e":true,"f":true,"h":true,"j":["smiling_face_with_heart_eyes","face","love","like","affection","valentines","infatuation","crush","heart"],"k":[32,34],"o":0},"star-struck":{"subcategory":"face-affection","a":"Grinning Face with Star Eyes","b":"1F929","d":true,"e":true,"f":true,"h":true,"j":["star_struck","face","smile","starry","eyes","grinning"],"k":[40,40],"n":["grinning_face_with_star_eyes"],"o":5},"kissing_heart":{"subcategory":"face-affection","a":"Face Throwing a Kiss","b":"1F618","d":true,"e":true,"f":true,"h":true,"j":["face_blowing_a_kiss","face","love","like","affection","valentines","infatuation","kiss"],"k":[32,45],"l":[":*",":-*"],"o":0},"kissing":{"subcategory":"face-affection","a":"Kissing Face","b":"1F617","d":true,"e":true,"f":true,"h":true,"j":["kissing_face","love","like","face","3","valentines","infatuation","kiss"],"k":[32,44],"o":1},"relaxed":{"subcategory":"face-affection","a":"White Smiling Face","b":"263A-FE0F","c":"263A","d":true,"e":true,"f":true,"h":true,"j":["smiling_face","face","blush","massage","happiness"],"k":[57,35],"o":0},"kissing_closed_eyes":{"subcategory":"face-affection","a":"Kissing Face with Closed Eyes","b":"1F61A","d":true,"e":true,"f":true,"h":true,"j":["kissing_face_with_closed_eyes","face","love","like","affection","valentines","infatuation","kiss"],"k":[32,47],"o":0},"kissing_smiling_eyes":{"subcategory":"face-affection","a":"Kissing Face with Smiling Eyes","b":"1F619","d":true,"e":true,"f":true,"h":true,"j":["kissing_face_with_smiling_eyes","face","affection","valentines","infatuation","kiss"],"k":[32,46],"o":1},"smiling_face_with_tear":{"subcategory":"face-affection","a":"Smiling Face with Tear","b":"1F972","d":true,"e":true,"f":true,"h":true,"j":["smiling face with tear","sad","cry","pretend"],"k":[44,1],"o":13},"yum":{"subcategory":"face-tongue","a":"Face Savouring Delicious Food","b":"1F60B","d":true,"e":true,"f":true,"h":true,"j":["face_savoring_food","happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],"k":[32,32],"o":0},"stuck_out_tongue":{"subcategory":"face-tongue","a":"Face with Stuck-out Tongue","b":"1F61B","d":true,"e":true,"f":true,"h":true,"j":["face_with_tongue","face","prank","childish","playful","mischievous","smile","tongue"],"k":[32,48],"l":[":p",":-p",":P",":-P",":b",":-b"],"m":":p","o":1},"stuck_out_tongue_winking_eye":{"subcategory":"face-tongue","a":"Face with Stuck-out Tongue and Winking Eye","b":"1F61C","d":true,"e":true,"f":true,"h":true,"j":["winking_face_with_tongue","face","prank","childish","playful","mischievous","smile","wink","tongue"],"k":[32,49],"l":[";p",";-p",";b",";-b",";P",";-P"],"m":";p","o":0},"zany_face":{"subcategory":"face-tongue","a":"Grinning Face with One Large and One Small Eye","b":"1F92A","d":true,"e":true,"f":true,"h":true,"j":["zany_face","face","goofy","crazy"],"k":[40,41],"n":["grinning_face_with_one_large_and_one_small_eye"],"o":5},"stuck_out_tongue_closed_eyes":{"subcategory":"face-tongue","a":"Face with Stuck-out Tongue and Tightly-Closed Eyes","b":"1F61D","d":true,"e":true,"f":true,"h":true,"j":["squinting_face_with_tongue","face","prank","playful","mischievous","smile","tongue"],"k":[32,50],"o":0},"money_mouth_face":{"subcategory":"face-tongue","a":"Money-Mouth Face","b":"1F911","d":true,"e":true,"f":true,"h":true,"j":["money_mouth_face","face","rich","dollar","money"],"k":[39,0],"o":1},"hugging_face":{"subcategory":"face-hand","a":"Hugging Face","b":"1F917","d":true,"e":true,"f":true,"h":true,"j":["hugging_face","face","smile","hug"],"k":[39,6],"o":1},"face_with_hand_over_mouth":{"subcategory":"face-hand","a":"Smiling Face with Smiling Eyes and Hand Covering Mouth","b":"1F92D","d":true,"e":true,"f":true,"h":true,"j":["face_with_hand_over_mouth","face","whoops","shock","surprise"],"k":[40,44],"n":["smiling_face_with_smiling_eyes_and_hand_covering_mouth"],"o":5},"face_with_open_eyes_and_hand_over_mouth":{"subcategory":"face-hand","a":"Face with Open Eyes and Hand over Mouth","b":"1FAE2","d":true,"e":true,"f":true,"h":true,"j":["face with open eyes and hand over mouth","silence","secret","shock","surprise"],"k":[55,32],"o":14},"face_with_peeking_eye":{"subcategory":"face-hand","a":"Face with Peeking Eye","b":"1FAE3","d":true,"e":true,"f":true,"h":true,"j":["face with peeking eye","scared","frightening","embarrassing","shy"],"k":[55,33],"o":14},"shushing_face":{"subcategory":"face-hand","a":"Face with Finger Covering Closed Lips","b":"1F92B","d":true,"e":true,"f":true,"h":true,"j":["shushing_face","face","quiet","shhh"],"k":[40,42],"n":["face_with_finger_covering_closed_lips"],"o":5},"thinking_face":{"subcategory":"face-hand","a":"Thinking Face","b":"1F914","d":true,"e":true,"f":true,"h":true,"j":["thinking_face","face","hmmm","think","consider"],"k":[39,3],"o":1},"saluting_face":{"subcategory":"face-hand","a":"Saluting Face","b":"1FAE1","d":true,"e":true,"f":true,"h":true,"j":["saluting face","respect","salute"],"k":[55,31],"o":14},"zipper_mouth_face":{"subcategory":"face-neutral-skeptical","a":"Zipper-Mouth Face","b":"1F910","d":true,"e":true,"f":true,"h":true,"j":["zipper_mouth_face","face","sealed","zipper","secret"],"k":[38,60],"o":1},"face_with_raised_eyebrow":{"subcategory":"face-neutral-skeptical","a":"Face with One Eyebrow Raised","b":"1F928","d":true,"e":true,"f":true,"h":true,"j":["face_with_raised_eyebrow","face","distrust","scepticism","disapproval","disbelief","surprise"],"k":[40,39],"n":["face_with_one_eyebrow_raised"],"o":5},"neutral_face":{"subcategory":"face-neutral-skeptical","a":"Neutral Face","b":"1F610","d":true,"e":true,"f":true,"h":true,"j":["neutral_face","indifference","meh",":|","neutral"],"k":[32,37],"l":[":|",":-|"],"o":0},"expressionless":{"subcategory":"face-neutral-skeptical","a":"Expressionless Face","b":"1F611","d":true,"e":true,"f":true,"h":true,"j":["expressionless_face","face","indifferent","-_-","meh","deadpan"],"k":[32,38],"o":1},"no_mouth":{"subcategory":"face-neutral-skeptical","a":"Face Without Mouth","b":"1F636","d":true,"e":true,"f":true,"h":true,"j":["face_without_mouth","face","hellokitty"],"k":[33,17],"o":1},"dotted_line_face":{"subcategory":"face-neutral-skeptical","a":"Dotted Line Face","b":"1FAE5","d":true,"e":true,"f":true,"h":true,"j":["dotted line face","invisible","lonely","isolation","depression"],"k":[55,35],"o":14},"face_in_clouds":{"subcategory":"face-neutral-skeptical","a":"Face in Clouds","b":"1F636-200D-1F32B-FE0F","c":"1F636-200D-1F32B","d":true,"e":true,"f":true,"h":true,"j":["face in clouds","shower","steam","dream"],"k":[33,16],"o":13},"smirk":{"subcategory":"face-neutral-skeptical","a":"Smirking Face","b":"1F60F","d":true,"e":true,"f":true,"h":true,"j":["smirking_face","face","smile","mean","prank","smug","sarcasm"],"k":[32,36],"o":0},"unamused":{"subcategory":"face-neutral-skeptical","a":"Unamused Face","b":"1F612","d":true,"e":true,"f":true,"h":true,"j":["unamused_face","indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],"k":[32,39],"m":":(","o":0},"face_with_rolling_eyes":{"subcategory":"face-neutral-skeptical","a":"Face with Rolling Eyes","b":"1F644","d":true,"e":true,"f":true,"h":true,"j":["face_with_rolling_eyes","face","eyeroll","frustrated"],"k":[33,31],"o":1},"grimacing":{"subcategory":"face-neutral-skeptical","a":"Grimacing Face","b":"1F62C","d":true,"e":true,"f":true,"h":true,"j":["grimacing_face","face","grimace","teeth"],"k":[33,4],"o":1},"face_exhaling":{"subcategory":"face-neutral-skeptical","a":"Face Exhaling","b":"1F62E-200D-1F4A8","d":true,"e":true,"f":true,"h":true,"j":["face exhaling","relieve","relief","tired","sigh"],"k":[33,6],"o":13},"lying_face":{"subcategory":"face-neutral-skeptical","a":"Lying Face","b":"1F925","d":true,"e":true,"f":true,"h":true,"j":["lying_face","face","lie","pinocchio"],"k":[40,19],"o":3},"shaking_face":{"subcategory":"face-neutral-skeptical","a":"Shaking Face","b":"1FAE8","d":true,"e":true,"f":false,"h":false,"j":["shaking face","dizzy","shock","blurry","earthquake"],"k":[55,38],"o":15},"relieved":{"subcategory":"face-sleepy","a":"Relieved Face","b":"1F60C","d":true,"e":true,"f":true,"h":true,"j":["relieved_face","face","relaxed","phew","massage","happiness"],"k":[32,33],"o":0},"pensive":{"subcategory":"face-sleepy","a":"Pensive Face","b":"1F614","d":true,"e":true,"f":true,"h":true,"j":["pensive_face","face","sad","depressed","upset"],"k":[32,41],"o":0},"sleepy":{"subcategory":"face-sleepy","a":"Sleepy Face","b":"1F62A","d":true,"e":true,"f":true,"h":true,"j":["sleepy_face","face","tired","rest","nap"],"k":[33,2],"o":0},"drooling_face":{"subcategory":"face-sleepy","a":"Drooling Face","b":"1F924","d":true,"e":true,"f":true,"h":true,"j":["drooling_face","face"],"k":[40,18],"o":3},"sleeping":{"subcategory":"face-sleepy","a":"Sleeping Face","b":"1F634","d":true,"e":true,"f":true,"h":true,"j":["sleeping_face","face","tired","sleepy","night","zzz"],"k":[33,13],"o":1},"mask":{"subcategory":"face-unwell","a":"Face with Medical Mask","b":"1F637","d":true,"e":true,"f":true,"h":true,"j":["face_with_medical_mask","face","sick","ill","disease","covid"],"k":[33,18],"o":0},"face_with_thermometer":{"subcategory":"face-unwell","a":"Face with Thermometer","b":"1F912","d":true,"e":true,"f":true,"h":true,"j":["face_with_thermometer","sick","temperature","thermometer","cold","fever","covid"],"k":[39,1],"o":1},"face_with_head_bandage":{"subcategory":"face-unwell","a":"Face with Head-Bandage","b":"1F915","d":true,"e":true,"f":true,"h":true,"j":["face_with_head_bandage","injured","clumsy","bandage","hurt"],"k":[39,4],"o":1},"nauseated_face":{"subcategory":"face-unwell","a":"Nauseated Face","b":"1F922","d":true,"e":true,"f":true,"h":true,"j":["nauseated_face","face","vomit","gross","green","sick","throw up","ill"],"k":[40,16],"o":3},"face_vomiting":{"subcategory":"face-unwell","a":"Face with Open Mouth Vomiting","b":"1F92E","d":true,"e":true,"f":true,"h":true,"j":["face_vomiting","face","sick"],"k":[40,45],"n":["face_with_open_mouth_vomiting"],"o":5},"sneezing_face":{"subcategory":"face-unwell","a":"Sneezing Face","b":"1F927","d":true,"e":true,"f":true,"h":true,"j":["sneezing_face","face","gesundheit","sneeze","sick","allergy"],"k":[40,38],"o":3},"hot_face":{"subcategory":"face-unwell","a":"Overheated Face","b":"1F975","d":true,"e":true,"f":true,"h":true,"j":["hot_face","face","feverish","heat","red","sweating"],"k":[44,4],"o":11},"cold_face":{"subcategory":"face-unwell","a":"Freezing Face","b":"1F976","d":true,"e":true,"f":true,"h":true,"j":["cold_face","face","blue","freezing","frozen","frostbite","icicles"],"k":[44,5],"o":11},"woozy_face":{"subcategory":"face-unwell","a":"Face with Uneven Eyes and Wavy Mouth","b":"1F974","d":true,"e":true,"f":true,"h":true,"j":["woozy_face","face","dizzy","intoxicated","tipsy","wavy"],"k":[44,3],"o":11},"dizzy_face":{"subcategory":"face-unwell","a":"Dizzy Face","b":"1F635","d":true,"e":true,"f":true,"h":true,"j":["dizzy_face","spent","unconscious","xox","dizzy"],"k":[33,15],"o":0},"face_with_spiral_eyes":{"subcategory":"face-unwell","a":"Face with Spiral Eyes","b":"1F635-200D-1F4AB","d":true,"e":true,"f":true,"h":true,"j":["face with spiral eyes","sick","ill","confused","nauseous","nausea"],"k":[33,14],"o":13},"exploding_head":{"subcategory":"face-unwell","a":"Shocked Face with Exploding Head","b":"1F92F","d":true,"e":true,"f":true,"h":true,"j":["exploding_head","face","shocked","mind","blown"],"k":[40,46],"n":["shocked_face_with_exploding_head"],"o":5},"face_with_cowboy_hat":{"subcategory":"face-hat","a":"Face with Cowboy Hat","b":"1F920","d":true,"e":true,"f":true,"h":true,"j":["cowboy_hat_face","face","cowgirl","hat"],"k":[40,14],"o":3},"partying_face":{"subcategory":"face-hat","a":"Face with Party Horn and Party Hat","b":"1F973","d":true,"e":true,"f":true,"h":true,"j":["partying_face","face","celebration","woohoo"],"k":[44,2],"o":11},"disguised_face":{"subcategory":"face-hat","a":"Disguised Face","b":"1F978","d":true,"e":true,"f":true,"h":true,"j":["disguised face","pretent","brows","glasses","moustache"],"k":[44,12],"o":13},"sunglasses":{"subcategory":"face-glasses","a":"Smiling Face with Sunglasses","b":"1F60E","d":true,"e":true,"f":true,"h":true,"j":["smiling_face_with_sunglasses","face","cool","smile","summer","beach","sunglass"],"k":[32,35],"l":["8)"],"o":1},"nerd_face":{"subcategory":"face-glasses","a":"Nerd Face","b":"1F913","d":true,"e":true,"f":true,"h":true,"j":["nerd_face","face","nerdy","geek","dork"],"k":[39,2],"o":1},"face_with_monocle":{"subcategory":"face-glasses","a":"Face with Monocle","b":"1F9D0","d":true,"e":true,"f":true,"h":true,"j":["face_with_monocle","face","stuffy","wealthy"],"k":[47,13],"o":5},"confused":{"subcategory":"face-concerned","a":"Confused Face","b":"1F615","d":true,"e":true,"f":true,"h":true,"j":["confused_face","face","indifference","huh","weird","hmmm",":/"],"k":[32,42],"l":[":\\\\",":-\\\\",":/",":-/"],"o":1},"face_with_diagonal_mouth":{"subcategory":"face-concerned","a":"Face with Diagonal Mouth","b":"1FAE4","d":true,"e":true,"f":true,"h":true,"j":["face with diagonal mouth","skeptic","confuse","frustrated","indifferent"],"k":[55,34],"o":14},"worried":{"subcategory":"face-concerned","a":"Worried Face","b":"1F61F","d":true,"e":true,"f":true,"h":true,"j":["worried_face","face","concern","nervous",":("],"k":[32,52],"o":1},"slightly_frowning_face":{"subcategory":"face-concerned","a":"Slightly Frowning Face","b":"1F641","d":true,"e":true,"f":true,"h":true,"j":["slightly_frowning_face","face","frowning","disappointed","sad","upset"],"k":[33,28],"o":1},"white_frowning_face":{"subcategory":"face-concerned","a":"Frowning Face","b":"2639-FE0F","c":"2639","d":true,"e":true,"f":true,"h":true,"j":["frowning_face","face","sad","upset","frown"],"k":[57,34],"o":0},"open_mouth":{"subcategory":"face-concerned","a":"Face with Open Mouth","b":"1F62E","d":true,"e":true,"f":true,"h":true,"j":["face_with_open_mouth","face","surprise","impressed","wow","whoa",":O"],"k":[33,7],"l":[":o",":-o",":O",":-O"],"o":1},"hushed":{"subcategory":"face-concerned","a":"Hushed Face","b":"1F62F","d":true,"e":true,"f":true,"h":true,"j":["hushed_face","face","woo","shh"],"k":[33,8],"o":1},"astonished":{"subcategory":"face-concerned","a":"Astonished Face","b":"1F632","d":true,"e":true,"f":true,"h":true,"j":["astonished_face","face","xox","surprised","poisoned"],"k":[33,11],"o":0},"flushed":{"subcategory":"face-concerned","a":"Flushed Face","b":"1F633","d":true,"e":true,"f":true,"h":true,"j":["flushed_face","face","blush","shy","flattered"],"k":[33,12],"o":0},"pleading_face":{"subcategory":"face-concerned","a":"Face with Pleading Eyes","b":"1F97A","d":true,"e":true,"f":true,"h":true,"j":["pleading_face","face","begging","mercy","cry","tears","sad","grievance"],"k":[44,14],"o":11},"face_holding_back_tears":{"subcategory":"face-concerned","a":"Face Holding Back Tears","b":"1F979","d":true,"e":true,"f":true,"h":true,"j":["face holding back tears","touched","gratitude","cry"],"k":[44,13],"o":14},"frowning":{"subcategory":"face-concerned","a":"Frowning Face with Open Mouth","b":"1F626","d":true,"e":true,"f":true,"h":true,"j":["frowning_face_with_open_mouth","face","aw","what"],"k":[32,59],"o":1},"anguished":{"subcategory":"face-concerned","a":"Anguished Face","b":"1F627","d":true,"e":true,"f":true,"h":true,"j":["anguished_face","face","stunned","nervous"],"k":[32,60],"l":["D:"],"o":1},"fearful":{"subcategory":"face-concerned","a":"Fearful Face","b":"1F628","d":true,"e":true,"f":true,"h":true,"j":["fearful_face","face","scared","terrified","nervous"],"k":[33,0],"o":0},"cold_sweat":{"subcategory":"face-concerned","a":"Face with Open Mouth and Cold Sweat","b":"1F630","d":true,"e":true,"f":true,"h":true,"j":["anxious_face_with_sweat","face","nervous","sweat"],"k":[33,9],"o":0},"disappointed_relieved":{"subcategory":"face-concerned","a":"Disappointed but Relieved Face","b":"1F625","d":true,"e":true,"f":true,"h":true,"j":["sad_but_relieved_face","face","phew","sweat","nervous"],"k":[32,58],"o":0},"cry":{"subcategory":"face-concerned","a":"Crying Face","b":"1F622","d":true,"e":true,"f":true,"h":true,"j":["crying_face","face","tears","sad","depressed","upset",":\'("],"k":[32,55],"l":[":\'("],"m":":\'(","o":0},"sob":{"subcategory":"face-concerned","a":"Loudly Crying Face","b":"1F62D","d":true,"e":true,"f":true,"h":true,"j":["loudly_crying_face","face","cry","tears","sad","upset","depressed"],"k":[33,5],"m":":\'(","o":0},"scream":{"subcategory":"face-concerned","a":"Face Screaming in Fear","b":"1F631","d":true,"e":true,"f":true,"h":true,"j":["face_screaming_in_fear","face","munch","scared","omg"],"k":[33,10],"o":0},"confounded":{"subcategory":"face-concerned","a":"Confounded Face","b":"1F616","d":true,"e":true,"f":true,"h":true,"j":["confounded_face","face","confused","sick","unwell","oops",":S"],"k":[32,43],"o":0},"persevere":{"subcategory":"face-concerned","a":"Persevering Face","b":"1F623","d":true,"e":true,"f":true,"h":true,"j":["persevering_face","face","sick","no","upset","oops"],"k":[32,56],"o":0},"disappointed":{"subcategory":"face-concerned","a":"Disappointed Face","b":"1F61E","d":true,"e":true,"f":true,"h":true,"j":["disappointed_face","face","sad","upset","depressed",":("],"k":[32,51],"l":["):",":(",":-("],"m":":(","o":0},"sweat":{"subcategory":"face-concerned","a":"Face with Cold Sweat","b":"1F613","d":true,"e":true,"f":true,"h":true,"j":["downcast_face_with_sweat","face","hot","sad","tired","exercise"],"k":[32,40],"o":0},"weary":{"subcategory":"face-concerned","a":"Weary Face","b":"1F629","d":true,"e":true,"f":true,"h":true,"j":["weary_face","face","tired","sleepy","sad","frustrated","upset"],"k":[33,1],"o":0},"tired_face":{"subcategory":"face-concerned","a":"Tired Face","b":"1F62B","d":true,"e":true,"f":true,"h":true,"j":["tired_face","sick","whine","upset","frustrated"],"k":[33,3],"o":0},"yawning_face":{"subcategory":"face-concerned","a":"Yawning Face","b":"1F971","d":true,"e":true,"f":true,"h":true,"j":["yawning_face","tired","sleepy"],"k":[44,0],"o":12},"triumph":{"subcategory":"face-negative","a":"Face with Look of Triumph","b":"1F624","d":true,"e":true,"f":true,"h":true,"j":["face_with_steam_from_nose","face","gas","phew","proud","pride"],"k":[32,57],"o":0},"rage":{"subcategory":"face-negative","a":"Pouting Face","b":"1F621","d":true,"e":true,"f":true,"h":true,"j":["pouting_face","angry","mad","hate","despise"],"k":[32,54],"o":0},"angry":{"subcategory":"face-negative","a":"Angry Face","b":"1F620","d":true,"e":true,"f":true,"h":true,"j":["angry_face","mad","face","annoyed","frustrated"],"k":[32,53],"l":[">:(",">:-("],"o":0},"face_with_symbols_on_mouth":{"subcategory":"face-negative","a":"Serious Face with Symbols Covering Mouth","b":"1F92C","d":true,"e":true,"f":true,"h":true,"j":["face_with_symbols_on_mouth","face","swearing","cursing","cussing","profanity","expletive"],"k":[40,43],"n":["serious_face_with_symbols_covering_mouth"],"o":5},"smiling_imp":{"subcategory":"face-negative","a":"Smiling Face with Horns","b":"1F608","d":true,"e":true,"f":true,"h":true,"j":["smiling_face_with_horns","devil","horns"],"k":[32,29],"o":1},"imp":{"subcategory":"face-negative","a":"Imp","b":"1F47F","d":true,"e":true,"f":true,"h":true,"j":["angry_face_with_horns","devil","angry","horns"],"k":[25,9],"o":0},"skull":{"subcategory":"face-negative","a":"Skull","b":"1F480","d":true,"e":true,"f":true,"h":true,"j":["skull","dead","skeleton","creepy","death"],"k":[25,10],"o":0},"skull_and_crossbones":{"subcategory":"face-negative","a":"Skull and Crossbones","b":"2620-FE0F","c":"2620","d":true,"e":true,"f":true,"h":true,"j":["skull_and_crossbones","poison","danger","deadly","scary","death","pirate","evil"],"k":[57,26],"o":1},"hankey":{"subcategory":"face-costume","a":"Pile of Poo","b":"1F4A9","d":true,"e":true,"f":true,"h":true,"j":["pile_of_poo","hankey","shitface","fail","turd","shit"],"k":[27,57],"n":["poop","shit"],"o":0},"clown_face":{"subcategory":"face-costume","a":"Clown Face","b":"1F921","d":true,"e":true,"f":true,"h":true,"j":["clown_face","face"],"k":[40,15],"o":3},"japanese_ogre":{"subcategory":"face-costume","a":"Japanese Ogre","b":"1F479","d":true,"e":true,"f":true,"h":true,"j":["ogre","monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],"k":[24,59],"o":0},"japanese_goblin":{"subcategory":"face-costume","a":"Japanese Goblin","b":"1F47A","d":true,"e":true,"f":true,"h":true,"j":["goblin","red","evil","mask","monster","scary","creepy","japanese","goblin"],"k":[24,60],"o":0},"ghost":{"subcategory":"face-costume","a":"Ghost","b":"1F47B","d":true,"e":true,"f":true,"h":true,"j":["ghost","halloween","spooky","scary"],"k":[25,0],"o":0},"alien":{"subcategory":"face-costume","a":"Extraterrestrial Alien","b":"1F47D","d":true,"e":true,"f":true,"h":true,"j":["alien","UFO","paul","weird","outer_space"],"k":[25,7],"o":0},"space_invader":{"subcategory":"face-costume","a":"Alien Monster","b":"1F47E","d":true,"e":true,"f":true,"h":true,"j":["alien_monster","game","arcade","play"],"k":[25,8],"o":0},"robot_face":{"subcategory":"face-costume","a":"Robot Face","b":"1F916","d":true,"e":true,"f":true,"h":true,"j":["robot","computer","machine","bot"],"k":[39,5],"o":1},"smiley_cat":{"subcategory":"cat-face","a":"Smiling Cat Face with Open Mouth","b":"1F63A","d":true,"e":true,"f":true,"h":true,"j":["grinning_cat","animal","cats","happy","smile"],"k":[33,21],"o":0},"smile_cat":{"subcategory":"cat-face","a":"Grinning Cat Face with Smiling Eyes","b":"1F638","d":true,"e":true,"f":true,"h":true,"j":["grinning_cat_with_smiling_eyes","animal","cats","smile"],"k":[33,19],"o":0},"joy_cat":{"subcategory":"cat-face","a":"Cat Face with Tears of Joy","b":"1F639","d":true,"e":true,"f":true,"h":true,"j":["cat_with_tears_of_joy","animal","cats","haha","happy","tears"],"k":[33,20],"o":0},"heart_eyes_cat":{"subcategory":"cat-face","a":"Smiling Cat Face with Heart-Shaped Eyes","b":"1F63B","d":true,"e":true,"f":true,"h":true,"j":["smiling_cat_with_heart_eyes","animal","love","like","affection","cats","valentines","heart"],"k":[33,22],"o":0},"smirk_cat":{"subcategory":"cat-face","a":"Cat Face with Wry Smile","b":"1F63C","d":true,"e":true,"f":true,"h":true,"j":["cat_with_wry_smile","animal","cats","smirk"],"k":[33,23],"o":0},"kissing_cat":{"subcategory":"cat-face","a":"Kissing Cat Face with Closed Eyes","b":"1F63D","d":true,"e":true,"f":true,"h":true,"j":["kissing_cat","animal","cats","kiss"],"k":[33,24],"o":0},"scream_cat":{"subcategory":"cat-face","a":"Weary Cat Face","b":"1F640","d":true,"e":true,"f":true,"h":true,"j":["weary_cat","animal","cats","munch","scared","scream"],"k":[33,27],"o":0},"crying_cat_face":{"subcategory":"cat-face","a":"Crying Cat Face","b":"1F63F","d":true,"e":true,"f":true,"h":true,"j":["crying_cat","animal","tears","weep","sad","cats","upset","cry"],"k":[33,26],"o":0},"pouting_cat":{"subcategory":"cat-face","a":"Pouting Cat Face","b":"1F63E","d":true,"e":true,"f":true,"h":true,"j":["pouting_cat","animal","cats"],"k":[33,25],"o":0},"see_no_evil":{"subcategory":"monkey-face","a":"See-No-Evil Monkey","b":"1F648","d":true,"e":true,"f":true,"h":true,"j":["see_no_evil_monkey","monkey","animal","nature","haha"],"k":[34,25],"o":0},"hear_no_evil":{"subcategory":"monkey-face","a":"Hear-No-Evil Monkey","b":"1F649","d":true,"e":true,"f":true,"h":true,"j":["hear_no_evil_monkey","animal","monkey","nature"],"k":[34,26],"o":0},"speak_no_evil":{"subcategory":"monkey-face","a":"Speak-No-Evil Monkey","b":"1F64A","d":true,"e":true,"f":true,"h":true,"j":["speak_no_evil_monkey","monkey","animal","nature","omg"],"k":[34,27],"o":0},"love_letter":{"subcategory":"heart","a":"Love Letter","b":"1F48C","d":true,"e":true,"f":true,"h":true,"j":["love_letter","email","like","affection","envelope","valentines"],"k":[26,39],"o":0},"cupid":{"subcategory":"heart","a":"Heart with Arrow","b":"1F498","d":true,"e":true,"f":true,"h":true,"j":["heart_with_arrow","love","like","heart","affection","valentines"],"k":[27,40],"o":0},"gift_heart":{"subcategory":"heart","a":"Heart with Ribbon","b":"1F49D","d":true,"e":true,"f":true,"h":true,"j":["heart_with_ribbon","love","valentines"],"k":[27,45],"o":0},"sparkling_heart":{"subcategory":"heart","a":"Sparkling Heart","b":"1F496","d":true,"e":true,"f":true,"h":true,"j":["sparkling_heart","love","like","affection","valentines"],"k":[27,38],"o":0},"heartpulse":{"subcategory":"heart","a":"Growing Heart","b":"1F497","d":true,"e":true,"f":true,"h":true,"j":["growing_heart","like","love","affection","valentines","pink"],"k":[27,39],"o":0},"heartbeat":{"subcategory":"heart","a":"Beating Heart","b":"1F493","d":true,"e":true,"f":true,"h":true,"j":["beating_heart","love","like","affection","valentines","pink","heart"],"k":[27,35],"o":0},"revolving_hearts":{"subcategory":"heart","a":"Revolving Hearts","b":"1F49E","d":true,"e":true,"f":true,"h":true,"j":["revolving_hearts","love","like","affection","valentines"],"k":[27,46],"o":0},"two_hearts":{"subcategory":"heart","a":"Two Hearts","b":"1F495","d":true,"e":true,"f":true,"h":true,"j":["two_hearts","love","like","affection","valentines","heart"],"k":[27,37],"o":0},"heart_decoration":{"subcategory":"heart","a":"Heart Decoration","b":"1F49F","d":true,"e":true,"f":true,"h":true,"j":["heart_decoration","purple-square","love","like"],"k":[27,47],"o":0},"heavy_heart_exclamation_mark_ornament":{"subcategory":"heart","a":"Heart Exclamation","b":"2763-FE0F","c":"2763","d":true,"e":true,"f":true,"h":true,"j":["heart_exclamation","decoration","love"],"k":[59,38],"o":1},"broken_heart":{"subcategory":"heart","a":"Broken Heart","b":"1F494","d":true,"e":true,"f":true,"h":true,"j":["broken_heart","sad","sorry","break","heart","heartbreak"],"k":[27,36],"l":[" { /******/ __webpack_require__.amdD = function () { /******/ throw new Error('define cannot be used indirect'); /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/amd options */ /******/ (() => { /******/ __webpack_require__.amdO = {}; /******/ })(); /******/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/create fake namespace object */ /******/ (() => { /******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__); /******/ var leafPrototypes; /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 16: return value when it's Promise-like /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = this(value); /******/ if(mode & 8) return value; /******/ if(typeof value === 'object' && value) { /******/ if((mode & 4) && value.__esModule) return value; /******/ if((mode & 16) && typeof value.then === 'function') return value; /******/ } /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ var def = {}; /******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)]; /******/ for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) { /******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key]))); /******/ } /******/ def['default'] = () => (value); /******/ __webpack_require__.d(ns, def); /******/ return ns; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/ensure chunk */ /******/ (() => { /******/ __webpack_require__.f = {}; /******/ // This file contains only the entry chunk. /******/ // The chunk loading function for additional chunks /******/ __webpack_require__.e = (chunkId) => { /******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { /******/ __webpack_require__.f[key](chunkId, promises); /******/ return promises; /******/ }, [])); /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/get javascript chunk filename */ /******/ (() => { /******/ // This function allow to reference async chunks /******/ __webpack_require__.u = (chunkId) => { /******/ // return url for filenames based on template /******/ return "calendar-" + chunkId + ".js?v=" + {"vendors-node_modules_nextcloud_capabilities_dist_index_js-node_modules_nextcloud_vue-select_d-877981":"741d92f5ec54d0c1ff41","vendors-node_modules_vue-material-design-icons_CalendarBlank_vue-node_modules_vue-material-de-e2c1f8":"0658eb6db50a09dd2afe","vendors-node_modules_path-browserify_index_js-node_modules_nextcloud_dialogs_dist_chunks_Dial-e0595f":"e0f3178442f3c9eb35e1","node_modules_nextcloud_dialogs_dist_legacy_mjs":"8be838e4c6e9aae56c87","vendors-node_modules_webdav_dist_web_index_js":"454da8f908d41b47c607","vendors-node_modules_nextcloud_dialogs_dist_chunks_FilePicker-8ibBgPg__mjs":"ea54a36450de178d1141","public-calendar-subscription-picker":"0c8b5b050db3beb63d49","vendors-node_modules_moment_locale_af_js-node_modules_moment_locale_ar-dz_js-node_modules_mom-582c96":"ce1bed825f57dd1d117a","node_modules_moment_locale_sync_recursive_":"4bc2c39c5e0ff182c2e3"}[chunkId] + ""; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/global */ /******/ (() => { /******/ __webpack_require__.g = (function() { /******/ if (typeof globalThis === 'object') return globalThis; /******/ try { /******/ return this || new Function('return this')(); /******/ } catch (e) { /******/ if (typeof window === 'object') return window; /******/ } /******/ })(); /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/load script */ /******/ (() => { /******/ var inProgress = {}; /******/ var dataWebpackPrefix = "calendar:"; /******/ // loadScript function to load a script via script tag /******/ __webpack_require__.l = (url, done, key, chunkId) => { /******/ if(inProgress[url]) { inProgress[url].push(done); return; } /******/ var script, needAttach; /******/ if(key !== undefined) { /******/ var scripts = document.getElementsByTagName("script"); /******/ for(var i = 0; i < scripts.length; i++) { /******/ var s = scripts[i]; /******/ if(s.getAttribute("src") == url || s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s; break; } /******/ } /******/ } /******/ if(!script) { /******/ needAttach = true; /******/ script = document.createElement('script'); /******/ /******/ script.charset = 'utf-8'; /******/ script.timeout = 120; /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } /******/ script.setAttribute("data-webpack", dataWebpackPrefix + key); /******/ /******/ script.src = url; /******/ } /******/ inProgress[url] = [done]; /******/ var onScriptComplete = (prev, event) => { /******/ // avoid mem leaks in IE. /******/ script.onerror = script.onload = null; /******/ clearTimeout(timeout); /******/ var doneFns = inProgress[url]; /******/ delete inProgress[url]; /******/ script.parentNode && script.parentNode.removeChild(script); /******/ doneFns && doneFns.forEach((fn) => (fn(event))); /******/ if(prev) return prev(event); /******/ } /******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); /******/ script.onerror = onScriptComplete.bind(null, script.onerror); /******/ script.onload = onScriptComplete.bind(null, script.onload); /******/ needAttach && document.head.appendChild(script); /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/node module decorator */ /******/ (() => { /******/ __webpack_require__.nmd = (module) => { /******/ module.paths = []; /******/ if (!module.children) module.children = []; /******/ return module; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/publicPath */ /******/ (() => { /******/ __webpack_require__.p = "\\apps\\calendar\\js\\"; /******/ })(); /******/ /******/ /* webpack/runtime/jsonp chunk loading */ /******/ (() => { /******/ __webpack_require__.b = document.baseURI || self.location.href; /******/ /******/ // object to store loaded and loading chunks /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ "main": 0 /******/ }; /******/ /******/ __webpack_require__.f.j = (chunkId, promises) => { /******/ // JSONP chunk loading for javascript /******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; /******/ if(installedChunkData !== 0) { // 0 means "already installed". /******/ /******/ // a Promise means "currently loading". /******/ if(installedChunkData) { /******/ promises.push(installedChunkData[2]); /******/ } else { /******/ if(true) { // all chunks have JS /******/ // setup Promise in chunk cache /******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); /******/ promises.push(installedChunkData[2] = promise); /******/ /******/ // start chunk loading /******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); /******/ // create error before stack unwound to get useful stacktrace later /******/ var error = new Error(); /******/ var loadingEnded = (event) => { /******/ if(__webpack_require__.o(installedChunks, chunkId)) { /******/ installedChunkData = installedChunks[chunkId]; /******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; /******/ if(installedChunkData) { /******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); /******/ var realSrc = event && event.target && event.target.src; /******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; /******/ error.name = 'ChunkLoadError'; /******/ error.type = errorType; /******/ error.request = realSrc; /******/ installedChunkData[1](error); /******/ } /******/ } /******/ }; /******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); /******/ } /******/ } /******/ } /******/ }; /******/ /******/ // no prefetching /******/ /******/ // no preloaded /******/ /******/ // no HMR /******/ /******/ // no HMR manifest /******/ /******/ // no on chunks loaded /******/ /******/ // install a JSONP callback for chunk loading /******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { /******/ var [chunkIds, moreModules, runtime] = data; /******/ // add "moreModules" to the modules object, /******/ // then flag all "chunkIds" as loaded and fire callback /******/ var moduleId, chunkId, i = 0; /******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { /******/ for(moduleId in moreModules) { /******/ if(__webpack_require__.o(moreModules, moduleId)) { /******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; /******/ } /******/ } /******/ if(runtime) var result = runtime(__webpack_require__); /******/ } /******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); /******/ for(;i < chunkIds.length; i++) { /******/ chunkId = chunkIds[i]; /******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { /******/ installedChunks[chunkId][0](); /******/ } /******/ installedChunks[chunkId] = 0; /******/ } /******/ /******/ } /******/ /******/ var chunkLoadingGlobal = self["webpackChunkcalendar"] = self["webpackChunkcalendar"] || []; /******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); /******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); /******/ })(); /******/ /******/ /* webpack/runtime/nonce */ /******/ (() => { /******/ __webpack_require__.nc = undefined; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be in strict mode. (() => { "use strict"; /*!*********************!*\ !*** ./src/main.js ***! \*********************/ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var core_js_stable_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/stable/index.js */ "./node_modules/core-js/stable/index.js"); /* harmony import */ var core_js_stable_index_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_stable_index_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _css_calendar_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css/calendar.scss */ "./css/calendar.scss"); /* harmony import */ var _css_calendar_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_calendar_scss__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js"); /* harmony import */ var _App_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./App.vue */ "./src/App.vue"); /* harmony import */ var _router_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./router.js */ "./src/router.js"); /* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./store/index.js */ "./src/store/index.js"); /* harmony import */ var vuex_router_sync__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vuex-router-sync */ "./node_modules/vuex-router-sync/index.js"); /* harmony import */ var _nextcloud_auth__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @nextcloud/auth */ "./node_modules/@nextcloud/auth/dist/index.es.mjs"); /* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); /* harmony import */ var _nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @nextcloud/initial-state */ "./node_modules/@nextcloud/initial-state/dist/index.es.mjs"); /* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs"); /* harmony import */ var _models_appointmentConfig_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./models/appointmentConfig.js */ "./src/models/appointmentConfig.js"); /* harmony import */ var vue_click_outside__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! vue-click-outside */ "./node_modules/vue-click-outside/index.js"); /* harmony import */ var vue_click_outside__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(vue_click_outside__WEBPACK_IMPORTED_MODULE_11__); /* harmony import */ var v_tooltip__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! v-tooltip */ "./node_modules/v-tooltip/dist/v-tooltip.esm.js"); /* harmony import */ var vue_shortkey__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! vue-shortkey */ "./node_modules/vue-shortkey/dist/index.js"); /* harmony import */ var vue_shortkey__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(vue_shortkey__WEBPACK_IMPORTED_MODULE_13__); /* harmony import */ var _services_windowTitleService_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./services/windowTitleService.js */ "./src/services/windowTitleService.js"); /* harmony import */ var pinia__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! pinia */ "./node_modules/pinia/dist/pinia.mjs"); /* harmony import */ var _store_appointmentConfigs_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./store/appointmentConfigs.js */ "./src/store/appointmentConfigs.js"); /** * @copyright Copyright (c) 2019 Georg Ehrke * * @copyright Copyright (c) 2019 John Molakvoæ * * @author Georg Ehrke * * @author John Molakvoæ * * @license AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ vue__WEBPACK_IMPORTED_MODULE_16__["default"].use(pinia__WEBPACK_IMPORTED_MODULE_17__.PiniaVuePlugin); const pinia = (0,pinia__WEBPACK_IMPORTED_MODULE_17__.createPinia)(); // register global components vue__WEBPACK_IMPORTED_MODULE_16__["default"].directive('ClickOutside', (vue_click_outside__WEBPACK_IMPORTED_MODULE_11___default())); vue__WEBPACK_IMPORTED_MODULE_16__["default"].use(v_tooltip__WEBPACK_IMPORTED_MODULE_12__["default"]); vue__WEBPACK_IMPORTED_MODULE_16__["default"].use((vue_shortkey__WEBPACK_IMPORTED_MODULE_13___default()), { prevent: ['input', 'textarea'] }); // CSP config for webpack dynamic chunk loading // eslint-disable-next-line __webpack_require__.nc = btoa((0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_6__.getRequestToken)()); // Correct the root of the app for chunk loading // OC.linkTo matches the apps folders // OC.generateUrl ensure the index.php (or not) // We do not want the index.php since we're loading files // eslint-disable-next-line __webpack_require__.p = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_7__.linkTo)('calendar', 'js/'); (0,vuex_router_sync__WEBPACK_IMPORTED_MODULE_5__.sync)(_store_index_js__WEBPACK_IMPORTED_MODULE_4__["default"], _router_js__WEBPACK_IMPORTED_MODULE_3__["default"]); vue__WEBPACK_IMPORTED_MODULE_16__["default"].prototype.$t = _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_9__.translate; vue__WEBPACK_IMPORTED_MODULE_16__["default"].prototype.$n = _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_9__.translatePlural; // The nextcloud-vue package does currently rely on t and n vue__WEBPACK_IMPORTED_MODULE_16__["default"].prototype.t = _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_9__.translate; vue__WEBPACK_IMPORTED_MODULE_16__["default"].prototype.n = _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_9__.translatePlural; (0,_services_windowTitleService_js__WEBPACK_IMPORTED_MODULE_14__["default"])(_router_js__WEBPACK_IMPORTED_MODULE_3__["default"], _store_index_js__WEBPACK_IMPORTED_MODULE_4__["default"]); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new vue__WEBPACK_IMPORTED_MODULE_16__["default"]({ el: '#content', router: _router_js__WEBPACK_IMPORTED_MODULE_3__["default"], store: _store_index_js__WEBPACK_IMPORTED_MODULE_4__["default"], render: h => h(_App_vue__WEBPACK_IMPORTED_MODULE_2__["default"]), pinia })); const appointmentsConfigsStore = (0,_store_appointmentConfigs_js__WEBPACK_IMPORTED_MODULE_15__["default"])(); appointmentsConfigsStore.addInitialConfigs((0,_nextcloud_initial_state__WEBPACK_IMPORTED_MODULE_8__.loadState)('calendar', 'appointmentConfigs', []).map(config => new _models_appointmentConfig_js__WEBPACK_IMPORTED_MODULE_10__["default"](config))); })(); /******/ })() ; //# sourceMappingURL=calendar-main.js.map?v=b4f9de87cf9d7d7b489e