From 4f47385afcee71b633d0ecf115a8759376840de5 Mon Sep 17 00:00:00 2001 From: Narindra ezway Date: Tue, 25 Mar 2025 10:25:03 +0300 Subject: [PATCH] merging --- calendar/js/calendar-dashboard.js | 1583 --- calendar/js/calendar-dashboard.js.map | 1 - calendar/js/calendar-reference.js | 9118 ----------------- calendar/js/calendar-reference.js.map | 1 - calendar/js/calendar-src_store_index_js.js | 8226 --------------- .../js/calendar-src_store_index_js.js.map | 1 - 6 files changed, 18930 deletions(-) diff --git a/calendar/js/calendar-dashboard.js b/calendar/js/calendar-dashboard.js index ba14c68..e69de29 100644 --- a/calendar/js/calendar-dashboard.js +++ b/calendar/js/calendar-dashboard.js @@ -1,1583 +0,0 @@ -/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "./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/process/browser.js": -/*!*****************************************!*\ - !*** ./node_modules/process/browser.js ***! - \*****************************************/ -/***/ ((module) => { - -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } - } - - - -} -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - - -/***/ }), - -/***/ "./node_modules/@nextcloud/auth/dist/index.es.mjs": -/*!********************************************************!*\ - !*** ./node_modules/@nextcloud/auth/dist/index.es.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 */ getCurrentUser: () => (/* binding */ getCurrentUser), -/* harmony export */ getRequestToken: () => (/* binding */ getRequestToken), -/* harmony export */ onRequestTokenUpdate: () => (/* binding */ onRequestTokenUpdate) -/* harmony export */ }); -/* harmony import */ var _nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/event-bus */ "./node_modules/@nextcloud/event-bus/dist/index.mjs"); - - -let token = undefined; -const 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 - const tokenElement = 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 -(0,_nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_0__.subscribe)('csrf-token-update', e => { - token = e.token; - observers.forEach(observer => { - try { - observer(e.token); - } - catch (e) { - console.error('error updating CSRF token observer', e); - } - }); -}); - -const getAttribute = (el, attribute) => { - if (el) { - return el.getAttribute(attribute); - } - return null; -}; -let currentUser = undefined; -function getCurrentUser() { - if (currentUser !== undefined) { - return currentUser; - } - const head = document?.getElementsByTagName('head')[0]; - if (!head) { - return null; - } - // No user logged in so cache and return null - const uid = getAttribute(head, 'data-user'); - if (uid === null) { - currentUser = null; - return currentUser; - } - currentUser = { - uid, - displayName: getAttribute(head, 'data-user-displayname'), - isAdmin: !!window._oc_isadmin, - }; - return currentUser; -} - - -//# sourceMappingURL=index.es.mjs.map - - -/***/ }), - -/***/ "./node_modules/@nextcloud/event-bus/dist/index.mjs": -/*!**********************************************************!*\ - !*** ./node_modules/@nextcloud/event-bus/dist/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 */ ProxyBus: () => (/* binding */ ProxyBus), -/* harmony export */ SimpleBus: () => (/* binding */ SimpleBus), -/* harmony export */ emit: () => (/* binding */ emit), -/* harmony export */ subscribe: () => (/* binding */ subscribe), -/* harmony export */ unsubscribe: () => (/* binding */ unsubscribe) -/* harmony export */ }); -/* harmony import */ var semver_functions_valid_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! semver/functions/valid.js */ "./node_modules/@nextcloud/event-bus/node_modules/semver/functions/valid.js"); -/* harmony import */ var semver_functions_major_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! semver/functions/major.js */ "./node_modules/@nextcloud/event-bus/node_modules/semver/functions/major.js"); - - - -class ProxyBus { - bus; - constructor(bus) { - if (typeof bus.getVersion !== 'function' || !semver_functions_valid_js__WEBPACK_IMPORTED_MODULE_0__(bus.getVersion())) { - console.warn('Proxying an event bus with an unknown or invalid version'); - } - else if (semver_functions_major_js__WEBPACK_IMPORTED_MODULE_1__(bus.getVersion()) !== semver_functions_major_js__WEBPACK_IMPORTED_MODULE_1__(this.getVersion())) { - console.warn('Proxying an event bus of version ' + bus.getVersion() + ' with ' + this.getVersion()); - } - this.bus = bus; - } - getVersion() { - return "3.1.0"; - } - subscribe(name, handler) { - this.bus.subscribe(name, handler); - } - unsubscribe(name, handler) { - this.bus.unsubscribe(name, handler); - } - emit(name, event) { - this.bus.emit(name, event); - } -} - -class SimpleBus { - handlers = new Map(); - getVersion() { - return "3.1.0"; - } - subscribe(name, handler) { - this.handlers.set(name, (this.handlers.get(name) || []).concat(handler)); - } - unsubscribe(name, handler) { - this.handlers.set(name, (this.handlers.get(name) || []).filter(h => h != handler)); - } - emit(name, event) { - (this.handlers.get(name) || []).forEach(h => { - try { - h(event); - } - catch (e) { - console.error('could not invoke event listener', e); - } - }); - } -} - -let bus = null; -function getBus() { - if (bus !== null) { - return bus; - } - if (typeof window === 'undefined') { - // testing or SSR - return new Proxy({}, { - get: () => { - return () => console.error('Window not available, EventBus can not be established!'); - } - }); - } - if (typeof window.OC !== 'undefined' && window.OC._eventBus && typeof window._nc_event_bus === 'undefined') { - console.warn('found old event bus instance at OC._eventBus. Update your version!'); - window._nc_event_bus = window.OC._eventBus; - } - // Either use an existing event bus instance or create one - if (typeof window?._nc_event_bus !== 'undefined') { - bus = new ProxyBus(window._nc_event_bus); - } - else { - bus = window._nc_event_bus = new SimpleBus(); - } - return bus; -} -/** - * Register an event listener - * - * @param name name of the event - * @param handler callback invoked for every matching event emitted on the bus - */ -function subscribe(name, handler) { - getBus().subscribe(name, handler); -} -/** - * Unregister a previously registered event listener - * - * Note: doesn't work with anonymous functions (closures). Use method of an object or store listener function in variable. - * - * @param name name of the event - * @param handler callback passed to `subscribed` - */ -function unsubscribe(name, handler) { - getBus().unsubscribe(name, handler); -} -/** - * Emit an event - * - * @param name name of the event - * @param event event payload - */ -function emit(name, event) { - getBus().emit(name, event); -} - - -//# sourceMappingURL=index.mjs.map - - -/***/ }), - -/***/ "./node_modules/@nextcloud/router/dist/index.mjs": -/*!*******************************************************!*\ - !*** ./node_modules/@nextcloud/router/dist/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 */ generateFilePath: () => (/* binding */ u), -/* harmony export */ generateOcsUrl: () => (/* binding */ v), -/* harmony export */ generateRemoteUrl: () => (/* binding */ U), -/* harmony export */ generateUrl: () => (/* binding */ _), -/* harmony export */ getAppRootUrl: () => (/* binding */ b), -/* harmony export */ getBaseUrl: () => (/* binding */ w), -/* harmony export */ getRootUrl: () => (/* binding */ f), -/* harmony export */ imagePath: () => (/* binding */ h), -/* harmony export */ linkTo: () => (/* binding */ R) -/* harmony export */ }); -const R = (n, e) => u(n, "", e), g = (n) => "/remote.php/" + n, U = (n, e) => { - var o; - return ((o = e == null ? void 0 : e.baseURL) != null ? o : w()) + g(n); -}, v = (n, e, o) => { - var c; - const i = Object.assign({ - ocsVersion: 2 - }, o || {}).ocsVersion === 1 ? 1 : 2; - return ((c = o == null ? void 0 : o.baseURL) != null ? c : w()) + "/ocs/v" + i + ".php" + d(n, e, o); -}, d = (n, e, o) => { - const c = Object.assign({ - escape: !0 - }, o || {}), s = function(i, r) { - return r = r || {}, i.replace( - /{([^{}]*)}/g, - function(l, t) { - const a = r[t]; - return c.escape ? encodeURIComponent(typeof a == "string" || typeof a == "number" ? a.toString() : l) : typeof a == "string" || typeof a == "number" ? a.toString() : l; - } - ); - }; - return n.charAt(0) !== "/" && (n = "/" + n), s(n, e || {}); -}, _ = (n, e, o) => { - var c, s, i; - const r = Object.assign({ - noRewrite: !1 - }, o || {}), l = (c = o == null ? void 0 : o.baseURL) != null ? c : f(); - return ((i = (s = window == null ? void 0 : window.OC) == null ? void 0 : s.config) == null ? void 0 : i.modRewriteWorking) === !0 && !r.noRewrite ? l + d(n, e, o) : l + "/index.php" + d(n, e, o); -}, h = (n, e) => e.indexOf(".") === -1 ? u(n, "img", e + ".svg") : u(n, "img", e), u = (n, e, o) => { - var c, s, i; - const r = (i = (s = (c = window == null ? void 0 : window.OC) == null ? void 0 : c.coreApps) == null ? void 0 : s.includes(n)) != null ? i : !1, l = o.slice(-3) === "php"; - let t = f(); - return l && !r ? (t += "/index.php/apps/".concat(n), e && (t += "/".concat(encodeURI(e))), o !== "index.php" && (t += "/".concat(o))) : !l && !r ? (t = b(n), e && (t += "/".concat(e, "/")), t.at(-1) !== "/" && (t += "/"), t += o) : ((n === "settings" || n === "core" || n === "search") && e === "ajax" && (t += "/index.php"), n && (t += "/".concat(n)), e && (t += "/".concat(e)), t += "/".concat(o)), t; -}, w = () => window.location.protocol + "//" + window.location.host + f(); -function f() { - let n = window._oc_webroot; - if (typeof n > "u") { - n = location.pathname; - const e = n.indexOf("/index.php/"); - if (e !== -1) - n = n.slice(0, e); - else { - const o = n.indexOf("/", 1); - n = n.slice(0, o > 0 ? o : void 0); - } - } - return n; -} -function b(n) { - var e, o; - return (o = ((e = window._oc_appswebroots) != null ? e : {})[n]) != null ? o : ""; -} - - - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ id: moduleId, -/******/ loaded: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.loaded = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = __webpack_modules__; -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/amd define */ -/******/ (() => { -/******/ __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":"7bde6f386631234ba146","vendors-node_modules_vue_dist_vue_runtime_esm_js":"7e3171593bdc0f62040b","vendors-node_modules_nextcloud_cdav-library_dist_dist_js-node_modules_nextcloud_logger_dist_i-36c16b":"c3b3db23da041c717fc1","vendors-node_modules_webdav_dist_web_index_js":"454da8f908d41b47c607","vendors-node_modules_vue-material-design-icons_CalendarBlankOutline_vue-node_modules_nextclou-4adead":"273df538e0dc19672feb","vendors-node_modules_nextcloud_vue-dashboard_dist_vue-dashboard_js-node_modules_css-loader_di-9e6f3d":"86eaa619747854c0da61","src_models_rfcProps_js-src_services_caldavService_js-src_services_talkService_js-src_services-8a2790":"94fac30d128df46a89a6","src_store_index_js":"2c493e91e10998374f26","src_fullcalendar_eventSources_eventSourceFunction_js-src_utils_moment_js-data_image_svg_xml_3-b73258":"740a2859d1f364b508c1","dashboard-lazy":"0dd354a2fd4b9e38ddcf","vendors-node_modules_vue-material-design-icons_CalendarBlank_vue-node_modules_vue-material-de-e2c1f8":"2e0b0e8bc0e8488c397c","vendors-node_modules_path-browserify_index_js-node_modules_nextcloud_dialogs_dist_chunks_Dial-e0595f":"728c782d2751f8e6150a","node_modules_nextcloud_dialogs_dist_legacy_mjs":"8be838e4c6e9aae56c87","vendors-node_modules_nextcloud_dialogs_dist_chunks_FilePicker-8ibBgPg__mjs":"ea54a36450de178d1141","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 = { -/******/ "dashboard": 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/dashboard.js ***! - \**************************/ -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.mjs"); -/* harmony import */ var _nextcloud_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/auth */ "./node_modules/@nextcloud/auth/dist/index.es.mjs"); -/** - * @copyright Copyright (c) 2020 Julius Härtl - * - * @author Julius Härtl - * - * @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 . - * - */ - - - - -// eslint-disable-next-line -__webpack_require__.nc = btoa((0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_1__.getRequestToken)()); - -// eslint-disable-next-line -__webpack_require__.p = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_0__.generateFilePath)('calendar', '', 'js/'); -document.addEventListener('DOMContentLoaded', function () { - OCA.Dashboard.register('calendar', async el => { - const { - default: Vue - } = await Promise.all(/*! import() | dashboard-lazy */[__webpack_require__.e("vendors-node_modules_nextcloud_capabilities_dist_index_js-node_modules_nextcloud_vue-select_d-877981"), __webpack_require__.e("vendors-node_modules_vue_dist_vue_runtime_esm_js"), __webpack_require__.e("vendors-node_modules_nextcloud_cdav-library_dist_dist_js-node_modules_nextcloud_logger_dist_i-36c16b"), __webpack_require__.e("vendors-node_modules_webdav_dist_web_index_js"), __webpack_require__.e("vendors-node_modules_vue-material-design-icons_CalendarBlankOutline_vue-node_modules_nextclou-4adead"), __webpack_require__.e("vendors-node_modules_nextcloud_vue-dashboard_dist_vue-dashboard_js-node_modules_css-loader_di-9e6f3d"), __webpack_require__.e("src_models_rfcProps_js-src_services_caldavService_js-src_services_talkService_js-src_services-8a2790"), __webpack_require__.e("src_store_index_js"), __webpack_require__.e("src_fullcalendar_eventSources_eventSourceFunction_js-src_utils_moment_js-data_image_svg_xml_3-b73258"), __webpack_require__.e("dashboard-lazy")]).then(__webpack_require__.bind(__webpack_require__, /*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js")); - const { - translate, - translatePlural - } = await Promise.all(/*! import() | dashboard-lazy */[__webpack_require__.e("vendors-node_modules_nextcloud_capabilities_dist_index_js-node_modules_nextcloud_vue-select_d-877981"), __webpack_require__.e("vendors-node_modules_vue_dist_vue_runtime_esm_js"), __webpack_require__.e("vendors-node_modules_nextcloud_cdav-library_dist_dist_js-node_modules_nextcloud_logger_dist_i-36c16b"), __webpack_require__.e("vendors-node_modules_webdav_dist_web_index_js"), __webpack_require__.e("vendors-node_modules_vue-material-design-icons_CalendarBlankOutline_vue-node_modules_nextclou-4adead"), __webpack_require__.e("vendors-node_modules_nextcloud_vue-dashboard_dist_vue-dashboard_js-node_modules_css-loader_di-9e6f3d"), __webpack_require__.e("src_models_rfcProps_js-src_services_caldavService_js-src_services_talkService_js-src_services-8a2790"), __webpack_require__.e("src_store_index_js"), __webpack_require__.e("src_fullcalendar_eventSources_eventSourceFunction_js-src_utils_moment_js-data_image_svg_xml_3-b73258"), __webpack_require__.e("dashboard-lazy")]).then(__webpack_require__.bind(__webpack_require__, /*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs")); - const { - default: Dashboard - } = await Promise.all(/*! import() | dashboard-lazy */[__webpack_require__.e("vendors-node_modules_nextcloud_capabilities_dist_index_js-node_modules_nextcloud_vue-select_d-877981"), __webpack_require__.e("vendors-node_modules_vue_dist_vue_runtime_esm_js"), __webpack_require__.e("vendors-node_modules_nextcloud_cdav-library_dist_dist_js-node_modules_nextcloud_logger_dist_i-36c16b"), __webpack_require__.e("vendors-node_modules_webdav_dist_web_index_js"), __webpack_require__.e("vendors-node_modules_vue-material-design-icons_CalendarBlankOutline_vue-node_modules_nextclou-4adead"), __webpack_require__.e("vendors-node_modules_nextcloud_vue-dashboard_dist_vue-dashboard_js-node_modules_css-loader_di-9e6f3d"), __webpack_require__.e("src_models_rfcProps_js-src_services_caldavService_js-src_services_talkService_js-src_services-8a2790"), __webpack_require__.e("src_store_index_js"), __webpack_require__.e("src_fullcalendar_eventSources_eventSourceFunction_js-src_utils_moment_js-data_image_svg_xml_3-b73258"), __webpack_require__.e("dashboard-lazy")]).then(__webpack_require__.bind(__webpack_require__, /*! ./views/Dashboard.vue */ "./src/views/Dashboard.vue")); - const { - default: store - } = await Promise.all(/*! import() | dashboard-lazy */[__webpack_require__.e("vendors-node_modules_nextcloud_capabilities_dist_index_js-node_modules_nextcloud_vue-select_d-877981"), __webpack_require__.e("vendors-node_modules_vue_dist_vue_runtime_esm_js"), __webpack_require__.e("vendors-node_modules_nextcloud_cdav-library_dist_dist_js-node_modules_nextcloud_logger_dist_i-36c16b"), __webpack_require__.e("vendors-node_modules_webdav_dist_web_index_js"), __webpack_require__.e("vendors-node_modules_vue-material-design-icons_CalendarBlankOutline_vue-node_modules_nextclou-4adead"), __webpack_require__.e("vendors-node_modules_nextcloud_vue-dashboard_dist_vue-dashboard_js-node_modules_css-loader_di-9e6f3d"), __webpack_require__.e("src_models_rfcProps_js-src_services_caldavService_js-src_services_talkService_js-src_services-8a2790"), __webpack_require__.e("src_store_index_js"), __webpack_require__.e("src_fullcalendar_eventSources_eventSourceFunction_js-src_utils_moment_js-data_image_svg_xml_3-b73258"), __webpack_require__.e("dashboard-lazy")]).then(__webpack_require__.bind(__webpack_require__, /*! ./store/index.js */ "./src/store/index.js")); - Vue.prototype.t = translate; - Vue.prototype.n = translatePlural; - Vue.prototype.OC = OC; - Vue.prototype.OCA = OCA; - const View = Vue.extend(Dashboard); - new View({ - store, - propsData: {} - }).$mount(el); - }); -}); -})(); - -/******/ })() -; -//# sourceMappingURL=calendar-dashboard.js.map?v=dd38cbbf6ed249c6c393 \ No newline at end of file diff --git a/calendar/js/calendar-dashboard.js.map b/calendar/js/calendar-dashboard.js.map index 1159e74..e69de29 100644 --- a/calendar/js/calendar-dashboard.js.map +++ b/calendar/js/calendar-dashboard.js.map @@ -1 +0,0 @@ -{"version":3,"file":"calendar-dashboard.js?v=dd38cbbf6ed249c6c393","mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7SA;AACA;AACA;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACvLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA;;;;;;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7BA;AACA;AACA;;;;;ACFA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACRA;AACA;AACA;AACA;AACA;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACNA;AACA;AACA;AACA;AACA;;;;;ACJA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACrFA;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack:///calendar/node_modules\\@nextcloud\\event-bus\\node_modules\\semver\\classes\\semver.js","webpack:///calendar/node_modules\\@nextcloud\\event-bus\\node_modules\\semver\\functions\\major.js","webpack:///calendar/node_modules\\@nextcloud\\event-bus\\node_modules\\semver\\functions\\parse.js","webpack:///calendar/node_modules\\@nextcloud\\event-bus\\node_modules\\semver\\functions\\valid.js","webpack:///calendar/node_modules\\@nextcloud\\event-bus\\node_modules\\semver\\internal\\constants.js","webpack:///calendar/node_modules\\@nextcloud\\event-bus\\node_modules\\semver\\internal\\debug.js","webpack:///calendar/node_modules\\@nextcloud\\event-bus\\node_modules\\semver\\internal\\identifiers.js","webpack:///calendar/node_modules\\@nextcloud\\event-bus\\node_modules\\semver\\internal\\parse-options.js","webpack:///calendar/node_modules\\@nextcloud\\event-bus\\node_modules\\semver\\internal\\re.js","webpack:///calendar/node_modules\\process\\browser.js","webpack:///calendar/node_modules\\@nextcloud\\auth\\dist\\index.es.mjs","webpack:///calendar/node_modules\\@nextcloud\\event-bus\\dist\\index.mjs","webpack:///calendar/node_modules\\@nextcloud\\router\\dist\\index.mjs","webpack:///calendar/webpack\\bootstrap","webpack:///calendar/webpack\\runtime\\amd define","webpack:///calendar/webpack\\runtime\\amd options","webpack:///calendar/webpack\\runtime\\compat get default export","webpack:///calendar/webpack\\runtime\\create fake namespace object","webpack:///calendar/webpack\\runtime\\define property getters","webpack:///calendar/webpack\\runtime\\ensure chunk","webpack:///calendar/webpack\\runtime\\get javascript chunk filename","webpack:///calendar/webpack\\runtime\\global","webpack:///calendar/webpack\\runtime\\hasOwnProperty shorthand","webpack:///calendar/webpack\\runtime\\load script","webpack:///calendar/webpack\\runtime\\make namespace object","webpack:///calendar/webpack\\runtime\\node module decorator","webpack:///calendar/webpack\\runtime\\publicPath","webpack:///calendar/webpack\\runtime\\jsonp chunk loading","webpack:///calendar/webpack\\runtime\\nonce","webpack:///calendar/src\\dashboard.js"],"sourcesContent":["const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","const SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n","const parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","const {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","import { subscribe } from '@nextcloud/event-bus';\n\nlet token = undefined;\nconst observers = [];\n/**\n * Get current request token\n *\n * @return {string|null} Current request token or null if not set\n */\nfunction getRequestToken() {\n if (token === undefined) {\n // Only on first load, try to get token from document\n const tokenElement = document?.getElementsByTagName('head')[0];\n token = tokenElement ? tokenElement.getAttribute('data-requesttoken') : null;\n }\n return token;\n}\n/**\n * Add an observer which is called when the CSRF token changes\n *\n * @param observer The observer\n */\nfunction onRequestTokenUpdate(observer) {\n observers.push(observer);\n}\n// Listen to server event and keep token in sync\nsubscribe('csrf-token-update', e => {\n token = e.token;\n observers.forEach(observer => {\n try {\n observer(e.token);\n }\n catch (e) {\n console.error('error updating CSRF token observer', e);\n }\n });\n});\n\nconst getAttribute = (el, attribute) => {\n if (el) {\n return el.getAttribute(attribute);\n }\n return null;\n};\nlet currentUser = undefined;\nfunction getCurrentUser() {\n if (currentUser !== undefined) {\n return currentUser;\n }\n const head = document?.getElementsByTagName('head')[0];\n if (!head) {\n return null;\n }\n // No user logged in so cache and return null\n const uid = getAttribute(head, 'data-user');\n if (uid === null) {\n currentUser = null;\n return currentUser;\n }\n currentUser = {\n uid,\n displayName: getAttribute(head, 'data-user-displayname'),\n isAdmin: !!window._oc_isadmin,\n };\n return currentUser;\n}\n\nexport { getCurrentUser, getRequestToken, onRequestTokenUpdate };\n//# sourceMappingURL=index.es.mjs.map\n","import valid from 'semver/functions/valid.js';\nimport major from 'semver/functions/major.js';\n\nclass ProxyBus {\n bus;\n constructor(bus) {\n if (typeof bus.getVersion !== 'function' || !valid(bus.getVersion())) {\n console.warn('Proxying an event bus with an unknown or invalid version');\n }\n else if (major(bus.getVersion()) !== major(this.getVersion())) {\n console.warn('Proxying an event bus of version ' + bus.getVersion() + ' with ' + this.getVersion());\n }\n this.bus = bus;\n }\n getVersion() {\n return \"3.1.0\";\n }\n subscribe(name, handler) {\n this.bus.subscribe(name, handler);\n }\n unsubscribe(name, handler) {\n this.bus.unsubscribe(name, handler);\n }\n emit(name, event) {\n this.bus.emit(name, event);\n }\n}\n\nclass SimpleBus {\n handlers = new Map();\n getVersion() {\n return \"3.1.0\";\n }\n subscribe(name, handler) {\n this.handlers.set(name, (this.handlers.get(name) || []).concat(handler));\n }\n unsubscribe(name, handler) {\n this.handlers.set(name, (this.handlers.get(name) || []).filter(h => h != handler));\n }\n emit(name, event) {\n (this.handlers.get(name) || []).forEach(h => {\n try {\n h(event);\n }\n catch (e) {\n console.error('could not invoke event listener', e);\n }\n });\n }\n}\n\nlet bus = null;\nfunction getBus() {\n if (bus !== null) {\n return bus;\n }\n if (typeof window === 'undefined') {\n // testing or SSR\n return new Proxy({}, {\n get: () => {\n return () => console.error('Window not available, EventBus can not be established!');\n }\n });\n }\n if (typeof window.OC !== 'undefined' && window.OC._eventBus && typeof window._nc_event_bus === 'undefined') {\n console.warn('found old event bus instance at OC._eventBus. Update your version!');\n window._nc_event_bus = window.OC._eventBus;\n }\n // Either use an existing event bus instance or create one\n if (typeof window?._nc_event_bus !== 'undefined') {\n bus = new ProxyBus(window._nc_event_bus);\n }\n else {\n bus = window._nc_event_bus = new SimpleBus();\n }\n return bus;\n}\n/**\n * Register an event listener\n *\n * @param name name of the event\n * @param handler callback invoked for every matching event emitted on the bus\n */\nfunction subscribe(name, handler) {\n getBus().subscribe(name, handler);\n}\n/**\n * Unregister a previously registered event listener\n *\n * Note: doesn't work with anonymous functions (closures). Use method of an object or store listener function in variable.\n *\n * @param name name of the event\n * @param handler callback passed to `subscribed`\n */\nfunction unsubscribe(name, handler) {\n getBus().unsubscribe(name, handler);\n}\n/**\n * Emit an event\n *\n * @param name name of the event\n * @param event event payload\n */\nfunction emit(name, event) {\n getBus().emit(name, event);\n}\n\nexport { ProxyBus, SimpleBus, emit, subscribe, unsubscribe };\n//# sourceMappingURL=index.mjs.map\n","const R = (n, e) => u(n, \"\", e), g = (n) => \"/remote.php/\" + n, U = (n, e) => {\n var o;\n return ((o = e == null ? void 0 : e.baseURL) != null ? o : w()) + g(n);\n}, v = (n, e, o) => {\n var c;\n const i = Object.assign({\n ocsVersion: 2\n }, o || {}).ocsVersion === 1 ? 1 : 2;\n return ((c = o == null ? void 0 : o.baseURL) != null ? c : w()) + \"/ocs/v\" + i + \".php\" + d(n, e, o);\n}, d = (n, e, o) => {\n const c = Object.assign({\n escape: !0\n }, o || {}), s = function(i, r) {\n return r = r || {}, i.replace(\n /{([^{}]*)}/g,\n function(l, t) {\n const a = r[t];\n return c.escape ? encodeURIComponent(typeof a == \"string\" || typeof a == \"number\" ? a.toString() : l) : typeof a == \"string\" || typeof a == \"number\" ? a.toString() : l;\n }\n );\n };\n return n.charAt(0) !== \"/\" && (n = \"/\" + n), s(n, e || {});\n}, _ = (n, e, o) => {\n var c, s, i;\n const r = Object.assign({\n noRewrite: !1\n }, o || {}), l = (c = o == null ? void 0 : o.baseURL) != null ? c : f();\n return ((i = (s = window == null ? void 0 : window.OC) == null ? void 0 : s.config) == null ? void 0 : i.modRewriteWorking) === !0 && !r.noRewrite ? l + d(n, e, o) : l + \"/index.php\" + d(n, e, o);\n}, h = (n, e) => e.indexOf(\".\") === -1 ? u(n, \"img\", e + \".svg\") : u(n, \"img\", e), u = (n, e, o) => {\n var c, s, i;\n const r = (i = (s = (c = window == null ? void 0 : window.OC) == null ? void 0 : c.coreApps) == null ? void 0 : s.includes(n)) != null ? i : !1, l = o.slice(-3) === \"php\";\n let t = f();\n return l && !r ? (t += \"/index.php/apps/\".concat(n), e && (t += \"/\".concat(encodeURI(e))), o !== \"index.php\" && (t += \"/\".concat(o))) : !l && !r ? (t = b(n), e && (t += \"/\".concat(e, \"/\")), t.at(-1) !== \"/\" && (t += \"/\"), t += o) : ((n === \"settings\" || n === \"core\" || n === \"search\") && e === \"ajax\" && (t += \"/index.php\"), n && (t += \"/\".concat(n)), e && (t += \"/\".concat(e)), t += \"/\".concat(o)), t;\n}, w = () => window.location.protocol + \"//\" + window.location.host + f();\nfunction f() {\n let n = window._oc_webroot;\n if (typeof n > \"u\") {\n n = location.pathname;\n const e = n.indexOf(\"/index.php/\");\n if (e !== -1)\n n = n.slice(0, e);\n else {\n const o = n.indexOf(\"/\", 1);\n n = n.slice(0, o > 0 ? o : void 0);\n }\n }\n return n;\n}\nfunction b(n) {\n var e, o;\n return (o = ((e = window._oc_appswebroots) != null ? e : {})[n]) != null ? o : \"\";\n}\nexport {\n u as generateFilePath,\n v as generateOcsUrl,\n U as generateRemoteUrl,\n _ as generateUrl,\n b as getAppRootUrl,\n w as getBaseUrl,\n f as getRootUrl,\n h as imagePath,\n R as linkTo\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"calendar-\" + chunkId + \".js?v=\" + {\"vendors-node_modules_nextcloud_capabilities_dist_index_js-node_modules_nextcloud_vue-select_d-877981\":\"7bde6f386631234ba146\",\"vendors-node_modules_vue_dist_vue_runtime_esm_js\":\"7e3171593bdc0f62040b\",\"vendors-node_modules_nextcloud_cdav-library_dist_dist_js-node_modules_nextcloud_logger_dist_i-36c16b\":\"c3b3db23da041c717fc1\",\"vendors-node_modules_webdav_dist_web_index_js\":\"454da8f908d41b47c607\",\"vendors-node_modules_vue-material-design-icons_CalendarBlankOutline_vue-node_modules_nextclou-4adead\":\"273df538e0dc19672feb\",\"vendors-node_modules_nextcloud_vue-dashboard_dist_vue-dashboard_js-node_modules_css-loader_di-9e6f3d\":\"86eaa619747854c0da61\",\"src_models_rfcProps_js-src_services_caldavService_js-src_services_talkService_js-src_services-8a2790\":\"94fac30d128df46a89a6\",\"src_store_index_js\":\"2c493e91e10998374f26\",\"src_fullcalendar_eventSources_eventSourceFunction_js-src_utils_moment_js-data_image_svg_xml_3-b73258\":\"740a2859d1f364b508c1\",\"dashboard-lazy\":\"0dd354a2fd4b9e38ddcf\",\"vendors-node_modules_vue-material-design-icons_CalendarBlank_vue-node_modules_vue-material-de-e2c1f8\":\"2e0b0e8bc0e8488c397c\",\"vendors-node_modules_path-browserify_index_js-node_modules_nextcloud_dialogs_dist_chunks_Dial-e0595f\":\"728c782d2751f8e6150a\",\"node_modules_nextcloud_dialogs_dist_legacy_mjs\":\"8be838e4c6e9aae56c87\",\"vendors-node_modules_nextcloud_dialogs_dist_chunks_FilePicker-8ibBgPg__mjs\":\"ea54a36450de178d1141\",\"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] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"calendar:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"\\\\apps\\\\calendar\\\\js\\\\\";","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"dashboard\": 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkcalendar\"] = self[\"webpackChunkcalendar\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","/**\r\n * @copyright Copyright (c) 2020 Julius Härtl \r\n *\r\n * @author Julius Härtl \r\n *\r\n * @license AGPL-3.0-or-later\r\n *\r\n * This program is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Affero General Public License as\r\n * published by the Free Software Foundation, either version 3 of the\r\n * License, or (at your option) any later version.\r\n *\r\n * This program is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Affero General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Affero General Public License\r\n * along with this program. If not, see .\r\n *\r\n */\n\nimport { generateFilePath } from '@nextcloud/router';\nimport { getRequestToken } from '@nextcloud/auth';\n\n// eslint-disable-next-line\n__webpack_nonce__ = btoa(getRequestToken());\n\n// eslint-disable-next-line\n__webpack_public_path__ = generateFilePath('calendar', '', 'js/');\ndocument.addEventListener('DOMContentLoaded', function () {\n OCA.Dashboard.register('calendar', async el => {\n const {\n default: Vue\n } = await import( /* webpackChunkName: \"dashboard-lazy\" */'vue');\n const {\n translate,\n translatePlural\n } = await import( /* webpackChunkName: \"dashboard-lazy\" */'@nextcloud/l10n');\n const {\n default: Dashboard\n } = await import( /* webpackChunkName: \"dashboard-lazy\" */'./views/Dashboard.vue');\n const {\n default: store\n } = await import( /* webpackChunkName: \"dashboard-lazy\" */'./store/index.js');\n Vue.prototype.t = translate;\n Vue.prototype.n = translatePlural;\n Vue.prototype.OC = OC;\n Vue.prototype.OCA = OCA;\n const View = Vue.extend(Dashboard);\n new View({\n store,\n propsData: {}\n }).$mount(el);\n });\n});"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/calendar/js/calendar-reference.js b/calendar/js/calendar-reference.js index 133fe1d..e69de29 100644 --- a/calendar/js/calendar-reference.js +++ b/calendar/js/calendar-reference.js @@ -1,9118 +0,0 @@ -/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "./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/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/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/noSourceMaps.js": -/*!**************************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/noSourceMaps.js ***! - \**************************************************************/ -/***/ ((module) => { - -"use strict"; - - -module.exports = function (i) { - return i[1]; -}; - -/***/ }), - -/***/ "./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/escape-html/index.js": -/*!*******************************************!*\ - !*** ./node_modules/escape-html/index.js ***! - \*******************************************/ -/***/ ((module) => { - -"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/process/browser.js": -/*!*****************************************!*\ - !*** ./node_modules/process/browser.js ***! - \*****************************************/ -/***/ ((module) => { - -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } - } - - - -} -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - - -/***/ }), - -/***/ "./css/calendar.scss": -/*!***************************!*\ - !*** ./css/calendar.scss ***! - \***************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -// style-loader: Adds some css to the DOM by adding a