diff --git a/.babelrc b/.babelrc deleted file mode 100755 index 002b4aa..0000000 --- a/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["env"] -} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 769ccc7..5381428 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,19 +1,19 @@ name: Publish on NPM on: - push: - branches: [master] + push: + branches: [master] jobs: - publish: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - uses: actions/setup-node@v1 - with: - node-version: 14 - - run: yarn install - - run: yarn prettier-check - - run: yarn test - - uses: JS-DevTools/npm-publish@v1 - with: - token: ${{ secrets.NPM_TOKEN }} + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: 14 + - run: yarn install + - run: yarn prettier-check + - run: yarn test + - uses: JS-DevTools/npm-publish@v1 + with: + token: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore index e16e811..8ee493f 100755 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ build/Release # Dependency directory # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git node_modules +.yarn .DS_Store diff --git a/.prettierrc.json b/.prettierrc.json index 86e9e7d..9b0bb43 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,4 +1,4 @@ { - "tabWidth": 4, - "singleQuote": true + "tabWidth": 4, + "singleQuote": true } diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 0000000..3186f3f --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/README.md b/README.md index 284efd2..afeadcf 100644 --- a/README.md +++ b/README.md @@ -51,19 +51,19 @@ var gantt = new Gantt("#gantt", tasks); You can also pass various options to the Gantt constructor: ```js -var gantt = new Gantt("#gantt", tasks, { - header_height: 50, - column_width: 30, - step: 24, - view_modes: ["Quarter Day", "Half Day", "Day", "Week", "Month"], - bar_height: 20, - bar_corner_radius: 3, - arrow_curve: 5, - padding: 18, - view_mode: "Day", - date_format: "YYYY-MM-DD", - language: "en", // or 'es', 'it', 'ru', 'ptBr', 'fr', 'tr', 'zh', 'de', 'hu' - custom_popup_html: null, +var gantt = new Gantt('#gantt', tasks, { + header_height: 50, + column_width: 30, + step: 24, + view_modes: ['Quarter Day', 'Half Day', 'Day', 'Week', 'Month'], + bar_height: 20, + bar_corner_radius: 3, + arrow_curve: 5, + padding: 18, + view_mode: 'Day', + date_format: 'YYYY-MM-DD', + language: 'en', // or 'es', 'it', 'ru', 'ptBr', 'fr', 'tr', 'zh', 'de', 'hu' + custom_popup_html: null, }); ``` @@ -91,25 +91,25 @@ Assuming the last commit (or a couple of commits) were enhancements or fixes, 1. Run `yarn build` - This will generate files in the `dist/` folder. These files need to be committed. + This will generate files in the `dist/` folder. These files need to be committed. 1. Run `yarn publish` 1. Type the new version at the prompt - Depending on the type of change, you can either bump the patch version or the minor version. - For e.g., + Depending on the type of change, you can either bump the patch version or the minor version. + For e.g., - ``` - 0.5.0 -> 0.6.0 (minor version bump) - 0.5.0 -> 0.5.1 (patch version bump) - ``` + ``` + 0.5.0 -> 0.6.0 (minor version bump) + 0.5.0 -> 0.5.1 (patch version bump) + ``` 1. Now, there will be a commit named after the version you just entered. Include the generated files in `dist/` folder as part of this commit by running the command: - ``` - git add dist - git commit --amend - git push origin master - ``` + ``` + git add dist + git commit --amend + git push origin master + ``` License: MIT diff --git a/dist/frappe-gantt.css b/dist/frappe-gantt.css deleted file mode 100644 index c56184b..0000000 --- a/dist/frappe-gantt.css +++ /dev/null @@ -1,295 +0,0 @@ -.dark > .gantt-container .gantt .grid-header { - fill: #252525; - stroke: #616161; -} -.dark > .gantt-container .gantt .grid-row { - fill: #252525; -} -.dark > .gantt-container .gantt .grid-row:nth-child(even) { - fill: #3e3e3e; -} -.dark > .gantt-container .gantt .row-line { - stroke: #3e3e3e; -} -.dark > .gantt-container .gantt .tick { - stroke: #616161; -} -.dark > .gantt-container .gantt .today-highlight { - opacity: 0.2; -} -.dark > .gantt-container .gantt .arrow { - stroke: #eee; -} -.dark > .gantt-container .gantt .bar { - fill: #616161; - stroke: none; -} -.dark > .gantt-container .gantt .bar-progress { - fill: #8a8aff; -} -.dark > .gantt-container .gantt .bar-invalid { - fill: transparent; - stroke: #c6ccd2; -} -.dark > .gantt-container .gantt .bar-invalid ~ .bar-label { - fill: #ececec; -} -.dark > .gantt-container .gantt .bar-label.big { - fill: #ececec; -} -.dark > .gantt-container .gantt .bar-wrapper:hover .bar { - fill: #6e6e6e; -} -.dark > .gantt-container .gantt .bar-wrapper:hover .bar-progress { - fill: #a4a4ff; -} -.dark > .gantt-container .gantt .bar-wrapper.active .bar { - fill: #6e6e6e; -} -.dark > .gantt-container .gantt .bar-wrapper.active .bar-progress { - fill: #a4a4ff; -} -.dark > .gantt-container .gantt .upper-text { - fill: #a2a2a2; -} -.dark > .gantt-container .gantt .lower-text { - fill: #f7f7f7; -} - -.dark > .gantt-container .popup-wrapper { - background-color: #333; -} -.dark > .gantt-container .popup-wrapper .title { - border-color: #a4a4ff; -} -.dark > .gantt-container .popup-wrapper .pointer { - border-top-color: #333; -} - -.gantt-container { - line-height: 14.5px; -} -.gantt-container .grid-header { - background-color: #ffffff; - position: sticky; - top: 0; - left: 0; - z-index: 10; -} -.gantt-container .lower-text, -.gantt-container .upper-text { - text-anchor: middle; - color: #111; -} -.gantt-container .upper-header { - height: 40px; -} -.gantt-container .lower-header { - height: 30px; -} -.gantt-container .lower-text { - font-size: 14px; - position: absolute; - width: fit-content; -} -.gantt-container .upper-text { - position: absolute; - width: fit-content; - font-weight: 500; - font-size: 16px; -} -.gantt-container .current-upper { - position: fixed; -} -.gantt-container .side-header { - position: fixed; - padding: 0 10px; - margin-right: 10px; - background: white; - line-height: 20px; - font-weight: 400; -} -.gantt-container .today-button, -.gantt-container .viewmode-select { - background: #F4F5F6; - text-align: -webkit-center; - text-align: center; - height: 25px; - border-radius: 8px; - border: none; - color: #111; - padding: 4px 10px; - border-radius: 8px; - height: 25px; -} -.gantt-container .viewmode-select { - outline: none !important; - padding: 4px 8px; - margin-right: 4px; - -webkit-appearance: none; - -moz-appearance: none; - text-indent: 1px; - text-overflow: ""; -} -.gantt-container .date-highlight { - background-color: #EBEEF0; - border-radius: 12px; - position: absolute; - display: none; -} -.gantt-container .current-highlight { - position: absolute; - background: #2c94ec; - width: 1px; -} -.gantt-container .current-date-highlight { - background: #2c94ec; - color: #fff; - padding: 4px 8px; - border-radius: 200px; -} - -.gantt { - user-select: none; - -webkit-user-select: none; - position: absolute; -} -.gantt .grid-background { - fill: none; -} -.gantt .grid-row { - fill: #ffffff; -} -.gantt .row-line { - stroke: #ebeff2; -} -.gantt .tick { - stroke: #EBEEF0; - stroke-width: 0.4; -} -.gantt .tick.thick { - stroke: #e0e0e0; - stroke-width: 0.7; -} -.gantt .holiday-highlight { - fill: #F9FAFA; -} -.gantt .arrow { - fill: none; - stroke: #9FA9B1; - stroke-width: 1; -} -.gantt .bar-wrapper .bar { - fill: #fff; - stroke: #fff; - stroke-width: 0; - transition: stroke-width 0.3s ease; -} -.gantt .bar-progress { - fill: #EBEEF0; -} -.gantt .bar-expected-progress { - fill: #c4c4e9; -} -.gantt .bar-invalid { - fill: transparent; - stroke: #fff; - stroke-width: 1; - stroke-dasharray: 5; -} -.gantt .bar-invalid ~ .bar-label { - fill: #fff; -} -.gantt .bar-label { - fill: #111; - dominant-baseline: central; - font-family: Helvetica; - font-size: 13px; - font-weight: 400; -} -.gantt .bar-label.big { - fill: #111; - text-anchor: start; -} -.gantt .bar-wrapper.important .bar { - fill: #94c4f4; -} -.gantt .bar-wrapper.important .bar-progress { - fill: #2c94ec; -} -.gantt .bar-wrapper.important .bar-label { - fill: #fff; -} -.gantt .bar-wrapper.important .handle { - fill: #94c4f4; -} -.gantt .bar-wrapper.important .handle.progress { - fill: #fff; -} -.gantt .handle { - fill: #dcdce4; - cursor: ew-resize; - opacity: 0; - visibility: hidden; - transition: opacity 0.3s ease; -} -.gantt .handle.progress { - fill: #666; -} -.gantt .bar-wrapper { - cursor: pointer; - outline: none; -} -.gantt .bar-wrapper.active .handle { - visibility: visible; - opacity: 1; -} -.gantt .bar-wrapper .bar { - -webkit-filter: drop-shadow(3px 3px 2px rgba(0, 0, 0, 0.7)); - filter: drop-shadow(0 0 2px rgba(17, 43, 66, 0.16)); - border-radius: 3px; -} -.gantt .bar-wrapper:hover .bar { - transition: transform 0.3s ease; -} -.gantt .bar-wrapper:hover .date-highlight { - display: block; -} -.gantt .hide { - display: none; -} - -.gantt-container { - position: relative; - overflow: auto; - font-size: 12px; - height: 500px; -} -.gantt-container .popup-wrapper { - position: absolute; - top: 0; - left: 0; - background: #171B1F; - padding: 10px; - border-radius: 5px; - width: max-content; -} -.gantt-container .popup-wrapper.hidden { - opacity: 0 !important; -} -.gantt-container .popup-wrapper .title { - margin-bottom: 5px; - text-align: -webkit-center; - text-align: center; - color: #fff; -} -.gantt-container .popup-wrapper .subtitle { - color: #98A1A9; -} -.gantt-container .popup-wrapper .pointer { - position: absolute; - height: 5px; - margin: 0 0 0 -5px; - border: 5px solid transparent; - border-bottom-color: rgba(0, 0, 0, 0.8); -} \ No newline at end of file diff --git a/dist/frappe-gantt.js b/dist/frappe-gantt.js index 19bb941..01a8206 100644 --- a/dist/frappe-gantt.js +++ b/dist/frappe-gantt.js @@ -1,2373 +1,1249 @@ -var Gantt = (function () { - 'use strict'; - - const YEAR = "year"; - const MONTH = "month"; - const DAY = "day"; - const HOUR = "hour"; - const MINUTE = "minute"; - const SECOND = "second"; - const MILLISECOND = "millisecond"; - - const SHORTENED = { - January: "Jan", - February: "Feb", - March: "Mar", - April: "Apr", - May: "May", - June: "Jun", - July: "Jul", - August: "Aug", - September: "Sep", - October: "Oct", - November: "Nov", - December: "Dec" - }; - - var date_utils = { - parse_duration(duration) { - const regex = /([0-9])+(y|m|d|h|min|s|ms)/gm; - const matches = regex.exec(duration); - - if (matches !== null) { - if (matches[2] === "y") { - return { duration: parseInt(matches[1]), scale: `year` }; - } else if (matches[2] === "m") { - return { duration: parseInt(matches[1]), scale: `month` }; - } else if (matches[2] === "d") { - return { duration: parseInt(matches[1]), scale: `day` }; - } else if (matches[2] === "h") { - return { duration: parseInt(matches[1]), scale: `hour` }; - } else if (matches[2] === "min") { - return { duration: parseInt(matches[1]), scale: `minute` }; - } else if (matches[2] === "s") { - return { duration: parseInt(matches[1]), scale: `second` }; - } else if (matches[2] === "ms") { - return { duration: parseInt(matches[1]), scale: `millisecond` }; - } - } - }, - parse(date, date_separator = "-", time_separator = /[.:]/) { - if (date instanceof Date) { - return date; - } - if (typeof date === "string") { - let date_parts, time_parts; - const parts = date.split(" "); - date_parts = parts[0] - .split(date_separator) - .map((val) => parseInt(val, 10)); - time_parts = parts[1] && parts[1].split(time_separator); - - // month is 0 indexed - date_parts[1] = date_parts[1] ? date_parts[1] - 1 : 0; - - let vals = date_parts; - - if (time_parts && time_parts.length) { - if (time_parts.length === 4) { - time_parts[3] = "0." + time_parts[3]; - time_parts[3] = parseFloat(time_parts[3]) * 1000; - } - vals = vals.concat(time_parts); - } - return new Date(...vals); - } - }, - - to_string(date, with_time = false) { - if (!(date instanceof Date)) { - throw new TypeError("Invalid argument type"); - } - const vals = this.get_date_values(date).map((val, i) => { - if (i === 1) { - // add 1 for month - val = val + 1; - } - - if (i === 6) { - return padStart(val + "", 3, "0"); - } - - return padStart(val + "", 2, "0"); - }); - const date_string = `${vals[0]}-${vals[1]}-${vals[2]}`; - const time_string = `${vals[3]}:${vals[4]}:${vals[5]}.${vals[6]}`; - - return date_string + (with_time ? " " + time_string : ""); - }, - - format(date, format_string = "YYYY-MM-DD HH:mm:ss.SSS", lang = "en") { - const dateTimeFormat = new Intl.DateTimeFormat(lang, { - month: "long", - }); - const month_name = dateTimeFormat.format(date); - const month_name_capitalized = - month_name.charAt(0).toUpperCase() + month_name.slice(1); - - const values = this.get_date_values(date).map((d) => padStart(d, 2, 0)); - const format_map = { - YYYY: values[0], - MM: padStart(+values[1] + 1, 2, 0), - DD: values[2], - HH: values[3], - mm: values[4], - ss: values[5], - SSS: values[6], - D: values[2], - MMMM: month_name_capitalized, - MMM: SHORTENED[month_name_capitalized], - }; - - let str = format_string; - const formatted_values = []; - - Object.keys(format_map) - .sort((a, b) => b.length - a.length) // big string first - .forEach((key) => { - if (str.includes(key)) { - str = str.replaceAll(key, `$${formatted_values.length}`); - formatted_values.push(format_map[key]); - } - }); - - formatted_values.forEach((value, i) => { - str = str.replaceAll(`$${i}`, value); - }); - - return str; - }, - - diff(date_a, date_b, scale = DAY) { - let milliseconds, seconds, hours, minutes, days, months, years; - - milliseconds = date_a - date_b; - seconds = milliseconds / 1000; - minutes = seconds / 60; - hours = minutes / 60; - days = hours / 24; - months = days / 30; - years = months / 12; - - if (!scale.endsWith("s")) { - scale += "s"; - } - - return Math.floor( - { - milliseconds, - seconds, - minutes, - hours, - days, - months, - years, - }[scale], - ); - }, - - today() { - const vals = this.get_date_values(new Date()).slice(0, 3); - return new Date(...vals); - }, - - now() { - return new Date(); - }, - - add(date, qty, scale) { - qty = parseInt(qty, 10); - const vals = [ - date.getFullYear() + (scale === YEAR ? qty : 0), - date.getMonth() + (scale === MONTH ? qty : 0), - date.getDate() + (scale === DAY ? qty : 0), - date.getHours() + (scale === HOUR ? qty : 0), - date.getMinutes() + (scale === MINUTE ? qty : 0), - date.getSeconds() + (scale === SECOND ? qty : 0), - date.getMilliseconds() + (scale === MILLISECOND ? qty : 0), - ]; - return new Date(...vals); - }, - - start_of(date, scale) { - const scores = { - [YEAR]: 6, - [MONTH]: 5, - [DAY]: 4, - [HOUR]: 3, - [MINUTE]: 2, - [SECOND]: 1, - [MILLISECOND]: 0, - }; - - function should_reset(_scale) { - const max_score = scores[scale]; - return scores[_scale] <= max_score; - } - - const vals = [ - date.getFullYear(), - should_reset(YEAR) ? 0 : date.getMonth(), - should_reset(MONTH) ? 1 : date.getDate(), - should_reset(DAY) ? 0 : date.getHours(), - should_reset(HOUR) ? 0 : date.getMinutes(), - should_reset(MINUTE) ? 0 : date.getSeconds(), - should_reset(SECOND) ? 0 : date.getMilliseconds(), - ]; - - return new Date(...vals); - }, - - clone(date) { - return new Date(...this.get_date_values(date)); - }, - - get_date_values(date) { - return [ - date.getFullYear(), - date.getMonth(), - date.getDate(), - date.getHours(), - date.getMinutes(), - date.getSeconds(), - date.getMilliseconds(), - ]; - }, - - get_days_in_month(date) { - const no_of_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - - const month = date.getMonth(); - - if (month !== 1) { - return no_of_days[month]; - } - - // Feb - const year = date.getFullYear(); - if ((year % 4 === 0 && year % 100 != 0) || year % 400 === 0) { - return 29; - } - return 28; - }, - }; - - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart - function padStart(str, targetLength, padString) { - str = str + ""; - targetLength = targetLength >> 0; - padString = String(typeof padString !== "undefined" ? padString : " "); - if (str.length > targetLength) { - return String(str); - } else { - targetLength = targetLength - str.length; - if (targetLength > padString.length) { - padString += padString.repeat(targetLength / padString.length); - } - return padString.slice(0, targetLength) + String(str); +const M = "year", D = "month", $ = "day", E = "hour", Y = "minute", A = "second", L = "millisecond", S = { + January: "Jan", + February: "Feb", + March: "Mar", + April: "Apr", + May: "May", + June: "Jun", + July: "Jul", + August: "Aug", + September: "Sep", + October: "Oct", + November: "Nov", + December: "Dec" +}, h = { + parse_duration(n) { + const e = /([0-9]+)(y|m|d|h|min|s|ms)/gm.exec(n); + if (console.log(e), e !== null) { + if (e[2] === "y") + return { duration: parseInt(e[1]), scale: "year" }; + if (e[2] === "m") + return { duration: parseInt(e[1]), scale: "month" }; + if (e[2] === "d") + return { duration: parseInt(e[1]), scale: "day" }; + if (e[2] === "h") + return { duration: parseInt(e[1]), scale: "hour" }; + if (e[2] === "min") + return { duration: parseInt(e[1]), scale: "minute" }; + if (e[2] === "s") + return { duration: parseInt(e[1]), scale: "second" }; + if (e[2] === "ms") + return { duration: parseInt(e[1]), scale: "millisecond" }; } - } - - function $(expr, con) { - return typeof expr === "string" - ? (con || document).querySelector(expr) - : expr || null; - } - - function createSVG(tag, attrs) { - const elem = document.createElementNS("http://www.w3.org/2000/svg", tag); - for (let attr in attrs) { - if (attr === "append_to") { - const parent = attrs.append_to; - parent.appendChild(elem); - } else if (attr === "innerHTML") { - elem.innerHTML = attrs.innerHTML; - } else if (attr === 'clipPath') { - elem.setAttribute('clip-path', 'url(#' + attrs[attr] + ')'); - } else { - elem.setAttribute(attr, attrs[attr]); - } + }, + parse(n, t = "-", e = /[.:]/) { + if (n instanceof Date) + return n; + if (typeof n == "string") { + let s, i; + const r = n.split(" "); + s = r[0].split(t).map((a) => parseInt(a, 10)), i = r[1] && r[1].split(e), s[1] = s[1] ? s[1] - 1 : 0; + let o = s; + return i && i.length && (i.length === 4 && (i[3] = "0." + i[3], i[3] = parseFloat(i[3]) * 1e3), o = o.concat(i)), new Date(...o); } - return elem; - } - - function animateSVG(svgElement, attr, from, to) { - const animatedSvgElement = getAnimationElement(svgElement, attr, from, to); - - if (animatedSvgElement === svgElement) { - // triggered 2nd time programmatically - // trigger artificial click event - const event = document.createEvent("HTMLEvents"); - event.initEvent("click", true, true); - event.eventName = "click"; - animatedSvgElement.dispatchEvent(event); + }, + to_string(n, t = !1) { + if (!(n instanceof Date)) + throw new TypeError("Invalid argument type"); + const e = this.get_date_values(n).map((r, o) => (o === 1 && (r = r + 1), o === 6 ? v(r + "", 3, "0") : v(r + "", 2, "0"))), s = `${e[0]}-${e[1]}-${e[2]}`, i = `${e[3]}:${e[4]}:${e[5]}.${e[6]}`; + return s + (t ? " " + i : ""); + }, + format(n, t = "YYYY-MM-DD HH:mm:ss.SSS", e = "en") { + const i = new Intl.DateTimeFormat(e, { + month: "long" + }).format(n), r = i.charAt(0).toUpperCase() + i.slice(1), o = this.get_date_values(n).map((g) => v(g, 2, 0)), a = { + YYYY: o[0], + MM: v(+o[1] + 1, 2, 0), + DD: o[2], + HH: o[3], + mm: o[4], + ss: o[5], + SSS: o[6], + D: o[2], + MMMM: r, + MMM: S[r] + }; + let d = t; + const p = []; + return Object.keys(a).sort((g, u) => u.length - g.length).forEach((g) => { + d.includes(g) && (d = d.replaceAll(g, `$${p.length}`), p.push(a[g])); + }), p.forEach((g, u) => { + d = d.replaceAll(`$${u}`, g); + }), d; + }, + diff(n, t, e = $) { + let s, i, r, o, a, d, p; + return s = n - t, i = s / 1e3, o = i / 60, r = o / 60, a = r / 24, d = a / 30, p = d / 12, e.endsWith("s") || (e += "s"), Math.floor( + { + milliseconds: s, + seconds: i, + minutes: o, + hours: r, + days: a, + months: d, + years: p + }[e] + ); + }, + today() { + const n = this.get_date_values(/* @__PURE__ */ new Date()).slice(0, 3); + return new Date(...n); + }, + now() { + return /* @__PURE__ */ new Date(); + }, + add(n, t, e) { + t = parseInt(t, 10); + const s = [ + n.getFullYear() + (e === M ? t : 0), + n.getMonth() + (e === D ? t : 0), + n.getDate() + (e === $ ? t : 0), + n.getHours() + (e === E ? t : 0), + n.getMinutes() + (e === Y ? t : 0), + n.getSeconds() + (e === A ? t : 0), + n.getMilliseconds() + (e === L ? t : 0) + ]; + return new Date(...s); + }, + start_of(n, t) { + const e = { + [M]: 6, + [D]: 5, + [$]: 4, + [E]: 3, + [Y]: 2, + [A]: 1, + [L]: 0 + }; + function s(r) { + const o = e[t]; + return e[r] <= o; } + const i = [ + n.getFullYear(), + s(M) ? 0 : n.getMonth(), + s(D) ? 1 : n.getDate(), + s($) ? 0 : n.getHours(), + s(E) ? 0 : n.getMinutes(), + s(Y) ? 0 : n.getSeconds(), + s(A) ? 0 : n.getMilliseconds() + ]; + return new Date(...i); + }, + clone(n) { + return new Date(...this.get_date_values(n)); + }, + get_date_values(n) { + return [ + n.getFullYear(), + n.getMonth(), + n.getDate(), + n.getHours(), + n.getMinutes(), + n.getSeconds(), + n.getMilliseconds() + ]; + }, + get_days_in_month(n) { + const t = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], e = n.getMonth(); + if (e !== 1) + return t[e]; + const s = n.getFullYear(); + return s % 4 === 0 && s % 100 != 0 || s % 400 === 0 ? 29 : 28; } - - function getAnimationElement( - svgElement, - attr, - from, - to, - dur = "0.4s", - begin = "0.1s", - ) { - const animEl = svgElement.querySelector("animate"); - if (animEl) { - $.attr(animEl, { - attributeName: attr, - from, - to, - dur, - begin: "click + " + begin, // artificial click - }); - return svgElement; - } - - const animateElement = createSVG("animate", { - attributeName: attr, - from, - to, - dur, - begin, - calcMode: "spline", - values: from + ";" + to, - keyTimes: "0; 1", - keySplines: cubic_bezier("ease-out"), +}; +function v(n, t, e) { + return n = n + "", t = t >> 0, e = String(typeof e < "u" ? e : " "), n.length > t ? String(n) : (t = t - n.length, t > e.length && (e += e.repeat(t / e.length)), e.slice(0, t) + String(n)); +} +function _(n, t) { + return typeof n == "string" ? (t || document).querySelector(n) : n || null; +} +function c(n, t) { + const e = document.createElementNS("http://www.w3.org/2000/svg", n); + for (let s in t) + s === "append_to" ? t.append_to.appendChild(e) : s === "innerHTML" ? e.innerHTML = t.innerHTML : s === "clipPath" ? e.setAttribute("clip-path", "url(#" + t[s] + ")") : e.setAttribute(s, t[s]); + return e; +} +function H(n, t, e, s) { + const i = W(n, t, e, s); + if (i === n) { + const r = document.createEvent("HTMLEvents"); + r.initEvent("click", !0, !0), r.eventName = "click", i.dispatchEvent(r); + } +} +function W(n, t, e, s, i = "0.4s", r = "0.1s") { + const o = n.querySelector("animate"); + if (o) + return _.attr(o, { + attributeName: t, + from: e, + to: s, + dur: i, + begin: "click + " + r + // artificial click + }), n; + const a = c("animate", { + attributeName: t, + from: e, + to: s, + dur: i, + begin: r, + calcMode: "spline", + values: e + ";" + s, + keyTimes: "0; 1", + keySplines: X("ease-out") + }); + return n.appendChild(a), n; +} +function X(n) { + return { + ease: ".25 .1 .25 1", + linear: "0 0 1 1", + "ease-in": ".42 0 1 1", + "ease-out": "0 0 .58 1", + "ease-in-out": ".42 0 .58 1" + }[n]; +} +_.on = (n, t, e, s) => { + s ? _.delegate(n, t, e, s) : (s = e, _.bind(n, t, s)); +}; +_.off = (n, t, e) => { + n.removeEventListener(t, e); +}; +_.bind = (n, t, e) => { + t.split(/\s+/).forEach(function(s) { + n.addEventListener(s, e); + }); +}; +_.delegate = (n, t, e, s) => { + n.addEventListener(t, function(i) { + const r = i.target.closest(e); + r && (i.delegatedTarget = r, s.call(this, i, r)); + }); +}; +_.closest = (n, t) => t ? t.matches(n) ? t : _.closest(n, t.parentNode) : null; +_.attr = (n, t, e) => { + if (!e && typeof t == "string") + return n.getAttribute(t); + if (typeof t == "object") { + for (let s in t) + _.attr(n, s, t[s]); + return; + } + n.setAttribute(t, e); +}; +class O { + constructor(t, e) { + this.set_defaults(t, e), this.prepare(), this.draw(), this.bind(); + } + set_defaults(t, e) { + this.action_completed = !1, this.gantt = t, this.task = e; + } + prepare() { + this.prepare_values(), this.prepare_helpers(); + } + prepare_values() { + this.invalid = this.task.invalid, this.height = this.gantt.options.bar_height, this.image_size = this.height - 5, this.compute_x(), this.compute_y(), this.compute_duration(), this.corner_radius = this.gantt.options.bar_corner_radius, this.width = this.gantt.options.column_width * this.duration, this.progress_width = this.gantt.options.column_width * this.duration * (this.task.progress / 100) || 0, this.group = c("g", { + class: "bar-wrapper" + (this.task.custom_class ? " " + this.task.custom_class : "") + (this.task.important ? " important" : ""), + "data-id": this.task.id + }), this.bar_group = c("g", { + class: "bar-group", + append_to: this.group + }), this.handle_group = c("g", { + class: "handle-group", + append_to: this.group }); - svgElement.appendChild(animateElement); - - return svgElement; } - - function cubic_bezier(name) { - return { - ease: ".25 .1 .25 1", - linear: "0 0 1 1", - "ease-in": ".42 0 1 1", - "ease-out": "0 0 .58 1", - "ease-in-out": ".42 0 .58 1", - }[name]; + prepare_helpers() { + SVGElement.prototype.getX = function() { + return +this.getAttribute("x"); + }, SVGElement.prototype.getY = function() { + return +this.getAttribute("y"); + }, SVGElement.prototype.getWidth = function() { + return +this.getAttribute("width"); + }, SVGElement.prototype.getHeight = function() { + return +this.getAttribute("height"); + }, SVGElement.prototype.getEndX = function() { + return this.getX() + this.getWidth(); + }; } - - $.on = (element, event, selector, callback) => { - if (!callback) { - callback = selector; - $.bind(element, event, callback); - } else { - $.delegate(element, event, selector, callback); - } - }; - - $.off = (element, event, handler) => { - element.removeEventListener(event, handler); - }; - - $.bind = (element, event, callback) => { - event.split(/\s+/).forEach(function (event) { - element.addEventListener(event, callback); + prepare_expected_progress_values() { + this.compute_expected_progress(), this.expected_progress_width = this.gantt.options.column_width * this.duration * (this.expected_progress / 100) || 0; + } + draw() { + this.draw_bar(), this.draw_progress_bar(), this.gantt.options.show_expected_progress && (this.prepare_expected_progress_values(), this.draw_expected_progress_bar()), this.draw_label(), this.draw_resize_handles(), this.task.thumbnail && this.draw_thumbnail(); + } + draw_bar() { + this.$bar = c("rect", { + x: this.x, + y: this.y, + width: this.width, + height: this.height, + rx: this.corner_radius, + ry: this.corner_radius, + class: "bar" + (/^((?!chrome|android).)*safari/i.test(navigator.userAgent) && !this.task.important ? " safari" : ""), + append_to: this.bar_group + }), H(this.$bar, "width", 0, this.width), this.invalid && this.$bar.classList.add("bar-invalid"); + } + draw_expected_progress_bar() { + this.invalid || (this.$expected_bar_progress = c("rect", { + x: this.x, + y: this.y, + width: this.expected_progress_width, + height: this.height, + rx: this.corner_radius, + ry: this.corner_radius, + class: "bar-expected-progress", + append_to: this.bar_group + }), H( + this.$expected_bar_progress, + "width", + 0, + this.expected_progress_width + )); + } + draw_progress_bar() { + if (this.invalid) return; + this.$bar_progress = c("rect", { + x: this.x, + y: this.y, + width: this.progress_width, + height: this.height, + rx: this.corner_radius, + ry: this.corner_radius, + class: "bar-progress", + append_to: this.bar_group }); - }; - - $.delegate = (element, event, selector, callback) => { - element.addEventListener(event, function (e) { - const delegatedTarget = e.target.closest(selector); - if (delegatedTarget) { - e.delegatedTarget = delegatedTarget; - callback.call(this, e, delegatedTarget); - } + const t = h.diff(this.task._start, this.gantt.gantt_start, "hour") / this.gantt.options.step * this.gantt.options.column_width; + let e = document.createElement("div"); + e.id = `${this.task.id}-highlight`, e.classList.add("date-highlight"), e.style.height = this.height * 0.8 + "px", e.style.width = this.width + "px", e.style.top = this.gantt.options.header_height - 25 + "px", e.style.left = t + "px", this.$date_highlight = e, this.gantt.$lower_header.prepend(e), H(this.$bar_progress, "width", 0, this.progress_width); + } + draw_label() { + let t = this.x + this.$bar.getWidth() / 2; + this.task.thumbnail && (t = this.x + this.image_size + 5), c("text", { + x: t, + y: this.y + this.height / 2, + innerHTML: this.task.name, + class: "bar-label", + append_to: this.bar_group + }), requestAnimationFrame(() => this.update_label_position()); + } + draw_thumbnail() { + let t = 10, e = 2, s, i; + s = c("defs", { + append_to: this.bar_group + }), c("rect", { + id: "rect_" + this.task.id, + x: this.x + t, + y: this.y + e, + width: this.image_size, + height: this.image_size, + rx: "15", + class: "img_mask", + append_to: s + }), i = c("clipPath", { + id: "clip_" + this.task.id, + append_to: s + }), c("use", { + href: "#rect_" + this.task.id, + append_to: i + }), c("image", { + x: this.x + t, + y: this.y + e, + width: this.image_size, + height: this.image_size, + class: "bar-img", + href: this.task.thumbnail, + clipPath: "clip_" + this.task.id, + append_to: this.bar_group }); - }; - - $.closest = (selector, element) => { - if (!element) return null; - - if (element.matches(selector)) { - return element; - } - - return $.closest(selector, element.parentNode); - }; - - $.attr = (element, attr, value) => { - if (!value && typeof attr === "string") { - return element.getAttribute(attr); - } - - if (typeof attr === "object") { - for (let key in attr) { - $.attr(element, key, attr[key]); - } - return; - } - - element.setAttribute(attr, value); - }; - - class Bar { - constructor(gantt, task) { - this.set_defaults(gantt, task); - this.prepare(); - this.draw(); - this.bind(); - } - - set_defaults(gantt, task) { - this.action_completed = false; - this.gantt = gantt; - this.task = task; - } - - prepare() { - this.prepare_values(); - this.prepare_helpers(); - } - - prepare_values() { - this.invalid = this.task.invalid; - this.height = this.gantt.options.bar_height; - this.image_size = this.height - 5; - this.compute_x(); - this.compute_y(); - this.compute_duration(); - this.corner_radius = this.gantt.options.bar_corner_radius; - this.width = this.gantt.options.column_width * this.duration; - this.progress_width = - this.gantt.options.column_width * - this.duration * - (this.task.progress / 100) || 0; - this.group = createSVG("g", { - class: "bar-wrapper" + (this.task.custom_class ? " " + this.task.custom_class : "") + (this.task.important ? ' important' : ''), - "data-id": this.task.id, - }); - this.bar_group = createSVG("g", { - class: "bar-group", - append_to: this.group, - }); - this.handle_group = createSVG("g", { - class: "handle-group", - append_to: this.group, - }); - } - - prepare_helpers() { - SVGElement.prototype.getX = function () { - return +this.getAttribute("x"); - }; - SVGElement.prototype.getY = function () { - return +this.getAttribute("y"); - }; - SVGElement.prototype.getWidth = function () { - return +this.getAttribute("width"); - }; - SVGElement.prototype.getHeight = function () { - return +this.getAttribute("height"); - }; - SVGElement.prototype.getEndX = function () { - return this.getX() + this.getWidth(); - }; - } - - prepare_expected_progress_values() { - this.compute_expected_progress(); - this.expected_progress_width = - this.gantt.options.column_width * - this.duration * - (this.expected_progress / 100) || 0; - } - - draw() { - this.draw_bar(); - this.draw_progress_bar(); - if (this.gantt.options.show_expected_progress) { - this.prepare_expected_progress_values(); - this.draw_expected_progress_bar(); - } - this.draw_label(); - this.draw_resize_handles(); - - if (this.task.thumbnail) { - this.draw_thumbnail(); - } - } - - draw_bar() { - this.$bar = createSVG("rect", { - x: this.x, - y: this.y, - width: this.width, - height: this.height, - rx: this.corner_radius, - ry: this.corner_radius, - class: "bar", - append_to: this.bar_group, - }); - - animateSVG(this.$bar, "width", 0, this.width); - - if (this.invalid) { - this.$bar.classList.add("bar-invalid"); - } - } - - draw_expected_progress_bar() { - if (this.invalid) return; - this.$expected_bar_progress = createSVG("rect", { - x: this.x, - y: this.y, - width: this.expected_progress_width, - height: this.height, - rx: this.corner_radius, - ry: this.corner_radius, - class: "bar-expected-progress", - append_to: this.bar_group, - }); - - animateSVG( - this.$expected_bar_progress, - "width", - 0, - this.expected_progress_width, - ); - } - - draw_progress_bar() { - if (this.invalid) return; - this.$bar_progress = createSVG("rect", { - x: this.x, - y: this.y, - width: this.progress_width, - height: this.height, - rx: this.corner_radius, - ry: this.corner_radius, - class: "bar-progress", - append_to: this.bar_group, - }); - const x = (date_utils.diff(this.task._start, this.gantt.gantt_start, 'hour') / - this.gantt.options.step) * - this.gantt.options.column_width; - - let $date_highlight = document.createElement("div"); - $date_highlight.id = `${this.task.id}-highlight`; - $date_highlight.classList.add('date-highlight'); - $date_highlight.style.height = this.height * 0.8 + 'px'; - $date_highlight.style.width = this.width + 'px'; - $date_highlight.style.top = this.gantt.options.header_height - 25 + 'px'; - $date_highlight.style.left = x + 'px'; - this.$date_highlight = $date_highlight; - this.gantt.$lower_header.prepend($date_highlight); - - - - animateSVG(this.$bar_progress, "width", 0, this.progress_width); - } - - draw_label() { - let x_coord = this.x + this.$bar.getWidth() / 2; - - if (this.task.thumbnail) { - x_coord = this.x + this.image_size + 5; - } - - createSVG("text", { - x: x_coord, - y: this.y + this.height / 2, - innerHTML: this.task.name, - class: "bar-label", - append_to: this.bar_group, - }); - // labels get BBox in the next tick - requestAnimationFrame(() => this.update_label_position()); - } - draw_thumbnail() { - let x_offset = 10, y_offset = 2; - let defs, clipPath; - - defs = createSVG('defs', { - append_to: this.bar_group - }); - - createSVG('rect', { - id: 'rect_' + this.task.id, - x: this.x + x_offset, - y: this.y + y_offset, - width: this.image_size, - height: this.image_size, - rx: '15', - class: 'img_mask', - append_to: defs - }); - - clipPath = createSVG('clipPath', { - id: 'clip_' + this.task.id, - append_to: defs - }); - - createSVG('use', { - href: '#rect_' + this.task.id, - append_to: clipPath - }); - - createSVG('image', { - x: this.x + x_offset, - y: this.y + y_offset, - width: this.image_size, - height: this.image_size, - class: 'bar-img', - href: this.task.thumbnail, - clipPath: 'clip_' + this.task.id, - append_to: this.bar_group - }); - } - - draw_resize_handles() { - if (this.invalid || this.gantt.options.readonly) return; - - const bar = this.$bar; - const handle_width = 8; - - createSVG("rect", { - x: bar.getX() + bar.getWidth() + handle_width - 4, - y: bar.getY() + 1, - width: handle_width, - height: this.height - 2, - rx: this.corner_radius, - ry: this.corner_radius, - class: "handle right", - append_to: this.handle_group, - }); - - createSVG("rect", { - x: bar.getX() - handle_width - 4, - y: bar.getY() + 1, - width: handle_width, - height: this.height - 2, - rx: this.corner_radius, - ry: this.corner_radius, - class: "handle left", - append_to: this.handle_group, - }); - - this.$handle_progress = createSVG("polygon", { - points: this.get_progress_polygon_points().join(","), + } + draw_resize_handles() { + if (this.invalid || this.gantt.options.readonly) return; + const t = this.$bar, e = 8; + if (this.gantt.options.dates_readonly || (c("rect", { + x: t.getX() + t.getWidth() + e - 4, + y: t.getY() + 1, + width: e, + height: this.height - 2, + rx: this.corner_radius, + ry: this.corner_radius, + class: "handle right", + append_to: this.handle_group + }), c("rect", { + x: t.getX() - e - 4, + y: t.getY() + 1, + width: e, + height: this.height - 2, + rx: this.corner_radius, + ry: this.corner_radius, + class: "handle left", + append_to: this.handle_group + })), !this.gantt.options.progress_readonly) { + const s = this.$bar_progress; + this.$handle_progress = c("circle", { + cx: s.getEndX(), + cy: s.getY() + s.getHeight() / 2, + r: 5, class: "handle progress", - append_to: this.handle_group, + append_to: this.handle_group }); } - - get_progress_polygon_points() { - const bar_progress = this.$bar_progress; - let icon_width = 10; - let icon_height = 15; - - return [ - bar_progress.getEndX() - icon_width / 2, - bar_progress.getY() + bar_progress.getHeight() / 2, - - bar_progress.getEndX(), - bar_progress.getY() + bar_progress.getHeight() / 2 - icon_height / 2, - - bar_progress.getEndX() + icon_width / 2, - bar_progress.getY() + bar_progress.getHeight() / 2, - - bar_progress.getEndX(), - bar_progress.getY() + bar_progress.getHeight() / 2 + icon_height / 2, - - bar_progress.getEndX() - icon_width / 2, - bar_progress.getY() + bar_progress.getHeight() / 2, - ]; - } - - bind() { - if (this.invalid) return; - this.setup_click_event(); - } - - setup_click_event() { - let task_id = this.task.id; - $.on(this.group, "mouseover", (e) => { - this.gantt.trigger_event("hover", [this.task, e.screenX, e.screenY, e]); - }); - - let timeout; - $.on(this.group, "mouseenter", (e) => timeout = setTimeout(() => { - this.show_popup(e.offsetX); - document.querySelector(`#${task_id}-highlight`).style.display = 'block'; - }, 200)); - - $.on(this.group, "mouseleave", () => { - clearTimeout(timeout); - this.gantt.popup?.hide?.(); - document.querySelector(`#${task_id}-highlight`).style.display = 'none'; - }); - - - $.on(this.group, this.gantt.options.popup_trigger, () => { - this.gantt.trigger_event("click", [this.task]); - }); - - $.on(this.group, "dblclick", (e) => { - if (this.action_completed) { - // just finished a move action, wait for a few seconds - return; - } - - this.gantt.trigger_event("double_click", [this.task]); - }); - } - - show_popup(x) { - if (this.gantt.bar_being_dragged) return; - - const start_date = date_utils.format( - this.task._start, - "MMM D", - this.gantt.options.language, - ); - const end_date = date_utils.format( - date_utils.add(this.task._end, -1, "second"), - "MMM D", - this.gantt.options.language, - ); - const subtitle = `${start_date} - ${end_date}
Progress: ${this.task.progress}`; - - this.gantt.show_popup({ - x, - target_element: this.$bar, - title: this.task.name, - subtitle: subtitle, - task: this.task, - }); - } - - update_bar_position({ x = null, width = null }) { - const bar = this.$bar; - if (x) { - // get all x values of parent task - const xs = this.task.dependencies.map((dep) => { - return this.gantt.get_bar(dep).$bar.getX(); - }); - // child task must not go before parent - const valid_x = xs.reduce((_, curr) => { - return x >= curr; - }, x); - if (!valid_x) { - width = null; - return; - } - this.update_attr(bar, "x", x); - this.$date_highlight.style.left = x + 'px'; - } - if (width) { - this.update_attr(bar, "width", width); - this.$date_highlight.style.width = width + 'px'; - } - this.update_label_position(); - this.update_handle_position(); - if (this.gantt.options.show_expected_progress) { - this.date_changed(); - this.compute_duration(); - this.update_expected_progressbar_position(); - } - this.update_progressbar_position(); - this.update_arrow_position(); - } - - update_label_position_on_horizontal_scroll({ x, sx }) { - const container = document.querySelector('.gantt-container'); - const label = this.group.querySelector('.bar-label'); - const img = this.group.querySelector('.bar-img') || ''; - const img_mask = this.bar_group.querySelector('.img_mask') || ''; - - let barWidthLimit = this.$bar.getX() + this.$bar.getWidth(); - let newLabelX = label.getX() + x; - let newImgX = img && img.getX() + x || 0; - let imgWidth = img && img.getBBox().width + 7 || 7; - let labelEndX = newLabelX + label.getBBox().width + 7; - let viewportCentral = sx + container.clientWidth / 2; - - if (label.classList.contains('big')) return; - - if (labelEndX < barWidthLimit && x > 0 && labelEndX < viewportCentral) { - label.setAttribute('x', newLabelX); - if (img) { - img.setAttribute('x', newImgX); - img_mask.setAttribute('x', newImgX); - } - } else if ((newLabelX - imgWidth) > this.$bar.getX() && x < 0 && labelEndX > viewportCentral) { - label.setAttribute('x', newLabelX); - if (img) { - img.setAttribute('x', newImgX); - img_mask.setAttribute('x', newImgX); - } - - } - } - - date_changed() { - let changed = false; - const { new_start_date, new_end_date } = this.compute_start_end_date(); - - if (Number(this.task._start) !== Number(new_start_date)) { - changed = true; - this.task._start = new_start_date; - } - - if (Number(this.task._end) !== Number(new_end_date)) { - changed = true; - this.task._end = new_end_date; - } - - if (!changed) return; - - this.gantt.trigger_event("date_change", [ - this.task, - new_start_date, - date_utils.add(new_end_date, -1, "second"), - ]); - } - - progress_changed() { - const new_progress = this.compute_progress(); - this.task.progress = new_progress; - this.gantt.trigger_event("progress_change", [this.task, new_progress]); - } - - set_action_completed() { - this.action_completed = true; - setTimeout(() => (this.action_completed = false), 1000); - } - - compute_start_end_date() { - const bar = this.$bar; - const x_in_units = bar.getX() / this.gantt.options.column_width; - const new_start_date = date_utils.add( - this.gantt.gantt_start, - x_in_units * this.gantt.options.step, - "hour", - ); - const width_in_units = bar.getWidth() / this.gantt.options.column_width; - const new_end_date = date_utils.add( - new_start_date, - width_in_units * this.gantt.options.step, - "hour", - ); - - return { new_start_date, new_end_date }; - } - - compute_progress() { - const progress = - (this.$bar_progress.getWidth() / this.$bar.getWidth()) * 100; - return parseInt(progress, 10); - } - - compute_expected_progress() { - this.expected_progress = - date_utils.diff(date_utils.today(), this.task._start, "hour") / - this.gantt.options.step; - this.expected_progress = - ((this.expected_progress < this.duration - ? this.expected_progress - : this.duration) * - 100) / - this.duration; - } - - compute_x() { - const { step, column_width } = this.gantt.options; - const task_start = this.task._start; - const gantt_start = this.gantt.gantt_start; - - const diff = date_utils.diff(task_start, gantt_start, "hour"); - let x = (diff / step) * column_width; - - if (this.gantt.view_is("Month")) { - const diff = date_utils.diff(task_start, gantt_start, "day"); - x = (diff * column_width) / 30; - } - this.x = x; - } - - compute_y() { - this.y = - this.gantt.options.header_height + - this.gantt.options.padding + - this.task._index * (this.height + this.gantt.options.padding); - } - - compute_duration() { - this.duration = - date_utils.diff(this.task._end, this.task._start, "hour") / - this.gantt.options.step; - } - - get_snap_position(dx) { - let odx = dx, - rem, - position; - - if (this.gantt.view_is("Week")) { - rem = dx % (this.gantt.options.column_width / 7); - position = - odx - - rem + - (rem < this.gantt.options.column_width / 14 - ? 0 - : this.gantt.options.column_width / 7); - } else if (this.gantt.view_is("Month")) { - rem = dx % (this.gantt.options.column_width / 30); - position = - odx - - rem + - (rem < this.gantt.options.column_width / 60 - ? 0 - : this.gantt.options.column_width / 30); - } else { - rem = dx % this.gantt.options.column_width; - position = - odx - - rem + - (rem < this.gantt.options.column_width / 2 - ? 0 - : this.gantt.options.column_width); - } - return position; - } - - update_attr(element, attr, value) { - value = +value; - if (!isNaN(value)) { - element.setAttribute(attr, value); - } - return element; - } - - update_expected_progressbar_position() { - if (this.invalid) return; - this.$expected_bar_progress.setAttribute("x", this.$bar.getX()); - this.compute_expected_progress(); - this.$expected_bar_progress.setAttribute( - "width", - this.gantt.options.column_width * - this.duration * - (this.expected_progress / 100) || 0, - ); - } - - update_progressbar_position() { - if (this.invalid || this.gantt.options.readonly) return; - this.$bar_progress.setAttribute("x", this.$bar.getX()); - this.$bar_progress.setAttribute( - "width", - this.$bar.getWidth() * (this.task.progress / 100), - ); - } - - update_label_position() { - const img_mask = this.bar_group.querySelector('.img_mask') || ''; - const bar = this.$bar, - label = this.group.querySelector(".bar-label"), - img = this.group.querySelector('.bar-img'); - - - let padding = 5; - let x_offset_label_img = this.image_size + 10; - const labelWidth = label.getBBox().width; - const barWidth = bar.getWidth(); - if (labelWidth > barWidth) { - label.classList.add("big"); - if (img) { - img.setAttribute('x', bar.getX() + bar.getWidth() + padding); - img_mask.setAttribute('x', bar.getX() + bar.getWidth() + padding); - label.setAttribute('x', bar.getX() + bar.getWidth() + x_offset_label_img); - } else { - label.setAttribute('x', bar.getX() + bar.getWidth() + padding); - } - } else { - label.classList.remove("big"); - if (img) { - img.setAttribute('x', bar.getX() + padding); - img_mask.setAttribute('x', bar.getX() + padding); - label.setAttribute('x', bar.getX() + barWidth / 2 + x_offset_label_img); - } else { - label.setAttribute('x', bar.getX() + barWidth / 2 - labelWidth / 2); - } - } - } - - update_handle_position() { - if (this.invalid || this.gantt.options.readonly) return; - const bar = this.$bar; - this.handle_group - .querySelector(".handle.left") - .setAttribute("x", bar.getX() - 12); - this.handle_group - .querySelector(".handle.right") - .setAttribute("x", bar.getEndX() + 4); - const handle = this.group.querySelector(".handle.progress"); - handle && handle.setAttribute("points", this.get_progress_polygon_points()); - } - - update_arrow_position() { - this.arrows = this.arrows || []; - for (let arrow of this.arrows) { - arrow.update(); - } - } } - - class Arrow { - constructor(gantt, from_task, to_task) { - this.gantt = gantt; - this.from_task = from_task; - this.to_task = to_task; - - this.calculate_path(); - this.draw(); - } - - calculate_path() { - let start_x = - this.from_task.$bar.getX() + this.from_task.$bar.getWidth() / 2; - - const condition = () => - this.to_task.$bar.getX() < start_x + this.gantt.options.padding && - start_x > this.from_task.$bar.getX() + this.gantt.options.padding; - - while (condition()) { - start_x -= 10; + bind() { + this.invalid || this.setup_click_event(); + } + setup_click_event() { + let t = this.task.id; + _.on(this.group, "mouseover", (s) => { + this.gantt.trigger_event("hover", [ + this.task, + s.screenX, + s.screenY, + s + ]); + }); + let e; + _.on( + this.group, + "mouseenter", + (s) => e = setTimeout(() => { + this.show_popup(s.offsetX || s.layerX), document.getElementById( + `${t}-highlight` + ).style.display = "block"; + }, 200) + ), _.on(this.group, "mouseleave", () => { + var s, i; + clearTimeout(e), (i = (s = this.gantt.popup) == null ? void 0 : s.hide) == null || i.call(s), document.getElementById(`${t}-highlight`).style.display = "none"; + }), _.on(this.group, "click", () => { + this.gantt.trigger_event("click", [this.task]); + }), _.on(this.group, "dblclick", (s) => { + this.action_completed || (this.group.classList.remove("active"), this.gantt.popup && this.gantt.popup.parent.classList.remove("hidden"), this.gantt.trigger_event("double_click", [this.task])); + }); + } + show_popup(t) { + if (this.gantt.bar_being_dragged) return; + const e = h.format( + this.task._start, + "MMM D", + this.gantt.options.language + ), s = h.format( + h.add(this.task._end, -1, "second"), + "MMM D", + this.gantt.options.language + ), i = `${e} - ${s}
Progress: ${this.task.progress}`; + this.gantt.show_popup({ + x: t, + target_element: this.$bar, + title: this.task.name, + subtitle: i, + task: this.task + }); + } + update_bar_position({ x: t = null, width: e = null }) { + const s = this.$bar; + if (t) { + if (!this.task.dependencies.map((o) => this.gantt.get_bar(o).$bar.getX()).reduce((o, a) => t >= a, t)) { + e = null; + return; } - - const start_y = - this.gantt.options.header_height + - this.gantt.options.bar_height + - (this.gantt.options.padding + this.gantt.options.bar_height) * - this.from_task.task._index + - this.gantt.options.padding; - - const end_x = this.to_task.$bar.getX() - this.gantt.options.padding / 2 - 7; - const end_y = - this.gantt.options.header_height + - this.gantt.options.bar_height / 2 + - (this.gantt.options.padding + this.gantt.options.bar_height) * - this.to_task.task._index + - this.gantt.options.padding; - - const from_is_below_to = - this.from_task.task._index > this.to_task.task._index; - const curve = this.gantt.options.arrow_curve; - const clockwise = from_is_below_to ? 1 : 0; - const curve_y = from_is_below_to ? -curve : curve; - const offset = from_is_below_to - ? end_y + this.gantt.options.arrow_curve - : end_y - this.gantt.options.arrow_curve; - - this.path = ` - M ${start_x} ${start_y} - V ${offset} - a ${curve} ${curve} 0 0 ${clockwise} ${curve} ${curve_y} - L ${end_x} ${end_y} + this.update_attr(s, "x", t), this.$date_highlight.style.left = t + "px"; + } + e && (this.update_attr(s, "width", e), this.$date_highlight.style.width = e + "px"), this.update_label_position(), this.update_handle_position(), this.gantt.options.show_expected_progress && (this.date_changed(), this.compute_duration(), this.update_expected_progressbar_position()), this.update_progressbar_position(), this.update_arrow_position(); + } + update_label_position_on_horizontal_scroll({ x: t, sx: e }) { + const s = document.querySelector(".gantt-container"), i = this.group.querySelector(".bar-label"), r = this.group.querySelector(".bar-img") || "", o = this.bar_group.querySelector(".img_mask") || ""; + let a = this.$bar.getX() + this.$bar.getWidth(), d = i.getX() + t, p = r && r.getX() + t || 0, g = r && r.getBBox().width + 7 || 7, u = d + i.getBBox().width + 7, f = e + s.clientWidth / 2; + i.classList.contains("big") || (u < a && t > 0 && u < f || d - g > this.$bar.getX() && t < 0 && u > f) && (i.setAttribute("x", d), r && (r.setAttribute("x", p), o.setAttribute("x", p))); + } + date_changed() { + let t = !1; + const { new_start_date: e, new_end_date: s } = this.compute_start_end_date(); + Number(this.task._start) !== Number(e) && (t = !0, this.task._start = e), Number(this.task._end) !== Number(s) && (t = !0, this.task._end = s), t && this.gantt.trigger_event("date_change", [ + this.task, + e, + h.add(s, -1, "second") + ]); + } + progress_changed() { + const t = this.compute_progress(); + this.task.progress = t, this.gantt.trigger_event("progress_change", [this.task, t]); + } + set_action_completed() { + this.action_completed = !0, setTimeout(() => this.action_completed = !1, 1e3); + } + compute_start_end_date() { + const t = this.$bar, e = t.getX() / this.gantt.options.column_width; + let s = h.add( + this.gantt.gantt_start, + e * this.gantt.options.step, + "hour" + ); + const i = this.gantt.gantt_start.getTimezoneOffset() - s.getTimezoneOffset(); + i && (s = h.add( + s, + i, + "minute" + )); + const r = t.getWidth() / this.gantt.options.column_width, o = h.add( + s, + r * this.gantt.options.step, + "hour" + ); + return { new_start_date: s, new_end_date: o }; + } + compute_progress() { + const t = this.$bar_progress.getWidth() / this.$bar.getWidth() * 100; + return parseInt(t, 10); + } + compute_expected_progress() { + this.expected_progress = h.diff(h.today(), this.task._start, "hour") / this.gantt.options.step, this.expected_progress = (this.expected_progress < this.duration ? this.expected_progress : this.duration) * 100 / this.duration; + } + compute_x() { + const { step: t, column_width: e } = this.gantt.options, s = this.task._start, i = this.gantt.gantt_start; + let o = h.diff(s, i, "hour") / t * e; + this.gantt.view_is("Month") && (o = h.diff(s, i, "day") * e / 30), this.x = o; + } + compute_y() { + this.y = this.gantt.options.header_height + this.gantt.options.padding + this.task._index * (this.height + this.gantt.options.padding); + } + compute_duration() { + this.duration = h.diff(this.task._end, this.task._start, "hour") / this.gantt.options.step; + } + get_snap_position(t) { + let e = t, s, i; + return this.gantt.view_is("Week") ? (s = t % (this.gantt.options.column_width / 7), i = e - s + (s < this.gantt.options.column_width / 14 ? 0 : this.gantt.options.column_width / 7)) : this.gantt.view_is("Month") ? (s = t % (this.gantt.options.column_width / 30), i = e - s + (s < this.gantt.options.column_width / 60 ? 0 : this.gantt.options.column_width / 30)) : (s = t % this.gantt.options.column_width, i = e - s + (s < this.gantt.options.column_width / 2 ? 0 : this.gantt.options.column_width)), i; + } + update_attr(t, e, s) { + return s = +s, isNaN(s) || t.setAttribute(e, s), t; + } + update_expected_progressbar_position() { + this.invalid || (this.$expected_bar_progress.setAttribute("x", this.$bar.getX()), this.compute_expected_progress(), this.$expected_bar_progress.setAttribute( + "width", + this.gantt.options.column_width * this.duration * (this.expected_progress / 100) || 0 + )); + } + update_progressbar_position() { + this.invalid || this.gantt.options.readonly || (this.$bar_progress.setAttribute("x", this.$bar.getX()), this.$bar_progress.setAttribute( + "width", + this.$bar.getWidth() * (this.task.progress / 100) + )); + } + update_label_position() { + const t = this.bar_group.querySelector(".img_mask") || "", e = this.$bar, s = this.group.querySelector(".bar-label"), i = this.group.querySelector(".bar-img"); + let r = 5, o = this.image_size + 10; + const a = s.getBBox().width, d = e.getWidth(); + a > d ? (s.classList.add("big"), i ? (i.setAttribute("x", e.getX() + e.getWidth() + r), t.setAttribute( + "x", + e.getX() + e.getWidth() + r + ), s.setAttribute( + "x", + e.getX() + e.getWidth() + o + )) : s.setAttribute("x", e.getX() + e.getWidth() + r)) : (s.classList.remove("big"), i ? (i.setAttribute("x", e.getX() + r), t.setAttribute("x", e.getX() + r), s.setAttribute( + "x", + e.getX() + d / 2 + o + )) : s.setAttribute( + "x", + e.getX() + d / 2 - a / 2 + )); + } + update_handle_position() { + if (this.invalid || this.gantt.options.readonly) return; + const t = this.$bar; + this.handle_group.querySelector(".handle.left").setAttribute("x", t.getX() - 12), this.handle_group.querySelector(".handle.right").setAttribute("x", t.getEndX() + 4); + const e = this.group.querySelector(".handle.progress"); + e && e.setAttribute("cx", this.$bar_progress.getEndX()); + } + update_arrow_position() { + this.arrows = this.arrows || []; + for (let t of this.arrows) + t.update(); + } +} +class C { + constructor(t, e, s) { + this.gantt = t, this.from_task = e, this.to_task = s, this.calculate_path(), this.draw(); + } + calculate_path() { + let t = this.from_task.$bar.getX() + this.from_task.$bar.getWidth() / 2; + const e = () => this.to_task.$bar.getX() < t + this.gantt.options.padding && t > this.from_task.$bar.getX() + this.gantt.options.padding; + for (; e(); ) + t -= 10; + const s = this.gantt.options.header_height + this.gantt.options.bar_height + (this.gantt.options.padding + this.gantt.options.bar_height) * this.from_task.task._index + this.gantt.options.padding, i = this.to_task.$bar.getX() - this.gantt.options.padding / 2 - 7, r = this.gantt.options.header_height + this.gantt.options.bar_height / 2 + (this.gantt.options.padding + this.gantt.options.bar_height) * this.to_task.task._index + this.gantt.options.padding, o = this.from_task.task._index > this.to_task.task._index, a = this.gantt.options.arrow_curve, d = o ? 1 : 0, p = o ? -a : a, g = o ? r + this.gantt.options.arrow_curve : r - this.gantt.options.arrow_curve; + if (this.path = ` + M ${t} ${s} + V ${g} + a ${a} ${a} 0 0 ${d} ${a} ${p} + L ${i} ${r} m -5 -5 l 5 5 - l -5 5`; - - if ( - this.to_task.$bar.getX() < - this.from_task.$bar.getX() + this.gantt.options.padding - ) { - const down_1 = this.gantt.options.padding / 2 - curve; - const down_2 = - this.to_task.$bar.getY() + this.to_task.$bar.getHeight() / 2 - curve_y; - const left = this.to_task.$bar.getX() - this.gantt.options.padding; - - this.path = ` - M ${start_x} ${start_y} - v ${down_1} - a ${curve} ${curve} 0 0 1 -${curve} ${curve} - H ${left} - a ${curve} ${curve} 0 0 ${clockwise} -${curve} ${curve_y} - V ${down_2} - a ${curve} ${curve} 0 0 ${clockwise} ${curve} ${curve_y} - L ${end_x} ${end_y} + l -5 5`, this.to_task.$bar.getX() < this.from_task.$bar.getX() + this.gantt.options.padding) { + const u = this.gantt.options.padding / 2 - a, f = this.to_task.$bar.getY() + this.to_task.$bar.getHeight() / 2 - p, w = this.to_task.$bar.getX() - this.gantt.options.padding; + this.path = ` + M ${t} ${s} + v ${u} + a ${a} ${a} 0 0 1 -${a} ${a} + H ${w} + a ${a} ${a} 0 0 ${d} -${a} ${p} + V ${f} + a ${a} ${a} 0 0 ${d} ${a} ${p} + L ${i} ${r} m -5 -5 l 5 5 l -5 5`; - } - } - - draw() { - this.element = createSVG("path", { - d: this.path, - "data-from": this.from_task.task.id, - "data-to": this.to_task.task.id, - }); - } - - update() { - this.calculate_path(); - this.element.setAttribute("d", this.path); } } - - class Popup { - constructor(parent, custom_html) { - this.parent = parent; - this.custom_html = custom_html; - this.make(); - } - - make() { - this.parent.innerHTML = ` + draw() { + this.element = c("path", { + d: this.path, + "data-from": this.from_task.task.id, + "data-to": this.to_task.task.id + }); + } + update() { + this.calculate_path(), this.element.setAttribute("d", this.path); + } +} +class N { + constructor(t, e) { + this.parent = t, this.custom_html = e, this.make(); + } + make() { + this.parent.innerHTML = `
- `; - - this.hide(); - - this.title = this.parent.querySelector(".title"); - this.subtitle = this.parent.querySelector(".subtitle"); - this.pointer = this.parent.querySelector(".pointer"); - } - - show(options) { - if (!options.target_element) { - throw new Error("target_element is required to show popup"); - } - const target_element = options.target_element; - - if (this.custom_html) { - let html = this.custom_html(options.task); - html += '
'; - this.parent.innerHTML = html; - this.pointer = this.parent.querySelector(".pointer"); - } else { - // set data - this.title.innerHTML = options.title; - this.subtitle.innerHTML = options.subtitle; - } - - // set position - let position_meta; - if (target_element instanceof HTMLElement) { - position_meta = target_element.getBoundingClientRect(); - } else if (target_element instanceof SVGElement) { - position_meta = options.target_element.getBBox(); - } - - this.parent.style.left = options.x - this.parent.clientWidth / 2 + "px"; - this.parent.style.top = position_meta.y + position_meta.height + 10 + "px"; - - this.pointer.style.left = this.parent.clientWidth / 2 + "px"; - this.pointer.style.top = "-15px"; - - // show - this.parent.style.opacity = 1; - } - - hide() { - this.parent.style.opacity = 0; - this.parent.style.left = 0; - } + `, this.hide(), this.title = this.parent.querySelector(".title"), this.subtitle = this.parent.querySelector(".subtitle"), this.pointer = this.parent.querySelector(".pointer"); } - - const VIEW_MODE = { - HOUR: "Hour", - QUARTER_DAY: "Quarter Day", - HALF_DAY: "Half Day", - DAY: "Day", - WEEK: "Week", - MONTH: "Month", - YEAR: "Year", - }; - - const VIEW_MODE_PADDING = { - HOUR: ["7d", "7d"], - QUARTER_DAY: ["7d", "7d"], - HALF_DAY: ["7d", "7d"], - DAY: ["1m", "1m"], - WEEK: ["1m", "1m"], - MONTH: ["1m", "1m"], - YEAR: ["2y", "2y"], - }; - - const DEFAULT_OPTIONS = { - header_height: 65, - column_width: 30, - step: 24, - view_modes: [...Object.values(VIEW_MODE)], - bar_height: 30, - bar_corner_radius: 3, - arrow_curve: 5, - padding: 18, - view_mode: "Day", - date_format: "YYYY-MM-DD", - popup_trigger: "click", - show_expected_progress: false, - popup: null, - language: "en", - readonly: false, - highlight_weekend: true, - scroll_to: 'start', - lines: 'both', - auto_move_label: true, - today_button: true, - view_mode_select: false, - }; - - class Gantt { - constructor(wrapper, tasks, options) { - this.setup_wrapper(wrapper); - this.setup_options(options); - this.setup_tasks(tasks); - // initialize with default view mode - this.change_view_mode(); - this.bind_events(); - } - - setup_wrapper(element) { - let svg_element, wrapper_element; - - // CSS Selector is passed - if (typeof element === "string") { - element = document.querySelector(element); - } - - // get the SVGElement - if (element instanceof HTMLElement) { - wrapper_element = element; - svg_element = element.querySelector("svg"); - } else if (element instanceof SVGElement) { - svg_element = element; - } else { - throw new TypeError( - "Frappé Gantt only supports usage of a string CSS selector," + - " HTML DOM element or SVG DOM element for the 'element' parameter", + show(t) { + if (!t.target_element) + throw new Error("target_element is required to show popup"); + const e = t.target_element; + if (this.custom_html) { + let i = this.custom_html(t.task); + i += '
', this.parent.innerHTML = i, this.pointer = this.parent.querySelector(".pointer"); + } else + this.title.innerHTML = t.title, this.subtitle.innerHTML = t.subtitle; + let s; + e instanceof HTMLElement ? s = e.getBoundingClientRect() : e instanceof SVGElement && (s = t.target_element.getBBox()), this.parent.style.left = t.x - this.parent.clientWidth / 2 + "px", this.parent.style.top = s.y + s.height + 10 + "px", this.pointer.style.left = this.parent.clientWidth / 2 + "px", this.pointer.style.top = "-15px", this.parent.style.opacity = 1; + } + hide() { + this.parent.style.opacity = 0, this.parent.style.left = 0; + } +} +const l = { + HOUR: "Hour", + QUARTER_DAY: "Quarter Day", + HALF_DAY: "Half Day", + DAY: "Day", + WEEK: "Week", + MONTH: "Month", + YEAR: "Year" +}, R = { + HOUR: ["7d", "7d"], + QUARTER_DAY: ["7d", "7d"], + HALF_DAY: ["7d", "7d"], + DAY: ["1m", "1m"], + WEEK: ["1m", "1m"], + MONTH: ["1m", "1m"], + YEAR: ["2y", "2y"] +}, I = { + header_height: 65, + column_width: 30, + view_modes: [...Object.values(l)], + bar_height: 30, + bar_corner_radius: 3, + arrow_curve: 5, + padding: 18, + view_mode: "Day", + date_format: "YYYY-MM-DD", + show_expected_progress: !1, + popup: null, + language: "en", + readonly: !1, + progress_readonly: !1, + dates_readonly: !1, + highlight_weekend: !0, + scroll_to: "start", + lines: "both", + auto_move_label: !0, + today_button: !0, + view_mode_select: !1 +}; +class B { + constructor(t, e, s) { + this.setup_wrapper(t), this.setup_options(s), this.setup_tasks(e), this.change_view_mode(), this.bind_events(); + } + setup_wrapper(t) { + let e, s; + if (typeof t == "string" && (t = document.querySelector(t)), t instanceof HTMLElement) + s = t, e = t.querySelector("svg"); + else if (t instanceof SVGElement) + e = t; + else + throw new TypeError( + "Frappe Gantt only supports usage of a string CSS selector, HTML DOM element or SVG DOM element for the 'element' parameter" + ); + e ? (this.$svg = e, this.$svg.classList.add("gantt")) : this.$svg = c("svg", { + append_to: s, + class: "gantt" + }), this.$container = document.createElement("div"), this.$container.classList.add("gantt-container"), this.$svg.parentElement.appendChild(this.$container), this.$container.appendChild(this.$svg), this.$popup_wrapper = document.createElement("div"), this.$popup_wrapper.classList.add("popup-wrapper"), this.$container.appendChild(this.$popup_wrapper); + } + setup_options(t) { + this.options = { ...I, ...t }, t.view_mode_padding || (t.view_mode_padding = {}); + for (let [e, s] of Object.entries(t.view_mode_padding)) + typeof s == "string" && (t.view_mode_padding[e] = [s, s]); + this.options.view_mode_padding = { + ...R, + ...t.view_mode_padding + }; + } + setup_tasks(t) { + this.tasks = t.map((e, s) => { + if (e._start = h.parse(e.start), e.end === void 0 && e.duration !== void 0 && (e.end = e._start, e.duration.split(" ").forEach((a) => { + let { duration: d, scale: p } = h.parse_duration(a); + e.end = h.add(e.end, d, p); + })), e._end = h.parse(e.end), h.diff(e._end, e._start, "year") < 0) + throw Error( + "start of task can't be after end of task: in task #, " + (s + 1) ); + if (h.diff(e._end, e._start, "year") > 10 && (e.end = null), e._index = s, !e.start && !e.end) { + const o = h.today(); + e._start = o, e._end = h.add(o, 2, "day"); } - - // svg element - if (!svg_element) { - // create it - this.$svg = createSVG("svg", { - append_to: wrapper_element, - class: "gantt", - }); - } else { - this.$svg = svg_element; - this.$svg.classList.add("gantt"); + if (!e.start && e.end && (e._start = h.add(e._end, -2, "day")), e.start && !e.end && (e._end = h.add(e._start, 2, "day")), h.get_date_values(e._end).slice(3).every((o) => o === 0) && (e._end = h.add(e._end, 24, "hour")), (!e.start || !e.end) && (e.invalid = !0), typeof e.dependencies == "string" || !e.dependencies) { + let o = []; + e.dependencies && (o = e.dependencies.split(",").map((a) => a.trim().replaceAll(" ", "_")).filter((a) => a)), e.dependencies = o; } - - // wrapper element - this.$container = document.createElement("div"); - this.$container.classList.add("gantt-container"); - - const parent_element = this.$svg.parentElement; - parent_element.appendChild(this.$container); - this.$container.appendChild(this.$svg); - - // popup wrapper - this.$popup_wrapper = document.createElement("div"); - this.$popup_wrapper.classList.add("popup-wrapper"); - this.$container.appendChild(this.$popup_wrapper); - } - - setup_options(options) { - this.options = { ...DEFAULT_OPTIONS, ...options }; - if (!options.view_mode_padding) options.view_mode_padding = {}; - for (let [key, value] of Object.entries(options.view_mode_padding)) { - if (typeof value === "string") { - // Configure for single value given - options.view_mode_padding[key] = [value, value]; - } - } - - this.options.view_mode_padding = { - ...VIEW_MODE_PADDING, - ...options.view_mode_padding, - }; - } - - setup_tasks(tasks) { - // prepare tasks - this.tasks = tasks.map((task, i) => { - // convert to Date objects - task._start = date_utils.parse(task.start); - if (task.end === undefined && task.duration !== undefined) { - task.end = task._start; - let durations = task.duration.split(" "); - - durations.forEach((tmpDuration) => { - let { duration, scale } = date_utils.parse_duration(tmpDuration); - task.end = date_utils.add(task.end, duration, scale); - }); - } - task._end = date_utils.parse(task.end); - let diff = date_utils.diff(task._end, task._start, "year"); - if (diff < 0) { - throw Error("start of task can't be after end of task: in task #, " + (i + 1)) - } - // make task invalid if duration too large - if (date_utils.diff(task._end, task._start, "year") > 10) { - task.end = null; - } - - - // cache index - task._index = i; - - // invalid dates - if (!task.start && !task.end) { - const today = date_utils.today(); - task._start = today; - task._end = date_utils.add(today, 2, "day"); - } - - if (!task.start && task.end) { - task._start = date_utils.add(task._end, -2, "day"); - } - - if (task.start && !task.end) { - task._end = date_utils.add(task._start, 2, "day"); - } - - // if hours is not set, assume the last day is full day - // e.g: 2018-09-09 becomes 2018-09-09 23:59:59 - const task_end_values = date_utils.get_date_values(task._end); - if (task_end_values.slice(3).every((d) => d === 0)) { - task._end = date_utils.add(task._end, 24, "hour"); - } - - // invalid flag - if (!task.start || !task.end) { - task.invalid = true; - } - - // dependencies - if (typeof task.dependencies === "string" || !task.dependencies) { - let deps = []; - if (task.dependencies) { - deps = task.dependencies - .split(",") - .map((d) => d.trim().replaceAll(' ', '_')) - .filter((d) => d); - } - task.dependencies = deps; - } - - // uids - if (!task.id) { - task.id = generate_id(task); - } else if (typeof task.id === 'string') { - task.id = task.id.replaceAll(' ', '_'); - } else { - task.id = `${task.id}`; - } - - return task; + return e.id ? typeof e.id == "string" ? e.id = e.id.replaceAll(" ", "_") : e.id = `${e.id}` : e.id = z(e), e; + }), this.setup_dependencies(); + } + setup_dependencies() { + this.dependency_map = {}; + for (let t of this.tasks) + for (let e of t.dependencies) + this.dependency_map[e] = this.dependency_map[e] || [], this.dependency_map[e].push(t.id); + } + refresh(t) { + this.setup_tasks(t), this.change_view_mode(); + } + change_view_mode(t = this.options.view_mode) { + this.update_view_scale(t), this.setup_dates(), this.render(), this.trigger_event("view_change", [t]); + } + update_view_scale(t) { + this.options.view_mode = t, t === l.HOUR ? (this.options.step = 24 / 24, this.options.column_width = 38) : t === l.DAY ? (this.options.step = 24, this.options.column_width = 38) : t === l.HALF_DAY ? (this.options.step = 24 / 2, this.options.column_width = 38) : t === l.QUARTER_DAY ? (this.options.step = 24 / 4, this.options.column_width = 38) : t === l.WEEK ? (this.options.step = 24 * 7, this.options.column_width = 140) : t === l.MONTH ? (this.options.step = 24 * 30, this.options.column_width = 120) : t === l.YEAR && (this.options.step = 24 * 365, this.options.column_width = 120); + } + setup_dates() { + this.setup_gantt_dates(), this.setup_date_values(); + } + setup_gantt_dates() { + this.gantt_start = this.gantt_end = null; + for (let a of this.tasks) + (!this.gantt_start || a._start < this.gantt_start) && (this.gantt_start = a._start), (!this.gantt_end || a._end > this.gantt_end) && (this.gantt_end = a._end); + let t, e; + this.gantt_start ? t = h.start_of(this.gantt_start, "day") : t = /* @__PURE__ */ new Date(), this.gantt_end ? e = h.start_of(this.gantt_end, "day") : e = /* @__PURE__ */ new Date(); + let s; + for (let [a, d] of Object.entries(l)) + d === this.options.view_mode && (s = a); + const [i, r] = this.options.view_mode_padding[s].map(h.parse_duration); + t = h.add( + t, + -i.duration, + i.scale + ); + let o; + this.view_is(l.YEAR) ? o = "YYYY" : this.view_is(l.MONTH) ? o = "YYYY-MM" : this.view_is(l.DAY) ? o = "YYYY-MM-DD" : o = "YYYY-MM-DD HH", this.gantt_start = h.parse( + h.format(t, o) + ), this.gantt_start.setHours(0, 0, 0, 0), this.gantt_end = h.add( + e, + r.duration, + r.scale + ); + } + setup_date_values() { + this.dates = []; + let t = null; + for (; t === null || t < this.gantt_end; ) + t ? this.view_is(l.YEAR) ? t = h.add(t, 1, "year") : this.view_is(l.MONTH) ? t = h.add(t, 1, "month") : t = h.add( + t, + this.options.step, + "hour" + ) : t = h.clone(this.gantt_start), this.dates.push(t); + } + bind_events() { + this.options.readonly || (this.bind_grid_click(), this.bind_bar_events()); + } + render() { + this.clear(), this.setup_layers(), this.make_grid(), this.make_dates(), this.make_bars(), this.make_grid_extras(), this.make_arrows(), this.map_arrows_on_bars(), this.set_width(), this.set_scroll_position(this.options.scroll_to), this.update_button_position(); + } + setup_layers() { + this.layers = {}; + const t = ["grid", "arrow", "progress", "bar", "details"]; + for (let e of t) + this.layers[e] = c("g", { + class: e, + append_to: this.$svg }); - - this.setup_dependencies(); - } - - setup_dependencies() { - this.dependency_map = {}; - for (let t of this.tasks) { - for (let d of t.dependencies) { - this.dependency_map[d] = this.dependency_map[d] || []; - this.dependency_map[d].push(t.id); - } - } - } - - refresh(tasks) { - this.setup_tasks(tasks); - this.change_view_mode(); - } - - change_view_mode(mode = this.options.view_mode) { - this.update_view_scale(mode); - this.setup_dates(); - this.render(); - // fire viewmode_change event - this.trigger_event("view_change", [mode]); - } - - update_view_scale(view_mode) { - this.options.view_mode = view_mode; - if (view_mode === VIEW_MODE.HOUR) { - this.options.step = 24 / 24; - this.options.column_width = 38; - } else if (view_mode === VIEW_MODE.DAY) { - this.options.step = 24; - this.options.column_width = 38; - } else if (view_mode === VIEW_MODE.HALF_DAY) { - this.options.step = 24 / 2; - this.options.column_width = 38; - } else if (view_mode === VIEW_MODE.QUARTER_DAY) { - this.options.step = 24 / 4; - this.options.column_width = 38; - } else if (view_mode === VIEW_MODE.WEEK) { - this.options.step = 24 * 7; - this.options.column_width = 140; - } else if (view_mode === VIEW_MODE.MONTH) { - this.options.step = 24 * 30; - this.options.column_width = 120; - } else if (view_mode === VIEW_MODE.YEAR) { - this.options.step = 24 * 365; - this.options.column_width = 120; - } - } - - setup_dates() { - this.setup_gantt_dates(); - this.setup_date_values(); - } - - setup_gantt_dates() { - this.gantt_start = this.gantt_end = null; - - for (let task of this.tasks) { - // set global start and end date - if (!this.gantt_start || task._start < this.gantt_start) { - this.gantt_start = task._start; - } - if (!this.gantt_end || task._end > this.gantt_end) { - this.gantt_end = task._end; - } - } - let gantt_start, gantt_end; - if (!this.gantt_start) gantt_start = new Date(); - else gantt_start = date_utils.start_of(this.gantt_start, "day"); - if (!this.gantt_end) gantt_end = new Date(); - else gantt_end = date_utils.start_of(this.gantt_end, "day"); - - // add date padding on both sides - let viewKey; - for (let [key, value] of Object.entries(VIEW_MODE)) { - if (value === this.options.view_mode) { - viewKey = key; - } - } - const [padding_start, padding_end] = this.options.view_mode_padding[ - viewKey - ].map(date_utils.parse_duration); - gantt_start = date_utils.add( - gantt_start, - -padding_start.duration, - padding_start.scale, - ); - - let format_string; - if (this.view_is(VIEW_MODE.YEAR)) { - format_string = "YYYY"; - } else if (this.view_is(VIEW_MODE.MONTH)) { - format_string = "YYYY-MM"; - } else if (this.view_is(VIEW_MODE.DAY)) { - format_string = "YYYY-MM-DD"; - } else { - format_string = "YYYY-MM-DD HH"; - } - this.gantt_start = date_utils.parse(date_utils.format(gantt_start, format_string)); - this.gantt_start.setHours(0, 0, 0, 0); - this.gantt_end = date_utils.add( - gantt_end, - padding_end.duration, - padding_end.scale, - ); - } - - setup_date_values() { - this.dates = []; - let cur_date = null; - - while (cur_date === null || cur_date < this.gantt_end) { - if (!cur_date) { - cur_date = date_utils.clone(this.gantt_start); - } else { - if (this.view_is(VIEW_MODE.YEAR)) { - cur_date = date_utils.add(cur_date, 1, "year"); - } else if (this.view_is(VIEW_MODE.MONTH)) { - cur_date = date_utils.add(cur_date, 1, "month"); - } else { - cur_date = date_utils.add(cur_date, this.options.step, "hour"); - } - } - this.dates.push(cur_date); - } - } - - bind_events() { - if (this.options.readonly) return - this.bind_grid_click(); - this.bind_bar_events(); - } - - render() { - this.clear(); - this.setup_layers(); - this.make_grid(); - this.make_dates(); - this.make_bars(); - this.make_grid_extras(); - this.make_arrows(); - this.map_arrows_on_bars(); - this.set_width(); - this.set_scroll_position(this.options.scroll_to); - } - - setup_layers() { - this.layers = {}; - const layers = ["grid", "arrow", "progress", "bar", "details"]; - // make group layers - for (let layer of layers) { - this.layers[layer] = createSVG("g", { - class: layer, - append_to: this.$svg, - }); - } - } - - make_grid() { - this.make_grid_background(); - this.make_grid_rows(); - this.make_grid_header(); - } - - make_grid_extras() { - this.make_grid_highlights(); - this.make_grid_ticks(); - } - - make_grid_background() { - const grid_width = this.dates.length * this.options.column_width; - const grid_height = - this.options.header_height + - this.options.padding + - (this.options.bar_height + this.options.padding) * this.tasks.length; - - createSVG("rect", { + } + make_grid() { + this.make_grid_background(), this.make_grid_rows(), this.make_grid_header(); + } + make_grid_extras() { + this.make_grid_highlights(), this.make_grid_ticks(); + } + make_grid_background() { + const t = this.dates.length * this.options.column_width, e = this.options.header_height + this.options.padding + (this.options.bar_height + this.options.padding) * this.tasks.length; + c("rect", { + x: 0, + y: 0, + width: t, + height: e, + class: "grid-background", + append_to: this.$svg + }), _.attr(this.$svg, { + height: e + this.options.padding + 100, + width: "100%" + }); + } + make_grid_rows() { + const t = c("g", { append_to: this.layers.grid }), e = this.dates.length * this.options.column_width, s = this.options.bar_height + this.options.padding; + let i = this.options.header_height + this.options.padding / 2; + for (let r of this.tasks) + c("rect", { x: 0, - y: 0, - width: grid_width, - height: grid_height, - class: "grid-background", - append_to: this.$svg, - }); - - $.attr(this.$svg, { - height: grid_height + this.options.padding + 100, - width: "100%", - }); - } - - make_grid_rows() { - const rows_layer = createSVG("g", { append_to: this.layers.grid }); - - const row_width = this.dates.length * this.options.column_width; - const row_height = this.options.bar_height + this.options.padding; - - let row_y = this.options.header_height + this.options.padding / 2; - - for (let _ of this.tasks) { - createSVG("rect", { - x: 0, - y: row_y, - width: row_width, - height: row_height, - class: "grid-row", - append_to: rows_layer, - }); - if (this.options.lines === 'both' || this.options.lines === 'horizontal') ; - - row_y += this.options.bar_height + this.options.padding; + y: i, + width: e, + height: s, + class: "grid-row", + append_to: t + }), this.options.lines === "both" || this.options.lines, i += this.options.bar_height + this.options.padding; + } + make_grid_header() { + let t = document.createElement("div"); + t.style.height = this.options.header_height + 10 + "px", t.style.width = this.dates.length * this.options.column_width + "px", t.classList.add("grid-header"), this.$header = t, this.$container.appendChild(t); + let e = document.createElement("div"); + e.classList.add("upper-header"), this.$upper_header = e, this.$header.appendChild(e); + let s = document.createElement("div"); + s.classList.add("lower-header"), this.$lower_header = s, this.$header.appendChild(s), this.make_side_header(); + } + make_side_header() { + let t = document.createElement("div"); + if (t.classList.add("side-header"), this.options.view_mode_select) { + const e = document.createElement("select"); + e.classList.add("viewmode-select"); + const s = document.createElement("option"); + s.selected = !0, s.disabled = !0, s.textContent = "Mode", e.appendChild(s); + for (const i in l) { + const r = document.createElement("option"); + r.value = l[i], r.textContent = l[i], e.appendChild(r); } + e.addEventListener( + "change", + (function() { + this.change_view_mode(e.value); + }).bind(this) + ), t.appendChild(e); } - - make_grid_header() { - document.querySelector('.grid-header'); - - let $header = document.createElement("div"); - $header.style.height = this.options.header_height + 10 + "px"; - $header.style.width = this.dates.length * this.options.column_width + "px"; - $header.classList.add('grid-header'); - this.$header = $header; - this.$container.appendChild($header); - - let $upper_header = document.createElement("div"); - $upper_header.classList.add('upper-header'); - this.$upper_header = $upper_header; - this.$header.appendChild($upper_header); - - let $lower_header = document.createElement("div"); - $lower_header.classList.add('lower-header'); - this.$lower_header = $lower_header; - this.$header.appendChild($lower_header); - - this.make_side_header(); + if (this.options.today_button) { + let e = document.createElement("button"); + e.classList.add("today-button"), e.textContent = "Today", e.onclick = this.scroll_today.bind(this), t.appendChild(e), this.$today_button = e; } - - make_side_header() { - let $side_header = document.createElement('div'); - $side_header.classList.add('side-header'); - - // Create view mode change select - if (this.options.view_mode_select) { - - const $select = document.createElement("select"); - $select.classList.add('viewmode-select'); - - const $el = document.createElement("option"); - $el.selected = true; - $el.disabled = true; - $el.textContent = 'Mode'; - $select.appendChild($el); - - for (const key in VIEW_MODE) { - const $option = document.createElement("option"); - $option.value = VIEW_MODE[key]; - $option.textContent = VIEW_MODE[key]; - $select.appendChild($option); - } - // $select.value = this.options.view_mode - $select.addEventListener("change", (function () { - this.change_view_mode($select.value); - }).bind(this)); - $side_header.appendChild($select); + this.$header.appendChild(t), this.$side_header = t, window.addEventListener("scroll", this.update_button_position.bind(this)), window.addEventListener("resize", this.update_button_position.bind(this)); + } + update_button_position() { + const t = this.$container.getBoundingClientRect(), e = this.$side_header.getBoundingClientRect(), { left: s, y: i } = this.$header.getBoundingClientRect(); + console.log("heyy"), e.top < t.top || e.bottom > t.bottom ? (this.$side_header.style.position = "absolute", this.$side_header.style.top = `${t.scrollTop + e.top}px`) : (this.$side_header.style.position = "fixed", this.$side_header.style.top = i + 10 + "px"); + const r = Math.min( + this.$header.clientWidth, + this.$container.clientWidth + ); + this.$side_header.style.left = s + this.$container.scrollLeft + r - this.$side_header.clientWidth + "px", this.$today_button.style.left = `${t.left + 20}px`; + } + make_grid_ticks() { + if (!["both", "vertical", "horizontal"].includes(this.options.lines)) + return; + let t = 0, e = this.options.header_height + this.options.padding / 2, s = (this.options.bar_height + this.options.padding) * this.tasks.length, i = c("g", { + class: "lines_layer", + append_to: this.layers.grid + }), r = this.options.header_height + this.options.padding / 2; + const o = this.dates.length * this.options.column_width, a = this.options.bar_height + this.options.padding; + if (this.options.lines !== "vertical") + for (let d of this.tasks) + c("line", { + x1: 0, + y1: r + a, + x2: o, + y2: r + a, + class: "row-line", + append_to: i + }), r += a; + if (this.options.lines !== "horizontal") + for (let d of this.dates) { + let p = "tick"; + this.view_is(l.DAY) && d.getDate() === 1 && (p += " thick"), this.view_is(l.WEEK) && d.getDate() >= 1 && d.getDate() < 8 && (p += " thick"), this.view_is(l.MONTH) && d.getMonth() % 3 === 0 && (p += " thick"), c("path", { + d: `M ${t} ${e} v ${s}`, + class: p, + append_to: this.layers.grid + }), this.view_is(l.MONTH) ? t += h.get_days_in_month(d) * this.options.column_width / 30 : t += this.options.column_width; } - - // Create today button - if (this.options.today_button) { - let $today_button = document.createElement('button'); - $today_button.classList.add('today-button'); - $today_button.textContent = 'Today'; - $today_button.onclick = this.scroll_today.bind(this); - $side_header.appendChild($today_button); - } - - this.$header.appendChild($side_header); - const { left, y } = this.$header.getBoundingClientRect(); - const width = Math.min(this.$header.clientWidth, this.$container.clientWidth); - $side_header.style.left = left + this.$container.scrollLeft + width - $side_header.clientWidth + 'px'; - $side_header.style.top = y + 10 + 'px'; - } - - make_grid_ticks() { - if (!['both', 'vertical', 'horizontal'].includes(this.options.lines)) return - let tick_x = 0; - let tick_y = this.options.header_height + this.options.padding / 2; - let tick_height = - (this.options.bar_height + this.options.padding) * this.tasks.length; - - let $lines_layer = createSVG("g", { class: 'lines_layer', append_to: this.layers.grid }); - - - let row_y = this.options.header_height + this.options.padding / 2; - - const row_width = this.dates.length * this.options.column_width; - const row_height = this.options.bar_height + this.options.padding; - if (this.options.lines !== 'vertical') { - for (let _ of this.tasks) { - createSVG("line", { - x1: 0, - y1: row_y + row_height, - x2: row_width, - y2: row_y + row_height, - class: "row-line", - append_to: $lines_layer, - }); - row_y += row_height; - } - } - if (this.options.lines === 'horizontal') return; - for (let date of this.dates) { - let tick_class = "tick"; - // thick tick for monday - if (this.view_is(VIEW_MODE.DAY) && date.getDate() === 1) { - tick_class += " thick"; - } - // thick tick for first week - if ( - this.view_is(VIEW_MODE.WEEK) && - date.getDate() >= 1 && - date.getDate() < 8 - ) { - tick_class += " thick"; - } - // thick ticks for quarters - if (this.view_is(VIEW_MODE.MONTH) && date.getMonth() % 3 === 0) { - tick_class += " thick"; - } - - createSVG("path", { - d: `M ${tick_x} ${tick_y} v ${tick_height}`, - class: tick_class, - append_to: this.layers.grid, - }); - - if (this.view_is(VIEW_MODE.MONTH)) { - tick_x += - (date_utils.get_days_in_month(date) * this.options.column_width) / 30; - } else { - tick_x += this.options.column_width; - } - } - } - - highlightWeekends() { - if (!this.view_is('Day') && !this.view_is('Half Day')) return - for (let d = new Date(this.gantt_start); d <= this.gantt_end; d.setDate(d.getDate() + 1)) { - if (d.getDay() === 0 || d.getDay() === 6) { - const x = (date_utils.diff(d, this.gantt_start, 'hour') / - this.options.step) * - this.options.column_width; - const height = (this.options.bar_height + this.options.padding) * this.tasks.length; - createSVG('rect', { - x, + } + highlightWeekends() { + if (!(!this.view_is("Day") && !this.view_is("Half Day"))) { + for (let t = new Date(this.gantt_start); t <= this.gantt_end; t.setDate(t.getDate() + 1)) + if (t.getDay() === 0 || t.getDay() === 6) { + const e = h.diff(t, this.gantt_start, "hour") / this.options.step * this.options.column_width, s = (this.options.bar_height + this.options.padding) * this.tasks.length; + c("rect", { + x: e, y: this.options.header_height + this.options.padding / 2, - width: (this.view_is('Day') ? 1 : 2) * this.options.column_width, - height, - class: 'holiday-highlight', - append_to: this.layers.grid, + width: (this.view_is("Day") ? 1 : 2) * this.options.column_width, + height: s, + class: "holiday-highlight", + append_to: this.layers.grid }); } - } } - - //compute the horizontal x distance - computeGridHighlightDimensions(view_mode) { - let x = this.options.column_width / 2; - - if (this.view_is(VIEW_MODE.DAY)) { - let today = date_utils.today(); - return { - x: x + - (date_utils.diff(today, this.gantt_start, "hour") / this.options.step) * - this.options.column_width, - date: today - } - } - - for (let date of this.dates) { - const todayDate = new Date(); - const startDate = new Date(date); - const endDate = new Date(date); - switch (view_mode) { - case VIEW_MODE.WEEK: - endDate.setDate(date.getDate() + 7); - break; - case VIEW_MODE.MONTH: - endDate.setMonth(date.getMonth() + 1); - break; - case VIEW_MODE.YEAR: - endDate.setFullYear(date.getFullYear() + 1); - break; - } - if (todayDate >= startDate && todayDate <= endDate) { - return { x, date: startDate } - } else { - x += this.options.column_width; - } - } - } - - make_grid_highlights() { - if (this.options.highlight_weekend) this.highlightWeekends(); - // highlight today's | week's | month's | year's - if ( - this.view_is(VIEW_MODE.DAY) || - this.view_is(VIEW_MODE.WEEK) || - this.view_is(VIEW_MODE.MONTH) || - this.view_is(VIEW_MODE.YEAR) - ) { - // Used as we must find the _end_ of session if view is not Day - const { x: left, date } = this.computeGridHighlightDimensions(this.options.view_mode); - const top = this.options.header_height + this.options.padding / 2; - const height = (this.options.bar_height + this.options.padding) * this.tasks.length; - this.$current_highlight = this.create_el({ top, left, height, classes: 'current-highlight', append_to: this.$container }); - let $today = document.getElementById(date_utils.format(date).replaceAll(' ', '_')); - - $today.classList.add('current-date-highlight'); - $today.style.top = +$today.style.top.slice(0, -2) - 4 + 'px'; - $today.style.left = +$today.style.left.slice(0, -2) - 8 + 'px'; - } - } - - create_el({ left, top, width, height, id, classes, append_to }) { - let $el = document.createElement("div"); - $el.classList.add(classes); - $el.style.top = top + 'px'; - $el.style.left = left + 'px'; - if (id) $el.id = id; - if (width) $el.style.width = height + 'px'; - if (height) $el.style.height = height + 'px'; - append_to.appendChild($el); - return $el - } - - make_dates() { - this.upper_texts_x = {}; - this.get_dates_to_draw().forEach((date, i) => { - let $lower_text = this.create_el({ - left: date.lower_x, - top: date.lower_y, - id: date.formatted_date, - classes: 'lower-text', - append_to: this.$lower_header - }); - $lower_text.innerText = date.lower_text; - $lower_text.style.left = +$lower_text.style.left.slice(0, -2) - $lower_text.clientWidth / 2 + 'px'; - - if (date.upper_text) { - this.upper_texts_x[date.upper_text] = date.upper_x; - let $upper_text = document.createElement('div'); - $upper_text.classList.add('upper-text'); - $upper_text.style.left = date.upper_x + 'px'; - $upper_text.style.top = date.upper_y + 'px'; - $upper_text.innerText = date.upper_text; - this.$upper_header.appendChild($upper_text); - - // remove out-of-bound dates - if (date.upper_x > this.layers.grid.getBBox().width) { - $upper_text.remove(); - } - } - }); - } - - get_dates_to_draw() { - let last_date = null; - const dates = this.dates.map((date, i) => { - const d = this.get_date_info(date, last_date, i); - last_date = d; - return d; - }); - return dates; - } - - get_date_info(date, last_date_info) { - let last_date = last_date_info ? last_date_info.date : date_utils.add(date, 1, "day"); - const date_text = { - Hour_lower: date_utils.format(date, "HH", this.options.language), - "Quarter Day_lower": date_utils.format(date, "HH", this.options.language), - "Half Day_lower": date_utils.format(date, "HH", this.options.language), - Day_lower: - date.getDate() !== last_date.getDate() - ? date_utils.format(date, "D", this.options.language) - : "", - Week_lower: - date.getMonth() !== last_date.getMonth() - ? date_utils.format(date, "D MMM", this.options.language) - : date_utils.format(date, "D", this.options.language), - Month_lower: date_utils.format(date, "MMMM", this.options.language), - Year_lower: date_utils.format(date, "YYYY", this.options.language), - Hour_upper: - date.getDate() !== last_date.getDate() - ? date_utils.format(date, "D MMMM", this.options.language) - : "", - "Quarter Day_upper": - date.getDate() !== last_date.getDate() - ? date_utils.format(date, "D MMM", this.options.language) - : "", - "Half Day_upper": - date.getDate() !== last_date.getDate() - ? date.getMonth() !== last_date.getMonth() - ? date_utils.format(date, "D MMM", this.options.language) - : date_utils.format(date, "D", this.options.language) - : "", - Day_upper: - date.getMonth() !== last_date.getMonth() || !last_date_info - ? date_utils.format(date, "MMMM", this.options.language) - : "", - Week_upper: - date.getMonth() !== last_date.getMonth() - ? date_utils.format(date, "MMMM", this.options.language) - : "", - Month_upper: - date.getFullYear() !== last_date.getFullYear() - ? date_utils.format(date, "YYYY", this.options.language) - : "", - Year_upper: - date.getFullYear() !== last_date.getFullYear() - ? date_utils.format(date, "YYYY", this.options.language) - : "", - }; - let column_width = this.view_is(VIEW_MODE.MONTH) ? (date_utils.get_days_in_month(date) * this.options.column_width) / 30 : this.options.column_width; - const base_pos = { - x: last_date_info - ? last_date_info.base_pos_x + last_date_info.column_width - : 0, - lower_y: this.options.header_height - 20, - upper_y: this.options.header_height - 50, - }; - const x_pos = { - Hour_lower: column_width / 2, - Hour_upper: column_width * 12, - "Quarter Day_lower": column_width / 2, - "Quarter Day_upper": column_width * 2, - "Half Day_lower": column_width / 2, - "Half Day_upper": column_width, - Day_lower: column_width / 2, - Day_upper: column_width / 2, - Week_lower: column_width / 2, - Week_upper: (column_width * 4) / 2, - Month_lower: column_width / 2, - Month_upper: column_width / 2, - Year_lower: column_width / 2, - Year_upper: (column_width * 30) / 2, - }; + } + //compute the horizontal x distance + computeGridHighlightDimensions(t) { + let e = this.options.column_width / 2; + if (this.view_is(l.DAY)) { + let s = h.today(); return { - date, - formatted_date: date_utils.format(date).replaceAll(' ', '_'), - column_width, - base_pos_x: base_pos.x, - upper_text: this.options.lower_text ? this.options.upper_text(date, this.options.view_mode, date_text[`${this.options.view_mode}_upper`]) : date_text[`${this.options.view_mode}_upper`], - lower_text: this.options.lower_text ? this.options.lower_text(date, this.options.view_mode, date_text[`${this.options.view_mode}_lower`]) : date_text[`${this.options.view_mode}_lower`], - upper_x: base_pos.x + x_pos[`${this.options.view_mode}_upper`], - upper_y: base_pos.upper_y, - lower_x: base_pos.x + x_pos[`${this.options.view_mode}_lower`], - lower_y: base_pos.lower_y, + x: e + h.diff(s, this.gantt_start, "hour") / this.options.step * this.options.column_width, + date: s }; } - - make_bars() { - this.bars = this.tasks.map((task) => { - const bar = new Bar(this, task); - this.layers.bar.appendChild(bar.group); - return bar; + for (let s of this.dates) { + const i = /* @__PURE__ */ new Date(), r = new Date(s), o = new Date(s); + switch (t) { + case l.WEEK: + o.setDate(s.getDate() + 7); + break; + case l.MONTH: + o.setMonth(s.getMonth() + 1); + break; + case l.YEAR: + o.setFullYear(s.getFullYear() + 1); + break; + } + if (i >= r && i <= o) + return { x: e, date: r }; + e += this.options.column_width; + } + } + make_grid_highlights() { + if (this.options.highlight_weekend && this.highlightWeekends(), this.view_is(l.DAY) || this.view_is(l.WEEK) || this.view_is(l.MONTH) || this.view_is(l.YEAR)) { + const { x: t, date: e } = this.computeGridHighlightDimensions(this.options.view_mode); + if (!this.dates.find((o) => o.getTime() == e.getTime())) return; + const s = this.options.header_height + this.options.padding / 2, i = (this.options.bar_height + this.options.padding) * this.tasks.length; + this.$current_highlight = this.create_el({ top: s, left: t, height: i, classes: "current-highlight", append_to: this.$container }); + let r = document.getElementById(h.format(e).replaceAll(" ", "_")); + r && (r.classList.add("current-date-highlight"), r.style.top = +r.style.top.slice(0, -2) - 4 + "px", r.style.left = +r.style.left.slice(0, -2) - 8 + "px"); + } + } + create_el({ left: t, top: e, width: s, height: i, id: r, classes: o, append_to: a }) { + let d = document.createElement("div"); + return d.classList.add(o), d.style.top = e + "px", d.style.left = t + "px", r && (d.id = r), s && (d.style.width = i + "px"), i && (d.style.height = i + "px"), a.appendChild(d), d; + } + make_dates() { + this.upper_texts_x = {}, this.get_dates_to_draw().forEach((t, e) => { + let s = this.create_el({ + left: t.lower_x, + top: t.lower_y, + id: t.formatted_date, + classes: "lower-text", + append_to: this.$lower_header }); - } - - make_arrows() { - this.arrows = []; - for (let task of this.tasks) { - let arrows = []; - arrows = task.dependencies - .map((task_id) => { - const dependency = this.get_task(task_id); - if (!dependency) return; - const arrow = new Arrow( - this, - this.bars[dependency._index], // from_task - this.bars[task._index], // to_task - ); - this.layers.arrow.appendChild(arrow.element); - return arrow; - }) - .filter(Boolean); // filter falsy values - this.arrows = this.arrows.concat(arrows); + if (s.innerText = t.lower_text, s.style.left = +s.style.left.slice(0, -2) - s.clientWidth / 2 + "px", t.upper_text) { + this.upper_texts_x[t.upper_text] = t.upper_x; + let i = document.createElement("div"); + i.classList.add("upper-text"), i.style.left = t.upper_x + "px", i.style.top = t.upper_y + "px", i.innerText = t.upper_text, this.$upper_header.appendChild(i), t.upper_x > this.layers.grid.getBBox().width && i.remove(); } + }); + } + get_dates_to_draw() { + let t = null; + return this.dates.map((s, i) => { + const r = this.get_date_info(s, t, i); + return t = r, r; + }); + } + get_date_info(t, e) { + let s = e ? e.date : h.add(t, 1, "day"); + const i = { + Hour_lower: h.format(t, "HH", this.options.language), + "Quarter Day_lower": h.format( + t, + "HH", + this.options.language + ), + "Half Day_lower": h.format( + t, + "HH", + this.options.language + ), + Day_lower: t.getDate() !== s.getDate() ? h.format(t, "D", this.options.language) : "", + Week_lower: t.getMonth() !== s.getMonth() ? h.format(t, "D MMM", this.options.language) : h.format(t, "D", this.options.language), + Month_lower: h.format(t, "MMMM", this.options.language), + Year_lower: h.format(t, "YYYY", this.options.language), + Hour_upper: t.getDate() !== s.getDate() ? h.format(t, "D MMMM", this.options.language) : "", + "Quarter Day_upper": t.getDate() !== s.getDate() ? h.format(t, "D MMM", this.options.language) : "", + "Half Day_upper": t.getDate() !== s.getDate() ? t.getMonth() !== s.getMonth() ? h.format( + t, + "D MMM", + this.options.language + ) : h.format(t, "D", this.options.language) : "", + Day_upper: t.getMonth() !== s.getMonth() || !e ? h.format(t, "MMMM", this.options.language) : "", + Week_upper: t.getMonth() !== s.getMonth() ? h.format(t, "MMMM", this.options.language) : "", + Month_upper: t.getFullYear() !== s.getFullYear() ? h.format(t, "YYYY", this.options.language) : "", + Year_upper: t.getFullYear() !== s.getFullYear() ? h.format(t, "YYYY", this.options.language) : "" + }; + let r = this.view_is(l.MONTH) ? h.get_days_in_month(t) * this.options.column_width / 30 : this.options.column_width; + const o = { + x: e ? e.base_pos_x + e.column_width : 0, + lower_y: this.options.header_height - 20, + upper_y: this.options.header_height - 50 + }, a = { + Hour_lower: r / 2, + Hour_upper: r * 12, + "Quarter Day_lower": r / 2, + "Quarter Day_upper": r * 2, + "Half Day_lower": r / 2, + "Half Day_upper": r, + Day_lower: r / 2, + Day_upper: r / 2, + Week_lower: r / 2, + Week_upper: r * 4 / 2, + Month_lower: r / 2, + Month_upper: r / 2, + Year_lower: r / 2, + Year_upper: r * 30 / 2 + }; + return { + date: t, + formatted_date: h.format(t).replaceAll(" ", "_"), + column_width: r, + base_pos_x: o.x, + upper_text: this.options.lower_text ? this.options.upper_text( + t, + this.options.view_mode, + i[`${this.options.view_mode}_upper`] + ) : i[`${this.options.view_mode}_upper`], + lower_text: this.options.lower_text ? this.options.lower_text( + t, + this.options.view_mode, + i[`${this.options.view_mode}_lower`] + ) : i[`${this.options.view_mode}_lower`], + upper_x: o.x + a[`${this.options.view_mode}_upper`], + upper_y: o.upper_y, + lower_x: o.x + a[`${this.options.view_mode}_lower`], + lower_y: o.lower_y + }; + } + make_bars() { + this.bars = this.tasks.map((t) => { + const e = new O(this, t); + return this.layers.bar.appendChild(e.group), e; + }); + } + make_arrows() { + this.arrows = []; + for (let t of this.tasks) { + let e = []; + e = t.dependencies.map((s) => { + const i = this.get_task(s); + if (!i) return; + const r = new C( + this, + this.bars[i._index], + // from_task + this.bars[t._index] + // to_task + ); + return this.layers.arrow.appendChild(r.element), r; + }).filter(Boolean), this.arrows = this.arrows.concat(e); } - - map_arrows_on_bars() { - for (let bar of this.bars) { - bar.arrows = this.arrows.filter((arrow) => { - return ( - arrow.from_task.task.id === bar.task.id || - arrow.to_task.task.id === bar.task.id - ); - }); + } + map_arrows_on_bars() { + for (let t of this.bars) + t.arrows = this.arrows.filter((e) => e.from_task.task.id === t.task.id || e.to_task.task.id === t.task.id); + } + set_width() { + const t = this.$svg.getBoundingClientRect().width, e = this.$svg.querySelector(".grid .grid-row") ? this.$svg.querySelector(".grid .grid-row").getAttribute("width") : 0; + t < e && this.$svg.setAttribute("width", e); + } + set_scroll_position(t) { + if (!t || t === "start") + t = this.gantt_start; + else { + if (t === "today") + return this.scroll_today(); + typeof t == "string" && (t = h.parse(t)); + } + const e = this.$svg.parentElement; + if (!e) return; + const i = (h.diff(t, this.gantt_start, "hour") + 24) / this.options.step * this.options.column_width - this.options.column_width; + e.scrollTo({ left: i, behavior: "smooth" }); + } + scroll_today() { + this.set_scroll_position(/* @__PURE__ */ new Date()); + } + bind_grid_click() { + _.on( + this.$svg, + "click", + ".grid-row, .grid-header", + () => { + this.unselect_all(), this.hide_popup(); } + ); + } + bind_bar_events() { + let t = !1, e = 0, s = 0, i = !1, r = !1, o = null, a = []; + this.bar_being_dragged = null; + function d() { + return t || i || r; } - - set_width() { - const cur_width = this.$svg.getBoundingClientRect().width; - const actual_width = this.$svg.querySelector('.grid .grid-row') ? this.$svg - .querySelector('.grid .grid-row') - .getAttribute('width') : 0; - if (cur_width < actual_width) { - this.$svg.setAttribute("width", actual_width); - } - } - - set_scroll_position(date) { - if (!date || date === 'start') { - date = this.gantt_start; - } else if (date === 'today') { - return this.scroll_today() - } else if (typeof date === 'string') { - date = date_utils.parse(date); - } - - const parent_element = this.$svg.parentElement; - if (!parent_element) return; - - const hours_before_first_task = date_utils.diff( - date, - this.gantt_start, - "hour", - ) + 24; - - const scroll_pos = - (hours_before_first_task / this.options.step) * - this.options.column_width - - this.options.column_width; - parent_element.scrollTo({ left: scroll_pos, behavior: 'smooth' }); - } - - scroll_today() { - this.set_scroll_position(new Date()); - } - - bind_grid_click() { - $.on( - this.$svg, - this.options.popup_trigger, - ".grid-row, .grid-header", - () => { - this.unselect_all(); - this.hide_popup(); - }, + this.$svg.onclick = (p) => { + p.target.classList.contains("grid-row") && this.unselect_all(); + }, _.on(this.$svg, "mousedown", ".bar-wrapper, .handle", (p, g) => { + const u = _.closest(".bar-wrapper", g); + a.forEach((w) => w.group.classList.remove("active")), g.classList.contains("left") ? i = !0 : g.classList.contains("right") ? r = !0 : g.classList.contains("bar-wrapper") && (t = !0), u.classList.add("active"), this.popup && this.popup.parent.classList.add("hidden"), this.popup && this.popup.parent.classList.add("hidden"), e = p.offsetX || p.layerX, p.offsetY || p.layerY, o = u.getAttribute("data-id"), a = [ + o, + ...this.get_all_dependent_tasks(o) + ].map((w) => this.get_bar(w)), this.bar_being_dragged = o, a.forEach((w) => { + const b = w.$bar; + b.ox = b.getX(), b.oy = b.getY(), b.owidth = b.getWidth(), b.finaldx = 0; + }); + }), _.on(this.$container, "scroll", (p) => { + let g = document.querySelectorAll(".bar-wrapper"), u = []; + const f = []; + let w; + s && (w = p.currentTarget.scrollLeft - s); + const b = p.currentTarget.scrollLeft / this.options.column_width * this.options.step / 24; + let y = "D MMM"; + ["Year", "Month"].includes(this.options.view_mode) ? y = "YYYY" : ["Day", "Week"].includes(this.options.view_mode) ? y = "MMMM" : this.view_is("Half Day") ? y = "D" : this.view_is("Hour") && (y = "D MMMM"); + let T = h.format( + h.add(this.gantt_start, b, "day"), + y ); - } - - bind_bar_events() { - let is_dragging = false; - let x_on_start = 0; - let x_on_scroll_start = 0; - let y_on_start = 0; - let is_resizing_left = false; - let is_resizing_right = false; - let parent_bar_id = null; - let bars = []; // instanceof Bar - this.bar_being_dragged = null; - - function action_in_progress() { - return is_dragging || is_resizing_left || is_resizing_right; + const x = Array.from( + document.querySelectorAll(".upper-text") + ).find( + (m) => m.textContent === T + ); + if (x && !x.classList.contains("current-upper")) { + const m = document.querySelector(".current-upper"); + m && (m.classList.remove("current-upper"), m.style.left = this.upper_texts_x[m.textContent] + "px", m.style.top = this.options.header_height - 50 + "px"), x.classList.add("current-upper"); + let k = this.$svg.getBoundingClientRect(); + x.style.left = k.x + this.$container.scrollLeft + 10 + "px", x.style.top = k.y + this.options.header_height - 50 + "px"; } - - $.on(this.$svg, "mousedown", ".bar-wrapper, .handle", (e, element) => { - const bar_wrapper = $.closest(".bar-wrapper", element); - bars.forEach((bar) => bar.group.classList.remove("active")); - - if (element.classList.contains("left")) { - is_resizing_left = true; - } else if (element.classList.contains("right")) { - is_resizing_right = true; - } else if (element.classList.contains("bar-wrapper")) { - is_dragging = true; - } - - bar_wrapper.classList.add("active"); - this.popup.parent.classList.add('hidden'); - - x_on_start = e.offsetX; - y_on_start = e.offsetY; - - parent_bar_id = bar_wrapper.getAttribute("data-id"); - const ids = [ - parent_bar_id, - ...this.get_all_dependent_tasks(parent_bar_id), - ]; - bars = ids.map((id) => this.get_bar(id)); - - this.bar_being_dragged = parent_bar_id; - - bars.forEach((bar) => { - const $bar = bar.$bar; - $bar.ox = $bar.getX(); - $bar.oy = $bar.getY(); - $bar.owidth = $bar.getWidth(); - $bar.finaldx = 0; + Array.prototype.forEach.call(g, function(m, k) { + f.push(m.getAttribute("data-id")); + }), w && (u = f.map((m) => this.get_bar(m)), this.options.auto_move_label && u.forEach((m) => { + m.update_label_position_on_horizontal_scroll({ + x: w, + sx: p.currentTarget.scrollLeft }); + })), s = p.currentTarget.scrollLeft; + }), _.on(this.$svg, "mousemove", (p) => { + if (!d()) return; + const g = (p.offsetX || p.layerX) - e; + a.forEach((u) => { + const f = u.$bar; + f.finaldx = this.get_snap_position(g), this.hide_popup(), i ? o === u.task.id ? u.update_bar_position({ + x: f.ox + f.finaldx, + width: f.owidth - f.finaldx + }) : u.update_bar_position({ + x: f.ox + f.finaldx + }) : r ? o === u.task.id && u.update_bar_position({ + width: f.owidth + f.finaldx + }) : t && !this.options.readonly && !this.options.dates_readonly && u.update_bar_position({ x: f.ox + f.finaldx }); }); - $.on(this.$container, 'scroll', e => { - let elements = document.querySelectorAll('.bar-wrapper'); - let localBars = []; - const ids = []; - let dx; - if (x_on_scroll_start) { - dx = e.currentTarget.scrollLeft - x_on_scroll_start; - } - - const daysSinceStart = e.currentTarget.scrollLeft / this.options.column_width * this.options.step / 24; - let format_str = "D MMM"; - if (["Year", "Month"].includes(this.options.view_mode)) format_str = 'YYYY'; - else if (["Day", "Week"].includes(this.options.view_mode)) format_str = 'MMMM'; - else if (this.view_is('Half Day')) format_str = 'D'; - else if (this.view_is('Hour')) format_str = "D MMMM"; - - - let currentUpper = date_utils.format( - date_utils.add(this.gantt_start, daysSinceStart, 'day'), - format_str - ); - const upperTexts = Array.from(document.querySelectorAll('.upper-text')); - const $el = upperTexts.find(el => el.textContent === currentUpper); - if ($el && !$el.classList.contains('current-upper')) { - const $current = document.querySelector('.current-upper'); - if ($current) { - $current.classList.remove('current-upper'); - $current.style.left = this.upper_texts_x[$current.textContent] + 'px'; - $current.style.top = this.options.header_height - 50 + 'px'; - } - - $el.classList.add('current-upper'); - let dimensions = this.$svg.getBoundingClientRect(); - $el.style.left = dimensions.x + this.$container.scrollLeft + 10 + 'px'; - $el.style.top = dimensions.y + this.options.header_height - 50 + 'px'; - } - - Array.prototype.forEach.call(elements, function (el, i) { - ids.push(el.getAttribute('data-id')); - }); - - if (dx) { - localBars = ids.map(id => this.get_bar(id)); - if (this.options.auto_move_label) { - localBars.forEach(bar => { - bar.update_label_position_on_horizontal_scroll({ x: dx, sx: e.currentTarget.scrollLeft }); - }); - } - } - - x_on_scroll_start = e.currentTarget.scrollLeft; + }), document.addEventListener("mouseup", (p) => { + t = !1, i = !1, r = !1; + }), _.on(this.$svg, "mouseup", (p) => { + this.bar_being_dragged = null, a.forEach((g) => { + g.$bar.finaldx && (g.date_changed(), g.set_action_completed()); }); - - $.on(this.$svg, "mousemove", (e) => { - if (!action_in_progress()) return; - const dx = e.offsetX - x_on_start; - e.offsetY - y_on_start; - - bars.forEach((bar) => { - const $bar = bar.$bar; - $bar.finaldx = this.get_snap_position(dx); - this.hide_popup(); - if (is_resizing_left) { - if (parent_bar_id === bar.task.id) { - bar.update_bar_position({ - x: $bar.ox + $bar.finaldx, - width: $bar.owidth - $bar.finaldx, - }); - } else { - bar.update_bar_position({ - x: $bar.ox + $bar.finaldx, - }); - } - } else if (is_resizing_right) { - if (parent_bar_id === bar.task.id) { - bar.update_bar_position({ - width: $bar.owidth + $bar.finaldx, - }); - } - } else if (is_dragging && !this.options.readonly) { - bar.update_bar_position({ x: $bar.ox + $bar.finaldx }); - } - }); - }); - - document.addEventListener("mouseup", (e) => { - - is_dragging = false; - is_resizing_left = false; - is_resizing_right = false; - }); - - $.on(this.$svg, "mouseup", (e) => { - this.bar_being_dragged = null; - bars.forEach((bar) => { - const $bar = bar.$bar; - if (!$bar.finaldx) return; - bar.date_changed(); - bar.set_action_completed(); - }); - }); - - this.bind_bar_progress(); - } - - bind_bar_progress() { - let x_on_start = 0; - let y_on_start = 0; - let is_resizing = null; - let bar = null; - let $bar_progress = null; - let $bar = null; - - $.on(this.$svg, "mousedown", ".handle.progress", (e, handle) => { - is_resizing = true; - x_on_start = e.offsetX; - y_on_start = e.offsetY; - - const $bar_wrapper = $.closest(".bar-wrapper", handle); - const id = $bar_wrapper.getAttribute("data-id"); - bar = this.get_bar(id); - - $bar_progress = bar.$bar_progress; - $bar = bar.$bar; - - $bar_progress.finaldx = 0; - $bar_progress.owidth = $bar_progress.getWidth(); - $bar_progress.min_dx = -$bar_progress.getWidth(); - $bar_progress.max_dx = $bar.getWidth() - $bar_progress.getWidth(); - }); - - $.on(this.$svg, "mousemove", (e) => { - if (!is_resizing) return; - let dx = e.offsetX - x_on_start; - e.offsetY - y_on_start; - - if (dx > $bar_progress.max_dx) { - dx = $bar_progress.max_dx; - } - if (dx < $bar_progress.min_dx) { - dx = $bar_progress.min_dx; - } - - const $handle = bar.$handle_progress; - $.attr($bar_progress, "width", $bar_progress.owidth + dx); - $.attr($handle, "points", bar.get_progress_polygon_points()); - $bar_progress.finaldx = dx; - }); - - $.on(this.$svg, "mouseup", () => { - is_resizing = false; - if (!($bar_progress && $bar_progress.finaldx)) return; - - $bar_progress.finaldx = 0; - bar.progress_changed(); - bar.set_action_completed(); - bar = null; - $bar_progress = null; - $bar = null; - }); - } - - get_all_dependent_tasks(task_id) { - let out = []; - let to_process = [task_id]; - while (to_process.length) { - const deps = to_process.reduce((acc, curr) => { - acc = acc.concat(this.dependency_map[curr]); - return acc; - }, []); - - out = out.concat(deps); - to_process = deps.filter((d) => !to_process.includes(d)); - } - - return out.filter(Boolean); - } - - get_snap_position(dx) { - let odx = dx, - rem, - position; - - if (this.view_is(VIEW_MODE.WEEK)) { - rem = dx % (this.options.column_width / 7); - position = - odx - - rem + - (rem < this.options.column_width / 14 - ? 0 - : this.options.column_width / 7); - } else if (this.view_is(VIEW_MODE.MONTH)) { - rem = dx % (this.options.column_width / 30); - position = - odx - - rem + - (rem < this.options.column_width / 60 - ? 0 - : this.options.column_width / 30); - } else { - rem = dx % this.options.column_width; - position = - odx - - rem + - (rem < this.options.column_width / 2 ? 0 : this.options.column_width); - } - return position; - } - - unselect_all() { - [...this.$svg.querySelectorAll(".bar-wrapper")].forEach((el) => { - el.classList.remove("active"); - }); - this.popup.parent.classList.remove('hidden'); - } - - view_is(modes) { - if (typeof modes === "string") { - return this.options.view_mode === modes; - } - - if (Array.isArray(modes)) { - return modes.some((mode) => this.options.view_mode === mode); - } - - return false; - } - - get_task(id) { - return this.tasks.find((task) => { - return task.id === id; - }); - } - - get_bar(id) { - return this.bars.find((bar) => { - return bar.task.id === id; - }); - } - - show_popup(options) { - if (this.options.popup === false) return - if (!this.popup) { - this.popup = new Popup( - this.$popup_wrapper, - this.options.popup, - ); - } - this.popup.show(options); - } - - hide_popup() { - this.popup && this.popup.hide(); - } - - trigger_event(event, args) { - if (this.options["on_" + event]) { - this.options["on_" + event].apply(null, args); - } - } - - /** - * Gets the oldest starting date from the list of tasks - * - * @returns Date - * @memberof Gantt - */ - get_oldest_starting_date() { - if (!this.tasks.length) return new Date() - return this.tasks - .map((task) => task._start) - .reduce((prev_date, cur_date) => - cur_date <= prev_date ? cur_date : prev_date, - ); - } - - /** - * Clear all elements from the parent svg element - * - * @memberof Gantt - */ - clear() { - this.$svg.innerHTML = ""; - this.$header?.remove?.(); - this.$current_highlight?.remove?.(); - this.popup?.hide?.(); - } + }), this.bind_bar_progress(); } - - Gantt.VIEW_MODE = VIEW_MODE; - - function generate_id(task) { - return task.name + "_" + Math.random().toString(36).slice(2, 12); + bind_bar_progress() { + let t = 0, e = null, s = null, i = null, r = null; + _.on(this.$svg, "mousedown", ".handle.progress", (o, a) => { + e = !0, t = o.offsetX || o.layerX, o.offsetY || o.layerY; + const p = _.closest(".bar-wrapper", a).getAttribute("data-id"); + s = this.get_bar(p), i = s.$bar_progress, r = s.$bar, i.finaldx = 0, i.owidth = i.getWidth(), i.min_dx = -i.getWidth(), i.max_dx = r.getWidth() - i.getWidth(); + }), _.on(this.$svg, "mousemove", (o) => { + if (!e) return; + let a = (o.offsetX || o.layerX) - t; + a > i.max_dx && (a = i.max_dx), a < i.min_dx && (a = i.min_dx); + const d = s.$handle_progress; + _.attr(i, "width", i.owidth + a), _.attr(d, "cx", i.getEndX()), i.finaldx = a; + }), _.on(this.$svg, "mouseup", () => { + e = !1, i && i.finaldx && (i.finaldx = 0, s.progress_changed(), s.set_action_completed(), s = null, i = null, r = null); + }); } - - return Gantt; - -})(); -//# sourceMappingURL=frappe-gantt.js.map + get_all_dependent_tasks(t) { + let e = [], s = [t]; + for (; s.length; ) { + const i = s.reduce((r, o) => (r = r.concat(this.dependency_map[o]), r), []); + e = e.concat(i), s = i.filter((r) => !s.includes(r)); + } + return e.filter(Boolean); + } + get_snap_position(t) { + let e = t, s, i; + return this.view_is(l.WEEK) ? (s = t % (this.options.column_width / 7), i = e - s + (s < this.options.column_width / 14 ? 0 : this.options.column_width / 7)) : this.view_is(l.MONTH) ? (s = t % (this.options.column_width / 30), i = e - s + (s < this.options.column_width / 60 ? 0 : this.options.column_width / 30)) : (s = t % this.options.column_width, i = e - s + (s < this.options.column_width / 2 ? 0 : this.options.column_width)), i; + } + unselect_all() { + [...this.$svg.querySelectorAll(".bar-wrapper")].forEach((t) => { + t.classList.remove("active"); + }), this.popup && this.popup.parent.classList.remove("hidden"); + } + view_is(t) { + return typeof t == "string" ? this.options.view_mode === t : Array.isArray(t) ? t.some((e) => this.options.view_mode === e) : !1; + } + get_task(t) { + return this.tasks.find((e) => e.id === t); + } + get_bar(t) { + return this.bars.find((e) => e.task.id === t); + } + show_popup(t) { + this.options.popup !== !1 && (this.popup || (this.popup = new N(this.$popup_wrapper, this.options.popup)), this.popup.show(t)); + } + hide_popup() { + this.popup && this.popup.hide(); + } + trigger_event(t, e) { + this.options["on_" + t] && this.options["on_" + t].apply(null, e); + } + /** + * Gets the oldest starting date from the list of tasks + * + * @returns Date + * @memberof Gantt + */ + get_oldest_starting_date() { + return this.tasks.length ? this.tasks.map((t) => t._start).reduce( + (t, e) => e <= t ? e : t + ) : /* @__PURE__ */ new Date(); + } + /** + * Clear all elements from the parent svg element + * + * @memberof Gantt + */ + clear() { + var t, e, s, i, r, o; + this.$svg.innerHTML = "", (e = (t = this.$header) == null ? void 0 : t.remove) == null || e.call(t), (i = (s = this.$current_highlight) == null ? void 0 : s.remove) == null || i.call(s), (o = (r = this.popup) == null ? void 0 : r.hide) == null || o.call(r); + } +} +B.VIEW_MODE = l; +function z(n) { + return n.name + "_" + Math.random().toString(36).slice(2, 12); +} +export { + B as default +}; diff --git a/dist/frappe-gantt.js.map b/dist/frappe-gantt.js.map deleted file mode 100644 index 887a2da..0000000 --- a/dist/frappe-gantt.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"frappe-gantt.js","sources":["../src/date_utils.js","../src/svg_utils.js","../src/bar.js","../src/arrow.js","../src/popup.js","../src/index.js"],"sourcesContent":["const YEAR = \"year\";\nconst MONTH = \"month\";\nconst DAY = \"day\";\nconst HOUR = \"hour\";\nconst MINUTE = \"minute\";\nconst SECOND = \"second\";\nconst MILLISECOND = \"millisecond\";\n\nconst SHORTENED = {\n January: \"Jan\",\n February: \"Feb\",\n March: \"Mar\",\n April: \"Apr\",\n May: \"May\",\n June: \"Jun\",\n July: \"Jul\",\n August: \"Aug\",\n September: \"Sep\",\n October: \"Oct\",\n November: \"Nov\",\n December: \"Dec\"\n};\n\nexport default {\n parse_duration(duration) {\n const regex = /([0-9])+(y|m|d|h|min|s|ms)/gm;\n const matches = regex.exec(duration);\n\n if (matches !== null) {\n if (matches[2] === \"y\") {\n return { duration: parseInt(matches[1]), scale: `year` };\n } else if (matches[2] === \"m\") {\n return { duration: parseInt(matches[1]), scale: `month` };\n } else if (matches[2] === \"d\") {\n return { duration: parseInt(matches[1]), scale: `day` };\n } else if (matches[2] === \"h\") {\n return { duration: parseInt(matches[1]), scale: `hour` };\n } else if (matches[2] === \"min\") {\n return { duration: parseInt(matches[1]), scale: `minute` };\n } else if (matches[2] === \"s\") {\n return { duration: parseInt(matches[1]), scale: `second` };\n } else if (matches[2] === \"ms\") {\n return { duration: parseInt(matches[1]), scale: `millisecond` };\n }\n }\n },\n parse(date, date_separator = \"-\", time_separator = /[.:]/) {\n if (date instanceof Date) {\n return date;\n }\n if (typeof date === \"string\") {\n let date_parts, time_parts;\n const parts = date.split(\" \");\n date_parts = parts[0]\n .split(date_separator)\n .map((val) => parseInt(val, 10));\n time_parts = parts[1] && parts[1].split(time_separator);\n\n // month is 0 indexed\n date_parts[1] = date_parts[1] ? date_parts[1] - 1 : 0;\n\n let vals = date_parts;\n\n if (time_parts && time_parts.length) {\n if (time_parts.length === 4) {\n time_parts[3] = \"0.\" + time_parts[3];\n time_parts[3] = parseFloat(time_parts[3]) * 1000;\n }\n vals = vals.concat(time_parts);\n }\n return new Date(...vals);\n }\n },\n\n to_string(date, with_time = false) {\n if (!(date instanceof Date)) {\n throw new TypeError(\"Invalid argument type\");\n }\n const vals = this.get_date_values(date).map((val, i) => {\n if (i === 1) {\n // add 1 for month\n val = val + 1;\n }\n\n if (i === 6) {\n return padStart(val + \"\", 3, \"0\");\n }\n\n return padStart(val + \"\", 2, \"0\");\n });\n const date_string = `${vals[0]}-${vals[1]}-${vals[2]}`;\n const time_string = `${vals[3]}:${vals[4]}:${vals[5]}.${vals[6]}`;\n\n return date_string + (with_time ? \" \" + time_string : \"\");\n },\n\n format(date, format_string = \"YYYY-MM-DD HH:mm:ss.SSS\", lang = \"en\") {\n const dateTimeFormat = new Intl.DateTimeFormat(lang, {\n month: \"long\",\n });\n const month_name = dateTimeFormat.format(date);\n const month_name_capitalized =\n month_name.charAt(0).toUpperCase() + month_name.slice(1);\n\n const values = this.get_date_values(date).map((d) => padStart(d, 2, 0));\n const format_map = {\n YYYY: values[0],\n MM: padStart(+values[1] + 1, 2, 0),\n DD: values[2],\n HH: values[3],\n mm: values[4],\n ss: values[5],\n SSS: values[6],\n D: values[2],\n MMMM: month_name_capitalized,\n MMM: SHORTENED[month_name_capitalized],\n };\n\n let str = format_string;\n const formatted_values = [];\n\n Object.keys(format_map)\n .sort((a, b) => b.length - a.length) // big string first\n .forEach((key) => {\n if (str.includes(key)) {\n str = str.replaceAll(key, `$${formatted_values.length}`);\n formatted_values.push(format_map[key]);\n }\n });\n\n formatted_values.forEach((value, i) => {\n str = str.replaceAll(`$${i}`, value);\n });\n\n return str;\n },\n\n diff(date_a, date_b, scale = DAY) {\n let milliseconds, seconds, hours, minutes, days, months, years;\n\n milliseconds = date_a - date_b;\n seconds = milliseconds / 1000;\n minutes = seconds / 60;\n hours = minutes / 60;\n days = hours / 24;\n months = days / 30;\n years = months / 12;\n\n if (!scale.endsWith(\"s\")) {\n scale += \"s\";\n }\n\n return Math.floor(\n {\n milliseconds,\n seconds,\n minutes,\n hours,\n days,\n months,\n years,\n }[scale],\n );\n },\n\n today() {\n const vals = this.get_date_values(new Date()).slice(0, 3);\n return new Date(...vals);\n },\n\n now() {\n return new Date();\n },\n\n add(date, qty, scale) {\n qty = parseInt(qty, 10);\n const vals = [\n date.getFullYear() + (scale === YEAR ? qty : 0),\n date.getMonth() + (scale === MONTH ? qty : 0),\n date.getDate() + (scale === DAY ? qty : 0),\n date.getHours() + (scale === HOUR ? qty : 0),\n date.getMinutes() + (scale === MINUTE ? qty : 0),\n date.getSeconds() + (scale === SECOND ? qty : 0),\n date.getMilliseconds() + (scale === MILLISECOND ? qty : 0),\n ];\n return new Date(...vals);\n },\n\n start_of(date, scale) {\n const scores = {\n [YEAR]: 6,\n [MONTH]: 5,\n [DAY]: 4,\n [HOUR]: 3,\n [MINUTE]: 2,\n [SECOND]: 1,\n [MILLISECOND]: 0,\n };\n\n function should_reset(_scale) {\n const max_score = scores[scale];\n return scores[_scale] <= max_score;\n }\n\n const vals = [\n date.getFullYear(),\n should_reset(YEAR) ? 0 : date.getMonth(),\n should_reset(MONTH) ? 1 : date.getDate(),\n should_reset(DAY) ? 0 : date.getHours(),\n should_reset(HOUR) ? 0 : date.getMinutes(),\n should_reset(MINUTE) ? 0 : date.getSeconds(),\n should_reset(SECOND) ? 0 : date.getMilliseconds(),\n ];\n\n return new Date(...vals);\n },\n\n clone(date) {\n return new Date(...this.get_date_values(date));\n },\n\n get_date_values(date) {\n return [\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n ];\n },\n\n get_days_in_month(date) {\n const no_of_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n const month = date.getMonth();\n\n if (month !== 1) {\n return no_of_days[month];\n }\n\n // Feb\n const year = date.getFullYear();\n if ((year % 4 === 0 && year % 100 != 0) || year % 400 === 0) {\n return 29;\n }\n return 28;\n },\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\nfunction padStart(str, targetLength, padString) {\n str = str + \"\";\n targetLength = targetLength >> 0;\n padString = String(typeof padString !== \"undefined\" ? padString : \" \");\n if (str.length > targetLength) {\n return String(str);\n } else {\n targetLength = targetLength - str.length;\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length);\n }\n return padString.slice(0, targetLength) + String(str);\n }\n}\n","export function $(expr, con) {\n return typeof expr === \"string\"\n ? (con || document).querySelector(expr)\n : expr || null;\n}\n\nexport function createSVG(tag, attrs) {\n const elem = document.createElementNS(\"http://www.w3.org/2000/svg\", tag);\n for (let attr in attrs) {\n if (attr === \"append_to\") {\n const parent = attrs.append_to;\n parent.appendChild(elem);\n } else if (attr === \"innerHTML\") {\n elem.innerHTML = attrs.innerHTML;\n } else if (attr === 'clipPath') {\n elem.setAttribute('clip-path', 'url(#' + attrs[attr] + ')');\n } else {\n elem.setAttribute(attr, attrs[attr]);\n }\n }\n return elem;\n}\n\nexport function animateSVG(svgElement, attr, from, to) {\n const animatedSvgElement = getAnimationElement(svgElement, attr, from, to);\n\n if (animatedSvgElement === svgElement) {\n // triggered 2nd time programmatically\n // trigger artificial click event\n const event = document.createEvent(\"HTMLEvents\");\n event.initEvent(\"click\", true, true);\n event.eventName = \"click\";\n animatedSvgElement.dispatchEvent(event);\n }\n}\n\nfunction getAnimationElement(\n svgElement,\n attr,\n from,\n to,\n dur = \"0.4s\",\n begin = \"0.1s\",\n) {\n const animEl = svgElement.querySelector(\"animate\");\n if (animEl) {\n $.attr(animEl, {\n attributeName: attr,\n from,\n to,\n dur,\n begin: \"click + \" + begin, // artificial click\n });\n return svgElement;\n }\n\n const animateElement = createSVG(\"animate\", {\n attributeName: attr,\n from,\n to,\n dur,\n begin,\n calcMode: \"spline\",\n values: from + \";\" + to,\n keyTimes: \"0; 1\",\n keySplines: cubic_bezier(\"ease-out\"),\n });\n svgElement.appendChild(animateElement);\n\n return svgElement;\n}\n\nfunction cubic_bezier(name) {\n return {\n ease: \".25 .1 .25 1\",\n linear: \"0 0 1 1\",\n \"ease-in\": \".42 0 1 1\",\n \"ease-out\": \"0 0 .58 1\",\n \"ease-in-out\": \".42 0 .58 1\",\n }[name];\n}\n\n$.on = (element, event, selector, callback) => {\n if (!callback) {\n callback = selector;\n $.bind(element, event, callback);\n } else {\n $.delegate(element, event, selector, callback);\n }\n};\n\n$.off = (element, event, handler) => {\n element.removeEventListener(event, handler);\n};\n\n$.bind = (element, event, callback) => {\n event.split(/\\s+/).forEach(function (event) {\n element.addEventListener(event, callback);\n });\n};\n\n$.delegate = (element, event, selector, callback) => {\n element.addEventListener(event, function (e) {\n const delegatedTarget = e.target.closest(selector);\n if (delegatedTarget) {\n e.delegatedTarget = delegatedTarget;\n callback.call(this, e, delegatedTarget);\n }\n });\n};\n\n$.closest = (selector, element) => {\n if (!element) return null;\n\n if (element.matches(selector)) {\n return element;\n }\n\n return $.closest(selector, element.parentNode);\n};\n\n$.attr = (element, attr, value) => {\n if (!value && typeof attr === \"string\") {\n return element.getAttribute(attr);\n }\n\n if (typeof attr === \"object\") {\n for (let key in attr) {\n $.attr(element, key, attr[key]);\n }\n return;\n }\n\n element.setAttribute(attr, value);\n};\n","import date_utils from \"./date_utils\";\nimport { $, createSVG, animateSVG } from \"./svg_utils\";\n\nexport default class Bar {\n constructor(gantt, task) {\n this.set_defaults(gantt, task);\n this.prepare();\n this.draw();\n this.bind();\n }\n\n set_defaults(gantt, task) {\n this.action_completed = false;\n this.gantt = gantt;\n this.task = task;\n }\n\n prepare() {\n this.prepare_values();\n this.prepare_helpers();\n }\n\n prepare_values() {\n this.invalid = this.task.invalid;\n this.height = this.gantt.options.bar_height;\n this.image_size = this.height - 5;\n this.compute_x();\n this.compute_y();\n this.compute_duration();\n this.corner_radius = this.gantt.options.bar_corner_radius;\n this.width = this.gantt.options.column_width * this.duration;\n this.progress_width =\n this.gantt.options.column_width *\n this.duration *\n (this.task.progress / 100) || 0;\n this.group = createSVG(\"g\", {\n class: \"bar-wrapper\" + (this.task.custom_class ? \" \" + this.task.custom_class : \"\") + (this.task.important ? ' important' : ''),\n \"data-id\": this.task.id,\n });\n this.bar_group = createSVG(\"g\", {\n class: \"bar-group\",\n append_to: this.group,\n });\n this.handle_group = createSVG(\"g\", {\n class: \"handle-group\",\n append_to: this.group,\n });\n }\n\n prepare_helpers() {\n SVGElement.prototype.getX = function () {\n return +this.getAttribute(\"x\");\n };\n SVGElement.prototype.getY = function () {\n return +this.getAttribute(\"y\");\n };\n SVGElement.prototype.getWidth = function () {\n return +this.getAttribute(\"width\");\n };\n SVGElement.prototype.getHeight = function () {\n return +this.getAttribute(\"height\");\n };\n SVGElement.prototype.getEndX = function () {\n return this.getX() + this.getWidth();\n };\n }\n\n prepare_expected_progress_values() {\n this.compute_expected_progress();\n this.expected_progress_width =\n this.gantt.options.column_width *\n this.duration *\n (this.expected_progress / 100) || 0;\n }\n\n draw() {\n this.draw_bar();\n this.draw_progress_bar();\n if (this.gantt.options.show_expected_progress) {\n this.prepare_expected_progress_values();\n this.draw_expected_progress_bar();\n }\n this.draw_label();\n this.draw_resize_handles();\n\n if (this.task.thumbnail) {\n this.draw_thumbnail();\n }\n }\n\n draw_bar() {\n this.$bar = createSVG(\"rect\", {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height,\n rx: this.corner_radius,\n ry: this.corner_radius,\n class: \"bar\",\n append_to: this.bar_group,\n });\n\n animateSVG(this.$bar, \"width\", 0, this.width);\n\n if (this.invalid) {\n this.$bar.classList.add(\"bar-invalid\");\n }\n }\n\n draw_expected_progress_bar() {\n if (this.invalid) return;\n this.$expected_bar_progress = createSVG(\"rect\", {\n x: this.x,\n y: this.y,\n width: this.expected_progress_width,\n height: this.height,\n rx: this.corner_radius,\n ry: this.corner_radius,\n class: \"bar-expected-progress\",\n append_to: this.bar_group,\n });\n\n animateSVG(\n this.$expected_bar_progress,\n \"width\",\n 0,\n this.expected_progress_width,\n );\n }\n\n draw_progress_bar() {\n if (this.invalid) return;\n this.$bar_progress = createSVG(\"rect\", {\n x: this.x,\n y: this.y,\n width: this.progress_width,\n height: this.height,\n rx: this.corner_radius,\n ry: this.corner_radius,\n class: \"bar-progress\",\n append_to: this.bar_group,\n });\n const x = (date_utils.diff(this.task._start, this.gantt.gantt_start, 'hour') /\n this.gantt.options.step) *\n this.gantt.options.column_width;\n\n let $date_highlight = document.createElement(\"div\");\n $date_highlight.id = `${this.task.id}-highlight`\n $date_highlight.classList.add('date-highlight')\n $date_highlight.style.height = this.height * 0.8 + 'px'\n $date_highlight.style.width = this.width + 'px'\n $date_highlight.style.top = this.gantt.options.header_height - 25 + 'px'\n $date_highlight.style.left = x + 'px'\n this.$date_highlight = $date_highlight\n this.gantt.$lower_header.prepend($date_highlight)\n\n\n\n animateSVG(this.$bar_progress, \"width\", 0, this.progress_width);\n }\n\n draw_label() {\n let x_coord = this.x + this.$bar.getWidth() / 2;\n\n if (this.task.thumbnail) {\n x_coord = this.x + this.image_size + 5;\n }\n\n createSVG(\"text\", {\n x: x_coord,\n y: this.y + this.height / 2,\n innerHTML: this.task.name,\n class: \"bar-label\",\n append_to: this.bar_group,\n });\n // labels get BBox in the next tick\n requestAnimationFrame(() => this.update_label_position());\n }\n draw_thumbnail() {\n let x_offset = 10, y_offset = 2;\n let defs, clipPath;\n\n defs = createSVG('defs', {\n append_to: this.bar_group\n });\n\n createSVG('rect', {\n id: 'rect_' + this.task.id,\n x: this.x + x_offset,\n y: this.y + y_offset,\n width: this.image_size,\n height: this.image_size,\n rx: '15',\n class: 'img_mask',\n append_to: defs\n });\n\n clipPath = createSVG('clipPath', {\n id: 'clip_' + this.task.id,\n append_to: defs\n });\n\n createSVG('use', {\n href: '#rect_' + this.task.id,\n append_to: clipPath\n });\n\n createSVG('image', {\n x: this.x + x_offset,\n y: this.y + y_offset,\n width: this.image_size,\n height: this.image_size,\n class: 'bar-img',\n href: this.task.thumbnail,\n clipPath: 'clip_' + this.task.id,\n append_to: this.bar_group\n });\n }\n\n draw_resize_handles() {\n if (this.invalid || this.gantt.options.readonly) return;\n\n const bar = this.$bar;\n const handle_width = 8;\n\n createSVG(\"rect\", {\n x: bar.getX() + bar.getWidth() + handle_width - 4,\n y: bar.getY() + 1,\n width: handle_width,\n height: this.height - 2,\n rx: this.corner_radius,\n ry: this.corner_radius,\n class: \"handle right\",\n append_to: this.handle_group,\n });\n\n createSVG(\"rect\", {\n x: bar.getX() - handle_width - 4,\n y: bar.getY() + 1,\n width: handle_width,\n height: this.height - 2,\n rx: this.corner_radius,\n ry: this.corner_radius,\n class: \"handle left\",\n append_to: this.handle_group,\n });\n\n this.$handle_progress = createSVG(\"polygon\", {\n points: this.get_progress_polygon_points().join(\",\"),\n class: \"handle progress\",\n append_to: this.handle_group,\n });\n }\n\n get_progress_polygon_points() {\n const bar_progress = this.$bar_progress;\n let icon_width = 10;\n let icon_height = 15;\n\n return [\n bar_progress.getEndX() - icon_width / 2,\n bar_progress.getY() + bar_progress.getHeight() / 2,\n\n bar_progress.getEndX(),\n bar_progress.getY() + bar_progress.getHeight() / 2 - icon_height / 2,\n\n bar_progress.getEndX() + icon_width / 2,\n bar_progress.getY() + bar_progress.getHeight() / 2,\n\n bar_progress.getEndX(),\n bar_progress.getY() + bar_progress.getHeight() / 2 + icon_height / 2,\n\n bar_progress.getEndX() - icon_width / 2,\n bar_progress.getY() + bar_progress.getHeight() / 2,\n ];\n }\n\n bind() {\n if (this.invalid) return;\n this.setup_click_event();\n }\n\n setup_click_event() {\n let task_id = this.task.id;\n $.on(this.group, \"mouseover\", (e) => {\n this.gantt.trigger_event(\"hover\", [this.task, e.screenX, e.screenY, e])\n })\n\n let timeout;\n $.on(this.group, \"mouseenter\", (e) => timeout = setTimeout(() => {\n this.show_popup(e.offsetX)\n document.querySelector(`#${task_id}-highlight`).style.display = 'block'\n }, 200))\n\n $.on(this.group, \"mouseleave\", () => {\n clearTimeout(timeout)\n this.gantt.popup?.hide?.()\n document.querySelector(`#${task_id}-highlight`).style.display = 'none'\n })\n\n\n $.on(this.group, this.gantt.options.popup_trigger, () => {\n this.gantt.trigger_event(\"click\", [this.task]);\n });\n\n $.on(this.group, \"dblclick\", (e) => {\n if (this.action_completed) {\n // just finished a move action, wait for a few seconds\n return;\n }\n\n this.gantt.trigger_event(\"double_click\", [this.task]);\n });\n }\n\n show_popup(x) {\n if (this.gantt.bar_being_dragged) return;\n\n const start_date = date_utils.format(\n this.task._start,\n \"MMM D\",\n this.gantt.options.language,\n );\n const end_date = date_utils.format(\n date_utils.add(this.task._end, -1, \"second\"),\n \"MMM D\",\n this.gantt.options.language,\n );\n const subtitle = `${start_date} - ${end_date}
Progress: ${this.task.progress}`;\n\n this.gantt.show_popup({\n x,\n target_element: this.$bar,\n title: this.task.name,\n subtitle: subtitle,\n task: this.task,\n });\n }\n\n update_bar_position({ x = null, width = null }) {\n const bar = this.$bar;\n if (x) {\n // get all x values of parent task\n const xs = this.task.dependencies.map((dep) => {\n return this.gantt.get_bar(dep).$bar.getX();\n });\n // child task must not go before parent\n const valid_x = xs.reduce((_, curr) => {\n return x >= curr;\n }, x);\n if (!valid_x) {\n width = null;\n return;\n }\n this.update_attr(bar, \"x\", x);\n this.$date_highlight.style.left = x + 'px'\n }\n if (width) {\n this.update_attr(bar, \"width\", width);\n this.$date_highlight.style.width = width + 'px'\n }\n this.update_label_position();\n this.update_handle_position();\n if (this.gantt.options.show_expected_progress) {\n this.date_changed();\n this.compute_duration();\n this.update_expected_progressbar_position();\n }\n this.update_progressbar_position();\n this.update_arrow_position();\n }\n\n update_label_position_on_horizontal_scroll({ x, sx }) {\n const container = document.querySelector('.gantt-container');\n const label = this.group.querySelector('.bar-label');\n const img = this.group.querySelector('.bar-img') || '';\n const img_mask = this.bar_group.querySelector('.img_mask') || '';\n\n let barWidthLimit = this.$bar.getX() + this.$bar.getWidth();\n let newLabelX = label.getX() + x;\n let newImgX = img && img.getX() + x || 0;\n let imgWidth = img && img.getBBox().width + 7 || 7;\n let labelEndX = newLabelX + label.getBBox().width + 7;\n let viewportCentral = sx + container.clientWidth / 2;\n\n if (label.classList.contains('big')) return;\n\n if (labelEndX < barWidthLimit && x > 0 && labelEndX < viewportCentral) {\n label.setAttribute('x', newLabelX);\n if (img) {\n img.setAttribute('x', newImgX);\n img_mask.setAttribute('x', newImgX);\n }\n } else if ((newLabelX - imgWidth) > this.$bar.getX() && x < 0 && labelEndX > viewportCentral) {\n label.setAttribute('x', newLabelX);\n if (img) {\n img.setAttribute('x', newImgX);\n img_mask.setAttribute('x', newImgX);\n }\n\n }\n }\n\n date_changed() {\n let changed = false;\n const { new_start_date, new_end_date } = this.compute_start_end_date();\n\n if (Number(this.task._start) !== Number(new_start_date)) {\n changed = true;\n this.task._start = new_start_date;\n }\n\n if (Number(this.task._end) !== Number(new_end_date)) {\n changed = true;\n this.task._end = new_end_date;\n }\n\n if (!changed) return;\n\n this.gantt.trigger_event(\"date_change\", [\n this.task,\n new_start_date,\n date_utils.add(new_end_date, -1, \"second\"),\n ]);\n }\n\n progress_changed() {\n const new_progress = this.compute_progress();\n this.task.progress = new_progress;\n this.gantt.trigger_event(\"progress_change\", [this.task, new_progress]);\n }\n\n set_action_completed() {\n this.action_completed = true;\n setTimeout(() => (this.action_completed = false), 1000);\n }\n\n compute_start_end_date() {\n const bar = this.$bar;\n const x_in_units = bar.getX() / this.gantt.options.column_width;\n const new_start_date = date_utils.add(\n this.gantt.gantt_start,\n x_in_units * this.gantt.options.step,\n \"hour\",\n );\n const width_in_units = bar.getWidth() / this.gantt.options.column_width;\n const new_end_date = date_utils.add(\n new_start_date,\n width_in_units * this.gantt.options.step,\n \"hour\",\n );\n\n return { new_start_date, new_end_date };\n }\n\n compute_progress() {\n const progress =\n (this.$bar_progress.getWidth() / this.$bar.getWidth()) * 100;\n return parseInt(progress, 10);\n }\n\n compute_expected_progress() {\n this.expected_progress =\n date_utils.diff(date_utils.today(), this.task._start, \"hour\") /\n this.gantt.options.step;\n this.expected_progress =\n ((this.expected_progress < this.duration\n ? this.expected_progress\n : this.duration) *\n 100) /\n this.duration;\n }\n\n compute_x() {\n const { step, column_width } = this.gantt.options;\n const task_start = this.task._start;\n const gantt_start = this.gantt.gantt_start;\n\n const diff = date_utils.diff(task_start, gantt_start, \"hour\");\n let x = (diff / step) * column_width;\n\n if (this.gantt.view_is(\"Month\")) {\n const diff = date_utils.diff(task_start, gantt_start, \"day\");\n x = (diff * column_width) / 30;\n }\n this.x = x;\n }\n\n compute_y() {\n this.y =\n this.gantt.options.header_height +\n this.gantt.options.padding +\n this.task._index * (this.height + this.gantt.options.padding);\n }\n\n compute_duration() {\n this.duration =\n date_utils.diff(this.task._end, this.task._start, \"hour\") /\n this.gantt.options.step;\n }\n\n get_snap_position(dx) {\n let odx = dx,\n rem,\n position;\n\n if (this.gantt.view_is(\"Week\")) {\n rem = dx % (this.gantt.options.column_width / 7);\n position =\n odx -\n rem +\n (rem < this.gantt.options.column_width / 14\n ? 0\n : this.gantt.options.column_width / 7);\n } else if (this.gantt.view_is(\"Month\")) {\n rem = dx % (this.gantt.options.column_width / 30);\n position =\n odx -\n rem +\n (rem < this.gantt.options.column_width / 60\n ? 0\n : this.gantt.options.column_width / 30);\n } else {\n rem = dx % this.gantt.options.column_width;\n position =\n odx -\n rem +\n (rem < this.gantt.options.column_width / 2\n ? 0\n : this.gantt.options.column_width);\n }\n return position;\n }\n\n update_attr(element, attr, value) {\n value = +value;\n if (!isNaN(value)) {\n element.setAttribute(attr, value);\n }\n return element;\n }\n\n update_expected_progressbar_position() {\n if (this.invalid) return;\n this.$expected_bar_progress.setAttribute(\"x\", this.$bar.getX());\n this.compute_expected_progress();\n this.$expected_bar_progress.setAttribute(\n \"width\",\n this.gantt.options.column_width *\n this.duration *\n (this.expected_progress / 100) || 0,\n );\n }\n\n update_progressbar_position() {\n if (this.invalid || this.gantt.options.readonly) return;\n this.$bar_progress.setAttribute(\"x\", this.$bar.getX());\n this.$bar_progress.setAttribute(\n \"width\",\n this.$bar.getWidth() * (this.task.progress / 100),\n );\n }\n\n update_label_position() {\n const img_mask = this.bar_group.querySelector('.img_mask') || '';\n const bar = this.$bar,\n label = this.group.querySelector(\".bar-label\"),\n img = this.group.querySelector('.bar-img');\n\n\n let padding = 5;\n let x_offset_label_img = this.image_size + 10;\n const labelWidth = label.getBBox().width\n const barWidth = bar.getWidth()\n if (labelWidth > barWidth) {\n label.classList.add(\"big\");\n if (img) {\n img.setAttribute('x', bar.getX() + bar.getWidth() + padding);\n img_mask.setAttribute('x', bar.getX() + bar.getWidth() + padding);\n label.setAttribute('x', bar.getX() + bar.getWidth() + x_offset_label_img);\n } else {\n label.setAttribute('x', bar.getX() + bar.getWidth() + padding);\n }\n } else {\n label.classList.remove(\"big\");\n if (img) {\n img.setAttribute('x', bar.getX() + padding);\n img_mask.setAttribute('x', bar.getX() + padding);\n label.setAttribute('x', bar.getX() + barWidth / 2 + x_offset_label_img);\n } else {\n label.setAttribute('x', bar.getX() + barWidth / 2 - labelWidth / 2);\n }\n }\n }\n\n update_handle_position() {\n if (this.invalid || this.gantt.options.readonly) return;\n const bar = this.$bar;\n this.handle_group\n .querySelector(\".handle.left\")\n .setAttribute(\"x\", bar.getX() - 12);\n this.handle_group\n .querySelector(\".handle.right\")\n .setAttribute(\"x\", bar.getEndX() + 4);\n const handle = this.group.querySelector(\".handle.progress\");\n handle && handle.setAttribute(\"points\", this.get_progress_polygon_points());\n }\n\n update_arrow_position() {\n this.arrows = this.arrows || [];\n for (let arrow of this.arrows) {\n arrow.update();\n }\n }\n}\n\nfunction isFunction(functionToCheck) {\n let getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === \"[object Function]\"\n );\n}\n","import { createSVG } from \"./svg_utils\";\n\nexport default class Arrow {\n constructor(gantt, from_task, to_task) {\n this.gantt = gantt;\n this.from_task = from_task;\n this.to_task = to_task;\n\n this.calculate_path();\n this.draw();\n }\n\n calculate_path() {\n let start_x =\n this.from_task.$bar.getX() + this.from_task.$bar.getWidth() / 2;\n\n const condition = () =>\n this.to_task.$bar.getX() < start_x + this.gantt.options.padding &&\n start_x > this.from_task.$bar.getX() + this.gantt.options.padding;\n\n while (condition()) {\n start_x -= 10;\n }\n\n const start_y =\n this.gantt.options.header_height +\n this.gantt.options.bar_height +\n (this.gantt.options.padding + this.gantt.options.bar_height) *\n this.from_task.task._index +\n this.gantt.options.padding;\n\n const end_x = this.to_task.$bar.getX() - this.gantt.options.padding / 2 - 7;\n const end_y =\n this.gantt.options.header_height +\n this.gantt.options.bar_height / 2 +\n (this.gantt.options.padding + this.gantt.options.bar_height) *\n this.to_task.task._index +\n this.gantt.options.padding;\n\n const from_is_below_to =\n this.from_task.task._index > this.to_task.task._index;\n const curve = this.gantt.options.arrow_curve;\n const clockwise = from_is_below_to ? 1 : 0;\n const curve_y = from_is_below_to ? -curve : curve;\n const offset = from_is_below_to\n ? end_y + this.gantt.options.arrow_curve\n : end_y - this.gantt.options.arrow_curve;\n\n this.path = `\n M ${start_x} ${start_y}\n V ${offset}\n a ${curve} ${curve} 0 0 ${clockwise} ${curve} ${curve_y}\n L ${end_x} ${end_y}\n m -5 -5\n l 5 5\n l -5 5`;\n\n if (\n this.to_task.$bar.getX() <\n this.from_task.$bar.getX() + this.gantt.options.padding\n ) {\n const down_1 = this.gantt.options.padding / 2 - curve;\n const down_2 =\n this.to_task.$bar.getY() + this.to_task.$bar.getHeight() / 2 - curve_y;\n const left = this.to_task.$bar.getX() - this.gantt.options.padding;\n\n this.path = `\n M ${start_x} ${start_y}\n v ${down_1}\n a ${curve} ${curve} 0 0 1 -${curve} ${curve}\n H ${left}\n a ${curve} ${curve} 0 0 ${clockwise} -${curve} ${curve_y}\n V ${down_2}\n a ${curve} ${curve} 0 0 ${clockwise} ${curve} ${curve_y}\n L ${end_x} ${end_y}\n m -5 -5\n l 5 5\n l -5 5`;\n }\n }\n\n draw() {\n this.element = createSVG(\"path\", {\n d: this.path,\n \"data-from\": this.from_task.task.id,\n \"data-to\": this.to_task.task.id,\n });\n }\n\n update() {\n this.calculate_path();\n this.element.setAttribute(\"d\", this.path);\n }\n}\n","export default class Popup {\n constructor(parent, custom_html) {\n this.parent = parent;\n this.custom_html = custom_html;\n this.make();\n }\n\n make() {\n this.parent.innerHTML = `\n
\n
\n
\n `;\n\n this.hide();\n\n this.title = this.parent.querySelector(\".title\");\n this.subtitle = this.parent.querySelector(\".subtitle\");\n this.pointer = this.parent.querySelector(\".pointer\");\n }\n\n show(options) {\n if (!options.target_element) {\n throw new Error(\"target_element is required to show popup\");\n }\n const target_element = options.target_element;\n\n if (this.custom_html) {\n let html = this.custom_html(options.task);\n html += '
';\n this.parent.innerHTML = html;\n this.pointer = this.parent.querySelector(\".pointer\");\n } else {\n // set data\n this.title.innerHTML = options.title;\n this.subtitle.innerHTML = options.subtitle;\n }\n\n // set position\n let position_meta;\n if (target_element instanceof HTMLElement) {\n position_meta = target_element.getBoundingClientRect();\n } else if (target_element instanceof SVGElement) {\n position_meta = options.target_element.getBBox();\n }\n\n this.parent.style.left = options.x - this.parent.clientWidth / 2 + \"px\";\n this.parent.style.top = position_meta.y + position_meta.height + 10 + \"px\";\n\n this.pointer.style.left = this.parent.clientWidth / 2 + \"px\";\n this.pointer.style.top = \"-15px\";\n\n // show\n this.parent.style.opacity = 1;\n }\n\n hide() {\n this.parent.style.opacity = 0;\n this.parent.style.left = 0;\n }\n}\n","import date_utils from \"./date_utils\";\nimport { $, createSVG } from \"./svg_utils\";\nimport Bar from \"./bar\";\nimport Arrow from \"./arrow\";\nimport Popup from \"./popup\";\n\nimport \"./gantt.scss\";\n\nconst VIEW_MODE = {\n HOUR: \"Hour\",\n QUARTER_DAY: \"Quarter Day\",\n HALF_DAY: \"Half Day\",\n DAY: \"Day\",\n WEEK: \"Week\",\n MONTH: \"Month\",\n YEAR: \"Year\",\n};\n\nconst VIEW_MODE_PADDING = {\n HOUR: [\"7d\", \"7d\"],\n QUARTER_DAY: [\"7d\", \"7d\"],\n HALF_DAY: [\"7d\", \"7d\"],\n DAY: [\"1m\", \"1m\"],\n WEEK: [\"1m\", \"1m\"],\n MONTH: [\"1m\", \"1m\"],\n YEAR: [\"2y\", \"2y\"],\n};\n\nconst DEFAULT_OPTIONS = {\n header_height: 65,\n column_width: 30,\n step: 24,\n view_modes: [...Object.values(VIEW_MODE)],\n bar_height: 30,\n bar_corner_radius: 3,\n arrow_curve: 5,\n padding: 18,\n view_mode: \"Day\",\n date_format: \"YYYY-MM-DD\",\n popup_trigger: \"click\",\n show_expected_progress: false,\n popup: null,\n language: \"en\",\n readonly: false,\n highlight_weekend: true,\n scroll_to: 'start',\n lines: 'both',\n auto_move_label: true,\n today_button: true,\n view_mode_select: false,\n};\n\nexport default class Gantt {\n constructor(wrapper, tasks, options) {\n this.setup_wrapper(wrapper);\n this.setup_options(options);\n this.setup_tasks(tasks);\n // initialize with default view mode\n this.change_view_mode();\n this.bind_events();\n }\n\n setup_wrapper(element) {\n let svg_element, wrapper_element;\n\n // CSS Selector is passed\n if (typeof element === \"string\") {\n element = document.querySelector(element);\n }\n\n // get the SVGElement\n if (element instanceof HTMLElement) {\n wrapper_element = element;\n svg_element = element.querySelector(\"svg\");\n } else if (element instanceof SVGElement) {\n svg_element = element;\n } else {\n throw new TypeError(\n \"Frappé Gantt only supports usage of a string CSS selector,\" +\n \" HTML DOM element or SVG DOM element for the 'element' parameter\",\n );\n }\n\n // svg element\n if (!svg_element) {\n // create it\n this.$svg = createSVG(\"svg\", {\n append_to: wrapper_element,\n class: \"gantt\",\n });\n } else {\n this.$svg = svg_element;\n this.$svg.classList.add(\"gantt\");\n }\n\n // wrapper element\n this.$container = document.createElement(\"div\");\n this.$container.classList.add(\"gantt-container\");\n\n const parent_element = this.$svg.parentElement;\n parent_element.appendChild(this.$container);\n this.$container.appendChild(this.$svg);\n\n // popup wrapper\n this.$popup_wrapper = document.createElement(\"div\");\n this.$popup_wrapper.classList.add(\"popup-wrapper\");\n this.$container.appendChild(this.$popup_wrapper);\n }\n\n setup_options(options) {\n this.options = { ...DEFAULT_OPTIONS, ...options }\n if (!options.view_mode_padding) options.view_mode_padding = {}\n for (let [key, value] of Object.entries(options.view_mode_padding)) {\n if (typeof value === \"string\") {\n // Configure for single value given\n options.view_mode_padding[key] = [value, value];\n }\n }\n\n this.options.view_mode_padding = {\n ...VIEW_MODE_PADDING,\n ...options.view_mode_padding,\n };\n }\n\n setup_tasks(tasks) {\n // prepare tasks\n this.tasks = tasks.map((task, i) => {\n // convert to Date objects\n task._start = date_utils.parse(task.start);\n if (task.end === undefined && task.duration !== undefined) {\n task.end = task._start;\n let durations = task.duration.split(\" \");\n\n durations.forEach((tmpDuration) => {\n let { duration, scale } = date_utils.parse_duration(tmpDuration);\n task.end = date_utils.add(task.end, duration, scale);\n });\n }\n task._end = date_utils.parse(task.end);\n let diff = date_utils.diff(task._end, task._start, \"year\");\n if (diff < 0) {\n throw Error(\"start of task can't be after end of task: in task #, \" + (i + 1))\n }\n // make task invalid if duration too large\n if (date_utils.diff(task._end, task._start, \"year\") > 10) {\n task.end = null;\n }\n\n\n // cache index\n task._index = i;\n\n // invalid dates\n if (!task.start && !task.end) {\n const today = date_utils.today();\n task._start = today;\n task._end = date_utils.add(today, 2, \"day\");\n }\n\n if (!task.start && task.end) {\n task._start = date_utils.add(task._end, -2, \"day\");\n }\n\n if (task.start && !task.end) {\n task._end = date_utils.add(task._start, 2, \"day\");\n }\n\n // if hours is not set, assume the last day is full day\n // e.g: 2018-09-09 becomes 2018-09-09 23:59:59\n const task_end_values = date_utils.get_date_values(task._end);\n if (task_end_values.slice(3).every((d) => d === 0)) {\n task._end = date_utils.add(task._end, 24, \"hour\");\n }\n\n // invalid flag\n if (!task.start || !task.end) {\n task.invalid = true;\n }\n\n // dependencies\n if (typeof task.dependencies === \"string\" || !task.dependencies) {\n let deps = [];\n if (task.dependencies) {\n deps = task.dependencies\n .split(\",\")\n .map((d) => d.trim().replaceAll(' ', '_'))\n .filter((d) => d);\n }\n task.dependencies = deps;\n }\n\n // uids\n if (!task.id) {\n task.id = generate_id(task);\n } else if (typeof task.id === 'string') {\n task.id = task.id.replaceAll(' ', '_')\n } else {\n task.id = `${task.id}`\n }\n\n return task;\n });\n\n this.setup_dependencies();\n }\n\n setup_dependencies() {\n this.dependency_map = {};\n for (let t of this.tasks) {\n for (let d of t.dependencies) {\n this.dependency_map[d] = this.dependency_map[d] || [];\n this.dependency_map[d].push(t.id);\n }\n }\n }\n\n refresh(tasks) {\n this.setup_tasks(tasks);\n this.change_view_mode();\n }\n\n change_view_mode(mode = this.options.view_mode) {\n this.update_view_scale(mode);\n this.setup_dates();\n this.render();\n // fire viewmode_change event\n this.trigger_event(\"view_change\", [mode]);\n }\n\n update_view_scale(view_mode) {\n this.options.view_mode = view_mode;\n if (view_mode === VIEW_MODE.HOUR) {\n this.options.step = 24 / 24;\n this.options.column_width = 38;\n } else if (view_mode === VIEW_MODE.DAY) {\n this.options.step = 24;\n this.options.column_width = 38;\n } else if (view_mode === VIEW_MODE.HALF_DAY) {\n this.options.step = 24 / 2;\n this.options.column_width = 38;\n } else if (view_mode === VIEW_MODE.QUARTER_DAY) {\n this.options.step = 24 / 4;\n this.options.column_width = 38;\n } else if (view_mode === VIEW_MODE.WEEK) {\n this.options.step = 24 * 7;\n this.options.column_width = 140;\n } else if (view_mode === VIEW_MODE.MONTH) {\n this.options.step = 24 * 30;\n this.options.column_width = 120;\n } else if (view_mode === VIEW_MODE.YEAR) {\n this.options.step = 24 * 365;\n this.options.column_width = 120;\n }\n }\n\n setup_dates() {\n this.setup_gantt_dates();\n this.setup_date_values();\n }\n\n setup_gantt_dates() {\n this.gantt_start = this.gantt_end = null;\n\n for (let task of this.tasks) {\n // set global start and end date\n if (!this.gantt_start || task._start < this.gantt_start) {\n this.gantt_start = task._start;\n }\n if (!this.gantt_end || task._end > this.gantt_end) {\n this.gantt_end = task._end;\n }\n }\n let gantt_start, gantt_end;\n if (!this.gantt_start) gantt_start = new Date();\n else gantt_start = date_utils.start_of(this.gantt_start, \"day\");\n if (!this.gantt_end) gantt_end = new Date();\n else gantt_end = date_utils.start_of(this.gantt_end, \"day\");\n\n // add date padding on both sides\n let viewKey;\n for (let [key, value] of Object.entries(VIEW_MODE)) {\n if (value === this.options.view_mode) {\n viewKey = key;\n }\n }\n const [padding_start, padding_end] = this.options.view_mode_padding[\n viewKey\n ].map(date_utils.parse_duration);\n gantt_start = date_utils.add(\n gantt_start,\n -padding_start.duration,\n padding_start.scale,\n );\n\n let format_string;\n if (this.view_is(VIEW_MODE.YEAR)) {\n format_string = \"YYYY\"\n } else if (this.view_is(VIEW_MODE.MONTH)) {\n format_string = \"YYYY-MM\"\n } else if (this.view_is(VIEW_MODE.DAY)) {\n format_string = \"YYYY-MM-DD\"\n } else {\n format_string = \"YYYY-MM-DD HH\"\n }\n this.gantt_start = date_utils.parse(date_utils.format(gantt_start, format_string));\n this.gantt_start.setHours(0, 0, 0, 0)\n this.gantt_end = date_utils.add(\n gantt_end,\n padding_end.duration,\n padding_end.scale,\n );\n }\n\n setup_date_values() {\n this.dates = [];\n let cur_date = null;\n\n while (cur_date === null || cur_date < this.gantt_end) {\n if (!cur_date) {\n cur_date = date_utils.clone(this.gantt_start);\n } else {\n if (this.view_is(VIEW_MODE.YEAR)) {\n cur_date = date_utils.add(cur_date, 1, \"year\");\n } else if (this.view_is(VIEW_MODE.MONTH)) {\n cur_date = date_utils.add(cur_date, 1, \"month\");\n } else {\n cur_date = date_utils.add(cur_date, this.options.step, \"hour\");\n }\n }\n this.dates.push(cur_date);\n }\n }\n\n bind_events() {\n if (this.options.readonly) return\n this.bind_grid_click();\n this.bind_bar_events();\n }\n\n render() {\n this.clear();\n this.setup_layers();\n this.make_grid();\n this.make_dates();\n this.make_bars();\n this.make_grid_extras();\n this.make_arrows();\n this.map_arrows_on_bars();\n this.set_width();\n this.set_scroll_position(this.options.scroll_to);\n }\n\n setup_layers() {\n this.layers = {};\n const layers = [\"grid\", \"arrow\", \"progress\", \"bar\", \"details\"];\n // make group layers\n for (let layer of layers) {\n this.layers[layer] = createSVG(\"g\", {\n class: layer,\n append_to: this.$svg,\n });\n }\n }\n\n make_grid() {\n this.make_grid_background();\n this.make_grid_rows();\n this.make_grid_header();\n }\n\n make_grid_extras() {\n this.make_grid_highlights();\n this.make_grid_ticks();\n }\n\n make_grid_background() {\n const grid_width = this.dates.length * this.options.column_width;\n const grid_height =\n this.options.header_height +\n this.options.padding +\n (this.options.bar_height + this.options.padding) * this.tasks.length;\n\n createSVG(\"rect\", {\n x: 0,\n y: 0,\n width: grid_width,\n height: grid_height,\n class: \"grid-background\",\n append_to: this.$svg,\n });\n\n $.attr(this.$svg, {\n height: grid_height + this.options.padding + 100,\n width: \"100%\",\n });\n }\n\n make_grid_rows() {\n const rows_layer = createSVG(\"g\", { append_to: this.layers.grid });\n\n const row_width = this.dates.length * this.options.column_width;\n const row_height = this.options.bar_height + this.options.padding;\n\n let row_y = this.options.header_height + this.options.padding / 2;\n\n for (let _ of this.tasks) {\n createSVG(\"rect\", {\n x: 0,\n y: row_y,\n width: row_width,\n height: row_height,\n class: \"grid-row\",\n append_to: rows_layer,\n });\n if (this.options.lines === 'both' || this.options.lines === 'horizontal') {\n\n }\n\n row_y += this.options.bar_height + this.options.padding;\n }\n }\n\n make_grid_header() {\n const curHeader = document.querySelector('.grid-header')\n\n let $header = document.createElement(\"div\");\n $header.style.height = this.options.header_height + 10 + \"px\";\n $header.style.width = this.dates.length * this.options.column_width + \"px\";\n $header.classList.add('grid-header')\n this.$header = $header\n this.$container.appendChild($header)\n\n let $upper_header = document.createElement(\"div\");\n $upper_header.classList.add('upper-header')\n this.$upper_header = $upper_header\n this.$header.appendChild($upper_header)\n\n let $lower_header = document.createElement(\"div\");\n $lower_header.classList.add('lower-header')\n this.$lower_header = $lower_header\n this.$header.appendChild($lower_header)\n\n this.make_side_header()\n }\n\n make_side_header() {\n let $side_header = document.createElement('div')\n $side_header.classList.add('side-header')\n\n // Create view mode change select\n if (this.options.view_mode_select) {\n\n const $select = document.createElement(\"select\");\n $select.classList.add('viewmode-select')\n\n const $el = document.createElement(\"option\");\n $el.selected = true\n $el.disabled = true\n $el.textContent = 'Mode'\n $select.appendChild($el)\n\n for (const key in VIEW_MODE) {\n const $option = document.createElement(\"option\");\n $option.value = VIEW_MODE[key];\n $option.textContent = VIEW_MODE[key];\n $select.appendChild($option);\n }\n // $select.value = this.options.view_mode\n $select.addEventListener(\"change\", (function () {\n this.change_view_mode($select.value)\n }).bind(this));\n $side_header.appendChild($select)\n }\n\n // Create today button\n if (this.options.today_button) {\n let $today_button = document.createElement('button')\n $today_button.classList.add('today-button')\n $today_button.textContent = 'Today'\n $today_button.onclick = this.scroll_today.bind(this)\n $side_header.appendChild($today_button)\n }\n\n this.$header.appendChild($side_header)\n const { left, y } = this.$header.getBoundingClientRect();\n const width = Math.min(this.$header.clientWidth, this.$container.clientWidth)\n $side_header.style.left = left + this.$container.scrollLeft + width - $side_header.clientWidth + 'px';\n $side_header.style.top = y + 10 + 'px';\n }\n\n make_grid_ticks() {\n if (!['both', 'vertical', 'horizontal'].includes(this.options.lines)) return\n let tick_x = 0;\n let tick_y = this.options.header_height + this.options.padding / 2;\n let tick_height =\n (this.options.bar_height + this.options.padding) * this.tasks.length;\n\n let $lines_layer = createSVG(\"g\", { class: 'lines_layer', append_to: this.layers.grid });\n\n\n let row_y = this.options.header_height + this.options.padding / 2;\n\n const row_width = this.dates.length * this.options.column_width;\n const row_height = this.options.bar_height + this.options.padding;\n if (this.options.lines !== 'vertical') {\n for (let _ of this.tasks) {\n createSVG(\"line\", {\n x1: 0,\n y1: row_y + row_height,\n x2: row_width,\n y2: row_y + row_height,\n class: \"row-line\",\n append_to: $lines_layer,\n });\n row_y += row_height;\n }\n }\n if (this.options.lines === 'horizontal') return;\n for (let date of this.dates) {\n let tick_class = \"tick\";\n // thick tick for monday\n if (this.view_is(VIEW_MODE.DAY) && date.getDate() === 1) {\n tick_class += \" thick\";\n }\n // thick tick for first week\n if (\n this.view_is(VIEW_MODE.WEEK) &&\n date.getDate() >= 1 &&\n date.getDate() < 8\n ) {\n tick_class += \" thick\";\n }\n // thick ticks for quarters\n if (this.view_is(VIEW_MODE.MONTH) && date.getMonth() % 3 === 0) {\n tick_class += \" thick\";\n }\n\n createSVG(\"path\", {\n d: `M ${tick_x} ${tick_y} v ${tick_height}`,\n class: tick_class,\n append_to: this.layers.grid,\n });\n\n if (this.view_is(VIEW_MODE.MONTH)) {\n tick_x +=\n (date_utils.get_days_in_month(date) * this.options.column_width) / 30;\n } else {\n tick_x += this.options.column_width;\n }\n }\n }\n\n highlightWeekends() {\n if (!this.view_is('Day') && !this.view_is('Half Day')) return\n for (let d = new Date(this.gantt_start); d <= this.gantt_end; d.setDate(d.getDate() + 1)) {\n if (d.getDay() === 0 || d.getDay() === 6) {\n const x = (date_utils.diff(d, this.gantt_start, 'hour') /\n this.options.step) *\n this.options.column_width;\n const height = (this.options.bar_height + this.options.padding) * this.tasks.length;\n createSVG('rect', {\n x,\n y: this.options.header_height + this.options.padding / 2,\n width: (this.view_is('Day') ? 1 : 2) * this.options.column_width,\n height,\n class: 'holiday-highlight',\n append_to: this.layers.grid,\n });\n }\n }\n }\n\n //compute the horizontal x distance\n computeGridHighlightDimensions(view_mode) {\n let x = this.options.column_width / 2;\n\n if (this.view_is(VIEW_MODE.DAY)) {\n let today = date_utils.today()\n return {\n x: x +\n (date_utils.diff(today, this.gantt_start, \"hour\") / this.options.step) *\n this.options.column_width,\n date: today\n }\n }\n\n for (let date of this.dates) {\n const todayDate = new Date();\n const startDate = new Date(date);\n const endDate = new Date(date);\n switch (view_mode) {\n case VIEW_MODE.WEEK:\n endDate.setDate(date.getDate() + 7);\n break;\n case VIEW_MODE.MONTH:\n endDate.setMonth(date.getMonth() + 1);\n break;\n case VIEW_MODE.YEAR:\n endDate.setFullYear(date.getFullYear() + 1);\n break;\n }\n if (todayDate >= startDate && todayDate <= endDate) {\n return { x, date: startDate }\n } else {\n x += this.options.column_width;\n }\n }\n }\n\n make_grid_highlights() {\n if (this.options.highlight_weekend) this.highlightWeekends()\n // highlight today's | week's | month's | year's\n if (\n this.view_is(VIEW_MODE.DAY) ||\n this.view_is(VIEW_MODE.WEEK) ||\n this.view_is(VIEW_MODE.MONTH) ||\n this.view_is(VIEW_MODE.YEAR)\n ) {\n // Used as we must find the _end_ of session if view is not Day\n const { x: left, date } = this.computeGridHighlightDimensions(this.options.view_mode)\n const top = this.options.header_height + this.options.padding / 2;\n const height = (this.options.bar_height + this.options.padding) * this.tasks.length;\n this.$current_highlight = this.create_el({ top, left, height, classes: 'current-highlight', append_to: this.$container })\n let $today = document.getElementById(date_utils.format(date).replaceAll(' ', '_'))\n\n $today.classList.add('current-date-highlight')\n $today.style.top = +$today.style.top.slice(0, -2) - 4 + 'px'\n $today.style.left = +$today.style.left.slice(0, -2) - 8 + 'px'\n }\n }\n\n create_el({ left, top, width, height, id, classes, append_to }) {\n let $el = document.createElement(\"div\");\n $el.classList.add(classes)\n $el.style.top = top + 'px'\n $el.style.left = left + 'px'\n if (id) $el.id = id\n if (width) $el.style.width = height + 'px'\n if (height) $el.style.height = height + 'px'\n append_to.appendChild($el)\n return $el\n }\n\n make_dates() {\n this.upper_texts_x = {}\n this.get_dates_to_draw().forEach((date, i) => {\n let $lower_text = this.create_el({\n left: date.lower_x,\n top: date.lower_y,\n id: date.formatted_date,\n classes: 'lower-text',\n append_to: this.$lower_header\n })\n $lower_text.innerText = date.lower_text\n $lower_text.style.left = +$lower_text.style.left.slice(0, -2) - $lower_text.clientWidth / 2 + 'px'\n\n if (date.upper_text) {\n this.upper_texts_x[date.upper_text] = date.upper_x\n let $upper_text = document.createElement('div');\n $upper_text.classList.add('upper-text')\n $upper_text.style.left = date.upper_x + 'px'\n $upper_text.style.top = date.upper_y + 'px'\n $upper_text.innerText = date.upper_text\n this.$upper_header.appendChild($upper_text)\n\n // remove out-of-bound dates\n if (date.upper_x > this.layers.grid.getBBox().width) {\n $upper_text.remove();\n }\n }\n })\n }\n\n get_dates_to_draw() {\n let last_date = null;\n const dates = this.dates.map((date, i) => {\n const d = this.get_date_info(date, last_date, i);\n last_date = d;\n return d;\n });\n return dates;\n }\n\n get_date_info(date, last_date_info) {\n let last_date = last_date_info ? last_date_info.date : date_utils.add(date, 1, \"day\")\n const date_text = {\n Hour_lower: date_utils.format(date, \"HH\", this.options.language),\n \"Quarter Day_lower\": date_utils.format(date, \"HH\", this.options.language),\n \"Half Day_lower\": date_utils.format(date, \"HH\", this.options.language),\n Day_lower:\n date.getDate() !== last_date.getDate()\n ? date_utils.format(date, \"D\", this.options.language)\n : \"\",\n Week_lower:\n date.getMonth() !== last_date.getMonth()\n ? date_utils.format(date, \"D MMM\", this.options.language)\n : date_utils.format(date, \"D\", this.options.language),\n Month_lower: date_utils.format(date, \"MMMM\", this.options.language),\n Year_lower: date_utils.format(date, \"YYYY\", this.options.language),\n Hour_upper:\n date.getDate() !== last_date.getDate()\n ? date_utils.format(date, \"D MMMM\", this.options.language)\n : \"\",\n \"Quarter Day_upper\":\n date.getDate() !== last_date.getDate()\n ? date_utils.format(date, \"D MMM\", this.options.language)\n : \"\",\n \"Half Day_upper\":\n date.getDate() !== last_date.getDate()\n ? date.getMonth() !== last_date.getMonth()\n ? date_utils.format(date, \"D MMM\", this.options.language)\n : date_utils.format(date, \"D\", this.options.language)\n : \"\",\n Day_upper:\n date.getMonth() !== last_date.getMonth() || !last_date_info\n ? date_utils.format(date, \"MMMM\", this.options.language)\n : \"\",\n Week_upper:\n date.getMonth() !== last_date.getMonth()\n ? date_utils.format(date, \"MMMM\", this.options.language)\n : \"\",\n Month_upper:\n date.getFullYear() !== last_date.getFullYear()\n ? date_utils.format(date, \"YYYY\", this.options.language)\n : \"\",\n Year_upper:\n date.getFullYear() !== last_date.getFullYear()\n ? date_utils.format(date, \"YYYY\", this.options.language)\n : \"\",\n };\n let column_width = this.view_is(VIEW_MODE.MONTH) ? (date_utils.get_days_in_month(date) * this.options.column_width) / 30 : this.options.column_width;\n const base_pos = {\n x: last_date_info\n ? last_date_info.base_pos_x + last_date_info.column_width\n : 0,\n lower_y: this.options.header_height - 20,\n upper_y: this.options.header_height - 50,\n };\n const x_pos = {\n Hour_lower: column_width / 2,\n Hour_upper: column_width * 12,\n \"Quarter Day_lower\": column_width / 2,\n \"Quarter Day_upper\": column_width * 2,\n \"Half Day_lower\": column_width / 2,\n \"Half Day_upper\": column_width,\n Day_lower: column_width / 2,\n Day_upper: column_width / 2,\n Week_lower: column_width / 2,\n Week_upper: (column_width * 4) / 2,\n Month_lower: column_width / 2,\n Month_upper: column_width / 2,\n Year_lower: column_width / 2,\n Year_upper: (column_width * 30) / 2,\n };\n return {\n date,\n formatted_date: date_utils.format(date).replaceAll(' ', '_'),\n column_width,\n base_pos_x: base_pos.x,\n upper_text: this.options.lower_text ? this.options.upper_text(date, this.options.view_mode, date_text[`${this.options.view_mode}_upper`]) : date_text[`${this.options.view_mode}_upper`],\n lower_text: this.options.lower_text ? this.options.lower_text(date, this.options.view_mode, date_text[`${this.options.view_mode}_lower`]) : date_text[`${this.options.view_mode}_lower`],\n upper_x: base_pos.x + x_pos[`${this.options.view_mode}_upper`],\n upper_y: base_pos.upper_y,\n lower_x: base_pos.x + x_pos[`${this.options.view_mode}_lower`],\n lower_y: base_pos.lower_y,\n };\n }\n\n make_bars() {\n this.bars = this.tasks.map((task) => {\n const bar = new Bar(this, task);\n this.layers.bar.appendChild(bar.group);\n return bar;\n });\n }\n\n make_arrows() {\n this.arrows = [];\n for (let task of this.tasks) {\n let arrows = [];\n arrows = task.dependencies\n .map((task_id) => {\n const dependency = this.get_task(task_id);\n if (!dependency) return;\n const arrow = new Arrow(\n this,\n this.bars[dependency._index], // from_task\n this.bars[task._index], // to_task\n );\n this.layers.arrow.appendChild(arrow.element);\n return arrow;\n })\n .filter(Boolean); // filter falsy values\n this.arrows = this.arrows.concat(arrows);\n }\n }\n\n map_arrows_on_bars() {\n for (let bar of this.bars) {\n bar.arrows = this.arrows.filter((arrow) => {\n return (\n arrow.from_task.task.id === bar.task.id ||\n arrow.to_task.task.id === bar.task.id\n );\n });\n }\n }\n\n set_width() {\n const cur_width = this.$svg.getBoundingClientRect().width;\n const actual_width = this.$svg.querySelector('.grid .grid-row') ? this.$svg\n .querySelector('.grid .grid-row')\n .getAttribute('width') : 0;\n if (cur_width < actual_width) {\n this.$svg.setAttribute(\"width\", actual_width);\n }\n }\n\n set_scroll_position(date) {\n if (!date || date === 'start') {\n date = this.gantt_start\n } else if (date === 'today') {\n return this.scroll_today()\n } else if (typeof date === 'string') {\n date = date_utils.parse(date)\n }\n\n const parent_element = this.$svg.parentElement;\n if (!parent_element) return;\n\n const hours_before_first_task = date_utils.diff(\n date,\n this.gantt_start,\n \"hour\",\n ) + 24;\n\n const scroll_pos =\n (hours_before_first_task / this.options.step) *\n this.options.column_width -\n this.options.column_width;\n parent_element.scrollTo({ left: scroll_pos, behavior: 'smooth' })\n }\n\n scroll_today() {\n this.set_scroll_position(new Date())\n }\n\n bind_grid_click() {\n $.on(\n this.$svg,\n this.options.popup_trigger,\n \".grid-row, .grid-header\",\n () => {\n this.unselect_all();\n this.hide_popup();\n },\n );\n }\n\n bind_bar_events() {\n let is_dragging = false;\n let x_on_start = 0;\n let x_on_scroll_start = 0;\n let y_on_start = 0;\n let is_resizing_left = false;\n let is_resizing_right = false;\n let parent_bar_id = null;\n let bars = []; // instanceof Bar\n this.bar_being_dragged = null;\n\n function action_in_progress() {\n return is_dragging || is_resizing_left || is_resizing_right;\n }\n\n $.on(this.$svg, \"mousedown\", \".bar-wrapper, .handle\", (e, element) => {\n const bar_wrapper = $.closest(\".bar-wrapper\", element);\n bars.forEach((bar) => bar.group.classList.remove(\"active\"));\n\n if (element.classList.contains(\"left\")) {\n is_resizing_left = true;\n } else if (element.classList.contains(\"right\")) {\n is_resizing_right = true;\n } else if (element.classList.contains(\"bar-wrapper\")) {\n is_dragging = true;\n }\n\n bar_wrapper.classList.add(\"active\");\n this.popup.parent.classList.add('hidden')\n\n x_on_start = e.offsetX;\n y_on_start = e.offsetY;\n\n parent_bar_id = bar_wrapper.getAttribute(\"data-id\");\n const ids = [\n parent_bar_id,\n ...this.get_all_dependent_tasks(parent_bar_id),\n ];\n bars = ids.map((id) => this.get_bar(id));\n\n this.bar_being_dragged = parent_bar_id;\n\n bars.forEach((bar) => {\n const $bar = bar.$bar;\n $bar.ox = $bar.getX();\n $bar.oy = $bar.getY();\n $bar.owidth = $bar.getWidth();\n $bar.finaldx = 0;\n });\n });\n $.on(this.$container, 'scroll', e => {\n let elements = document.querySelectorAll('.bar-wrapper');\n let localBars = [];\n const ids = [];\n let dx;\n if (x_on_scroll_start) {\n dx = e.currentTarget.scrollLeft - x_on_scroll_start;\n }\n\n const daysSinceStart = e.currentTarget.scrollLeft / this.options.column_width * this.options.step / 24;\n let format_str = \"D MMM\"\n if ([\"Year\", \"Month\"].includes(this.options.view_mode)) format_str = 'YYYY'\n else if ([\"Day\", \"Week\"].includes(this.options.view_mode)) format_str = 'MMMM'\n else if (this.view_is('Half Day')) format_str = 'D'\n else if (this.view_is('Hour')) format_str = \"D MMMM\"\n\n\n let currentUpper = date_utils.format(\n date_utils.add(this.gantt_start, daysSinceStart, 'day'),\n format_str\n );\n const upperTexts = Array.from(document.querySelectorAll('.upper-text'));\n const $el = upperTexts.find(el => el.textContent === currentUpper)\n if ($el && !$el.classList.contains('current-upper')) {\n const $current = document.querySelector('.current-upper')\n if ($current) {\n $current.classList.remove('current-upper')\n $current.style.left = this.upper_texts_x[$current.textContent] + 'px';\n $current.style.top = this.options.header_height - 50 + 'px';\n }\n\n $el.classList.add('current-upper')\n let dimensions = this.$svg.getBoundingClientRect()\n $el.style.left = dimensions.x + this.$container.scrollLeft + 10 + 'px';\n $el.style.top = dimensions.y + this.options.header_height - 50 + 'px';\n }\n\n Array.prototype.forEach.call(elements, function (el, i) {\n ids.push(el.getAttribute('data-id'));\n });\n\n if (dx) {\n localBars = ids.map(id => this.get_bar(id));\n if (this.options.auto_move_label) {\n localBars.forEach(bar => {\n bar.update_label_position_on_horizontal_scroll({ x: dx, sx: e.currentTarget.scrollLeft });\n });\n }\n }\n\n x_on_scroll_start = e.currentTarget.scrollLeft;\n });\n\n $.on(this.$svg, \"mousemove\", (e) => {\n if (!action_in_progress()) return;\n const dx = e.offsetX - x_on_start;\n const dy = e.offsetY - y_on_start;\n\n bars.forEach((bar) => {\n const $bar = bar.$bar;\n $bar.finaldx = this.get_snap_position(dx);\n this.hide_popup();\n if (is_resizing_left) {\n if (parent_bar_id === bar.task.id) {\n bar.update_bar_position({\n x: $bar.ox + $bar.finaldx,\n width: $bar.owidth - $bar.finaldx,\n });\n } else {\n bar.update_bar_position({\n x: $bar.ox + $bar.finaldx,\n });\n }\n } else if (is_resizing_right) {\n if (parent_bar_id === bar.task.id) {\n bar.update_bar_position({\n width: $bar.owidth + $bar.finaldx,\n });\n }\n } else if (is_dragging && !this.options.readonly) {\n bar.update_bar_position({ x: $bar.ox + $bar.finaldx });\n }\n });\n });\n\n document.addEventListener(\"mouseup\", (e) => {\n\n is_dragging = false;\n is_resizing_left = false;\n is_resizing_right = false;\n });\n\n $.on(this.$svg, \"mouseup\", (e) => {\n this.bar_being_dragged = null;\n bars.forEach((bar) => {\n const $bar = bar.$bar;\n if (!$bar.finaldx) return;\n bar.date_changed();\n bar.set_action_completed();\n });\n });\n\n this.bind_bar_progress();\n }\n\n bind_bar_progress() {\n let x_on_start = 0;\n let y_on_start = 0;\n let is_resizing = null;\n let bar = null;\n let $bar_progress = null;\n let $bar = null;\n\n $.on(this.$svg, \"mousedown\", \".handle.progress\", (e, handle) => {\n is_resizing = true;\n x_on_start = e.offsetX;\n y_on_start = e.offsetY;\n\n const $bar_wrapper = $.closest(\".bar-wrapper\", handle);\n const id = $bar_wrapper.getAttribute(\"data-id\");\n bar = this.get_bar(id);\n\n $bar_progress = bar.$bar_progress;\n $bar = bar.$bar;\n\n $bar_progress.finaldx = 0;\n $bar_progress.owidth = $bar_progress.getWidth();\n $bar_progress.min_dx = -$bar_progress.getWidth();\n $bar_progress.max_dx = $bar.getWidth() - $bar_progress.getWidth();\n });\n\n $.on(this.$svg, \"mousemove\", (e) => {\n if (!is_resizing) return;\n let dx = e.offsetX - x_on_start;\n let dy = e.offsetY - y_on_start;\n\n if (dx > $bar_progress.max_dx) {\n dx = $bar_progress.max_dx;\n }\n if (dx < $bar_progress.min_dx) {\n dx = $bar_progress.min_dx;\n }\n\n const $handle = bar.$handle_progress;\n $.attr($bar_progress, \"width\", $bar_progress.owidth + dx);\n $.attr($handle, \"points\", bar.get_progress_polygon_points());\n $bar_progress.finaldx = dx;\n });\n\n $.on(this.$svg, \"mouseup\", () => {\n is_resizing = false;\n if (!($bar_progress && $bar_progress.finaldx)) return;\n\n $bar_progress.finaldx = 0;\n bar.progress_changed();\n bar.set_action_completed();\n bar = null;\n $bar_progress = null;\n $bar = null;\n });\n }\n\n get_all_dependent_tasks(task_id) {\n let out = [];\n let to_process = [task_id];\n while (to_process.length) {\n const deps = to_process.reduce((acc, curr) => {\n acc = acc.concat(this.dependency_map[curr]);\n return acc;\n }, []);\n\n out = out.concat(deps);\n to_process = deps.filter((d) => !to_process.includes(d));\n }\n\n return out.filter(Boolean);\n }\n\n get_snap_position(dx) {\n let odx = dx,\n rem,\n position;\n\n if (this.view_is(VIEW_MODE.WEEK)) {\n rem = dx % (this.options.column_width / 7);\n position =\n odx -\n rem +\n (rem < this.options.column_width / 14\n ? 0\n : this.options.column_width / 7);\n } else if (this.view_is(VIEW_MODE.MONTH)) {\n rem = dx % (this.options.column_width / 30);\n position =\n odx -\n rem +\n (rem < this.options.column_width / 60\n ? 0\n : this.options.column_width / 30);\n } else {\n rem = dx % this.options.column_width;\n position =\n odx -\n rem +\n (rem < this.options.column_width / 2 ? 0 : this.options.column_width);\n }\n return position;\n }\n\n unselect_all() {\n [...this.$svg.querySelectorAll(\".bar-wrapper\")].forEach((el) => {\n el.classList.remove(\"active\");\n });\n this.popup.parent.classList.remove('hidden')\n }\n\n view_is(modes) {\n if (typeof modes === \"string\") {\n return this.options.view_mode === modes;\n }\n\n if (Array.isArray(modes)) {\n return modes.some((mode) => this.options.view_mode === mode);\n }\n\n return false;\n }\n\n get_task(id) {\n return this.tasks.find((task) => {\n return task.id === id;\n });\n }\n\n get_bar(id) {\n return this.bars.find((bar) => {\n return bar.task.id === id;\n });\n }\n\n show_popup(options) {\n if (this.options.popup === false) return\n if (!this.popup) {\n this.popup = new Popup(\n this.$popup_wrapper,\n this.options.popup,\n );\n }\n this.popup.show(options);\n }\n\n hide_popup() {\n this.popup && this.popup.hide();\n }\n\n trigger_event(event, args) {\n if (this.options[\"on_\" + event]) {\n this.options[\"on_\" + event].apply(null, args);\n }\n }\n\n /**\n * Gets the oldest starting date from the list of tasks\n *\n * @returns Date\n * @memberof Gantt\n */\n get_oldest_starting_date() {\n if (!this.tasks.length) return new Date()\n return this.tasks\n .map((task) => task._start)\n .reduce((prev_date, cur_date) =>\n cur_date <= prev_date ? cur_date : prev_date,\n );\n }\n\n /**\n * Clear all elements from the parent svg element\n *\n * @memberof Gantt\n */\n clear() {\n this.$svg.innerHTML = \"\";\n this.$header?.remove?.()\n this.$current_highlight?.remove?.()\n this.popup?.hide?.()\n }\n}\n\nGantt.VIEW_MODE = VIEW_MODE;\n\nfunction generate_id(task) {\n return task.name + \"_\" + Math.random().toString(36).slice(2, 12);\n}\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/frappe-gantt.min.css b/dist/frappe-gantt.min.css deleted file mode 100644 index 3462f83..0000000 --- a/dist/frappe-gantt.min.css +++ /dev/null @@ -1 +0,0 @@ -.dark>.gantt-container .gantt .grid-header{fill:#252525;stroke:#616161}.dark>.gantt-container .gantt .grid-row{fill:#252525}.dark>.gantt-container .gantt .grid-row:nth-child(even){fill:#3e3e3e}.dark>.gantt-container .gantt .row-line{stroke:#3e3e3e}.dark>.gantt-container .gantt .tick{stroke:#616161}.dark>.gantt-container .gantt .today-highlight{opacity:.2}.dark>.gantt-container .gantt .arrow{stroke:#eee}.dark>.gantt-container .gantt .bar{fill:#616161;stroke:none}.dark>.gantt-container .gantt .bar-progress{fill:#8a8aff}.dark>.gantt-container .gantt .bar-invalid{fill:rgba(0,0,0,0);stroke:#c6ccd2}.dark>.gantt-container .gantt .bar-invalid~.bar-label{fill:#ececec}.dark>.gantt-container .gantt .bar-label.big{fill:#ececec}.dark>.gantt-container .gantt .bar-wrapper:hover .bar{fill:#6e6e6e}.dark>.gantt-container .gantt .bar-wrapper:hover .bar-progress{fill:#a4a4ff}.dark>.gantt-container .gantt .bar-wrapper.active .bar{fill:#6e6e6e}.dark>.gantt-container .gantt .bar-wrapper.active .bar-progress{fill:#a4a4ff}.dark>.gantt-container .gantt .upper-text{fill:#a2a2a2}.dark>.gantt-container .gantt .lower-text{fill:#f7f7f7}.dark>.gantt-container .popup-wrapper{background-color:#333}.dark>.gantt-container .popup-wrapper .title{border-color:#a4a4ff}.dark>.gantt-container .popup-wrapper .pointer{border-top-color:#333}.gantt-container{line-height:14.5px}.gantt-container .grid-header{background-color:#fff;position:sticky;top:0;left:0;z-index:10}.gantt-container .lower-text,.gantt-container .upper-text{text-anchor:middle;color:#111}.gantt-container .upper-header{height:40px}.gantt-container .lower-header{height:30px}.gantt-container .lower-text{font-size:14px;position:absolute;width:fit-content}.gantt-container .upper-text{position:absolute;width:fit-content;font-weight:500;font-size:16px}.gantt-container .current-upper{position:fixed}.gantt-container .side-header{position:fixed;padding:0 10px;margin-right:10px;background:#fff;line-height:20px;font-weight:400}.gantt-container .today-button,.gantt-container .viewmode-select{background:#f4f5f6;text-align:-webkit-center;text-align:center;height:25px;border-radius:8px;border:none;color:#111;padding:4px 10px;border-radius:8px;height:25px}.gantt-container .viewmode-select{outline:none !important;padding:4px 8px;margin-right:4px;-webkit-appearance:none;-moz-appearance:none;text-indent:1px;text-overflow:""}.gantt-container .date-highlight{background-color:#ebeef0;border-radius:12px;position:absolute;display:none}.gantt-container .current-highlight{position:absolute;background:#2c94ec;width:1px}.gantt-container .current-date-highlight{background:#2c94ec;color:#fff;padding:4px 8px;border-radius:200px}.gantt{user-select:none;-webkit-user-select:none;position:absolute}.gantt .grid-background{fill:none}.gantt .grid-row{fill:#fff}.gantt .row-line{stroke:#ebeff2}.gantt .tick{stroke:#ebeef0;stroke-width:.4}.gantt .tick.thick{stroke:#e0e0e0;stroke-width:.7}.gantt .holiday-highlight{fill:#f9fafa}.gantt .arrow{fill:none;stroke:#9fa9b1;stroke-width:1}.gantt .bar-wrapper .bar{fill:#fff;stroke:#fff;stroke-width:0;transition:stroke-width .3s ease}.gantt .bar-progress{fill:#ebeef0}.gantt .bar-expected-progress{fill:#c4c4e9}.gantt .bar-invalid{fill:rgba(0,0,0,0);stroke:#fff;stroke-width:1;stroke-dasharray:5}.gantt .bar-invalid~.bar-label{fill:#fff}.gantt .bar-label{fill:#111;dominant-baseline:central;font-family:Helvetica;font-size:13px;font-weight:400}.gantt .bar-label.big{fill:#111;text-anchor:start}.gantt .bar-wrapper.important .bar{fill:#94c4f4}.gantt .bar-wrapper.important .bar-progress{fill:#2c94ec}.gantt .bar-wrapper.important .bar-label{fill:#fff}.gantt .bar-wrapper.important .handle{fill:#94c4f4}.gantt .bar-wrapper.important .handle.progress{fill:#fff}.gantt .handle{fill:#dcdce4;cursor:ew-resize;opacity:0;visibility:hidden;transition:opacity .3s ease}.gantt .handle.progress{fill:#666}.gantt .bar-wrapper{cursor:pointer;outline:none}.gantt .bar-wrapper.active .handle{visibility:visible;opacity:1}.gantt .bar-wrapper .bar{-webkit-filter:drop-shadow(3px 3px 2px rgba(0, 0, 0, 0.7));filter:drop-shadow(0 0 2px rgba(17, 43, 66, 0.16));border-radius:3px}.gantt .bar-wrapper:hover .bar{transition:transform .3s ease}.gantt .bar-wrapper:hover .date-highlight{display:block}.gantt .hide{display:none}.gantt-container{position:relative;overflow:auto;font-size:12px;height:500px}.gantt-container .popup-wrapper{position:absolute;top:0;left:0;background:#171b1f;padding:10px;border-radius:5px;width:max-content}.gantt-container .popup-wrapper.hidden{opacity:0 !important}.gantt-container .popup-wrapper .title{margin-bottom:5px;text-align:-webkit-center;text-align:center;color:#fff}.gantt-container .popup-wrapper .subtitle{color:#98a1a9}.gantt-container .popup-wrapper .pointer{position:absolute;height:5px;margin:0 0 0 -5px;border:5px solid rgba(0,0,0,0);border-bottom-color:rgba(0,0,0,.8)} \ No newline at end of file diff --git a/dist/frappe-gantt.min.js b/dist/frappe-gantt.min.js deleted file mode 100644 index f628634..0000000 --- a/dist/frappe-gantt.min.js +++ /dev/null @@ -1,2 +0,0 @@ -var Gantt=function(){"use strict";const t="year",e="month",s="day",i="hour",o="minute",a="second",n="millisecond",r={January:"Jan",February:"Feb",March:"Mar",April:"Apr",May:"May",June:"Jun",July:"Jul",August:"Aug",September:"Sep",October:"Oct",November:"Nov",December:"Dec"};var h={parse_duration(t){const e=/([0-9])+(y|m|d|h|min|s|ms)/gm.exec(t);if(null!==e){if("y"===e[2])return{duration:parseInt(e[1]),scale:"year"};if("m"===e[2])return{duration:parseInt(e[1]),scale:"month"};if("d"===e[2])return{duration:parseInt(e[1]),scale:"day"};if("h"===e[2])return{duration:parseInt(e[1]),scale:"hour"};if("min"===e[2])return{duration:parseInt(e[1]),scale:"minute"};if("s"===e[2])return{duration:parseInt(e[1]),scale:"second"};if("ms"===e[2])return{duration:parseInt(e[1]),scale:"millisecond"}}},parse(t,e="-",s=/[.:]/){if(t instanceof Date)return t;if("string"==typeof t){let i,o;const a=t.split(" ");i=a[0].split(e).map((t=>parseInt(t,10))),o=a[1]&&a[1].split(s),i[1]=i[1]?i[1]-1:0;let n=i;return o&&o.length&&(4===o.length&&(o[3]="0."+o[3],o[3]=1e3*parseFloat(o[3])),n=n.concat(o)),new Date(...n)}},to_string(t,e=!1){if(!(t instanceof Date))throw new TypeError("Invalid argument type");const s=this.get_date_values(t).map(((t,e)=>(1===e&&(t+=1),d(t+"",6===e?3:2,"0")))),i=`${s[0]}-${s[1]}-${s[2]}`,o=`${s[3]}:${s[4]}:${s[5]}.${s[6]}`;return i+(e?" "+o:"")},format(t,e="YYYY-MM-DD HH:mm:ss.SSS",s="en"){const i=new Intl.DateTimeFormat(s,{month:"long"}).format(t),o=i.charAt(0).toUpperCase()+i.slice(1),a=this.get_date_values(t).map((t=>d(t,2,0))),n={YYYY:a[0],MM:d(+a[1]+1,2,0),DD:a[2],HH:a[3],mm:a[4],ss:a[5],SSS:a[6],D:a[2],MMMM:o,MMM:r[o]};let h=e;const p=[];return Object.keys(n).sort(((t,e)=>e.length-t.length)).forEach((t=>{h.includes(t)&&(h=h.replaceAll(t,`$${p.length}`),p.push(n[t]))})),p.forEach(((t,e)=>{h=h.replaceAll(`$${e}`,t)})),h},diff(t,e,i=s){let o,a,n,r,h,d,p;return o=t-e,a=o/1e3,r=a/60,n=r/60,h=n/24,d=h/30,p=d/12,i.endsWith("s")||(i+="s"),Math.floor({milliseconds:o,seconds:a,minutes:r,hours:n,days:h,months:d,years:p}[i])},today(){const t=this.get_date_values(new Date).slice(0,3);return new Date(...t)},now:()=>new Date,add(r,h,d){h=parseInt(h,10);const p=[r.getFullYear()+(d===t?h:0),r.getMonth()+(d===e?h:0),r.getDate()+(d===s?h:0),r.getHours()+(d===i?h:0),r.getMinutes()+(d===o?h:0),r.getSeconds()+(d===a?h:0),r.getMilliseconds()+(d===n?h:0)];return new Date(...p)},start_of(r,h){const d={[t]:6,[e]:5,[s]:4,[i]:3,[o]:2,[a]:1,[n]:0};function p(t){return d[t]<=d[h]}const l=[r.getFullYear(),p(t)?0:r.getMonth(),p(e)?1:r.getDate(),p(s)?0:r.getHours(),p(i)?0:r.getMinutes(),p(o)?0:r.getSeconds(),p(a)?0:r.getMilliseconds()];return new Date(...l)},clone(t){return new Date(...this.get_date_values(t))},get_date_values:t=>[t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()],get_days_in_month(t){const e=[31,28,31,30,31,30,31,31,30,31,30,31],s=t.getMonth();if(1!==s)return e[s];const i=t.getFullYear();return i%4==0&&i%100!=0||i%400==0?29:28}};function d(t,e,s){return t+="",e>>=0,s=String(void 0!==s?s:" "),t.length>e?String(t):((e-=t.length)>s.length&&(s+=s.repeat(e/s.length)),s.slice(0,e)+String(t))}function p(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function l(t,e){const s=document.createElementNS("http://www.w3.org/2000/svg",t);for(let t in e)if("append_to"===t){e.append_to.appendChild(s)}else"innerHTML"===t?s.innerHTML=e.innerHTML:"clipPath"===t?s.setAttribute("clip-path","url(#"+e[t]+")"):s.setAttribute(t,e[t]);return s}function _(t,e,s,i){const o=function(t,e,s,i,o="0.4s",a="0.1s"){const n=t.querySelector("animate");if(n)return p.attr(n,{attributeName:e,from:s,to:i,dur:o,begin:"click + "+a}),t;const r=l("animate",{attributeName:e,from:s,to:i,dur:o,begin:a,calcMode:"spline",values:s+";"+i,keyTimes:"0; 1",keySplines:g("ease-out")});return t.appendChild(r),t}(t,e,s,i);if(o===t){const t=document.createEvent("HTMLEvents");t.initEvent("click",!0,!0),t.eventName="click",o.dispatchEvent(t)}}function g(t){return{ease:".25 .1 .25 1",linear:"0 0 1 1","ease-in":".42 0 1 1","ease-out":"0 0 .58 1","ease-in-out":".42 0 .58 1"}[t]}p.on=(t,e,s,i)=>{i?p.delegate(t,e,s,i):(i=s,p.bind(t,e,i))},p.off=(t,e,s)=>{t.removeEventListener(e,s)},p.bind=(t,e,s)=>{e.split(/\s+/).forEach((function(e){t.addEventListener(e,s)}))},p.delegate=(t,e,s,i)=>{t.addEventListener(e,(function(t){const e=t.target.closest(s);e&&(t.delegatedTarget=e,i.call(this,t,e))}))},p.closest=(t,e)=>e?e.matches(t)?e:p.closest(t,e.parentNode):null,p.attr=(t,e,s)=>{if(!s&&"string"==typeof e)return t.getAttribute(e);if("object"!=typeof e)t.setAttribute(e,s);else for(let s in e)p.attr(t,s,e[s])};class u{constructor(t,e){this.set_defaults(t,e),this.prepare(),this.draw(),this.bind()}set_defaults(t,e){this.action_completed=!1,this.gantt=t,this.task=e}prepare(){this.prepare_values(),this.prepare_helpers()}prepare_values(){this.invalid=this.task.invalid,this.height=this.gantt.options.bar_height,this.image_size=this.height-5,this.compute_x(),this.compute_y(),this.compute_duration(),this.corner_radius=this.gantt.options.bar_corner_radius,this.width=this.gantt.options.column_width*this.duration,this.progress_width=this.gantt.options.column_width*this.duration*(this.task.progress/100)||0,this.group=l("g",{class:"bar-wrapper"+(this.task.custom_class?" "+this.task.custom_class:"")+(this.task.important?" important":""),"data-id":this.task.id}),this.bar_group=l("g",{class:"bar-group",append_to:this.group}),this.handle_group=l("g",{class:"handle-group",append_to:this.group})}prepare_helpers(){SVGElement.prototype.getX=function(){return+this.getAttribute("x")},SVGElement.prototype.getY=function(){return+this.getAttribute("y")},SVGElement.prototype.getWidth=function(){return+this.getAttribute("width")},SVGElement.prototype.getHeight=function(){return+this.getAttribute("height")},SVGElement.prototype.getEndX=function(){return this.getX()+this.getWidth()}}prepare_expected_progress_values(){this.compute_expected_progress(),this.expected_progress_width=this.gantt.options.column_width*this.duration*(this.expected_progress/100)||0}draw(){this.draw_bar(),this.draw_progress_bar(),this.gantt.options.show_expected_progress&&(this.prepare_expected_progress_values(),this.draw_expected_progress_bar()),this.draw_label(),this.draw_resize_handles(),this.task.thumbnail&&this.draw_thumbnail()}draw_bar(){this.$bar=l("rect",{x:this.x,y:this.y,width:this.width,height:this.height,rx:this.corner_radius,ry:this.corner_radius,class:"bar",append_to:this.bar_group}),_(this.$bar,"width",0,this.width),this.invalid&&this.$bar.classList.add("bar-invalid")}draw_expected_progress_bar(){this.invalid||(this.$expected_bar_progress=l("rect",{x:this.x,y:this.y,width:this.expected_progress_width,height:this.height,rx:this.corner_radius,ry:this.corner_radius,class:"bar-expected-progress",append_to:this.bar_group}),_(this.$expected_bar_progress,"width",0,this.expected_progress_width))}draw_progress_bar(){if(this.invalid)return;this.$bar_progress=l("rect",{x:this.x,y:this.y,width:this.progress_width,height:this.height,rx:this.corner_radius,ry:this.corner_radius,class:"bar-progress",append_to:this.bar_group});const t=h.diff(this.task._start,this.gantt.gantt_start,"hour")/this.gantt.options.step*this.gantt.options.column_width;let e=document.createElement("div");e.id=`${this.task.id}-highlight`,e.classList.add("date-highlight"),e.style.height=.8*this.height+"px",e.style.width=this.width+"px",e.style.top=this.gantt.options.header_height-25+"px",e.style.left=t+"px",this.$date_highlight=e,this.gantt.$lower_header.prepend(e),_(this.$bar_progress,"width",0,this.progress_width)}draw_label(){let t=this.x+this.$bar.getWidth()/2;this.task.thumbnail&&(t=this.x+this.image_size+5),l("text",{x:t,y:this.y+this.height/2,innerHTML:this.task.name,class:"bar-label",append_to:this.bar_group}),requestAnimationFrame((()=>this.update_label_position()))}draw_thumbnail(){let t,e;t=l("defs",{append_to:this.bar_group}),l("rect",{id:"rect_"+this.task.id,x:this.x+10,y:this.y+2,width:this.image_size,height:this.image_size,rx:"15",class:"img_mask",append_to:t}),e=l("clipPath",{id:"clip_"+this.task.id,append_to:t}),l("use",{href:"#rect_"+this.task.id,append_to:e}),l("image",{x:this.x+10,y:this.y+2,width:this.image_size,height:this.image_size,class:"bar-img",href:this.task.thumbnail,clipPath:"clip_"+this.task.id,append_to:this.bar_group})}draw_resize_handles(){if(this.invalid||this.gantt.options.readonly)return;const t=this.$bar;l("rect",{x:t.getX()+t.getWidth()+8-4,y:t.getY()+1,width:8,height:this.height-2,rx:this.corner_radius,ry:this.corner_radius,class:"handle right",append_to:this.handle_group}),l("rect",{x:t.getX()-8-4,y:t.getY()+1,width:8,height:this.height-2,rx:this.corner_radius,ry:this.corner_radius,class:"handle left",append_to:this.handle_group}),this.$handle_progress=l("polygon",{points:this.get_progress_polygon_points().join(","),class:"handle progress",append_to:this.handle_group})}get_progress_polygon_points(){const t=this.$bar_progress;return[t.getEndX()-5,t.getY()+t.getHeight()/2,t.getEndX(),t.getY()+t.getHeight()/2-7.5,t.getEndX()+5,t.getY()+t.getHeight()/2,t.getEndX(),t.getY()+t.getHeight()/2+7.5,t.getEndX()-5,t.getY()+t.getHeight()/2]}bind(){this.invalid||this.setup_click_event()}setup_click_event(){let t,e=this.task.id;p.on(this.group,"mouseover",(t=>{this.gantt.trigger_event("hover",[this.task,t.screenX,t.screenY,t])})),p.on(this.group,"mouseenter",(s=>t=setTimeout((()=>{this.show_popup(s.offsetX),document.querySelector(`#${e}-highlight`).style.display="block"}),200))),p.on(this.group,"mouseleave",(()=>{clearTimeout(t),this.gantt.popup?.hide?.(),document.querySelector(`#${e}-highlight`).style.display="none"})),p.on(this.group,this.gantt.options.popup_trigger,(()=>{this.gantt.trigger_event("click",[this.task])})),p.on(this.group,"dblclick",(t=>{this.action_completed||this.gantt.trigger_event("double_click",[this.task])}))}show_popup(t){if(this.gantt.bar_being_dragged)return;const e=`${h.format(this.task._start,"MMM D",this.gantt.options.language)} - ${h.format(h.add(this.task._end,-1,"second"),"MMM D",this.gantt.options.language)}
Progress: ${this.task.progress}`;this.gantt.show_popup({x:t,target_element:this.$bar,title:this.task.name,subtitle:e,task:this.task})}update_bar_position({x:t=null,width:e=null}){const s=this.$bar;if(t){if(!this.task.dependencies.map((t=>this.gantt.get_bar(t).$bar.getX())).reduce(((e,s)=>t>=s),t))return void(e=null);this.update_attr(s,"x",t),this.$date_highlight.style.left=t+"px"}e&&(this.update_attr(s,"width",e),this.$date_highlight.style.width=e+"px"),this.update_label_position(),this.update_handle_position(),this.gantt.options.show_expected_progress&&(this.date_changed(),this.compute_duration(),this.update_expected_progressbar_position()),this.update_progressbar_position(),this.update_arrow_position()}update_label_position_on_horizontal_scroll({x:t,sx:e}){const s=document.querySelector(".gantt-container"),i=this.group.querySelector(".bar-label"),o=this.group.querySelector(".bar-img")||"",a=this.bar_group.querySelector(".img_mask")||"";let n=this.$bar.getX()+this.$bar.getWidth(),r=i.getX()+t,h=o&&o.getX()+t||0,d=o&&o.getBBox().width+7||7,p=r+i.getBBox().width+7,l=e+s.clientWidth/2;i.classList.contains("big")||(p0&&pthis.$bar.getX()&&t<0&&p>l)&&(i.setAttribute("x",r),o&&(o.setAttribute("x",h),a.setAttribute("x",h)))}date_changed(){let t=!1;const{new_start_date:e,new_end_date:s}=this.compute_start_end_date();Number(this.task._start)!==Number(e)&&(t=!0,this.task._start=e),Number(this.task._end)!==Number(s)&&(t=!0,this.task._end=s),t&&this.gantt.trigger_event("date_change",[this.task,e,h.add(s,-1,"second")])}progress_changed(){const t=this.compute_progress();this.task.progress=t,this.gantt.trigger_event("progress_change",[this.task,t])}set_action_completed(){this.action_completed=!0,setTimeout((()=>this.action_completed=!1),1e3)}compute_start_end_date(){const t=this.$bar,e=t.getX()/this.gantt.options.column_width,s=h.add(this.gantt.gantt_start,e*this.gantt.options.step,"hour"),i=t.getWidth()/this.gantt.options.column_width;return{new_start_date:s,new_end_date:h.add(s,i*this.gantt.options.step,"hour")}}compute_progress(){const t=this.$bar_progress.getWidth()/this.$bar.getWidth()*100;return parseInt(t,10)}compute_expected_progress(){this.expected_progress=h.diff(h.today(),this.task._start,"hour")/this.gantt.options.step,this.expected_progress=100*(this.expected_progressn?(s.classList.add("big"),i?(i.setAttribute("x",e.getX()+e.getWidth()+5),t.setAttribute("x",e.getX()+e.getWidth()+5),s.setAttribute("x",e.getX()+e.getWidth()+o)):s.setAttribute("x",e.getX()+e.getWidth()+5)):(s.classList.remove("big"),i?(i.setAttribute("x",e.getX()+5),t.setAttribute("x",e.getX()+5),s.setAttribute("x",e.getX()+n/2+o)):s.setAttribute("x",e.getX()+n/2-a/2))}update_handle_position(){if(this.invalid||this.gantt.options.readonly)return;const t=this.$bar;this.handle_group.querySelector(".handle.left").setAttribute("x",t.getX()-12),this.handle_group.querySelector(".handle.right").setAttribute("x",t.getEndX()+4);const e=this.group.querySelector(".handle.progress");e&&e.setAttribute("points",this.get_progress_polygon_points())}update_arrow_position(){this.arrows=this.arrows||[];for(let t of this.arrows)t.update()}}class c{constructor(t,e,s){this.gantt=t,this.from_task=e,this.to_task=s,this.calculate_path(),this.draw()}calculate_path(){let t=this.from_task.$bar.getX()+this.from_task.$bar.getWidth()/2;const e=()=>this.to_task.$bar.getX()this.from_task.$bar.getX()+this.gantt.options.padding;for(;e();)t-=10;const s=this.gantt.options.header_height+this.gantt.options.bar_height+(this.gantt.options.padding+this.gantt.options.bar_height)*this.from_task.task._index+this.gantt.options.padding,i=this.to_task.$bar.getX()-this.gantt.options.padding/2-7,o=this.gantt.options.header_height+this.gantt.options.bar_height/2+(this.gantt.options.padding+this.gantt.options.bar_height)*this.to_task.task._index+this.gantt.options.padding,a=this.from_task.task._index>this.to_task.task._index,n=this.gantt.options.arrow_curve,r=a?1:0,h=a?-n:n,d=a?o+this.gantt.options.arrow_curve:o-this.gantt.options.arrow_curve;if(this.path=`\n M ${t} ${s}\n V ${d}\n a ${n} ${n} 0 0 ${r} ${n} ${h}\n L ${i} ${o}\n m -5 -5\n l 5 5\n l -5 5`,this.to_task.$bar.getX()\n
\n
\n ',this.hide(),this.title=this.parent.querySelector(".title"),this.subtitle=this.parent.querySelector(".subtitle"),this.pointer=this.parent.querySelector(".pointer")}show(t){if(!t.target_element)throw new Error("target_element is required to show popup");const e=t.target_element;if(this.custom_html){let e=this.custom_html(t.task);e+='
',this.parent.innerHTML=e,this.pointer=this.parent.querySelector(".pointer")}else this.title.innerHTML=t.title,this.subtitle.innerHTML=t.subtitle;let s;e instanceof HTMLElement?s=e.getBoundingClientRect():e instanceof SVGElement&&(s=t.target_element.getBBox()),this.parent.style.left=t.x-this.parent.clientWidth/2+"px",this.parent.style.top=s.y+s.height+10+"px",this.pointer.style.left=this.parent.clientWidth/2+"px",this.pointer.style.top="-15px",this.parent.style.opacity=1}hide(){this.parent.style.opacity=0,this.parent.style.left=0}}const w={HOUR:"Hour",QUARTER_DAY:"Quarter Day",HALF_DAY:"Half Day",DAY:"Day",WEEK:"Week",MONTH:"Month",YEAR:"Year"},f={HOUR:["7d","7d"],QUARTER_DAY:["7d","7d"],HALF_DAY:["7d","7d"],DAY:["1m","1m"],WEEK:["1m","1m"],MONTH:["1m","1m"],YEAR:["2y","2y"]},b={header_height:65,column_width:30,step:24,view_modes:[...Object.values(w)],bar_height:30,bar_corner_radius:3,arrow_curve:5,padding:18,view_mode:"Day",date_format:"YYYY-MM-DD",popup_trigger:"click",show_expected_progress:!1,popup:null,language:"en",readonly:!1,highlight_weekend:!0,scroll_to:"start",lines:"both",auto_move_label:!0,today_button:!0,view_mode_select:!1};class y{constructor(t,e,s){this.setup_wrapper(t),this.setup_options(s),this.setup_tasks(e),this.change_view_mode(),this.bind_events()}setup_wrapper(t){let e,s;if("string"==typeof t&&(t=document.querySelector(t)),t instanceof HTMLElement)s=t,e=t.querySelector("svg");else{if(!(t instanceof SVGElement))throw new TypeError("Frappé Gantt only supports usage of a string CSS selector, HTML DOM element or SVG DOM element for the 'element' parameter");e=t}e?(this.$svg=e,this.$svg.classList.add("gantt")):this.$svg=l("svg",{append_to:s,class:"gantt"}),this.$container=document.createElement("div"),this.$container.classList.add("gantt-container");this.$svg.parentElement.appendChild(this.$container),this.$container.appendChild(this.$svg),this.$popup_wrapper=document.createElement("div"),this.$popup_wrapper.classList.add("popup-wrapper"),this.$container.appendChild(this.$popup_wrapper)}setup_options(t){this.options={...b,...t},t.view_mode_padding||(t.view_mode_padding={});for(let[e,s]of Object.entries(t.view_mode_padding))"string"==typeof s&&(t.view_mode_padding[e]=[s,s]);this.options.view_mode_padding={...f,...t.view_mode_padding}}setup_tasks(t){this.tasks=t.map(((t,e)=>{if(t._start=h.parse(t.start),void 0===t.end&&void 0!==t.duration){t.end=t._start,t.duration.split(" ").forEach((e=>{let{duration:s,scale:i}=h.parse_duration(e);t.end=h.add(t.end,s,i)}))}if(t._end=h.parse(t.end),h.diff(t._end,t._start,"year")<0)throw Error("start of task can't be after end of task: in task #, "+(e+1));if(h.diff(t._end,t._start,"year")>10&&(t.end=null),t._index=e,!t.start&&!t.end){const e=h.today();t._start=e,t._end=h.add(e,2,"day")}!t.start&&t.end&&(t._start=h.add(t._end,-2,"day")),t.start&&!t.end&&(t._end=h.add(t._start,2,"day"));if(h.get_date_values(t._end).slice(3).every((t=>0===t))&&(t._end=h.add(t._end,24,"hour")),t.start&&t.end||(t.invalid=!0),"string"==typeof t.dependencies||!t.dependencies){let e=[];t.dependencies&&(e=t.dependencies.split(",").map((t=>t.trim().replaceAll(" ","_"))).filter((t=>t))),t.dependencies=e}return t.id?"string"==typeof t.id?t.id=t.id.replaceAll(" ","_"):t.id=`${t.id}`:t.id=function(t){return t.name+"_"+Math.random().toString(36).slice(2,12)}(t),t})),this.setup_dependencies()}setup_dependencies(){this.dependency_map={};for(let t of this.tasks)for(let e of t.dependencies)this.dependency_map[e]=this.dependency_map[e]||[],this.dependency_map[e].push(t.id)}refresh(t){this.setup_tasks(t),this.change_view_mode()}change_view_mode(t=this.options.view_mode){this.update_view_scale(t),this.setup_dates(),this.render(),this.trigger_event("view_change",[t])}update_view_scale(t){this.options.view_mode=t,t===w.HOUR?(this.options.step=1,this.options.column_width=38):t===w.DAY?(this.options.step=24,this.options.column_width=38):t===w.HALF_DAY?(this.options.step=12,this.options.column_width=38):t===w.QUARTER_DAY?(this.options.step=6,this.options.column_width=38):t===w.WEEK?(this.options.step=168,this.options.column_width=140):t===w.MONTH?(this.options.step=720,this.options.column_width=120):t===w.YEAR&&(this.options.step=8760,this.options.column_width=120)}setup_dates(){this.setup_gantt_dates(),this.setup_date_values()}setup_gantt_dates(){this.gantt_start=this.gantt_end=null;for(let t of this.tasks)(!this.gantt_start||t._startthis.gantt_end)&&(this.gantt_end=t._end);let t,e,s;t=this.gantt_start?h.start_of(this.gantt_start,"day"):new Date,e=this.gantt_end?h.start_of(this.gantt_end,"day"):new Date;for(let[t,e]of Object.entries(w))e===this.options.view_mode&&(s=t);const[i,o]=this.options.view_mode_padding[s].map(h.parse_duration);let a;t=h.add(t,-i.duration,i.scale),a=this.view_is(w.YEAR)?"YYYY":this.view_is(w.MONTH)?"YYYY-MM":this.view_is(w.DAY)?"YYYY-MM-DD":"YYYY-MM-DD HH",this.gantt_start=h.parse(h.format(t,a)),this.gantt_start.setHours(0,0,0,0),this.gantt_end=h.add(e,o.duration,o.scale)}setup_date_values(){this.dates=[];let t=null;for(;null===t||t=1&&i.getDate()<8&&(o+=" thick"),this.view_is(w.MONTH)&&i.getMonth()%3==0&&(o+=" thick"),l("path",{d:`M ${t} ${e} v ${s}`,class:o,append_to:this.layers.grid}),this.view_is(w.MONTH)?t+=h.get_days_in_month(i)*this.options.column_width/30:t+=this.options.column_width}}highlightWeekends(){if(this.view_is("Day")||this.view_is("Half Day"))for(let t=new Date(this.gantt_start);t<=this.gantt_end;t.setDate(t.getDate()+1))if(0===t.getDay()||6===t.getDay()){const e=h.diff(t,this.gantt_start,"hour")/this.options.step*this.options.column_width,s=(this.options.bar_height+this.options.padding)*this.tasks.length;l("rect",{x:e,y:this.options.header_height+this.options.padding/2,width:(this.view_is("Day")?1:2)*this.options.column_width,height:s,class:"holiday-highlight",append_to:this.layers.grid})}}computeGridHighlightDimensions(t){let e=this.options.column_width/2;if(this.view_is(w.DAY)){let t=h.today();return{x:e+h.diff(t,this.gantt_start,"hour")/this.options.step*this.options.column_width,date:t}}for(let s of this.dates){const i=new Date,o=new Date(s),a=new Date(s);switch(t){case w.WEEK:a.setDate(s.getDate()+7);break;case w.MONTH:a.setMonth(s.getMonth()+1);break;case w.YEAR:a.setFullYear(s.getFullYear()+1)}if(i>=o&&i<=a)return{x:e,date:o};e+=this.options.column_width}}make_grid_highlights(){if(this.options.highlight_weekend&&this.highlightWeekends(),this.view_is(w.DAY)||this.view_is(w.WEEK)||this.view_is(w.MONTH)||this.view_is(w.YEAR)){const{x:t,date:e}=this.computeGridHighlightDimensions(this.options.view_mode),s=this.options.header_height+this.options.padding/2,i=(this.options.bar_height+this.options.padding)*this.tasks.length;this.$current_highlight=this.create_el({top:s,left:t,height:i,classes:"current-highlight",append_to:this.$container});let o=document.getElementById(h.format(e).replaceAll(" ","_"));o.classList.add("current-date-highlight"),o.style.top=+o.style.top.slice(0,-2)-4+"px",o.style.left=+o.style.left.slice(0,-2)-8+"px"}}create_el({left:t,top:e,width:s,height:i,id:o,classes:a,append_to:n}){let r=document.createElement("div");return r.classList.add(a),r.style.top=e+"px",r.style.left=t+"px",o&&(r.id=o),s&&(r.style.width=i+"px"),i&&(r.style.height=i+"px"),n.appendChild(r),r}make_dates(){this.upper_texts_x={},this.get_dates_to_draw().forEach(((t,e)=>{let s=this.create_el({left:t.lower_x,top:t.lower_y,id:t.formatted_date,classes:"lower-text",append_to:this.$lower_header});if(s.innerText=t.lower_text,s.style.left=+s.style.left.slice(0,-2)-s.clientWidth/2+"px",t.upper_text){this.upper_texts_x[t.upper_text]=t.upper_x;let e=document.createElement("div");e.classList.add("upper-text"),e.style.left=t.upper_x+"px",e.style.top=t.upper_y+"px",e.innerText=t.upper_text,this.$upper_header.appendChild(e),t.upper_x>this.layers.grid.getBBox().width&&e.remove()}}))}get_dates_to_draw(){let t=null;return this.dates.map(((e,s)=>{const i=this.get_date_info(e,t,s);return t=i,i}))}get_date_info(t,e){let s=e?e.date:h.add(t,1,"day");const i={Hour_lower:h.format(t,"HH",this.options.language),"Quarter Day_lower":h.format(t,"HH",this.options.language),"Half Day_lower":h.format(t,"HH",this.options.language),Day_lower:t.getDate()!==s.getDate()?h.format(t,"D",this.options.language):"",Week_lower:t.getMonth()!==s.getMonth()?h.format(t,"D MMM",this.options.language):h.format(t,"D",this.options.language),Month_lower:h.format(t,"MMMM",this.options.language),Year_lower:h.format(t,"YYYY",this.options.language),Hour_upper:t.getDate()!==s.getDate()?h.format(t,"D MMMM",this.options.language):"","Quarter Day_upper":t.getDate()!==s.getDate()?h.format(t,"D MMM",this.options.language):"","Half Day_upper":t.getDate()!==s.getDate()?t.getMonth()!==s.getMonth()?h.format(t,"D MMM",this.options.language):h.format(t,"D",this.options.language):"",Day_upper:t.getMonth()===s.getMonth()&&e?"":h.format(t,"MMMM",this.options.language),Week_upper:t.getMonth()!==s.getMonth()?h.format(t,"MMMM",this.options.language):"",Month_upper:t.getFullYear()!==s.getFullYear()?h.format(t,"YYYY",this.options.language):"",Year_upper:t.getFullYear()!==s.getFullYear()?h.format(t,"YYYY",this.options.language):""};let o=this.view_is(w.MONTH)?h.get_days_in_month(t)*this.options.column_width/30:this.options.column_width;const a={x:e?e.base_pos_x+e.column_width:0,lower_y:this.options.header_height-20,upper_y:this.options.header_height-50},n={Hour_lower:o/2,Hour_upper:12*o,"Quarter Day_lower":o/2,"Quarter Day_upper":2*o,"Half Day_lower":o/2,"Half Day_upper":o,Day_lower:o/2,Day_upper:o/2,Week_lower:o/2,Week_upper:4*o/2,Month_lower:o/2,Month_upper:o/2,Year_lower:o/2,Year_upper:30*o/2};return{date:t,formatted_date:h.format(t).replaceAll(" ","_"),column_width:o,base_pos_x:a.x,upper_text:this.options.lower_text?this.options.upper_text(t,this.options.view_mode,i[`${this.options.view_mode}_upper`]):i[`${this.options.view_mode}_upper`],lower_text:this.options.lower_text?this.options.lower_text(t,this.options.view_mode,i[`${this.options.view_mode}_lower`]):i[`${this.options.view_mode}_lower`],upper_x:a.x+n[`${this.options.view_mode}_upper`],upper_y:a.upper_y,lower_x:a.x+n[`${this.options.view_mode}_lower`],lower_y:a.lower_y}}make_bars(){this.bars=this.tasks.map((t=>{const e=new u(this,t);return this.layers.bar.appendChild(e.group),e}))}make_arrows(){this.arrows=[];for(let t of this.tasks){let e=[];e=t.dependencies.map((e=>{const s=this.get_task(e);if(!s)return;const i=new c(this,this.bars[s._index],this.bars[t._index]);return this.layers.arrow.appendChild(i.element),i})).filter(Boolean),this.arrows=this.arrows.concat(e)}}map_arrows_on_bars(){for(let t of this.bars)t.arrows=this.arrows.filter((e=>e.from_task.task.id===t.task.id||e.to_task.task.id===t.task.id))}set_width(){const t=this.$svg.getBoundingClientRect().width,e=this.$svg.querySelector(".grid .grid-row")?this.$svg.querySelector(".grid .grid-row").getAttribute("width"):0;t{this.unselect_all(),this.hide_popup()}))}bind_bar_events(){let t=!1,e=0,s=0,i=0,o=!1,a=!1,n=null,r=[];this.bar_being_dragged=null,p.on(this.$svg,"mousedown",".bar-wrapper, .handle",((s,h)=>{const d=p.closest(".bar-wrapper",h);r.forEach((t=>t.group.classList.remove("active"))),h.classList.contains("left")?o=!0:h.classList.contains("right")?a=!0:h.classList.contains("bar-wrapper")&&(t=!0),d.classList.add("active"),this.popup.parent.classList.add("hidden"),e=s.offsetX,i=s.offsetY,n=d.getAttribute("data-id");const l=[n,...this.get_all_dependent_tasks(n)];r=l.map((t=>this.get_bar(t))),this.bar_being_dragged=n,r.forEach((t=>{const e=t.$bar;e.ox=e.getX(),e.oy=e.getY(),e.owidth=e.getWidth(),e.finaldx=0}))})),p.on(this.$container,"scroll",(t=>{let e=document.querySelectorAll(".bar-wrapper"),i=[];const o=[];let a;s&&(a=t.currentTarget.scrollLeft-s);const n=t.currentTarget.scrollLeft/this.options.column_width*this.options.step/24;let r="D MMM";["Year","Month"].includes(this.options.view_mode)?r="YYYY":["Day","Week"].includes(this.options.view_mode)?r="MMMM":this.view_is("Half Day")?r="D":this.view_is("Hour")&&(r="D MMMM");let d=h.format(h.add(this.gantt_start,n,"day"),r);const p=Array.from(document.querySelectorAll(".upper-text")).find((t=>t.textContent===d));if(p&&!p.classList.contains("current-upper")){const t=document.querySelector(".current-upper");t&&(t.classList.remove("current-upper"),t.style.left=this.upper_texts_x[t.textContent]+"px",t.style.top=this.options.header_height-50+"px"),p.classList.add("current-upper");let e=this.$svg.getBoundingClientRect();p.style.left=e.x+this.$container.scrollLeft+10+"px",p.style.top=e.y+this.options.header_height-50+"px"}Array.prototype.forEach.call(e,(function(t,e){o.push(t.getAttribute("data-id"))})),a&&(i=o.map((t=>this.get_bar(t))),this.options.auto_move_label&&i.forEach((e=>{e.update_label_position_on_horizontal_scroll({x:a,sx:t.currentTarget.scrollLeft})}))),s=t.currentTarget.scrollLeft})),p.on(this.$svg,"mousemove",(s=>{if(!(t||o||a))return;const i=s.offsetX-e;s.offsetY,r.forEach((e=>{const s=e.$bar;s.finaldx=this.get_snap_position(i),this.hide_popup(),o?n===e.task.id?e.update_bar_position({x:s.ox+s.finaldx,width:s.owidth-s.finaldx}):e.update_bar_position({x:s.ox+s.finaldx}):a?n===e.task.id&&e.update_bar_position({width:s.owidth+s.finaldx}):t&&!this.options.readonly&&e.update_bar_position({x:s.ox+s.finaldx})}))})),document.addEventListener("mouseup",(e=>{t=!1,o=!1,a=!1})),p.on(this.$svg,"mouseup",(t=>{this.bar_being_dragged=null,r.forEach((t=>{t.$bar.finaldx&&(t.date_changed(),t.set_action_completed())}))})),this.bind_bar_progress()}bind_bar_progress(){let t=0,e=0,s=null,i=null,o=null,a=null;p.on(this.$svg,"mousedown",".handle.progress",((n,r)=>{s=!0,t=n.offsetX,e=n.offsetY;const h=p.closest(".bar-wrapper",r).getAttribute("data-id");i=this.get_bar(h),o=i.$bar_progress,a=i.$bar,o.finaldx=0,o.owidth=o.getWidth(),o.min_dx=-o.getWidth(),o.max_dx=a.getWidth()-o.getWidth()})),p.on(this.$svg,"mousemove",(e=>{if(!s)return;let a=e.offsetX-t;e.offsetY,a>o.max_dx&&(a=o.max_dx),a{s=!1,o&&o.finaldx&&(o.finaldx=0,i.progress_changed(),i.set_action_completed(),i=null,o=null,a=null)}))}get_all_dependent_tasks(t){let e=[],s=[t];for(;s.length;){const t=s.reduce(((t,e)=>t=t.concat(this.dependency_map[e])),[]);e=e.concat(t),s=t.filter((t=>!s.includes(t)))}return e.filter(Boolean)}get_snap_position(t){let e,s,i=t;return this.view_is(w.WEEK)?(e=t%(this.options.column_width/7),s=i-e+(e{t.classList.remove("active")})),this.popup.parent.classList.remove("hidden")}view_is(t){return"string"==typeof t?this.options.view_mode===t:!!Array.isArray(t)&&t.some((t=>this.options.view_mode===t))}get_task(t){return this.tasks.find((e=>e.id===t))}get_bar(t){return this.bars.find((e=>e.task.id===t))}show_popup(t){!1!==this.options.popup&&(this.popup||(this.popup=new m(this.$popup_wrapper,this.options.popup)),this.popup.show(t))}hide_popup(){this.popup&&this.popup.hide()}trigger_event(t,e){this.options["on_"+t]&&this.options["on_"+t].apply(null,e)}get_oldest_starting_date(){return this.tasks.length?this.tasks.map((t=>t._start)).reduce(((t,e)=>e<=t?e:t)):new Date}clear(){this.$svg.innerHTML="",this.$header?.remove?.(),this.$current_highlight?.remove?.(),this.popup?.hide?.()}}return y.VIEW_MODE=w,y}(); -//# sourceMappingURL=frappe-gantt.min.js.map diff --git a/dist/frappe-gantt.min.js.map b/dist/frappe-gantt.min.js.map deleted file mode 100644 index 41d9319..0000000 --- a/dist/frappe-gantt.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"frappe-gantt.min.js","sources":["../src/date_utils.js","../src/svg_utils.js","../src/bar.js","../src/arrow.js","../src/popup.js","../src/index.js"],"sourcesContent":["const YEAR = \"year\";\nconst MONTH = \"month\";\nconst DAY = \"day\";\nconst HOUR = \"hour\";\nconst MINUTE = \"minute\";\nconst SECOND = \"second\";\nconst MILLISECOND = \"millisecond\";\n\nconst SHORTENED = {\n January: \"Jan\",\n February: \"Feb\",\n March: \"Mar\",\n April: \"Apr\",\n May: \"May\",\n June: \"Jun\",\n July: \"Jul\",\n August: \"Aug\",\n September: \"Sep\",\n October: \"Oct\",\n November: \"Nov\",\n December: \"Dec\"\n};\n\nexport default {\n parse_duration(duration) {\n const regex = /([0-9])+(y|m|d|h|min|s|ms)/gm;\n const matches = regex.exec(duration);\n\n if (matches !== null) {\n if (matches[2] === \"y\") {\n return { duration: parseInt(matches[1]), scale: `year` };\n } else if (matches[2] === \"m\") {\n return { duration: parseInt(matches[1]), scale: `month` };\n } else if (matches[2] === \"d\") {\n return { duration: parseInt(matches[1]), scale: `day` };\n } else if (matches[2] === \"h\") {\n return { duration: parseInt(matches[1]), scale: `hour` };\n } else if (matches[2] === \"min\") {\n return { duration: parseInt(matches[1]), scale: `minute` };\n } else if (matches[2] === \"s\") {\n return { duration: parseInt(matches[1]), scale: `second` };\n } else if (matches[2] === \"ms\") {\n return { duration: parseInt(matches[1]), scale: `millisecond` };\n }\n }\n },\n parse(date, date_separator = \"-\", time_separator = /[.:]/) {\n if (date instanceof Date) {\n return date;\n }\n if (typeof date === \"string\") {\n let date_parts, time_parts;\n const parts = date.split(\" \");\n date_parts = parts[0]\n .split(date_separator)\n .map((val) => parseInt(val, 10));\n time_parts = parts[1] && parts[1].split(time_separator);\n\n // month is 0 indexed\n date_parts[1] = date_parts[1] ? date_parts[1] - 1 : 0;\n\n let vals = date_parts;\n\n if (time_parts && time_parts.length) {\n if (time_parts.length === 4) {\n time_parts[3] = \"0.\" + time_parts[3];\n time_parts[3] = parseFloat(time_parts[3]) * 1000;\n }\n vals = vals.concat(time_parts);\n }\n return new Date(...vals);\n }\n },\n\n to_string(date, with_time = false) {\n if (!(date instanceof Date)) {\n throw new TypeError(\"Invalid argument type\");\n }\n const vals = this.get_date_values(date).map((val, i) => {\n if (i === 1) {\n // add 1 for month\n val = val + 1;\n }\n\n if (i === 6) {\n return padStart(val + \"\", 3, \"0\");\n }\n\n return padStart(val + \"\", 2, \"0\");\n });\n const date_string = `${vals[0]}-${vals[1]}-${vals[2]}`;\n const time_string = `${vals[3]}:${vals[4]}:${vals[5]}.${vals[6]}`;\n\n return date_string + (with_time ? \" \" + time_string : \"\");\n },\n\n format(date, format_string = \"YYYY-MM-DD HH:mm:ss.SSS\", lang = \"en\") {\n const dateTimeFormat = new Intl.DateTimeFormat(lang, {\n month: \"long\",\n });\n const month_name = dateTimeFormat.format(date);\n const month_name_capitalized =\n month_name.charAt(0).toUpperCase() + month_name.slice(1);\n\n const values = this.get_date_values(date).map((d) => padStart(d, 2, 0));\n const format_map = {\n YYYY: values[0],\n MM: padStart(+values[1] + 1, 2, 0),\n DD: values[2],\n HH: values[3],\n mm: values[4],\n ss: values[5],\n SSS: values[6],\n D: values[2],\n MMMM: month_name_capitalized,\n MMM: SHORTENED[month_name_capitalized],\n };\n\n let str = format_string;\n const formatted_values = [];\n\n Object.keys(format_map)\n .sort((a, b) => b.length - a.length) // big string first\n .forEach((key) => {\n if (str.includes(key)) {\n str = str.replaceAll(key, `$${formatted_values.length}`);\n formatted_values.push(format_map[key]);\n }\n });\n\n formatted_values.forEach((value, i) => {\n str = str.replaceAll(`$${i}`, value);\n });\n\n return str;\n },\n\n diff(date_a, date_b, scale = DAY) {\n let milliseconds, seconds, hours, minutes, days, months, years;\n\n milliseconds = date_a - date_b;\n seconds = milliseconds / 1000;\n minutes = seconds / 60;\n hours = minutes / 60;\n days = hours / 24;\n months = days / 30;\n years = months / 12;\n\n if (!scale.endsWith(\"s\")) {\n scale += \"s\";\n }\n\n return Math.floor(\n {\n milliseconds,\n seconds,\n minutes,\n hours,\n days,\n months,\n years,\n }[scale],\n );\n },\n\n today() {\n const vals = this.get_date_values(new Date()).slice(0, 3);\n return new Date(...vals);\n },\n\n now() {\n return new Date();\n },\n\n add(date, qty, scale) {\n qty = parseInt(qty, 10);\n const vals = [\n date.getFullYear() + (scale === YEAR ? qty : 0),\n date.getMonth() + (scale === MONTH ? qty : 0),\n date.getDate() + (scale === DAY ? qty : 0),\n date.getHours() + (scale === HOUR ? qty : 0),\n date.getMinutes() + (scale === MINUTE ? qty : 0),\n date.getSeconds() + (scale === SECOND ? qty : 0),\n date.getMilliseconds() + (scale === MILLISECOND ? qty : 0),\n ];\n return new Date(...vals);\n },\n\n start_of(date, scale) {\n const scores = {\n [YEAR]: 6,\n [MONTH]: 5,\n [DAY]: 4,\n [HOUR]: 3,\n [MINUTE]: 2,\n [SECOND]: 1,\n [MILLISECOND]: 0,\n };\n\n function should_reset(_scale) {\n const max_score = scores[scale];\n return scores[_scale] <= max_score;\n }\n\n const vals = [\n date.getFullYear(),\n should_reset(YEAR) ? 0 : date.getMonth(),\n should_reset(MONTH) ? 1 : date.getDate(),\n should_reset(DAY) ? 0 : date.getHours(),\n should_reset(HOUR) ? 0 : date.getMinutes(),\n should_reset(MINUTE) ? 0 : date.getSeconds(),\n should_reset(SECOND) ? 0 : date.getMilliseconds(),\n ];\n\n return new Date(...vals);\n },\n\n clone(date) {\n return new Date(...this.get_date_values(date));\n },\n\n get_date_values(date) {\n return [\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n ];\n },\n\n get_days_in_month(date) {\n const no_of_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n const month = date.getMonth();\n\n if (month !== 1) {\n return no_of_days[month];\n }\n\n // Feb\n const year = date.getFullYear();\n if ((year % 4 === 0 && year % 100 != 0) || year % 400 === 0) {\n return 29;\n }\n return 28;\n },\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\nfunction padStart(str, targetLength, padString) {\n str = str + \"\";\n targetLength = targetLength >> 0;\n padString = String(typeof padString !== \"undefined\" ? padString : \" \");\n if (str.length > targetLength) {\n return String(str);\n } else {\n targetLength = targetLength - str.length;\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length);\n }\n return padString.slice(0, targetLength) + String(str);\n }\n}\n","export function $(expr, con) {\n return typeof expr === \"string\"\n ? (con || document).querySelector(expr)\n : expr || null;\n}\n\nexport function createSVG(tag, attrs) {\n const elem = document.createElementNS(\"http://www.w3.org/2000/svg\", tag);\n for (let attr in attrs) {\n if (attr === \"append_to\") {\n const parent = attrs.append_to;\n parent.appendChild(elem);\n } else if (attr === \"innerHTML\") {\n elem.innerHTML = attrs.innerHTML;\n } else if (attr === 'clipPath') {\n elem.setAttribute('clip-path', 'url(#' + attrs[attr] + ')');\n } else {\n elem.setAttribute(attr, attrs[attr]);\n }\n }\n return elem;\n}\n\nexport function animateSVG(svgElement, attr, from, to) {\n const animatedSvgElement = getAnimationElement(svgElement, attr, from, to);\n\n if (animatedSvgElement === svgElement) {\n // triggered 2nd time programmatically\n // trigger artificial click event\n const event = document.createEvent(\"HTMLEvents\");\n event.initEvent(\"click\", true, true);\n event.eventName = \"click\";\n animatedSvgElement.dispatchEvent(event);\n }\n}\n\nfunction getAnimationElement(\n svgElement,\n attr,\n from,\n to,\n dur = \"0.4s\",\n begin = \"0.1s\",\n) {\n const animEl = svgElement.querySelector(\"animate\");\n if (animEl) {\n $.attr(animEl, {\n attributeName: attr,\n from,\n to,\n dur,\n begin: \"click + \" + begin, // artificial click\n });\n return svgElement;\n }\n\n const animateElement = createSVG(\"animate\", {\n attributeName: attr,\n from,\n to,\n dur,\n begin,\n calcMode: \"spline\",\n values: from + \";\" + to,\n keyTimes: \"0; 1\",\n keySplines: cubic_bezier(\"ease-out\"),\n });\n svgElement.appendChild(animateElement);\n\n return svgElement;\n}\n\nfunction cubic_bezier(name) {\n return {\n ease: \".25 .1 .25 1\",\n linear: \"0 0 1 1\",\n \"ease-in\": \".42 0 1 1\",\n \"ease-out\": \"0 0 .58 1\",\n \"ease-in-out\": \".42 0 .58 1\",\n }[name];\n}\n\n$.on = (element, event, selector, callback) => {\n if (!callback) {\n callback = selector;\n $.bind(element, event, callback);\n } else {\n $.delegate(element, event, selector, callback);\n }\n};\n\n$.off = (element, event, handler) => {\n element.removeEventListener(event, handler);\n};\n\n$.bind = (element, event, callback) => {\n event.split(/\\s+/).forEach(function (event) {\n element.addEventListener(event, callback);\n });\n};\n\n$.delegate = (element, event, selector, callback) => {\n element.addEventListener(event, function (e) {\n const delegatedTarget = e.target.closest(selector);\n if (delegatedTarget) {\n e.delegatedTarget = delegatedTarget;\n callback.call(this, e, delegatedTarget);\n }\n });\n};\n\n$.closest = (selector, element) => {\n if (!element) return null;\n\n if (element.matches(selector)) {\n return element;\n }\n\n return $.closest(selector, element.parentNode);\n};\n\n$.attr = (element, attr, value) => {\n if (!value && typeof attr === \"string\") {\n return element.getAttribute(attr);\n }\n\n if (typeof attr === \"object\") {\n for (let key in attr) {\n $.attr(element, key, attr[key]);\n }\n return;\n }\n\n element.setAttribute(attr, value);\n};\n","import date_utils from \"./date_utils\";\nimport { $, createSVG, animateSVG } from \"./svg_utils\";\n\nexport default class Bar {\n constructor(gantt, task) {\n this.set_defaults(gantt, task);\n this.prepare();\n this.draw();\n this.bind();\n }\n\n set_defaults(gantt, task) {\n this.action_completed = false;\n this.gantt = gantt;\n this.task = task;\n }\n\n prepare() {\n this.prepare_values();\n this.prepare_helpers();\n }\n\n prepare_values() {\n this.invalid = this.task.invalid;\n this.height = this.gantt.options.bar_height;\n this.image_size = this.height - 5;\n this.compute_x();\n this.compute_y();\n this.compute_duration();\n this.corner_radius = this.gantt.options.bar_corner_radius;\n this.width = this.gantt.options.column_width * this.duration;\n this.progress_width =\n this.gantt.options.column_width *\n this.duration *\n (this.task.progress / 100) || 0;\n this.group = createSVG(\"g\", {\n class: \"bar-wrapper\" + (this.task.custom_class ? \" \" + this.task.custom_class : \"\") + (this.task.important ? ' important' : ''),\n \"data-id\": this.task.id,\n });\n this.bar_group = createSVG(\"g\", {\n class: \"bar-group\",\n append_to: this.group,\n });\n this.handle_group = createSVG(\"g\", {\n class: \"handle-group\",\n append_to: this.group,\n });\n }\n\n prepare_helpers() {\n SVGElement.prototype.getX = function () {\n return +this.getAttribute(\"x\");\n };\n SVGElement.prototype.getY = function () {\n return +this.getAttribute(\"y\");\n };\n SVGElement.prototype.getWidth = function () {\n return +this.getAttribute(\"width\");\n };\n SVGElement.prototype.getHeight = function () {\n return +this.getAttribute(\"height\");\n };\n SVGElement.prototype.getEndX = function () {\n return this.getX() + this.getWidth();\n };\n }\n\n prepare_expected_progress_values() {\n this.compute_expected_progress();\n this.expected_progress_width =\n this.gantt.options.column_width *\n this.duration *\n (this.expected_progress / 100) || 0;\n }\n\n draw() {\n this.draw_bar();\n this.draw_progress_bar();\n if (this.gantt.options.show_expected_progress) {\n this.prepare_expected_progress_values();\n this.draw_expected_progress_bar();\n }\n this.draw_label();\n this.draw_resize_handles();\n\n if (this.task.thumbnail) {\n this.draw_thumbnail();\n }\n }\n\n draw_bar() {\n this.$bar = createSVG(\"rect\", {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height,\n rx: this.corner_radius,\n ry: this.corner_radius,\n class: \"bar\",\n append_to: this.bar_group,\n });\n\n animateSVG(this.$bar, \"width\", 0, this.width);\n\n if (this.invalid) {\n this.$bar.classList.add(\"bar-invalid\");\n }\n }\n\n draw_expected_progress_bar() {\n if (this.invalid) return;\n this.$expected_bar_progress = createSVG(\"rect\", {\n x: this.x,\n y: this.y,\n width: this.expected_progress_width,\n height: this.height,\n rx: this.corner_radius,\n ry: this.corner_radius,\n class: \"bar-expected-progress\",\n append_to: this.bar_group,\n });\n\n animateSVG(\n this.$expected_bar_progress,\n \"width\",\n 0,\n this.expected_progress_width,\n );\n }\n\n draw_progress_bar() {\n if (this.invalid) return;\n this.$bar_progress = createSVG(\"rect\", {\n x: this.x,\n y: this.y,\n width: this.progress_width,\n height: this.height,\n rx: this.corner_radius,\n ry: this.corner_radius,\n class: \"bar-progress\",\n append_to: this.bar_group,\n });\n const x = (date_utils.diff(this.task._start, this.gantt.gantt_start, 'hour') /\n this.gantt.options.step) *\n this.gantt.options.column_width;\n\n let $date_highlight = document.createElement(\"div\");\n $date_highlight.id = `${this.task.id}-highlight`\n $date_highlight.classList.add('date-highlight')\n $date_highlight.style.height = this.height * 0.8 + 'px'\n $date_highlight.style.width = this.width + 'px'\n $date_highlight.style.top = this.gantt.options.header_height - 25 + 'px'\n $date_highlight.style.left = x + 'px'\n this.$date_highlight = $date_highlight\n this.gantt.$lower_header.prepend($date_highlight)\n\n\n\n animateSVG(this.$bar_progress, \"width\", 0, this.progress_width);\n }\n\n draw_label() {\n let x_coord = this.x + this.$bar.getWidth() / 2;\n\n if (this.task.thumbnail) {\n x_coord = this.x + this.image_size + 5;\n }\n\n createSVG(\"text\", {\n x: x_coord,\n y: this.y + this.height / 2,\n innerHTML: this.task.name,\n class: \"bar-label\",\n append_to: this.bar_group,\n });\n // labels get BBox in the next tick\n requestAnimationFrame(() => this.update_label_position());\n }\n draw_thumbnail() {\n let x_offset = 10, y_offset = 2;\n let defs, clipPath;\n\n defs = createSVG('defs', {\n append_to: this.bar_group\n });\n\n createSVG('rect', {\n id: 'rect_' + this.task.id,\n x: this.x + x_offset,\n y: this.y + y_offset,\n width: this.image_size,\n height: this.image_size,\n rx: '15',\n class: 'img_mask',\n append_to: defs\n });\n\n clipPath = createSVG('clipPath', {\n id: 'clip_' + this.task.id,\n append_to: defs\n });\n\n createSVG('use', {\n href: '#rect_' + this.task.id,\n append_to: clipPath\n });\n\n createSVG('image', {\n x: this.x + x_offset,\n y: this.y + y_offset,\n width: this.image_size,\n height: this.image_size,\n class: 'bar-img',\n href: this.task.thumbnail,\n clipPath: 'clip_' + this.task.id,\n append_to: this.bar_group\n });\n }\n\n draw_resize_handles() {\n if (this.invalid || this.gantt.options.readonly) return;\n\n const bar = this.$bar;\n const handle_width = 8;\n\n createSVG(\"rect\", {\n x: bar.getX() + bar.getWidth() + handle_width - 4,\n y: bar.getY() + 1,\n width: handle_width,\n height: this.height - 2,\n rx: this.corner_radius,\n ry: this.corner_radius,\n class: \"handle right\",\n append_to: this.handle_group,\n });\n\n createSVG(\"rect\", {\n x: bar.getX() - handle_width - 4,\n y: bar.getY() + 1,\n width: handle_width,\n height: this.height - 2,\n rx: this.corner_radius,\n ry: this.corner_radius,\n class: \"handle left\",\n append_to: this.handle_group,\n });\n\n this.$handle_progress = createSVG(\"polygon\", {\n points: this.get_progress_polygon_points().join(\",\"),\n class: \"handle progress\",\n append_to: this.handle_group,\n });\n }\n\n get_progress_polygon_points() {\n const bar_progress = this.$bar_progress;\n let icon_width = 10;\n let icon_height = 15;\n\n return [\n bar_progress.getEndX() - icon_width / 2,\n bar_progress.getY() + bar_progress.getHeight() / 2,\n\n bar_progress.getEndX(),\n bar_progress.getY() + bar_progress.getHeight() / 2 - icon_height / 2,\n\n bar_progress.getEndX() + icon_width / 2,\n bar_progress.getY() + bar_progress.getHeight() / 2,\n\n bar_progress.getEndX(),\n bar_progress.getY() + bar_progress.getHeight() / 2 + icon_height / 2,\n\n bar_progress.getEndX() - icon_width / 2,\n bar_progress.getY() + bar_progress.getHeight() / 2,\n ];\n }\n\n bind() {\n if (this.invalid) return;\n this.setup_click_event();\n }\n\n setup_click_event() {\n let task_id = this.task.id;\n $.on(this.group, \"mouseover\", (e) => {\n this.gantt.trigger_event(\"hover\", [this.task, e.screenX, e.screenY, e])\n })\n\n let timeout;\n $.on(this.group, \"mouseenter\", (e) => timeout = setTimeout(() => {\n this.show_popup(e.offsetX)\n document.querySelector(`#${task_id}-highlight`).style.display = 'block'\n }, 200))\n\n $.on(this.group, \"mouseleave\", () => {\n clearTimeout(timeout)\n this.gantt.popup?.hide?.()\n document.querySelector(`#${task_id}-highlight`).style.display = 'none'\n })\n\n\n $.on(this.group, this.gantt.options.popup_trigger, () => {\n this.gantt.trigger_event(\"click\", [this.task]);\n });\n\n $.on(this.group, \"dblclick\", (e) => {\n if (this.action_completed) {\n // just finished a move action, wait for a few seconds\n return;\n }\n\n this.gantt.trigger_event(\"double_click\", [this.task]);\n });\n }\n\n show_popup(x) {\n if (this.gantt.bar_being_dragged) return;\n\n const start_date = date_utils.format(\n this.task._start,\n \"MMM D\",\n this.gantt.options.language,\n );\n const end_date = date_utils.format(\n date_utils.add(this.task._end, -1, \"second\"),\n \"MMM D\",\n this.gantt.options.language,\n );\n const subtitle = `${start_date} - ${end_date}
Progress: ${this.task.progress}`;\n\n this.gantt.show_popup({\n x,\n target_element: this.$bar,\n title: this.task.name,\n subtitle: subtitle,\n task: this.task,\n });\n }\n\n update_bar_position({ x = null, width = null }) {\n const bar = this.$bar;\n if (x) {\n // get all x values of parent task\n const xs = this.task.dependencies.map((dep) => {\n return this.gantt.get_bar(dep).$bar.getX();\n });\n // child task must not go before parent\n const valid_x = xs.reduce((_, curr) => {\n return x >= curr;\n }, x);\n if (!valid_x) {\n width = null;\n return;\n }\n this.update_attr(bar, \"x\", x);\n this.$date_highlight.style.left = x + 'px'\n }\n if (width) {\n this.update_attr(bar, \"width\", width);\n this.$date_highlight.style.width = width + 'px'\n }\n this.update_label_position();\n this.update_handle_position();\n if (this.gantt.options.show_expected_progress) {\n this.date_changed();\n this.compute_duration();\n this.update_expected_progressbar_position();\n }\n this.update_progressbar_position();\n this.update_arrow_position();\n }\n\n update_label_position_on_horizontal_scroll({ x, sx }) {\n const container = document.querySelector('.gantt-container');\n const label = this.group.querySelector('.bar-label');\n const img = this.group.querySelector('.bar-img') || '';\n const img_mask = this.bar_group.querySelector('.img_mask') || '';\n\n let barWidthLimit = this.$bar.getX() + this.$bar.getWidth();\n let newLabelX = label.getX() + x;\n let newImgX = img && img.getX() + x || 0;\n let imgWidth = img && img.getBBox().width + 7 || 7;\n let labelEndX = newLabelX + label.getBBox().width + 7;\n let viewportCentral = sx + container.clientWidth / 2;\n\n if (label.classList.contains('big')) return;\n\n if (labelEndX < barWidthLimit && x > 0 && labelEndX < viewportCentral) {\n label.setAttribute('x', newLabelX);\n if (img) {\n img.setAttribute('x', newImgX);\n img_mask.setAttribute('x', newImgX);\n }\n } else if ((newLabelX - imgWidth) > this.$bar.getX() && x < 0 && labelEndX > viewportCentral) {\n label.setAttribute('x', newLabelX);\n if (img) {\n img.setAttribute('x', newImgX);\n img_mask.setAttribute('x', newImgX);\n }\n\n }\n }\n\n date_changed() {\n let changed = false;\n const { new_start_date, new_end_date } = this.compute_start_end_date();\n\n if (Number(this.task._start) !== Number(new_start_date)) {\n changed = true;\n this.task._start = new_start_date;\n }\n\n if (Number(this.task._end) !== Number(new_end_date)) {\n changed = true;\n this.task._end = new_end_date;\n }\n\n if (!changed) return;\n\n this.gantt.trigger_event(\"date_change\", [\n this.task,\n new_start_date,\n date_utils.add(new_end_date, -1, \"second\"),\n ]);\n }\n\n progress_changed() {\n const new_progress = this.compute_progress();\n this.task.progress = new_progress;\n this.gantt.trigger_event(\"progress_change\", [this.task, new_progress]);\n }\n\n set_action_completed() {\n this.action_completed = true;\n setTimeout(() => (this.action_completed = false), 1000);\n }\n\n compute_start_end_date() {\n const bar = this.$bar;\n const x_in_units = bar.getX() / this.gantt.options.column_width;\n const new_start_date = date_utils.add(\n this.gantt.gantt_start,\n x_in_units * this.gantt.options.step,\n \"hour\",\n );\n const width_in_units = bar.getWidth() / this.gantt.options.column_width;\n const new_end_date = date_utils.add(\n new_start_date,\n width_in_units * this.gantt.options.step,\n \"hour\",\n );\n\n return { new_start_date, new_end_date };\n }\n\n compute_progress() {\n const progress =\n (this.$bar_progress.getWidth() / this.$bar.getWidth()) * 100;\n return parseInt(progress, 10);\n }\n\n compute_expected_progress() {\n this.expected_progress =\n date_utils.diff(date_utils.today(), this.task._start, \"hour\") /\n this.gantt.options.step;\n this.expected_progress =\n ((this.expected_progress < this.duration\n ? this.expected_progress\n : this.duration) *\n 100) /\n this.duration;\n }\n\n compute_x() {\n const { step, column_width } = this.gantt.options;\n const task_start = this.task._start;\n const gantt_start = this.gantt.gantt_start;\n\n const diff = date_utils.diff(task_start, gantt_start, \"hour\");\n let x = (diff / step) * column_width;\n\n if (this.gantt.view_is(\"Month\")) {\n const diff = date_utils.diff(task_start, gantt_start, \"day\");\n x = (diff * column_width) / 30;\n }\n this.x = x;\n }\n\n compute_y() {\n this.y =\n this.gantt.options.header_height +\n this.gantt.options.padding +\n this.task._index * (this.height + this.gantt.options.padding);\n }\n\n compute_duration() {\n this.duration =\n date_utils.diff(this.task._end, this.task._start, \"hour\") /\n this.gantt.options.step;\n }\n\n get_snap_position(dx) {\n let odx = dx,\n rem,\n position;\n\n if (this.gantt.view_is(\"Week\")) {\n rem = dx % (this.gantt.options.column_width / 7);\n position =\n odx -\n rem +\n (rem < this.gantt.options.column_width / 14\n ? 0\n : this.gantt.options.column_width / 7);\n } else if (this.gantt.view_is(\"Month\")) {\n rem = dx % (this.gantt.options.column_width / 30);\n position =\n odx -\n rem +\n (rem < this.gantt.options.column_width / 60\n ? 0\n : this.gantt.options.column_width / 30);\n } else {\n rem = dx % this.gantt.options.column_width;\n position =\n odx -\n rem +\n (rem < this.gantt.options.column_width / 2\n ? 0\n : this.gantt.options.column_width);\n }\n return position;\n }\n\n update_attr(element, attr, value) {\n value = +value;\n if (!isNaN(value)) {\n element.setAttribute(attr, value);\n }\n return element;\n }\n\n update_expected_progressbar_position() {\n if (this.invalid) return;\n this.$expected_bar_progress.setAttribute(\"x\", this.$bar.getX());\n this.compute_expected_progress();\n this.$expected_bar_progress.setAttribute(\n \"width\",\n this.gantt.options.column_width *\n this.duration *\n (this.expected_progress / 100) || 0,\n );\n }\n\n update_progressbar_position() {\n if (this.invalid || this.gantt.options.readonly) return;\n this.$bar_progress.setAttribute(\"x\", this.$bar.getX());\n this.$bar_progress.setAttribute(\n \"width\",\n this.$bar.getWidth() * (this.task.progress / 100),\n );\n }\n\n update_label_position() {\n const img_mask = this.bar_group.querySelector('.img_mask') || '';\n const bar = this.$bar,\n label = this.group.querySelector(\".bar-label\"),\n img = this.group.querySelector('.bar-img');\n\n\n let padding = 5;\n let x_offset_label_img = this.image_size + 10;\n const labelWidth = label.getBBox().width\n const barWidth = bar.getWidth()\n if (labelWidth > barWidth) {\n label.classList.add(\"big\");\n if (img) {\n img.setAttribute('x', bar.getX() + bar.getWidth() + padding);\n img_mask.setAttribute('x', bar.getX() + bar.getWidth() + padding);\n label.setAttribute('x', bar.getX() + bar.getWidth() + x_offset_label_img);\n } else {\n label.setAttribute('x', bar.getX() + bar.getWidth() + padding);\n }\n } else {\n label.classList.remove(\"big\");\n if (img) {\n img.setAttribute('x', bar.getX() + padding);\n img_mask.setAttribute('x', bar.getX() + padding);\n label.setAttribute('x', bar.getX() + barWidth / 2 + x_offset_label_img);\n } else {\n label.setAttribute('x', bar.getX() + barWidth / 2 - labelWidth / 2);\n }\n }\n }\n\n update_handle_position() {\n if (this.invalid || this.gantt.options.readonly) return;\n const bar = this.$bar;\n this.handle_group\n .querySelector(\".handle.left\")\n .setAttribute(\"x\", bar.getX() - 12);\n this.handle_group\n .querySelector(\".handle.right\")\n .setAttribute(\"x\", bar.getEndX() + 4);\n const handle = this.group.querySelector(\".handle.progress\");\n handle && handle.setAttribute(\"points\", this.get_progress_polygon_points());\n }\n\n update_arrow_position() {\n this.arrows = this.arrows || [];\n for (let arrow of this.arrows) {\n arrow.update();\n }\n }\n}\n\nfunction isFunction(functionToCheck) {\n let getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === \"[object Function]\"\n );\n}\n","import { createSVG } from \"./svg_utils\";\n\nexport default class Arrow {\n constructor(gantt, from_task, to_task) {\n this.gantt = gantt;\n this.from_task = from_task;\n this.to_task = to_task;\n\n this.calculate_path();\n this.draw();\n }\n\n calculate_path() {\n let start_x =\n this.from_task.$bar.getX() + this.from_task.$bar.getWidth() / 2;\n\n const condition = () =>\n this.to_task.$bar.getX() < start_x + this.gantt.options.padding &&\n start_x > this.from_task.$bar.getX() + this.gantt.options.padding;\n\n while (condition()) {\n start_x -= 10;\n }\n\n const start_y =\n this.gantt.options.header_height +\n this.gantt.options.bar_height +\n (this.gantt.options.padding + this.gantt.options.bar_height) *\n this.from_task.task._index +\n this.gantt.options.padding;\n\n const end_x = this.to_task.$bar.getX() - this.gantt.options.padding / 2 - 7;\n const end_y =\n this.gantt.options.header_height +\n this.gantt.options.bar_height / 2 +\n (this.gantt.options.padding + this.gantt.options.bar_height) *\n this.to_task.task._index +\n this.gantt.options.padding;\n\n const from_is_below_to =\n this.from_task.task._index > this.to_task.task._index;\n const curve = this.gantt.options.arrow_curve;\n const clockwise = from_is_below_to ? 1 : 0;\n const curve_y = from_is_below_to ? -curve : curve;\n const offset = from_is_below_to\n ? end_y + this.gantt.options.arrow_curve\n : end_y - this.gantt.options.arrow_curve;\n\n this.path = `\n M ${start_x} ${start_y}\n V ${offset}\n a ${curve} ${curve} 0 0 ${clockwise} ${curve} ${curve_y}\n L ${end_x} ${end_y}\n m -5 -5\n l 5 5\n l -5 5`;\n\n if (\n this.to_task.$bar.getX() <\n this.from_task.$bar.getX() + this.gantt.options.padding\n ) {\n const down_1 = this.gantt.options.padding / 2 - curve;\n const down_2 =\n this.to_task.$bar.getY() + this.to_task.$bar.getHeight() / 2 - curve_y;\n const left = this.to_task.$bar.getX() - this.gantt.options.padding;\n\n this.path = `\n M ${start_x} ${start_y}\n v ${down_1}\n a ${curve} ${curve} 0 0 1 -${curve} ${curve}\n H ${left}\n a ${curve} ${curve} 0 0 ${clockwise} -${curve} ${curve_y}\n V ${down_2}\n a ${curve} ${curve} 0 0 ${clockwise} ${curve} ${curve_y}\n L ${end_x} ${end_y}\n m -5 -5\n l 5 5\n l -5 5`;\n }\n }\n\n draw() {\n this.element = createSVG(\"path\", {\n d: this.path,\n \"data-from\": this.from_task.task.id,\n \"data-to\": this.to_task.task.id,\n });\n }\n\n update() {\n this.calculate_path();\n this.element.setAttribute(\"d\", this.path);\n }\n}\n","export default class Popup {\n constructor(parent, custom_html) {\n this.parent = parent;\n this.custom_html = custom_html;\n this.make();\n }\n\n make() {\n this.parent.innerHTML = `\n
\n
\n
\n `;\n\n this.hide();\n\n this.title = this.parent.querySelector(\".title\");\n this.subtitle = this.parent.querySelector(\".subtitle\");\n this.pointer = this.parent.querySelector(\".pointer\");\n }\n\n show(options) {\n if (!options.target_element) {\n throw new Error(\"target_element is required to show popup\");\n }\n const target_element = options.target_element;\n\n if (this.custom_html) {\n let html = this.custom_html(options.task);\n html += '
';\n this.parent.innerHTML = html;\n this.pointer = this.parent.querySelector(\".pointer\");\n } else {\n // set data\n this.title.innerHTML = options.title;\n this.subtitle.innerHTML = options.subtitle;\n }\n\n // set position\n let position_meta;\n if (target_element instanceof HTMLElement) {\n position_meta = target_element.getBoundingClientRect();\n } else if (target_element instanceof SVGElement) {\n position_meta = options.target_element.getBBox();\n }\n\n this.parent.style.left = options.x - this.parent.clientWidth / 2 + \"px\";\n this.parent.style.top = position_meta.y + position_meta.height + 10 + \"px\";\n\n this.pointer.style.left = this.parent.clientWidth / 2 + \"px\";\n this.pointer.style.top = \"-15px\";\n\n // show\n this.parent.style.opacity = 1;\n }\n\n hide() {\n this.parent.style.opacity = 0;\n this.parent.style.left = 0;\n }\n}\n","import date_utils from \"./date_utils\";\nimport { $, createSVG } from \"./svg_utils\";\nimport Bar from \"./bar\";\nimport Arrow from \"./arrow\";\nimport Popup from \"./popup\";\n\nimport \"./gantt.scss\";\n\nconst VIEW_MODE = {\n HOUR: \"Hour\",\n QUARTER_DAY: \"Quarter Day\",\n HALF_DAY: \"Half Day\",\n DAY: \"Day\",\n WEEK: \"Week\",\n MONTH: \"Month\",\n YEAR: \"Year\",\n};\n\nconst VIEW_MODE_PADDING = {\n HOUR: [\"7d\", \"7d\"],\n QUARTER_DAY: [\"7d\", \"7d\"],\n HALF_DAY: [\"7d\", \"7d\"],\n DAY: [\"1m\", \"1m\"],\n WEEK: [\"1m\", \"1m\"],\n MONTH: [\"1m\", \"1m\"],\n YEAR: [\"2y\", \"2y\"],\n};\n\nconst DEFAULT_OPTIONS = {\n header_height: 65,\n column_width: 30,\n step: 24,\n view_modes: [...Object.values(VIEW_MODE)],\n bar_height: 30,\n bar_corner_radius: 3,\n arrow_curve: 5,\n padding: 18,\n view_mode: \"Day\",\n date_format: \"YYYY-MM-DD\",\n popup_trigger: \"click\",\n show_expected_progress: false,\n popup: null,\n language: \"en\",\n readonly: false,\n highlight_weekend: true,\n scroll_to: 'start',\n lines: 'both',\n auto_move_label: true,\n today_button: true,\n view_mode_select: false,\n};\n\nexport default class Gantt {\n constructor(wrapper, tasks, options) {\n this.setup_wrapper(wrapper);\n this.setup_options(options);\n this.setup_tasks(tasks);\n // initialize with default view mode\n this.change_view_mode();\n this.bind_events();\n }\n\n setup_wrapper(element) {\n let svg_element, wrapper_element;\n\n // CSS Selector is passed\n if (typeof element === \"string\") {\n element = document.querySelector(element);\n }\n\n // get the SVGElement\n if (element instanceof HTMLElement) {\n wrapper_element = element;\n svg_element = element.querySelector(\"svg\");\n } else if (element instanceof SVGElement) {\n svg_element = element;\n } else {\n throw new TypeError(\n \"Frappé Gantt only supports usage of a string CSS selector,\" +\n \" HTML DOM element or SVG DOM element for the 'element' parameter\",\n );\n }\n\n // svg element\n if (!svg_element) {\n // create it\n this.$svg = createSVG(\"svg\", {\n append_to: wrapper_element,\n class: \"gantt\",\n });\n } else {\n this.$svg = svg_element;\n this.$svg.classList.add(\"gantt\");\n }\n\n // wrapper element\n this.$container = document.createElement(\"div\");\n this.$container.classList.add(\"gantt-container\");\n\n const parent_element = this.$svg.parentElement;\n parent_element.appendChild(this.$container);\n this.$container.appendChild(this.$svg);\n\n // popup wrapper\n this.$popup_wrapper = document.createElement(\"div\");\n this.$popup_wrapper.classList.add(\"popup-wrapper\");\n this.$container.appendChild(this.$popup_wrapper);\n }\n\n setup_options(options) {\n this.options = { ...DEFAULT_OPTIONS, ...options }\n if (!options.view_mode_padding) options.view_mode_padding = {}\n for (let [key, value] of Object.entries(options.view_mode_padding)) {\n if (typeof value === \"string\") {\n // Configure for single value given\n options.view_mode_padding[key] = [value, value];\n }\n }\n\n this.options.view_mode_padding = {\n ...VIEW_MODE_PADDING,\n ...options.view_mode_padding,\n };\n }\n\n setup_tasks(tasks) {\n // prepare tasks\n this.tasks = tasks.map((task, i) => {\n // convert to Date objects\n task._start = date_utils.parse(task.start);\n if (task.end === undefined && task.duration !== undefined) {\n task.end = task._start;\n let durations = task.duration.split(\" \");\n\n durations.forEach((tmpDuration) => {\n let { duration, scale } = date_utils.parse_duration(tmpDuration);\n task.end = date_utils.add(task.end, duration, scale);\n });\n }\n task._end = date_utils.parse(task.end);\n let diff = date_utils.diff(task._end, task._start, \"year\");\n if (diff < 0) {\n throw Error(\"start of task can't be after end of task: in task #, \" + (i + 1))\n }\n // make task invalid if duration too large\n if (date_utils.diff(task._end, task._start, \"year\") > 10) {\n task.end = null;\n }\n\n\n // cache index\n task._index = i;\n\n // invalid dates\n if (!task.start && !task.end) {\n const today = date_utils.today();\n task._start = today;\n task._end = date_utils.add(today, 2, \"day\");\n }\n\n if (!task.start && task.end) {\n task._start = date_utils.add(task._end, -2, \"day\");\n }\n\n if (task.start && !task.end) {\n task._end = date_utils.add(task._start, 2, \"day\");\n }\n\n // if hours is not set, assume the last day is full day\n // e.g: 2018-09-09 becomes 2018-09-09 23:59:59\n const task_end_values = date_utils.get_date_values(task._end);\n if (task_end_values.slice(3).every((d) => d === 0)) {\n task._end = date_utils.add(task._end, 24, \"hour\");\n }\n\n // invalid flag\n if (!task.start || !task.end) {\n task.invalid = true;\n }\n\n // dependencies\n if (typeof task.dependencies === \"string\" || !task.dependencies) {\n let deps = [];\n if (task.dependencies) {\n deps = task.dependencies\n .split(\",\")\n .map((d) => d.trim().replaceAll(' ', '_'))\n .filter((d) => d);\n }\n task.dependencies = deps;\n }\n\n // uids\n if (!task.id) {\n task.id = generate_id(task);\n } else if (typeof task.id === 'string') {\n task.id = task.id.replaceAll(' ', '_')\n } else {\n task.id = `${task.id}`\n }\n\n return task;\n });\n\n this.setup_dependencies();\n }\n\n setup_dependencies() {\n this.dependency_map = {};\n for (let t of this.tasks) {\n for (let d of t.dependencies) {\n this.dependency_map[d] = this.dependency_map[d] || [];\n this.dependency_map[d].push(t.id);\n }\n }\n }\n\n refresh(tasks) {\n this.setup_tasks(tasks);\n this.change_view_mode();\n }\n\n change_view_mode(mode = this.options.view_mode) {\n this.update_view_scale(mode);\n this.setup_dates();\n this.render();\n // fire viewmode_change event\n this.trigger_event(\"view_change\", [mode]);\n }\n\n update_view_scale(view_mode) {\n this.options.view_mode = view_mode;\n if (view_mode === VIEW_MODE.HOUR) {\n this.options.step = 24 / 24;\n this.options.column_width = 38;\n } else if (view_mode === VIEW_MODE.DAY) {\n this.options.step = 24;\n this.options.column_width = 38;\n } else if (view_mode === VIEW_MODE.HALF_DAY) {\n this.options.step = 24 / 2;\n this.options.column_width = 38;\n } else if (view_mode === VIEW_MODE.QUARTER_DAY) {\n this.options.step = 24 / 4;\n this.options.column_width = 38;\n } else if (view_mode === VIEW_MODE.WEEK) {\n this.options.step = 24 * 7;\n this.options.column_width = 140;\n } else if (view_mode === VIEW_MODE.MONTH) {\n this.options.step = 24 * 30;\n this.options.column_width = 120;\n } else if (view_mode === VIEW_MODE.YEAR) {\n this.options.step = 24 * 365;\n this.options.column_width = 120;\n }\n }\n\n setup_dates() {\n this.setup_gantt_dates();\n this.setup_date_values();\n }\n\n setup_gantt_dates() {\n this.gantt_start = this.gantt_end = null;\n\n for (let task of this.tasks) {\n // set global start and end date\n if (!this.gantt_start || task._start < this.gantt_start) {\n this.gantt_start = task._start;\n }\n if (!this.gantt_end || task._end > this.gantt_end) {\n this.gantt_end = task._end;\n }\n }\n let gantt_start, gantt_end;\n if (!this.gantt_start) gantt_start = new Date();\n else gantt_start = date_utils.start_of(this.gantt_start, \"day\");\n if (!this.gantt_end) gantt_end = new Date();\n else gantt_end = date_utils.start_of(this.gantt_end, \"day\");\n\n // add date padding on both sides\n let viewKey;\n for (let [key, value] of Object.entries(VIEW_MODE)) {\n if (value === this.options.view_mode) {\n viewKey = key;\n }\n }\n const [padding_start, padding_end] = this.options.view_mode_padding[\n viewKey\n ].map(date_utils.parse_duration);\n gantt_start = date_utils.add(\n gantt_start,\n -padding_start.duration,\n padding_start.scale,\n );\n\n let format_string;\n if (this.view_is(VIEW_MODE.YEAR)) {\n format_string = \"YYYY\"\n } else if (this.view_is(VIEW_MODE.MONTH)) {\n format_string = \"YYYY-MM\"\n } else if (this.view_is(VIEW_MODE.DAY)) {\n format_string = \"YYYY-MM-DD\"\n } else {\n format_string = \"YYYY-MM-DD HH\"\n }\n this.gantt_start = date_utils.parse(date_utils.format(gantt_start, format_string));\n this.gantt_start.setHours(0, 0, 0, 0)\n this.gantt_end = date_utils.add(\n gantt_end,\n padding_end.duration,\n padding_end.scale,\n );\n }\n\n setup_date_values() {\n this.dates = [];\n let cur_date = null;\n\n while (cur_date === null || cur_date < this.gantt_end) {\n if (!cur_date) {\n cur_date = date_utils.clone(this.gantt_start);\n } else {\n if (this.view_is(VIEW_MODE.YEAR)) {\n cur_date = date_utils.add(cur_date, 1, \"year\");\n } else if (this.view_is(VIEW_MODE.MONTH)) {\n cur_date = date_utils.add(cur_date, 1, \"month\");\n } else {\n cur_date = date_utils.add(cur_date, this.options.step, \"hour\");\n }\n }\n this.dates.push(cur_date);\n }\n }\n\n bind_events() {\n if (this.options.readonly) return\n this.bind_grid_click();\n this.bind_bar_events();\n }\n\n render() {\n this.clear();\n this.setup_layers();\n this.make_grid();\n this.make_dates();\n this.make_bars();\n this.make_grid_extras();\n this.make_arrows();\n this.map_arrows_on_bars();\n this.set_width();\n this.set_scroll_position(this.options.scroll_to);\n }\n\n setup_layers() {\n this.layers = {};\n const layers = [\"grid\", \"arrow\", \"progress\", \"bar\", \"details\"];\n // make group layers\n for (let layer of layers) {\n this.layers[layer] = createSVG(\"g\", {\n class: layer,\n append_to: this.$svg,\n });\n }\n }\n\n make_grid() {\n this.make_grid_background();\n this.make_grid_rows();\n this.make_grid_header();\n }\n\n make_grid_extras() {\n this.make_grid_highlights();\n this.make_grid_ticks();\n }\n\n make_grid_background() {\n const grid_width = this.dates.length * this.options.column_width;\n const grid_height =\n this.options.header_height +\n this.options.padding +\n (this.options.bar_height + this.options.padding) * this.tasks.length;\n\n createSVG(\"rect\", {\n x: 0,\n y: 0,\n width: grid_width,\n height: grid_height,\n class: \"grid-background\",\n append_to: this.$svg,\n });\n\n $.attr(this.$svg, {\n height: grid_height + this.options.padding + 100,\n width: \"100%\",\n });\n }\n\n make_grid_rows() {\n const rows_layer = createSVG(\"g\", { append_to: this.layers.grid });\n\n const row_width = this.dates.length * this.options.column_width;\n const row_height = this.options.bar_height + this.options.padding;\n\n let row_y = this.options.header_height + this.options.padding / 2;\n\n for (let _ of this.tasks) {\n createSVG(\"rect\", {\n x: 0,\n y: row_y,\n width: row_width,\n height: row_height,\n class: \"grid-row\",\n append_to: rows_layer,\n });\n if (this.options.lines === 'both' || this.options.lines === 'horizontal') {\n\n }\n\n row_y += this.options.bar_height + this.options.padding;\n }\n }\n\n make_grid_header() {\n const curHeader = document.querySelector('.grid-header')\n\n let $header = document.createElement(\"div\");\n $header.style.height = this.options.header_height + 10 + \"px\";\n $header.style.width = this.dates.length * this.options.column_width + \"px\";\n $header.classList.add('grid-header')\n this.$header = $header\n this.$container.appendChild($header)\n\n let $upper_header = document.createElement(\"div\");\n $upper_header.classList.add('upper-header')\n this.$upper_header = $upper_header\n this.$header.appendChild($upper_header)\n\n let $lower_header = document.createElement(\"div\");\n $lower_header.classList.add('lower-header')\n this.$lower_header = $lower_header\n this.$header.appendChild($lower_header)\n\n this.make_side_header()\n }\n\n make_side_header() {\n let $side_header = document.createElement('div')\n $side_header.classList.add('side-header')\n\n // Create view mode change select\n if (this.options.view_mode_select) {\n\n const $select = document.createElement(\"select\");\n $select.classList.add('viewmode-select')\n\n const $el = document.createElement(\"option\");\n $el.selected = true\n $el.disabled = true\n $el.textContent = 'Mode'\n $select.appendChild($el)\n\n for (const key in VIEW_MODE) {\n const $option = document.createElement(\"option\");\n $option.value = VIEW_MODE[key];\n $option.textContent = VIEW_MODE[key];\n $select.appendChild($option);\n }\n // $select.value = this.options.view_mode\n $select.addEventListener(\"change\", (function () {\n this.change_view_mode($select.value)\n }).bind(this));\n $side_header.appendChild($select)\n }\n\n // Create today button\n if (this.options.today_button) {\n let $today_button = document.createElement('button')\n $today_button.classList.add('today-button')\n $today_button.textContent = 'Today'\n $today_button.onclick = this.scroll_today.bind(this)\n $side_header.appendChild($today_button)\n }\n\n this.$header.appendChild($side_header)\n const { left, y } = this.$header.getBoundingClientRect();\n const width = Math.min(this.$header.clientWidth, this.$container.clientWidth)\n $side_header.style.left = left + this.$container.scrollLeft + width - $side_header.clientWidth + 'px';\n $side_header.style.top = y + 10 + 'px';\n }\n\n make_grid_ticks() {\n if (!['both', 'vertical', 'horizontal'].includes(this.options.lines)) return\n let tick_x = 0;\n let tick_y = this.options.header_height + this.options.padding / 2;\n let tick_height =\n (this.options.bar_height + this.options.padding) * this.tasks.length;\n\n let $lines_layer = createSVG(\"g\", { class: 'lines_layer', append_to: this.layers.grid });\n\n\n let row_y = this.options.header_height + this.options.padding / 2;\n\n const row_width = this.dates.length * this.options.column_width;\n const row_height = this.options.bar_height + this.options.padding;\n if (this.options.lines !== 'vertical') {\n for (let _ of this.tasks) {\n createSVG(\"line\", {\n x1: 0,\n y1: row_y + row_height,\n x2: row_width,\n y2: row_y + row_height,\n class: \"row-line\",\n append_to: $lines_layer,\n });\n row_y += row_height;\n }\n }\n if (this.options.lines === 'horizontal') return;\n for (let date of this.dates) {\n let tick_class = \"tick\";\n // thick tick for monday\n if (this.view_is(VIEW_MODE.DAY) && date.getDate() === 1) {\n tick_class += \" thick\";\n }\n // thick tick for first week\n if (\n this.view_is(VIEW_MODE.WEEK) &&\n date.getDate() >= 1 &&\n date.getDate() < 8\n ) {\n tick_class += \" thick\";\n }\n // thick ticks for quarters\n if (this.view_is(VIEW_MODE.MONTH) && date.getMonth() % 3 === 0) {\n tick_class += \" thick\";\n }\n\n createSVG(\"path\", {\n d: `M ${tick_x} ${tick_y} v ${tick_height}`,\n class: tick_class,\n append_to: this.layers.grid,\n });\n\n if (this.view_is(VIEW_MODE.MONTH)) {\n tick_x +=\n (date_utils.get_days_in_month(date) * this.options.column_width) / 30;\n } else {\n tick_x += this.options.column_width;\n }\n }\n }\n\n highlightWeekends() {\n if (!this.view_is('Day') && !this.view_is('Half Day')) return\n for (let d = new Date(this.gantt_start); d <= this.gantt_end; d.setDate(d.getDate() + 1)) {\n if (d.getDay() === 0 || d.getDay() === 6) {\n const x = (date_utils.diff(d, this.gantt_start, 'hour') /\n this.options.step) *\n this.options.column_width;\n const height = (this.options.bar_height + this.options.padding) * this.tasks.length;\n createSVG('rect', {\n x,\n y: this.options.header_height + this.options.padding / 2,\n width: (this.view_is('Day') ? 1 : 2) * this.options.column_width,\n height,\n class: 'holiday-highlight',\n append_to: this.layers.grid,\n });\n }\n }\n }\n\n //compute the horizontal x distance\n computeGridHighlightDimensions(view_mode) {\n let x = this.options.column_width / 2;\n\n if (this.view_is(VIEW_MODE.DAY)) {\n let today = date_utils.today()\n return {\n x: x +\n (date_utils.diff(today, this.gantt_start, \"hour\") / this.options.step) *\n this.options.column_width,\n date: today\n }\n }\n\n for (let date of this.dates) {\n const todayDate = new Date();\n const startDate = new Date(date);\n const endDate = new Date(date);\n switch (view_mode) {\n case VIEW_MODE.WEEK:\n endDate.setDate(date.getDate() + 7);\n break;\n case VIEW_MODE.MONTH:\n endDate.setMonth(date.getMonth() + 1);\n break;\n case VIEW_MODE.YEAR:\n endDate.setFullYear(date.getFullYear() + 1);\n break;\n }\n if (todayDate >= startDate && todayDate <= endDate) {\n return { x, date: startDate }\n } else {\n x += this.options.column_width;\n }\n }\n }\n\n make_grid_highlights() {\n if (this.options.highlight_weekend) this.highlightWeekends()\n // highlight today's | week's | month's | year's\n if (\n this.view_is(VIEW_MODE.DAY) ||\n this.view_is(VIEW_MODE.WEEK) ||\n this.view_is(VIEW_MODE.MONTH) ||\n this.view_is(VIEW_MODE.YEAR)\n ) {\n // Used as we must find the _end_ of session if view is not Day\n const { x: left, date } = this.computeGridHighlightDimensions(this.options.view_mode)\n const top = this.options.header_height + this.options.padding / 2;\n const height = (this.options.bar_height + this.options.padding) * this.tasks.length;\n this.$current_highlight = this.create_el({ top, left, height, classes: 'current-highlight', append_to: this.$container })\n let $today = document.getElementById(date_utils.format(date).replaceAll(' ', '_'))\n\n $today.classList.add('current-date-highlight')\n $today.style.top = +$today.style.top.slice(0, -2) - 4 + 'px'\n $today.style.left = +$today.style.left.slice(0, -2) - 8 + 'px'\n }\n }\n\n create_el({ left, top, width, height, id, classes, append_to }) {\n let $el = document.createElement(\"div\");\n $el.classList.add(classes)\n $el.style.top = top + 'px'\n $el.style.left = left + 'px'\n if (id) $el.id = id\n if (width) $el.style.width = height + 'px'\n if (height) $el.style.height = height + 'px'\n append_to.appendChild($el)\n return $el\n }\n\n make_dates() {\n this.upper_texts_x = {}\n this.get_dates_to_draw().forEach((date, i) => {\n let $lower_text = this.create_el({\n left: date.lower_x,\n top: date.lower_y,\n id: date.formatted_date,\n classes: 'lower-text',\n append_to: this.$lower_header\n })\n $lower_text.innerText = date.lower_text\n $lower_text.style.left = +$lower_text.style.left.slice(0, -2) - $lower_text.clientWidth / 2 + 'px'\n\n if (date.upper_text) {\n this.upper_texts_x[date.upper_text] = date.upper_x\n let $upper_text = document.createElement('div');\n $upper_text.classList.add('upper-text')\n $upper_text.style.left = date.upper_x + 'px'\n $upper_text.style.top = date.upper_y + 'px'\n $upper_text.innerText = date.upper_text\n this.$upper_header.appendChild($upper_text)\n\n // remove out-of-bound dates\n if (date.upper_x > this.layers.grid.getBBox().width) {\n $upper_text.remove();\n }\n }\n })\n }\n\n get_dates_to_draw() {\n let last_date = null;\n const dates = this.dates.map((date, i) => {\n const d = this.get_date_info(date, last_date, i);\n last_date = d;\n return d;\n });\n return dates;\n }\n\n get_date_info(date, last_date_info) {\n let last_date = last_date_info ? last_date_info.date : date_utils.add(date, 1, \"day\")\n const date_text = {\n Hour_lower: date_utils.format(date, \"HH\", this.options.language),\n \"Quarter Day_lower\": date_utils.format(date, \"HH\", this.options.language),\n \"Half Day_lower\": date_utils.format(date, \"HH\", this.options.language),\n Day_lower:\n date.getDate() !== last_date.getDate()\n ? date_utils.format(date, \"D\", this.options.language)\n : \"\",\n Week_lower:\n date.getMonth() !== last_date.getMonth()\n ? date_utils.format(date, \"D MMM\", this.options.language)\n : date_utils.format(date, \"D\", this.options.language),\n Month_lower: date_utils.format(date, \"MMMM\", this.options.language),\n Year_lower: date_utils.format(date, \"YYYY\", this.options.language),\n Hour_upper:\n date.getDate() !== last_date.getDate()\n ? date_utils.format(date, \"D MMMM\", this.options.language)\n : \"\",\n \"Quarter Day_upper\":\n date.getDate() !== last_date.getDate()\n ? date_utils.format(date, \"D MMM\", this.options.language)\n : \"\",\n \"Half Day_upper\":\n date.getDate() !== last_date.getDate()\n ? date.getMonth() !== last_date.getMonth()\n ? date_utils.format(date, \"D MMM\", this.options.language)\n : date_utils.format(date, \"D\", this.options.language)\n : \"\",\n Day_upper:\n date.getMonth() !== last_date.getMonth() || !last_date_info\n ? date_utils.format(date, \"MMMM\", this.options.language)\n : \"\",\n Week_upper:\n date.getMonth() !== last_date.getMonth()\n ? date_utils.format(date, \"MMMM\", this.options.language)\n : \"\",\n Month_upper:\n date.getFullYear() !== last_date.getFullYear()\n ? date_utils.format(date, \"YYYY\", this.options.language)\n : \"\",\n Year_upper:\n date.getFullYear() !== last_date.getFullYear()\n ? date_utils.format(date, \"YYYY\", this.options.language)\n : \"\",\n };\n let column_width = this.view_is(VIEW_MODE.MONTH) ? (date_utils.get_days_in_month(date) * this.options.column_width) / 30 : this.options.column_width;\n const base_pos = {\n x: last_date_info\n ? last_date_info.base_pos_x + last_date_info.column_width\n : 0,\n lower_y: this.options.header_height - 20,\n upper_y: this.options.header_height - 50,\n };\n const x_pos = {\n Hour_lower: column_width / 2,\n Hour_upper: column_width * 12,\n \"Quarter Day_lower\": column_width / 2,\n \"Quarter Day_upper\": column_width * 2,\n \"Half Day_lower\": column_width / 2,\n \"Half Day_upper\": column_width,\n Day_lower: column_width / 2,\n Day_upper: column_width / 2,\n Week_lower: column_width / 2,\n Week_upper: (column_width * 4) / 2,\n Month_lower: column_width / 2,\n Month_upper: column_width / 2,\n Year_lower: column_width / 2,\n Year_upper: (column_width * 30) / 2,\n };\n return {\n date,\n formatted_date: date_utils.format(date).replaceAll(' ', '_'),\n column_width,\n base_pos_x: base_pos.x,\n upper_text: this.options.lower_text ? this.options.upper_text(date, this.options.view_mode, date_text[`${this.options.view_mode}_upper`]) : date_text[`${this.options.view_mode}_upper`],\n lower_text: this.options.lower_text ? this.options.lower_text(date, this.options.view_mode, date_text[`${this.options.view_mode}_lower`]) : date_text[`${this.options.view_mode}_lower`],\n upper_x: base_pos.x + x_pos[`${this.options.view_mode}_upper`],\n upper_y: base_pos.upper_y,\n lower_x: base_pos.x + x_pos[`${this.options.view_mode}_lower`],\n lower_y: base_pos.lower_y,\n };\n }\n\n make_bars() {\n this.bars = this.tasks.map((task) => {\n const bar = new Bar(this, task);\n this.layers.bar.appendChild(bar.group);\n return bar;\n });\n }\n\n make_arrows() {\n this.arrows = [];\n for (let task of this.tasks) {\n let arrows = [];\n arrows = task.dependencies\n .map((task_id) => {\n const dependency = this.get_task(task_id);\n if (!dependency) return;\n const arrow = new Arrow(\n this,\n this.bars[dependency._index], // from_task\n this.bars[task._index], // to_task\n );\n this.layers.arrow.appendChild(arrow.element);\n return arrow;\n })\n .filter(Boolean); // filter falsy values\n this.arrows = this.arrows.concat(arrows);\n }\n }\n\n map_arrows_on_bars() {\n for (let bar of this.bars) {\n bar.arrows = this.arrows.filter((arrow) => {\n return (\n arrow.from_task.task.id === bar.task.id ||\n arrow.to_task.task.id === bar.task.id\n );\n });\n }\n }\n\n set_width() {\n const cur_width = this.$svg.getBoundingClientRect().width;\n const actual_width = this.$svg.querySelector('.grid .grid-row') ? this.$svg\n .querySelector('.grid .grid-row')\n .getAttribute('width') : 0;\n if (cur_width < actual_width) {\n this.$svg.setAttribute(\"width\", actual_width);\n }\n }\n\n set_scroll_position(date) {\n if (!date || date === 'start') {\n date = this.gantt_start\n } else if (date === 'today') {\n return this.scroll_today()\n } else if (typeof date === 'string') {\n date = date_utils.parse(date)\n }\n\n const parent_element = this.$svg.parentElement;\n if (!parent_element) return;\n\n const hours_before_first_task = date_utils.diff(\n date,\n this.gantt_start,\n \"hour\",\n ) + 24;\n\n const scroll_pos =\n (hours_before_first_task / this.options.step) *\n this.options.column_width -\n this.options.column_width;\n parent_element.scrollTo({ left: scroll_pos, behavior: 'smooth' })\n }\n\n scroll_today() {\n this.set_scroll_position(new Date())\n }\n\n bind_grid_click() {\n $.on(\n this.$svg,\n this.options.popup_trigger,\n \".grid-row, .grid-header\",\n () => {\n this.unselect_all();\n this.hide_popup();\n },\n );\n }\n\n bind_bar_events() {\n let is_dragging = false;\n let x_on_start = 0;\n let x_on_scroll_start = 0;\n let y_on_start = 0;\n let is_resizing_left = false;\n let is_resizing_right = false;\n let parent_bar_id = null;\n let bars = []; // instanceof Bar\n this.bar_being_dragged = null;\n\n function action_in_progress() {\n return is_dragging || is_resizing_left || is_resizing_right;\n }\n\n $.on(this.$svg, \"mousedown\", \".bar-wrapper, .handle\", (e, element) => {\n const bar_wrapper = $.closest(\".bar-wrapper\", element);\n bars.forEach((bar) => bar.group.classList.remove(\"active\"));\n\n if (element.classList.contains(\"left\")) {\n is_resizing_left = true;\n } else if (element.classList.contains(\"right\")) {\n is_resizing_right = true;\n } else if (element.classList.contains(\"bar-wrapper\")) {\n is_dragging = true;\n }\n\n bar_wrapper.classList.add(\"active\");\n this.popup.parent.classList.add('hidden')\n\n x_on_start = e.offsetX;\n y_on_start = e.offsetY;\n\n parent_bar_id = bar_wrapper.getAttribute(\"data-id\");\n const ids = [\n parent_bar_id,\n ...this.get_all_dependent_tasks(parent_bar_id),\n ];\n bars = ids.map((id) => this.get_bar(id));\n\n this.bar_being_dragged = parent_bar_id;\n\n bars.forEach((bar) => {\n const $bar = bar.$bar;\n $bar.ox = $bar.getX();\n $bar.oy = $bar.getY();\n $bar.owidth = $bar.getWidth();\n $bar.finaldx = 0;\n });\n });\n $.on(this.$container, 'scroll', e => {\n let elements = document.querySelectorAll('.bar-wrapper');\n let localBars = [];\n const ids = [];\n let dx;\n if (x_on_scroll_start) {\n dx = e.currentTarget.scrollLeft - x_on_scroll_start;\n }\n\n const daysSinceStart = e.currentTarget.scrollLeft / this.options.column_width * this.options.step / 24;\n let format_str = \"D MMM\"\n if ([\"Year\", \"Month\"].includes(this.options.view_mode)) format_str = 'YYYY'\n else if ([\"Day\", \"Week\"].includes(this.options.view_mode)) format_str = 'MMMM'\n else if (this.view_is('Half Day')) format_str = 'D'\n else if (this.view_is('Hour')) format_str = \"D MMMM\"\n\n\n let currentUpper = date_utils.format(\n date_utils.add(this.gantt_start, daysSinceStart, 'day'),\n format_str\n );\n const upperTexts = Array.from(document.querySelectorAll('.upper-text'));\n const $el = upperTexts.find(el => el.textContent === currentUpper)\n if ($el && !$el.classList.contains('current-upper')) {\n const $current = document.querySelector('.current-upper')\n if ($current) {\n $current.classList.remove('current-upper')\n $current.style.left = this.upper_texts_x[$current.textContent] + 'px';\n $current.style.top = this.options.header_height - 50 + 'px';\n }\n\n $el.classList.add('current-upper')\n let dimensions = this.$svg.getBoundingClientRect()\n $el.style.left = dimensions.x + this.$container.scrollLeft + 10 + 'px';\n $el.style.top = dimensions.y + this.options.header_height - 50 + 'px';\n }\n\n Array.prototype.forEach.call(elements, function (el, i) {\n ids.push(el.getAttribute('data-id'));\n });\n\n if (dx) {\n localBars = ids.map(id => this.get_bar(id));\n if (this.options.auto_move_label) {\n localBars.forEach(bar => {\n bar.update_label_position_on_horizontal_scroll({ x: dx, sx: e.currentTarget.scrollLeft });\n });\n }\n }\n\n x_on_scroll_start = e.currentTarget.scrollLeft;\n });\n\n $.on(this.$svg, \"mousemove\", (e) => {\n if (!action_in_progress()) return;\n const dx = e.offsetX - x_on_start;\n const dy = e.offsetY - y_on_start;\n\n bars.forEach((bar) => {\n const $bar = bar.$bar;\n $bar.finaldx = this.get_snap_position(dx);\n this.hide_popup();\n if (is_resizing_left) {\n if (parent_bar_id === bar.task.id) {\n bar.update_bar_position({\n x: $bar.ox + $bar.finaldx,\n width: $bar.owidth - $bar.finaldx,\n });\n } else {\n bar.update_bar_position({\n x: $bar.ox + $bar.finaldx,\n });\n }\n } else if (is_resizing_right) {\n if (parent_bar_id === bar.task.id) {\n bar.update_bar_position({\n width: $bar.owidth + $bar.finaldx,\n });\n }\n } else if (is_dragging && !this.options.readonly) {\n bar.update_bar_position({ x: $bar.ox + $bar.finaldx });\n }\n });\n });\n\n document.addEventListener(\"mouseup\", (e) => {\n\n is_dragging = false;\n is_resizing_left = false;\n is_resizing_right = false;\n });\n\n $.on(this.$svg, \"mouseup\", (e) => {\n this.bar_being_dragged = null;\n bars.forEach((bar) => {\n const $bar = bar.$bar;\n if (!$bar.finaldx) return;\n bar.date_changed();\n bar.set_action_completed();\n });\n });\n\n this.bind_bar_progress();\n }\n\n bind_bar_progress() {\n let x_on_start = 0;\n let y_on_start = 0;\n let is_resizing = null;\n let bar = null;\n let $bar_progress = null;\n let $bar = null;\n\n $.on(this.$svg, \"mousedown\", \".handle.progress\", (e, handle) => {\n is_resizing = true;\n x_on_start = e.offsetX;\n y_on_start = e.offsetY;\n\n const $bar_wrapper = $.closest(\".bar-wrapper\", handle);\n const id = $bar_wrapper.getAttribute(\"data-id\");\n bar = this.get_bar(id);\n\n $bar_progress = bar.$bar_progress;\n $bar = bar.$bar;\n\n $bar_progress.finaldx = 0;\n $bar_progress.owidth = $bar_progress.getWidth();\n $bar_progress.min_dx = -$bar_progress.getWidth();\n $bar_progress.max_dx = $bar.getWidth() - $bar_progress.getWidth();\n });\n\n $.on(this.$svg, \"mousemove\", (e) => {\n if (!is_resizing) return;\n let dx = e.offsetX - x_on_start;\n let dy = e.offsetY - y_on_start;\n\n if (dx > $bar_progress.max_dx) {\n dx = $bar_progress.max_dx;\n }\n if (dx < $bar_progress.min_dx) {\n dx = $bar_progress.min_dx;\n }\n\n const $handle = bar.$handle_progress;\n $.attr($bar_progress, \"width\", $bar_progress.owidth + dx);\n $.attr($handle, \"points\", bar.get_progress_polygon_points());\n $bar_progress.finaldx = dx;\n });\n\n $.on(this.$svg, \"mouseup\", () => {\n is_resizing = false;\n if (!($bar_progress && $bar_progress.finaldx)) return;\n\n $bar_progress.finaldx = 0;\n bar.progress_changed();\n bar.set_action_completed();\n bar = null;\n $bar_progress = null;\n $bar = null;\n });\n }\n\n get_all_dependent_tasks(task_id) {\n let out = [];\n let to_process = [task_id];\n while (to_process.length) {\n const deps = to_process.reduce((acc, curr) => {\n acc = acc.concat(this.dependency_map[curr]);\n return acc;\n }, []);\n\n out = out.concat(deps);\n to_process = deps.filter((d) => !to_process.includes(d));\n }\n\n return out.filter(Boolean);\n }\n\n get_snap_position(dx) {\n let odx = dx,\n rem,\n position;\n\n if (this.view_is(VIEW_MODE.WEEK)) {\n rem = dx % (this.options.column_width / 7);\n position =\n odx -\n rem +\n (rem < this.options.column_width / 14\n ? 0\n : this.options.column_width / 7);\n } else if (this.view_is(VIEW_MODE.MONTH)) {\n rem = dx % (this.options.column_width / 30);\n position =\n odx -\n rem +\n (rem < this.options.column_width / 60\n ? 0\n : this.options.column_width / 30);\n } else {\n rem = dx % this.options.column_width;\n position =\n odx -\n rem +\n (rem < this.options.column_width / 2 ? 0 : this.options.column_width);\n }\n return position;\n }\n\n unselect_all() {\n [...this.$svg.querySelectorAll(\".bar-wrapper\")].forEach((el) => {\n el.classList.remove(\"active\");\n });\n this.popup.parent.classList.remove('hidden')\n }\n\n view_is(modes) {\n if (typeof modes === \"string\") {\n return this.options.view_mode === modes;\n }\n\n if (Array.isArray(modes)) {\n return modes.some((mode) => this.options.view_mode === mode);\n }\n\n return false;\n }\n\n get_task(id) {\n return this.tasks.find((task) => {\n return task.id === id;\n });\n }\n\n get_bar(id) {\n return this.bars.find((bar) => {\n return bar.task.id === id;\n });\n }\n\n show_popup(options) {\n if (this.options.popup === false) return\n if (!this.popup) {\n this.popup = new Popup(\n this.$popup_wrapper,\n this.options.popup,\n );\n }\n this.popup.show(options);\n }\n\n hide_popup() {\n this.popup && this.popup.hide();\n }\n\n trigger_event(event, args) {\n if (this.options[\"on_\" + event]) {\n this.options[\"on_\" + event].apply(null, args);\n }\n }\n\n /**\n * Gets the oldest starting date from the list of tasks\n *\n * @returns Date\n * @memberof Gantt\n */\n get_oldest_starting_date() {\n if (!this.tasks.length) return new Date()\n return this.tasks\n .map((task) => task._start)\n .reduce((prev_date, cur_date) =>\n cur_date <= prev_date ? cur_date : prev_date,\n );\n }\n\n /**\n * Clear all elements from the parent svg element\n *\n * @memberof Gantt\n */\n clear() {\n this.$svg.innerHTML = \"\";\n this.$header?.remove?.()\n this.$current_highlight?.remove?.()\n this.popup?.hide?.()\n }\n}\n\nGantt.VIEW_MODE = VIEW_MODE;\n\nfunction generate_id(task) {\n return task.name + \"_\" + Math.random().toString(36).slice(2, 12);\n}\n"],"names":["YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","SHORTENED","January","February","March","April","May","June","July","August","September","October","November","December","date_utils","parse_duration","duration","matches","exec","parseInt","scale","parse","date","date_separator","time_separator","Date","date_parts","time_parts","parts","split","map","val","vals","length","parseFloat","concat","to_string","with_time","TypeError","this","get_date_values","i","padStart","date_string","time_string","format","format_string","lang","month_name","Intl","DateTimeFormat","month","month_name_capitalized","charAt","toUpperCase","slice","values","d","format_map","YYYY","MM","DD","HH","mm","ss","SSS","D","MMMM","MMM","str","formatted_values","Object","keys","sort","a","b","forEach","key","includes","replaceAll","push","value","diff","date_a","date_b","milliseconds","seconds","hours","minutes","days","months","years","endsWith","Math","floor","today","now","add","qty","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","start_of","scores","should_reset","_scale","clone","get_days_in_month","no_of_days","year","targetLength","padString","String","repeat","$","expr","con","document","querySelector","createSVG","tag","attrs","elem","createElementNS","attr","append_to","appendChild","innerHTML","setAttribute","animateSVG","svgElement","from","to","animatedSvgElement","dur","begin","animEl","attributeName","animateElement","calcMode","keyTimes","keySplines","cubic_bezier","getAnimationElement","event","createEvent","initEvent","eventName","dispatchEvent","name","ease","linear","on","element","selector","callback","delegate","bind","off","handler","removeEventListener","addEventListener","e","delegatedTarget","target","closest","call","parentNode","getAttribute","Bar","constructor","gantt","task","set_defaults","prepare","draw","action_completed","prepare_values","prepare_helpers","invalid","height","options","bar_height","image_size","compute_x","compute_y","compute_duration","corner_radius","bar_corner_radius","width","column_width","progress_width","progress","group","class","custom_class","important","id","bar_group","handle_group","SVGElement","prototype","getX","getY","getWidth","getHeight","getEndX","prepare_expected_progress_values","compute_expected_progress","expected_progress_width","expected_progress","draw_bar","draw_progress_bar","show_expected_progress","draw_expected_progress_bar","draw_label","draw_resize_handles","thumbnail","draw_thumbnail","$bar","x","y","rx","ry","classList","$expected_bar_progress","$bar_progress","_start","gantt_start","step","$date_highlight","createElement","style","top","header_height","left","$lower_header","prepend","x_coord","requestAnimationFrame","update_label_position","defs","clipPath","href","readonly","bar","$handle_progress","points","get_progress_polygon_points","join","bar_progress","icon_width","icon_height","setup_click_event","timeout","task_id","trigger_event","screenX","screenY","setTimeout","show_popup","offsetX","display","clearTimeout","popup","hide","popup_trigger","bar_being_dragged","subtitle","language","_end","target_element","title","update_bar_position","dependencies","dep","get_bar","reduce","_","curr","update_attr","update_handle_position","date_changed","update_expected_progressbar_position","update_progressbar_position","update_arrow_position","update_label_position_on_horizontal_scroll","sx","container","label","img","img_mask","barWidthLimit","newLabelX","newImgX","imgWidth","getBBox","labelEndX","viewportCentral","clientWidth","contains","changed","new_start_date","new_end_date","compute_start_end_date","Number","progress_changed","new_progress","compute_progress","set_action_completed","x_in_units","width_in_units","task_start","view_is","padding","_index","get_snap_position","dx","rem","position","odx","isNaN","x_offset_label_img","labelWidth","barWidth","remove","handle","arrows","arrow","update","Arrow","from_task","to_task","calculate_path","start_x","condition","start_y","end_x","end_y","from_is_below_to","curve","arrow_curve","clockwise","curve_y","offset","path","down_1","down_2","Popup","parent","custom_html","make","pointer","show","Error","html","position_meta","HTMLElement","getBoundingClientRect","opacity","VIEW_MODE","QUARTER_DAY","HALF_DAY","WEEK","VIEW_MODE_PADDING","DEFAULT_OPTIONS","view_modes","view_mode","date_format","highlight_weekend","scroll_to","lines","auto_move_label","today_button","view_mode_select","Gantt","wrapper","tasks","setup_wrapper","setup_options","setup_tasks","change_view_mode","bind_events","svg_element","wrapper_element","$svg","$container","parentElement","$popup_wrapper","view_mode_padding","entries","start","undefined","end","tmpDuration","every","deps","trim","filter","random","toString","generate_id","setup_dependencies","dependency_map","t","refresh","mode","update_view_scale","setup_dates","render","setup_gantt_dates","setup_date_values","gantt_end","viewKey","padding_start","padding_end","setHours","dates","cur_date","bind_grid_click","bind_bar_events","clear","setup_layers","make_grid","make_dates","make_bars","make_grid_extras","make_arrows","map_arrows_on_bars","set_width","set_scroll_position","layers","layer","make_grid_background","make_grid_rows","make_grid_header","make_grid_highlights","make_grid_ticks","grid_width","grid_height","rows_layer","grid","row_width","row_height","row_y","$header","$upper_header","make_side_header","$side_header","$select","$el","selected","disabled","textContent","$option","$today_button","onclick","scroll_today","min","scrollLeft","tick_x","tick_y","tick_height","$lines_layer","x1","y1","x2","y2","tick_class","highlightWeekends","setDate","getDay","computeGridHighlightDimensions","todayDate","startDate","endDate","setMonth","setFullYear","$current_highlight","create_el","classes","$today","getElementById","upper_texts_x","get_dates_to_draw","$lower_text","lower_x","lower_y","formatted_date","innerText","lower_text","upper_text","upper_x","$upper_text","upper_y","last_date","get_date_info","last_date_info","date_text","Hour_lower","Day_lower","Week_lower","Month_lower","Year_lower","Hour_upper","Day_upper","Week_upper","Month_upper","Year_upper","base_pos","base_pos_x","x_pos","bars","dependency","get_task","Boolean","cur_width","actual_width","parent_element","scroll_pos","scrollTo","behavior","unselect_all","hide_popup","is_dragging","x_on_start","x_on_scroll_start","y_on_start","is_resizing_left","is_resizing_right","parent_bar_id","bar_wrapper","offsetY","ids","get_all_dependent_tasks","ox","oy","owidth","finaldx","elements","querySelectorAll","localBars","currentTarget","daysSinceStart","format_str","currentUpper","Array","find","el","$current","dimensions","bind_bar_progress","is_resizing","min_dx","max_dx","$handle","out","to_process","acc","modes","isArray","some","args","apply","get_oldest_starting_date","prev_date"],"mappings":"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"} \ No newline at end of file diff --git a/dist/frappe-gantt.umd.cjs b/dist/frappe-gantt.umd.cjs new file mode 100644 index 0000000..497fbe6 --- /dev/null +++ b/dist/frappe-gantt.umd.cjs @@ -0,0 +1,23 @@ +(function(y,x){typeof exports=="object"&&typeof module<"u"?module.exports=x():typeof define=="function"&&define.amd?define(x):(y=typeof globalThis<"u"?globalThis:y||self,y.Gantt=x())})(this,function(){"use strict";const y="year",x="month",k="day",D="hour",E="minute",Y="second",L="millisecond",S={January:"Jan",February:"Feb",March:"Mar",April:"Apr",May:"May",June:"Jun",July:"Jul",August:"Aug",September:"Sep",October:"Oct",November:"Nov",December:"Dec"},h={parse_duration(n){const e=/([0-9]+)(y|m|d|h|min|s|ms)/gm.exec(n);if(console.log(e),e!==null){if(e[2]==="y")return{duration:parseInt(e[1]),scale:"year"};if(e[2]==="m")return{duration:parseInt(e[1]),scale:"month"};if(e[2]==="d")return{duration:parseInt(e[1]),scale:"day"};if(e[2]==="h")return{duration:parseInt(e[1]),scale:"hour"};if(e[2]==="min")return{duration:parseInt(e[1]),scale:"minute"};if(e[2]==="s")return{duration:parseInt(e[1]),scale:"second"};if(e[2]==="ms")return{duration:parseInt(e[1]),scale:"millisecond"}}},parse(n,t="-",e=/[.:]/){if(n instanceof Date)return n;if(typeof n=="string"){let i,s;const r=n.split(" ");i=r[0].split(t).map(a=>parseInt(a,10)),s=r[1]&&r[1].split(e),i[1]=i[1]?i[1]-1:0;let o=i;return s&&s.length&&(s.length===4&&(s[3]="0."+s[3],s[3]=parseFloat(s[3])*1e3),o=o.concat(s)),new Date(...o)}},to_string(n,t=!1){if(!(n instanceof Date))throw new TypeError("Invalid argument type");const e=this.get_date_values(n).map((r,o)=>(o===1&&(r=r+1),o===6?M(r+"",3,"0"):M(r+"",2,"0"))),i=`${e[0]}-${e[1]}-${e[2]}`,s=`${e[3]}:${e[4]}:${e[5]}.${e[6]}`;return i+(t?" "+s:"")},format(n,t="YYYY-MM-DD HH:mm:ss.SSS",e="en"){const s=new Intl.DateTimeFormat(e,{month:"long"}).format(n),r=s.charAt(0).toUpperCase()+s.slice(1),o=this.get_date_values(n).map(u=>M(u,2,0)),a={YYYY:o[0],MM:M(+o[1]+1,2,0),DD:o[2],HH:o[3],mm:o[4],ss:o[5],SSS:o[6],D:o[2],MMMM:r,MMM:S[r]};let d=t;const p=[];return Object.keys(a).sort((u,c)=>c.length-u.length).forEach(u=>{d.includes(u)&&(d=d.replaceAll(u,`$${p.length}`),p.push(a[u]))}),p.forEach((u,c)=>{d=d.replaceAll(`$${c}`,u)}),d},diff(n,t,e=k){let i,s,r,o,a,d,p;return i=n-t,s=i/1e3,o=s/60,r=o/60,a=r/24,d=a/30,p=d/12,e.endsWith("s")||(e+="s"),Math.floor({milliseconds:i,seconds:s,minutes:o,hours:r,days:a,months:d,years:p}[e])},today(){const n=this.get_date_values(new Date).slice(0,3);return new Date(...n)},now(){return new Date},add(n,t,e){t=parseInt(t,10);const i=[n.getFullYear()+(e===y?t:0),n.getMonth()+(e===x?t:0),n.getDate()+(e===k?t:0),n.getHours()+(e===D?t:0),n.getMinutes()+(e===E?t:0),n.getSeconds()+(e===Y?t:0),n.getMilliseconds()+(e===L?t:0)];return new Date(...i)},start_of(n,t){const e={[y]:6,[x]:5,[k]:4,[D]:3,[E]:2,[Y]:1,[L]:0};function i(r){const o=e[t];return e[r]<=o}const s=[n.getFullYear(),i(y)?0:n.getMonth(),i(x)?1:n.getDate(),i(k)?0:n.getHours(),i(D)?0:n.getMinutes(),i(E)?0:n.getSeconds(),i(Y)?0:n.getMilliseconds()];return new Date(...s)},clone(n){return new Date(...this.get_date_values(n))},get_date_values(n){return[n.getFullYear(),n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()]},get_days_in_month(n){const t=[31,28,31,30,31,30,31,31,30,31,30,31],e=n.getMonth();if(e!==1)return t[e];const i=n.getFullYear();return i%4===0&&i%100!=0||i%400===0?29:28}};function M(n,t,e){return n=n+"",t=t>>0,e=String(typeof e<"u"?e:" "),n.length>t?String(n):(t=t-n.length,t>e.length&&(e+=e.repeat(t/e.length)),e.slice(0,t)+String(n))}function _(n,t){return typeof n=="string"?(t||document).querySelector(n):n||null}function g(n,t){const e=document.createElementNS("http://www.w3.org/2000/svg",n);for(let i in t)i==="append_to"?t.append_to.appendChild(e):i==="innerHTML"?e.innerHTML=t.innerHTML:i==="clipPath"?e.setAttribute("clip-path","url(#"+t[i]+")"):e.setAttribute(i,t[i]);return e}function A(n,t,e,i){const s=W(n,t,e,i);if(s===n){const r=document.createEvent("HTMLEvents");r.initEvent("click",!0,!0),r.eventName="click",s.dispatchEvent(r)}}function W(n,t,e,i,s="0.4s",r="0.1s"){const o=n.querySelector("animate");if(o)return _.attr(o,{attributeName:t,from:e,to:i,dur:s,begin:"click + "+r}),n;const a=g("animate",{attributeName:t,from:e,to:i,dur:s,begin:r,calcMode:"spline",values:e+";"+i,keyTimes:"0; 1",keySplines:X("ease-out")});return n.appendChild(a),n}function X(n){return{ease:".25 .1 .25 1",linear:"0 0 1 1","ease-in":".42 0 1 1","ease-out":"0 0 .58 1","ease-in-out":".42 0 .58 1"}[n]}_.on=(n,t,e,i)=>{i?_.delegate(n,t,e,i):(i=e,_.bind(n,t,i))},_.off=(n,t,e)=>{n.removeEventListener(t,e)},_.bind=(n,t,e)=>{t.split(/\s+/).forEach(function(i){n.addEventListener(i,e)})},_.delegate=(n,t,e,i)=>{n.addEventListener(t,function(s){const r=s.target.closest(e);r&&(s.delegatedTarget=r,i.call(this,s,r))})},_.closest=(n,t)=>t?t.matches(n)?t:_.closest(n,t.parentNode):null,_.attr=(n,t,e)=>{if(!e&&typeof t=="string")return n.getAttribute(t);if(typeof t=="object"){for(let i in t)_.attr(n,i,t[i]);return}n.setAttribute(t,e)};class O{constructor(t,e){this.set_defaults(t,e),this.prepare(),this.draw(),this.bind()}set_defaults(t,e){this.action_completed=!1,this.gantt=t,this.task=e}prepare(){this.prepare_values(),this.prepare_helpers()}prepare_values(){this.invalid=this.task.invalid,this.height=this.gantt.options.bar_height,this.image_size=this.height-5,this.compute_x(),this.compute_y(),this.compute_duration(),this.corner_radius=this.gantt.options.bar_corner_radius,this.width=this.gantt.options.column_width*this.duration,this.progress_width=this.gantt.options.column_width*this.duration*(this.task.progress/100)||0,this.group=g("g",{class:"bar-wrapper"+(this.task.custom_class?" "+this.task.custom_class:"")+(this.task.important?" important":""),"data-id":this.task.id}),this.bar_group=g("g",{class:"bar-group",append_to:this.group}),this.handle_group=g("g",{class:"handle-group",append_to:this.group})}prepare_helpers(){SVGElement.prototype.getX=function(){return+this.getAttribute("x")},SVGElement.prototype.getY=function(){return+this.getAttribute("y")},SVGElement.prototype.getWidth=function(){return+this.getAttribute("width")},SVGElement.prototype.getHeight=function(){return+this.getAttribute("height")},SVGElement.prototype.getEndX=function(){return this.getX()+this.getWidth()}}prepare_expected_progress_values(){this.compute_expected_progress(),this.expected_progress_width=this.gantt.options.column_width*this.duration*(this.expected_progress/100)||0}draw(){this.draw_bar(),this.draw_progress_bar(),this.gantt.options.show_expected_progress&&(this.prepare_expected_progress_values(),this.draw_expected_progress_bar()),this.draw_label(),this.draw_resize_handles(),this.task.thumbnail&&this.draw_thumbnail()}draw_bar(){this.$bar=g("rect",{x:this.x,y:this.y,width:this.width,height:this.height,rx:this.corner_radius,ry:this.corner_radius,class:"bar"+(/^((?!chrome|android).)*safari/i.test(navigator.userAgent)&&!this.task.important?" safari":""),append_to:this.bar_group}),A(this.$bar,"width",0,this.width),this.invalid&&this.$bar.classList.add("bar-invalid")}draw_expected_progress_bar(){this.invalid||(this.$expected_bar_progress=g("rect",{x:this.x,y:this.y,width:this.expected_progress_width,height:this.height,rx:this.corner_radius,ry:this.corner_radius,class:"bar-expected-progress",append_to:this.bar_group}),A(this.$expected_bar_progress,"width",0,this.expected_progress_width))}draw_progress_bar(){if(this.invalid)return;this.$bar_progress=g("rect",{x:this.x,y:this.y,width:this.progress_width,height:this.height,rx:this.corner_radius,ry:this.corner_radius,class:"bar-progress",append_to:this.bar_group});const t=h.diff(this.task._start,this.gantt.gantt_start,"hour")/this.gantt.options.step*this.gantt.options.column_width;let e=document.createElement("div");e.id=`${this.task.id}-highlight`,e.classList.add("date-highlight"),e.style.height=this.height*.8+"px",e.style.width=this.width+"px",e.style.top=this.gantt.options.header_height-25+"px",e.style.left=t+"px",this.$date_highlight=e,this.gantt.$lower_header.prepend(e),A(this.$bar_progress,"width",0,this.progress_width)}draw_label(){let t=this.x+this.$bar.getWidth()/2;this.task.thumbnail&&(t=this.x+this.image_size+5),g("text",{x:t,y:this.y+this.height/2,innerHTML:this.task.name,class:"bar-label",append_to:this.bar_group}),requestAnimationFrame(()=>this.update_label_position())}draw_thumbnail(){let t=10,e=2,i,s;i=g("defs",{append_to:this.bar_group}),g("rect",{id:"rect_"+this.task.id,x:this.x+t,y:this.y+e,width:this.image_size,height:this.image_size,rx:"15",class:"img_mask",append_to:i}),s=g("clipPath",{id:"clip_"+this.task.id,append_to:i}),g("use",{href:"#rect_"+this.task.id,append_to:s}),g("image",{x:this.x+t,y:this.y+e,width:this.image_size,height:this.image_size,class:"bar-img",href:this.task.thumbnail,clipPath:"clip_"+this.task.id,append_to:this.bar_group})}draw_resize_handles(){if(this.invalid||this.gantt.options.readonly)return;const t=this.$bar,e=8;if(this.gantt.options.dates_readonly||(g("rect",{x:t.getX()+t.getWidth()+e-4,y:t.getY()+1,width:e,height:this.height-2,rx:this.corner_radius,ry:this.corner_radius,class:"handle right",append_to:this.handle_group}),g("rect",{x:t.getX()-e-4,y:t.getY()+1,width:e,height:this.height-2,rx:this.corner_radius,ry:this.corner_radius,class:"handle left",append_to:this.handle_group})),!this.gantt.options.progress_readonly){const i=this.$bar_progress;this.$handle_progress=g("circle",{cx:i.getEndX(),cy:i.getY()+i.getHeight()/2,r:5,class:"handle progress",append_to:this.handle_group})}}bind(){this.invalid||this.setup_click_event()}setup_click_event(){let t=this.task.id;_.on(this.group,"mouseover",i=>{this.gantt.trigger_event("hover",[this.task,i.screenX,i.screenY,i])});let e;_.on(this.group,"mouseenter",i=>e=setTimeout(()=>{this.show_popup(i.offsetX||i.layerX),document.getElementById(`${t}-highlight`).style.display="block"},200)),_.on(this.group,"mouseleave",()=>{var i,s;clearTimeout(e),(s=(i=this.gantt.popup)==null?void 0:i.hide)==null||s.call(i),document.getElementById(`${t}-highlight`).style.display="none"}),_.on(this.group,"click",()=>{this.gantt.trigger_event("click",[this.task])}),_.on(this.group,"dblclick",i=>{this.action_completed||(this.group.classList.remove("active"),this.gantt.popup&&this.gantt.popup.parent.classList.remove("hidden"),this.gantt.trigger_event("double_click",[this.task]))})}show_popup(t){if(this.gantt.bar_being_dragged)return;const e=h.format(this.task._start,"MMM D",this.gantt.options.language),i=h.format(h.add(this.task._end,-1,"second"),"MMM D",this.gantt.options.language),s=`${e} - ${i}
Progress: ${this.task.progress}`;this.gantt.show_popup({x:t,target_element:this.$bar,title:this.task.name,subtitle:s,task:this.task})}update_bar_position({x:t=null,width:e=null}){const i=this.$bar;if(t){if(!this.task.dependencies.map(o=>this.gantt.get_bar(o).$bar.getX()).reduce((o,a)=>t>=a,t)){e=null;return}this.update_attr(i,"x",t),this.$date_highlight.style.left=t+"px"}e&&(this.update_attr(i,"width",e),this.$date_highlight.style.width=e+"px"),this.update_label_position(),this.update_handle_position(),this.gantt.options.show_expected_progress&&(this.date_changed(),this.compute_duration(),this.update_expected_progressbar_position()),this.update_progressbar_position(),this.update_arrow_position()}update_label_position_on_horizontal_scroll({x:t,sx:e}){const i=document.querySelector(".gantt-container"),s=this.group.querySelector(".bar-label"),r=this.group.querySelector(".bar-img")||"",o=this.bar_group.querySelector(".img_mask")||"";let a=this.$bar.getX()+this.$bar.getWidth(),d=s.getX()+t,p=r&&r.getX()+t||0,u=r&&r.getBBox().width+7||7,c=d+s.getBBox().width+7,f=e+i.clientWidth/2;s.classList.contains("big")||(c0&&cthis.$bar.getX()&&t<0&&c>f)&&(s.setAttribute("x",d),r&&(r.setAttribute("x",p),o.setAttribute("x",p)))}date_changed(){let t=!1;const{new_start_date:e,new_end_date:i}=this.compute_start_end_date();Number(this.task._start)!==Number(e)&&(t=!0,this.task._start=e),Number(this.task._end)!==Number(i)&&(t=!0,this.task._end=i),t&&this.gantt.trigger_event("date_change",[this.task,e,h.add(i,-1,"second")])}progress_changed(){const t=this.compute_progress();this.task.progress=t,this.gantt.trigger_event("progress_change",[this.task,t])}set_action_completed(){this.action_completed=!0,setTimeout(()=>this.action_completed=!1,1e3)}compute_start_end_date(){const t=this.$bar,e=t.getX()/this.gantt.options.column_width;let i=h.add(this.gantt.gantt_start,e*this.gantt.options.step,"hour");const s=this.gantt.gantt_start.getTimezoneOffset()-i.getTimezoneOffset();s&&(i=h.add(i,s,"minute"));const r=t.getWidth()/this.gantt.options.column_width,o=h.add(i,r*this.gantt.options.step,"hour");return{new_start_date:i,new_end_date:o}}compute_progress(){const t=this.$bar_progress.getWidth()/this.$bar.getWidth()*100;return parseInt(t,10)}compute_expected_progress(){this.expected_progress=h.diff(h.today(),this.task._start,"hour")/this.gantt.options.step,this.expected_progress=(this.expected_progressd?(i.classList.add("big"),s?(s.setAttribute("x",e.getX()+e.getWidth()+r),t.setAttribute("x",e.getX()+e.getWidth()+r),i.setAttribute("x",e.getX()+e.getWidth()+o)):i.setAttribute("x",e.getX()+e.getWidth()+r)):(i.classList.remove("big"),s?(s.setAttribute("x",e.getX()+r),t.setAttribute("x",e.getX()+r),i.setAttribute("x",e.getX()+d/2+o)):i.setAttribute("x",e.getX()+d/2-a/2))}update_handle_position(){if(this.invalid||this.gantt.options.readonly)return;const t=this.$bar;this.handle_group.querySelector(".handle.left").setAttribute("x",t.getX()-12),this.handle_group.querySelector(".handle.right").setAttribute("x",t.getEndX()+4);const e=this.group.querySelector(".handle.progress");e&&e.setAttribute("cx",this.$bar_progress.getEndX())}update_arrow_position(){this.arrows=this.arrows||[];for(let t of this.arrows)t.update()}}class C{constructor(t,e,i){this.gantt=t,this.from_task=e,this.to_task=i,this.calculate_path(),this.draw()}calculate_path(){let t=this.from_task.$bar.getX()+this.from_task.$bar.getWidth()/2;const e=()=>this.to_task.$bar.getX()this.from_task.$bar.getX()+this.gantt.options.padding;for(;e();)t-=10;const i=this.gantt.options.header_height+this.gantt.options.bar_height+(this.gantt.options.padding+this.gantt.options.bar_height)*this.from_task.task._index+this.gantt.options.padding,s=this.to_task.$bar.getX()-this.gantt.options.padding/2-7,r=this.gantt.options.header_height+this.gantt.options.bar_height/2+(this.gantt.options.padding+this.gantt.options.bar_height)*this.to_task.task._index+this.gantt.options.padding,o=this.from_task.task._index>this.to_task.task._index,a=this.gantt.options.arrow_curve,d=o?1:0,p=o?-a:a,u=o?r+this.gantt.options.arrow_curve:r-this.gantt.options.arrow_curve;if(this.path=` + M ${t} ${i} + V ${u} + a ${a} ${a} 0 0 ${d} ${a} ${p} + L ${s} ${r} + m -5 -5 + l 5 5 + l -5 5`,this.to_task.$bar.getX() +
+
+ `,this.hide(),this.title=this.parent.querySelector(".title"),this.subtitle=this.parent.querySelector(".subtitle"),this.pointer=this.parent.querySelector(".pointer")}show(t){if(!t.target_element)throw new Error("target_element is required to show popup");const e=t.target_element;if(this.custom_html){let s=this.custom_html(t.task);s+='
',this.parent.innerHTML=s,this.pointer=this.parent.querySelector(".pointer")}else this.title.innerHTML=t.title,this.subtitle.innerHTML=t.subtitle;let i;e instanceof HTMLElement?i=e.getBoundingClientRect():e instanceof SVGElement&&(i=t.target_element.getBBox()),this.parent.style.left=t.x-this.parent.clientWidth/2+"px",this.parent.style.top=i.y+i.height+10+"px",this.pointer.style.left=this.parent.clientWidth/2+"px",this.pointer.style.top="-15px",this.parent.style.opacity=1}hide(){this.parent.style.opacity=0,this.parent.style.left=0}}const l={HOUR:"Hour",QUARTER_DAY:"Quarter Day",HALF_DAY:"Half Day",DAY:"Day",WEEK:"Week",MONTH:"Month",YEAR:"Year"},R={HOUR:["7d","7d"],QUARTER_DAY:["7d","7d"],HALF_DAY:["7d","7d"],DAY:["1m","1m"],WEEK:["1m","1m"],MONTH:["1m","1m"],YEAR:["2y","2y"]},I={header_height:65,column_width:30,view_modes:[...Object.values(l)],bar_height:30,bar_corner_radius:3,arrow_curve:5,padding:18,view_mode:"Day",date_format:"YYYY-MM-DD",show_expected_progress:!1,popup:null,language:"en",readonly:!1,progress_readonly:!1,dates_readonly:!1,highlight_weekend:!0,scroll_to:"start",lines:"both",auto_move_label:!0,today_button:!0,view_mode_select:!1};class T{constructor(t,e,i){this.setup_wrapper(t),this.setup_options(i),this.setup_tasks(e),this.change_view_mode(),this.bind_events()}setup_wrapper(t){let e,i;if(typeof t=="string"&&(t=document.querySelector(t)),t instanceof HTMLElement)i=t,e=t.querySelector("svg");else if(t instanceof SVGElement)e=t;else throw new TypeError("Frappe Gantt only supports usage of a string CSS selector, HTML DOM element or SVG DOM element for the 'element' parameter");e?(this.$svg=e,this.$svg.classList.add("gantt")):this.$svg=g("svg",{append_to:i,class:"gantt"}),this.$container=document.createElement("div"),this.$container.classList.add("gantt-container"),this.$svg.parentElement.appendChild(this.$container),this.$container.appendChild(this.$svg),this.$popup_wrapper=document.createElement("div"),this.$popup_wrapper.classList.add("popup-wrapper"),this.$container.appendChild(this.$popup_wrapper)}setup_options(t){this.options={...I,...t},t.view_mode_padding||(t.view_mode_padding={});for(let[e,i]of Object.entries(t.view_mode_padding))typeof i=="string"&&(t.view_mode_padding[e]=[i,i]);this.options.view_mode_padding={...R,...t.view_mode_padding}}setup_tasks(t){this.tasks=t.map((e,i)=>{if(e._start=h.parse(e.start),e.end===void 0&&e.duration!==void 0&&(e.end=e._start,e.duration.split(" ").forEach(a=>{let{duration:d,scale:p}=h.parse_duration(a);e.end=h.add(e.end,d,p)})),e._end=h.parse(e.end),h.diff(e._end,e._start,"year")<0)throw Error("start of task can't be after end of task: in task #, "+(i+1));if(h.diff(e._end,e._start,"year")>10&&(e.end=null),e._index=i,!e.start&&!e.end){const o=h.today();e._start=o,e._end=h.add(o,2,"day")}if(!e.start&&e.end&&(e._start=h.add(e._end,-2,"day")),e.start&&!e.end&&(e._end=h.add(e._start,2,"day")),h.get_date_values(e._end).slice(3).every(o=>o===0)&&(e._end=h.add(e._end,24,"hour")),(!e.start||!e.end)&&(e.invalid=!0),typeof e.dependencies=="string"||!e.dependencies){let o=[];e.dependencies&&(o=e.dependencies.split(",").map(a=>a.trim().replaceAll(" ","_")).filter(a=>a)),e.dependencies=o}return e.id?typeof e.id=="string"?e.id=e.id.replaceAll(" ","_"):e.id=`${e.id}`:e.id=B(e),e}),this.setup_dependencies()}setup_dependencies(){this.dependency_map={};for(let t of this.tasks)for(let e of t.dependencies)this.dependency_map[e]=this.dependency_map[e]||[],this.dependency_map[e].push(t.id)}refresh(t){this.setup_tasks(t),this.change_view_mode()}change_view_mode(t=this.options.view_mode){this.update_view_scale(t),this.setup_dates(),this.render(),this.trigger_event("view_change",[t])}update_view_scale(t){this.options.view_mode=t,t===l.HOUR?(this.options.step=24/24,this.options.column_width=38):t===l.DAY?(this.options.step=24,this.options.column_width=38):t===l.HALF_DAY?(this.options.step=24/2,this.options.column_width=38):t===l.QUARTER_DAY?(this.options.step=24/4,this.options.column_width=38):t===l.WEEK?(this.options.step=24*7,this.options.column_width=140):t===l.MONTH?(this.options.step=24*30,this.options.column_width=120):t===l.YEAR&&(this.options.step=24*365,this.options.column_width=120)}setup_dates(){this.setup_gantt_dates(),this.setup_date_values()}setup_gantt_dates(){this.gantt_start=this.gantt_end=null;for(let a of this.tasks)(!this.gantt_start||a._startthis.gantt_end)&&(this.gantt_end=a._end);let t,e;this.gantt_start?t=h.start_of(this.gantt_start,"day"):t=new Date,this.gantt_end?e=h.start_of(this.gantt_end,"day"):e=new Date;let i;for(let[a,d]of Object.entries(l))d===this.options.view_mode&&(i=a);const[s,r]=this.options.view_mode_padding[i].map(h.parse_duration);t=h.add(t,-s.duration,s.scale);let o;this.view_is(l.YEAR)?o="YYYY":this.view_is(l.MONTH)?o="YYYY-MM":this.view_is(l.DAY)?o="YYYY-MM-DD":o="YYYY-MM-DD HH",this.gantt_start=h.parse(h.format(t,o)),this.gantt_start.setHours(0,0,0,0),this.gantt_end=h.add(e,r.duration,r.scale)}setup_date_values(){this.dates=[];let t=null;for(;t===null||tt.bottom?(this.$side_header.style.position="absolute",this.$side_header.style.top=`${t.scrollTop+e.top}px`):(this.$side_header.style.position="fixed",this.$side_header.style.top=s+10+"px");const r=Math.min(this.$header.clientWidth,this.$container.clientWidth);this.$side_header.style.left=i+this.$container.scrollLeft+r-this.$side_header.clientWidth+"px",this.$today_button.style.left=`${t.left+20}px`}make_grid_ticks(){if(!["both","vertical","horizontal"].includes(this.options.lines))return;let t=0,e=this.options.header_height+this.options.padding/2,i=(this.options.bar_height+this.options.padding)*this.tasks.length,s=g("g",{class:"lines_layer",append_to:this.layers.grid}),r=this.options.header_height+this.options.padding/2;const o=this.dates.length*this.options.column_width,a=this.options.bar_height+this.options.padding;if(this.options.lines!=="vertical")for(let d of this.tasks)g("line",{x1:0,y1:r+a,x2:o,y2:r+a,class:"row-line",append_to:s}),r+=a;if(this.options.lines!=="horizontal")for(let d of this.dates){let p="tick";this.view_is(l.DAY)&&d.getDate()===1&&(p+=" thick"),this.view_is(l.WEEK)&&d.getDate()>=1&&d.getDate()<8&&(p+=" thick"),this.view_is(l.MONTH)&&d.getMonth()%3===0&&(p+=" thick"),g("path",{d:`M ${t} ${e} v ${i}`,class:p,append_to:this.layers.grid}),this.view_is(l.MONTH)?t+=h.get_days_in_month(d)*this.options.column_width/30:t+=this.options.column_width}}highlightWeekends(){if(!(!this.view_is("Day")&&!this.view_is("Half Day"))){for(let t=new Date(this.gantt_start);t<=this.gantt_end;t.setDate(t.getDate()+1))if(t.getDay()===0||t.getDay()===6){const e=h.diff(t,this.gantt_start,"hour")/this.options.step*this.options.column_width,i=(this.options.bar_height+this.options.padding)*this.tasks.length;g("rect",{x:e,y:this.options.header_height+this.options.padding/2,width:(this.view_is("Day")?1:2)*this.options.column_width,height:i,class:"holiday-highlight",append_to:this.layers.grid})}}}computeGridHighlightDimensions(t){let e=this.options.column_width/2;if(this.view_is(l.DAY)){let i=h.today();return{x:e+h.diff(i,this.gantt_start,"hour")/this.options.step*this.options.column_width,date:i}}for(let i of this.dates){const s=new Date,r=new Date(i),o=new Date(i);switch(t){case l.WEEK:o.setDate(i.getDate()+7);break;case l.MONTH:o.setMonth(i.getMonth()+1);break;case l.YEAR:o.setFullYear(i.getFullYear()+1);break}if(s>=r&&s<=o)return{x:e,date:r};e+=this.options.column_width}}make_grid_highlights(){if(this.options.highlight_weekend&&this.highlightWeekends(),this.view_is(l.DAY)||this.view_is(l.WEEK)||this.view_is(l.MONTH)||this.view_is(l.YEAR)){const{x:t,date:e}=this.computeGridHighlightDimensions(this.options.view_mode);if(!this.dates.find(o=>o.getTime()==e.getTime()))return;const i=this.options.header_height+this.options.padding/2,s=(this.options.bar_height+this.options.padding)*this.tasks.length;this.$current_highlight=this.create_el({top:i,left:t,height:s,classes:"current-highlight",append_to:this.$container});let r=document.getElementById(h.format(e).replaceAll(" ","_"));r&&(r.classList.add("current-date-highlight"),r.style.top=+r.style.top.slice(0,-2)-4+"px",r.style.left=+r.style.left.slice(0,-2)-8+"px")}}create_el({left:t,top:e,width:i,height:s,id:r,classes:o,append_to:a}){let d=document.createElement("div");return d.classList.add(o),d.style.top=e+"px",d.style.left=t+"px",r&&(d.id=r),i&&(d.style.width=s+"px"),s&&(d.style.height=s+"px"),a.appendChild(d),d}make_dates(){this.upper_texts_x={},this.get_dates_to_draw().forEach((t,e)=>{let i=this.create_el({left:t.lower_x,top:t.lower_y,id:t.formatted_date,classes:"lower-text",append_to:this.$lower_header});if(i.innerText=t.lower_text,i.style.left=+i.style.left.slice(0,-2)-i.clientWidth/2+"px",t.upper_text){this.upper_texts_x[t.upper_text]=t.upper_x;let s=document.createElement("div");s.classList.add("upper-text"),s.style.left=t.upper_x+"px",s.style.top=t.upper_y+"px",s.innerText=t.upper_text,this.$upper_header.appendChild(s),t.upper_x>this.layers.grid.getBBox().width&&s.remove()}})}get_dates_to_draw(){let t=null;return this.dates.map((i,s)=>{const r=this.get_date_info(i,t,s);return t=r,r})}get_date_info(t,e){let i=e?e.date:h.add(t,1,"day");const s={Hour_lower:h.format(t,"HH",this.options.language),"Quarter Day_lower":h.format(t,"HH",this.options.language),"Half Day_lower":h.format(t,"HH",this.options.language),Day_lower:t.getDate()!==i.getDate()?h.format(t,"D",this.options.language):"",Week_lower:t.getMonth()!==i.getMonth()?h.format(t,"D MMM",this.options.language):h.format(t,"D",this.options.language),Month_lower:h.format(t,"MMMM",this.options.language),Year_lower:h.format(t,"YYYY",this.options.language),Hour_upper:t.getDate()!==i.getDate()?h.format(t,"D MMMM",this.options.language):"","Quarter Day_upper":t.getDate()!==i.getDate()?h.format(t,"D MMM",this.options.language):"","Half Day_upper":t.getDate()!==i.getDate()?t.getMonth()!==i.getMonth()?h.format(t,"D MMM",this.options.language):h.format(t,"D",this.options.language):"",Day_upper:t.getMonth()!==i.getMonth()||!e?h.format(t,"MMMM",this.options.language):"",Week_upper:t.getMonth()!==i.getMonth()?h.format(t,"MMMM",this.options.language):"",Month_upper:t.getFullYear()!==i.getFullYear()?h.format(t,"YYYY",this.options.language):"",Year_upper:t.getFullYear()!==i.getFullYear()?h.format(t,"YYYY",this.options.language):""};let r=this.view_is(l.MONTH)?h.get_days_in_month(t)*this.options.column_width/30:this.options.column_width;const o={x:e?e.base_pos_x+e.column_width:0,lower_y:this.options.header_height-20,upper_y:this.options.header_height-50},a={Hour_lower:r/2,Hour_upper:r*12,"Quarter Day_lower":r/2,"Quarter Day_upper":r*2,"Half Day_lower":r/2,"Half Day_upper":r,Day_lower:r/2,Day_upper:r/2,Week_lower:r/2,Week_upper:r*4/2,Month_lower:r/2,Month_upper:r/2,Year_lower:r/2,Year_upper:r*30/2};return{date:t,formatted_date:h.format(t).replaceAll(" ","_"),column_width:r,base_pos_x:o.x,upper_text:this.options.lower_text?this.options.upper_text(t,this.options.view_mode,s[`${this.options.view_mode}_upper`]):s[`${this.options.view_mode}_upper`],lower_text:this.options.lower_text?this.options.lower_text(t,this.options.view_mode,s[`${this.options.view_mode}_lower`]):s[`${this.options.view_mode}_lower`],upper_x:o.x+a[`${this.options.view_mode}_upper`],upper_y:o.upper_y,lower_x:o.x+a[`${this.options.view_mode}_lower`],lower_y:o.lower_y}}make_bars(){this.bars=this.tasks.map(t=>{const e=new O(this,t);return this.layers.bar.appendChild(e.group),e})}make_arrows(){this.arrows=[];for(let t of this.tasks){let e=[];e=t.dependencies.map(i=>{const s=this.get_task(i);if(!s)return;const r=new C(this,this.bars[s._index],this.bars[t._index]);return this.layers.arrow.appendChild(r.element),r}).filter(Boolean),this.arrows=this.arrows.concat(e)}}map_arrows_on_bars(){for(let t of this.bars)t.arrows=this.arrows.filter(e=>e.from_task.task.id===t.task.id||e.to_task.task.id===t.task.id)}set_width(){const t=this.$svg.getBoundingClientRect().width,e=this.$svg.querySelector(".grid .grid-row")?this.$svg.querySelector(".grid .grid-row").getAttribute("width"):0;t{this.unselect_all(),this.hide_popup()})}bind_bar_events(){let t=!1,e=0,i=0,s=!1,r=!1,o=null,a=[];this.bar_being_dragged=null;function d(){return t||s||r}this.$svg.onclick=p=>{p.target.classList.contains("grid-row")&&this.unselect_all()},_.on(this.$svg,"mousedown",".bar-wrapper, .handle",(p,u)=>{const c=_.closest(".bar-wrapper",u);a.forEach(w=>w.group.classList.remove("active")),u.classList.contains("left")?s=!0:u.classList.contains("right")?r=!0:u.classList.contains("bar-wrapper")&&(t=!0),c.classList.add("active"),this.popup&&this.popup.parent.classList.add("hidden"),this.popup&&this.popup.parent.classList.add("hidden"),e=p.offsetX||p.layerX,p.offsetY||p.layerY,o=c.getAttribute("data-id"),a=[o,...this.get_all_dependent_tasks(o)].map(w=>this.get_bar(w)),this.bar_being_dragged=o,a.forEach(w=>{const b=w.$bar;b.ox=b.getX(),b.oy=b.getY(),b.owidth=b.getWidth(),b.finaldx=0})}),_.on(this.$container,"scroll",p=>{let u=document.querySelectorAll(".bar-wrapper"),c=[];const f=[];let w;i&&(w=p.currentTarget.scrollLeft-i);const b=p.currentTarget.scrollLeft/this.options.column_width*this.options.step/24;let $="D MMM";["Year","Month"].includes(this.options.view_mode)?$="YYYY":["Day","Week"].includes(this.options.view_mode)?$="MMMM":this.view_is("Half Day")?$="D":this.view_is("Hour")&&($="D MMMM");let z=h.format(h.add(this.gantt_start,b,"day"),$);const v=Array.from(document.querySelectorAll(".upper-text")).find(m=>m.textContent===z);if(v&&!v.classList.contains("current-upper")){const m=document.querySelector(".current-upper");m&&(m.classList.remove("current-upper"),m.style.left=this.upper_texts_x[m.textContent]+"px",m.style.top=this.options.header_height-50+"px"),v.classList.add("current-upper");let H=this.$svg.getBoundingClientRect();v.style.left=H.x+this.$container.scrollLeft+10+"px",v.style.top=H.y+this.options.header_height-50+"px"}Array.prototype.forEach.call(u,function(m,H){f.push(m.getAttribute("data-id"))}),w&&(c=f.map(m=>this.get_bar(m)),this.options.auto_move_label&&c.forEach(m=>{m.update_label_position_on_horizontal_scroll({x:w,sx:p.currentTarget.scrollLeft})})),i=p.currentTarget.scrollLeft}),_.on(this.$svg,"mousemove",p=>{if(!d())return;const u=(p.offsetX||p.layerX)-e;a.forEach(c=>{const f=c.$bar;f.finaldx=this.get_snap_position(u),this.hide_popup(),s?o===c.task.id?c.update_bar_position({x:f.ox+f.finaldx,width:f.owidth-f.finaldx}):c.update_bar_position({x:f.ox+f.finaldx}):r?o===c.task.id&&c.update_bar_position({width:f.owidth+f.finaldx}):t&&!this.options.readonly&&!this.options.dates_readonly&&c.update_bar_position({x:f.ox+f.finaldx})})}),document.addEventListener("mouseup",p=>{t=!1,s=!1,r=!1}),_.on(this.$svg,"mouseup",p=>{this.bar_being_dragged=null,a.forEach(u=>{u.$bar.finaldx&&(u.date_changed(),u.set_action_completed())})}),this.bind_bar_progress()}bind_bar_progress(){let t=0,e=null,i=null,s=null,r=null;_.on(this.$svg,"mousedown",".handle.progress",(o,a)=>{e=!0,t=o.offsetX||o.layerX,o.offsetY||o.layerY;const p=_.closest(".bar-wrapper",a).getAttribute("data-id");i=this.get_bar(p),s=i.$bar_progress,r=i.$bar,s.finaldx=0,s.owidth=s.getWidth(),s.min_dx=-s.getWidth(),s.max_dx=r.getWidth()-s.getWidth()}),_.on(this.$svg,"mousemove",o=>{if(!e)return;let a=(o.offsetX||o.layerX)-t;a>s.max_dx&&(a=s.max_dx),a{e=!1,s&&s.finaldx&&(s.finaldx=0,i.progress_changed(),i.set_action_completed(),i=null,s=null,r=null)})}get_all_dependent_tasks(t){let e=[],i=[t];for(;i.length;){const s=i.reduce((r,o)=>(r=r.concat(this.dependency_map[o]),r),[]);e=e.concat(s),i=s.filter(r=>!i.includes(r))}return e.filter(Boolean)}get_snap_position(t){let e=t,i,s;return this.view_is(l.WEEK)?(i=t%(this.options.column_width/7),s=e-i+(i{t.classList.remove("active")}),this.popup&&this.popup.parent.classList.remove("hidden")}view_is(t){return typeof t=="string"?this.options.view_mode===t:Array.isArray(t)?t.some(e=>this.options.view_mode===e):!1}get_task(t){return this.tasks.find(e=>e.id===t)}get_bar(t){return this.bars.find(e=>e.task.id===t)}show_popup(t){this.options.popup!==!1&&(this.popup||(this.popup=new N(this.$popup_wrapper,this.options.popup)),this.popup.show(t))}hide_popup(){this.popup&&this.popup.hide()}trigger_event(t,e){this.options["on_"+t]&&this.options["on_"+t].apply(null,e)}get_oldest_starting_date(){return this.tasks.length?this.tasks.map(t=>t._start).reduce((t,e)=>e<=t?e:t):new Date}clear(){var t,e,i,s,r,o;this.$svg.innerHTML="",(e=(t=this.$header)==null?void 0:t.remove)==null||e.call(t),(s=(i=this.$current_highlight)==null?void 0:i.remove)==null||s.call(i),(o=(r=this.popup)==null?void 0:r.hide)==null||o.call(r)}}T.VIEW_MODE=l;function B(n){return n.name+"_"+Math.random().toString(36).slice(2,12)}return T}); diff --git a/dist/style.css b/dist/style.css new file mode 100644 index 0000000..6ad17a2 --- /dev/null +++ b/dist/style.css @@ -0,0 +1 @@ +:root{--bar-color-dark: #616161;--bar-stroke-dark: #c6ccd2;--border-color-dark: #616161;--light-bg-dark: #3e3e3e;--light-border-color-dark: #3e3e3e;--text-muted-dark: #eee;--text-light-dark: #ececec;--text-color-dark: #f7f7f7;--blue-dark: #8a8aff}.dark>.gantt-container .gantt .grid-row{fill:#252525}.dark>.gantt-container .gantt .row-line{stroke:var(--light-border-color-dark)}.dark>.gantt-container .gantt .tick{stroke:var(--border-color-dark)}.dark>.gantt-container .gantt .holiday-highlight{fill:var(--light-bg-dark)}.dark>.gantt-container .gantt .arrow{stroke:var(--text-muted-dark)}.dark>.gantt-container .gantt .bar{fill:var(--bar-color-dark);stroke:none}.dark>.gantt-container .gantt .bar-progress{fill:var(--blue-dark)}.dark>.gantt-container .gantt .bar-invalid{fill:transparent;stroke:var(--bar-stroke-dark)}:is(.dark>.gantt-container .gantt .bar-invalid)~.bar-label{fill:var(--text-light-dark)}.dark>.gantt-container .gantt .bar-label.big{fill:var(--text-light-dark)}.dark>.gantt-container .gantt .bar-wrapper:hover .bar{fill:lighten(var(--bar-color-dark, 5))}.dark>.gantt-container .gantt .bar-wrapper:hover .bar-progress{fill:lighten(var(--blue-dark, 5))}.dark>.gantt-container .gantt .bar-wrapper.active .bar{fill:lighten(var(--bar-color-dark, 5))}.dark>.gantt-container .gantt .bar-wrapper.active .bar-progress{fill:lighten(var(--blue-dark, 5))}.dark>.gantt-container .grid-header{background-color:#252525}.dark>.gantt-container .popup-wrapper{background-color:#333}.dark>.gantt-container .popup-wrapper .title{border-color:lighten(var(--blue-dark, 5))}.dark>.gantt-container .popup-wrapper .pointer{border-top-color:#333}:root{--bar-color: #fff;--bar-color-important: #94c4f4;--bar-stroke: #fff;--dark-stroke-color: #e0e0e0;--stroke-color: #ebeef0;--light-bg: #f5f5f5;--light-border-color: #ebeff2;--light-yellow: #f6e796;--holiday-color: #f9fafa;--text-muted: #666;--text-grey: #98a1a9;--text-light: #fff;--text-dark: #111;--progress: #ebeef0;--handle-color: #dcdce4;--handle-color-important: #94c4f4;--light-blue: #c4c4e9;--middle-blue: #62b2f9;--dark-blue: #2c94ec}.gantt-container{line-height:14.5px;position:relative;overflow:auto;font-size:12px;height:500px}.gantt-container .popup-wrapper{position:absolute;top:0;left:0;background:#171b1f;padding:10px;border-radius:5px;width:max-content}.gantt-container .popup-wrapper.hidden{opacity:0!important}.gantt-container .popup-wrapper .title{margin-bottom:5px;text-align:-webkit-center;text-align:center;color:var(--text-light)}.gantt-container .popup-wrapper .subtitle{color:var(--text-grey)}.gantt-container .popup-wrapper .pointer{position:absolute;height:5px;margin:0 0 0 -5px;border:5px solid transparent;border-bottom-color:#000c}.gantt-container .grid-header{background-color:#fff;position:sticky;top:0;left:0;z-index:10}.gantt-container .lower-text,.gantt-container .upper-text{text-anchor:middle;color:var(--text-dark)}.gantt-container .upper-header{height:40px}.gantt-container .lower-header{height:30px}.gantt-container .lower-text{font-size:14px;position:absolute;width:fit-content}.gantt-container .upper-text{position:absolute;width:fit-content;font-weight:500;font-size:16px}.gantt-container .current-upper{position:fixed}.gantt-container .side-header{position:fixed;padding:0 10px;margin-right:10px;background:#fff;line-height:20px;font-weight:400}.gantt-container .today-button,.gantt-container .viewmode-select{background:#f4f5f6;text-align:-webkit-center;text-align:center;border:none;color:var(--text-dark);padding:4px 10px;border-radius:8px;height:25px}.gantt-container .viewmode-select{outline:none!important;padding:4px 8px;margin-right:4px;text-indent:1px;text-overflow:""}.gantt-container .date-highlight{background-color:var(--progress);border-radius:12px;position:absolute;display:none}.gantt-container .current-highlight{position:absolute;background:var(--dark-blue);width:1px}.gantt-container .current-date-highlight{background:var(--dark-blue);color:var(--text-light);padding:4px 8px;border-radius:200px}.gantt{user-select:none;-webkit-user-select:none;position:absolute}.gantt .grid-background{fill:none}.gantt .grid-row{fill:#fff}.gantt .row-line{stroke:var(--light-border-color)}.gantt .tick{stroke:var(--stroke-color);stroke-width:.4}.gantt .tick.thick{stroke:var(--dark-stroke-color);stroke-width:.7}.gantt .holiday-highlight{fill:var(--holiday-color)}.gantt .arrow{fill:none;stroke:#9fa9b1;stroke-width:1}.gantt .bar-wrapper .bar{fill:var(--bar-color);stroke:var(--bar-stroke);stroke-width:0;transition:stroke-width .3s ease}.gantt .bar-progress{fill:var(--progress)}.gantt .bar-expected-progress{fill:var(--light-blue)}.gantt .bar-invalid{fill:transparent;stroke:var(--bar-stroke);stroke-width:1;stroke-dasharray:5}:is(.gantt .bar-invalid)~.bar-label{fill:var(--text-light)}.gantt .bar-label{fill:var(--text-dark);dominant-baseline:central;font-family:Helvetica;font-size:13px;font-weight:400}.gantt .bar-label.big{fill:var(--text-dark);text-anchor:start}.gantt .bar-wrapper.important .bar{fill:var(--bar-color-important)}.gantt .bar-wrapper.important .bar-progress{fill:var(--dark-blue)}.gantt .bar-wrapper.important .bar-label{fill:var(--text-light)}.gantt .bar-wrapper.important .handle{fill:var(--handle-color-important)}.gantt .bar-wrapper.important .handle.progress{fill:var(--text-light)}.gantt .handle{fill:var(--handle-color);cursor:ew-resize;opacity:0;visibility:hidden;transition:opacity .3s ease}.gantt .handle.progress{fill:var(--text-muted)}.gantt .bar-wrapper{cursor:pointer}.gantt .bar-wrapper.active .handle{visibility:visible;opacity:1}.gantt .bar-wrapper .bar{-webkit-filter:drop-shadow(3px 3px 2px rgba(0,0,0,.7));filter:drop-shadow(0 0 2px rgba(17,43,66,.16));border-radius:3px}.gantt .bar-wrapper .bar.safari{outline:1px solid black}.gantt .bar-wrapper:hover .bar{transition:transform .3s ease}.gantt .bar-wrapper:hover .date-highlight{display:block}.gantt .hide{display:none} diff --git a/index.html b/index.html index c5d4258..3eb6986 100644 --- a/index.html +++ b/index.html @@ -1,130 +1,140 @@ - - - Simple Gantt - - - - - -
-

Interactive Gantt Chart entirely made in SVG!

-
-
- + + +
+

+ Interactive Gantt Chart entirely made in SVG! +

+
+
+ - + let tasks = [ + { + start: '2024-04-01', + end: '2024-04-01', + name: 'Redesign website', + id: 'Task 0', + progress: 30, + }, + { + start: '2024-03-26', + // Utilizes duration + duration: '6d', + name: 'Write new content', + id: 'Task 1', + progress: 5, + important: true, + }, + { + start: '2024-04-04', + end: '2024-04-08', + name: 'Apply new styles', + id: 'Task 2', + progress: 80, + dependencies: 'Task 1', + }, + { + start: '2024-04-08', + end: '2024-04-09', + name: 'Review', + id: 'Task 3', + progress: 5, + dependencies: 'Task 2', + }, + { + start: '2024-04-08', + end: '2024-04-10', + name: 'Deploy', + id: 'Task 4', + progress: 0, + // dependencies: 'Task 2' + }, + { + start: '2024-04-21', + end: '2024-04-29', + name: 'Go Live!', + id: 'Task 5', + progress: 0, + dependencies: 'Task 2', + custom_class: 'bar-milestone', + }, + // { + // start: '2014-01-05', + // end: '2019-10-12', + // name: 'Long term task', + // id: "Task 6", + // progress: 0 + // } + ]; + + // Uncomment to test fixed header + // tasks = [ + // ...tasks, + // ...Array.from({ length: tasks.length * 3 }, (_, i) => ({ + // ...tasks[i % 3], + // id: i, + // })), + // ]; + + let gantt_chart = new Gantt('.gantt-target', tasks, { + on_click: (task) => { + console.log('Click', task); + }, + // on_double_click: (task) => { + // console.log("Double Click", task); + // }, + // on_date_change: (task, start, end) => { + // console.log("Date change", task, start, end); + // }, + // on_progress_change: (task, progress) => { + // console.log("Progress Change", task, progress); + // }, + // on_view_change: (mode) => { + // console.log("View Change", mode); + // }, + // on_hover: (task, x, y) => { + // console.log("Hover", x, y); + // }, + view_mode: 'Day', + view_mode_padding: { DAY: '3d' }, + // popup: false, + // scroll_to: 'today', + // view_mode_select: true, + // dates_readonly: true, + // today_button: false, + // readonly: true, + // lines: 'vertical', + // lower_text: (date) => date.getDay(), + // upper_text: (date, view_mode, def) => def, + }); + + diff --git a/license.txt b/license.txt index dfb970c..5eacdc3 100644 --- a/license.txt +++ b/license.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2016 Frappe Technologies Pvt. Ltd. +Copyright (c) 2024 Frappe Technologies Pvt. Ltd. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..aca6ebb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6265 @@ +{ + "name": "frappe-gantt", + "version": "0.7", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frappe-gantt", + "version": "0.7", + "license": "MIT", + "devDependencies": { + "eslint": "^4.17.0", + "eslint-config-prettier": "^2.9.0", + "eslint-plugin-prettier": "^2.6.0", + "jest": "^22.2.1", + "postcss-nesting": "^12.1.2", + "prettier": "3.2.5", + "vite": "^5.2.10" + } + }, + "node_modules/@csstools/selector-resolve-nested": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz", + "integrity": "sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz", + "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.1.tgz", + "integrity": "sha512-P6Wg856Ou/DLpR+O0ZLneNmrv7QpqBg+hK4wE05ijbC/t349BRfMfx+UFj5Ha3fCFopIa6iSZlpdaB4agkWp2Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.1.tgz", + "integrity": "sha512-piwZDjuW2WiHr05djVdUkrG5JbjnGbtx8BXQchYCMfib/nhjzWoiScelZ+s5IJI7lecrwSxHCzW026MWBL+oJQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.1.tgz", + "integrity": "sha512-LsZXXIsN5Q460cKDT4Y+bzoPDhBmO5DTr7wP80d+2EnYlxSgkwdPfE3hbE+Fk8dtya+8092N9srjBTJ0di8RIA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.1.tgz", + "integrity": "sha512-S7TYNQpWXB9APkxu/SLmYHezWwCoZRA9QLgrDeml+SR2A1LLPD2DBUdUlvmCF7FUpRMKvbeeWky+iizQj65Etw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.1.tgz", + "integrity": "sha512-Lq2JR5a5jsA5um2ZoLiXXEaOagnVyCpCW7xvlcqHC7y46tLwTEgUSTM3a2TfmmTMmdqv+jknUioWXlmxYxE9Yw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.1.tgz", + "integrity": "sha512-9BfzwyPNV0IizQoR+5HTNBGkh1KXE8BqU0DBkqMngmyFW7BfuIZyMjQ0s6igJEiPSBvT3ZcnIFohZ19OqjhDPg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.1.tgz", + "integrity": "sha512-e2uWaoxo/rtzA52OifrTSXTvJhAXb0XeRkz4CdHBK2KtxrFmuU/uNd544Ogkpu938BzEfvmWs8NZ8Axhw33FDw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.1.tgz", + "integrity": "sha512-ekggix/Bc/d/60H1Mi4YeYb/7dbal1kEDZ6sIFVAE8pUSx7PiWeEh+NWbL7bGu0X68BBIkgF3ibRJe1oFTksQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.1.tgz", + "integrity": "sha512-UGV0dUo/xCv4pkr/C8KY7XLFwBNnvladt8q+VmdKrw/3RUd3rD0TptwjisvE2TTnnlENtuY4/PZuoOYRiGp8Gw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.1.tgz", + "integrity": "sha512-gEYmYYHaehdvX46mwXrU49vD6Euf1Bxhq9pPb82cbUU9UT2NV+RSckQ5tKWOnNXZixKsy8/cPGtiUWqzPuAcXQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.1.tgz", + "integrity": "sha512-xeae5pMAxHFp6yX5vajInG2toST5lsCTrckSRUFwNgzYqnUjNBcQyqk1bXUxX5yhjWFl2Mnz3F8vQjl+2FRIcw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.1.tgz", + "integrity": "sha512-AsdnINQoDWfKpBzCPqQWxSPdAWzSgnYbrJYtn6W0H2E9It5bZss99PiLA8CgmDRfvKygt20UpZ3xkhFlIfX9zQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.1.tgz", + "integrity": "sha512-KoB4fyKXTR+wYENkIG3fFF+5G6N4GFvzYx8Jax8BR4vmddtuqSb5oQmYu2Uu067vT/Fod7gxeQYKupm8gAcMSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.1.tgz", + "integrity": "sha512-J0d3NVNf7wBL9t4blCNat+d0PYqAx8wOoY+/9Q5cujnafbX7BmtYk3XvzkqLmFECaWvXGLuHmKj/wrILUinmQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.1.tgz", + "integrity": "sha512-xjgkWUwlq7IbgJSIxvl516FJ2iuC/7ttjsAxSPpC9kkI5iQQFHKyEN5BjbhvJ/IXIZ3yIBcW5QDlWAyrA+TFag==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.1.tgz", + "integrity": "sha512-0QbCkfk6cnnVKWqqlC0cUrrUMDMfu5ffvYMTUHf+qMN2uAb3MKP31LPcwiMXBNsvoFGs/kYdFOsuLmvppCopXA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/node": { + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/acorn": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^5.0.0" + } + }, + "node_modules/acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^3.0.4" + } + }, + "node_modules/acorn-jsx/node_modules/acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "node_modules/ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^5.0.0" + } + }, + "node_modules/align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "dev": true, + "license": "BSD-3-Clause OR MIT", + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-escapes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "default-require-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.14.0" + } + }, + "node_modules/async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.0", + "debug": "^2.6.8", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.7", + "slash": "^1.0.0", + "source-map": "^0.5.6" + } + }, + "node_modules/babel-core/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "node_modules/babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-jest": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-istanbul": "^4.1.5", + "babel-preset-jest": "^22.2.0" + }, + "peerDependencies": { + "babel-core": "^6.0.0 || ^7.0.0-0" + } + }, + "node_modules/babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "find-up": "^2.1.0", + "istanbul-lib-instrument": "^1.7.5", + "test-exclude": "^4.1.1" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.2.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-preset-jest": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^22.2.0", + "babel-plugin-syntax-object-rest-spread": "^6.13.0" + } + }, + "node_modules/babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "node_modules/babel-register/node_modules/source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse/node_modules/globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "dev": true, + "license": "MIT", + "bin": { + "babylon": "bin/babylon.js" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/browser-process-hrtime": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/browser-resolve": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/bser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caller-path/node_modules/callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ci-info": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/cliui": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "^1.1.1" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/content-type-parser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssom": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "0.3.x" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "foreach": "^2.0.5", + "object-keys": "^1.0.8" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/diff": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.5.6" + } + }, + "node_modules/escodegen/node_modules/esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.17.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.2", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "^4.0.1", + "text-table": "~0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-config-prettier": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "get-stdin": "^5.0.1" + }, + "bin": { + "eslint-config-prettier-check": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=3.14.1" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.1", + "jest-docblock": "^21.0.0" + }, + "engines": { + "node": ">=4.0.0" + }, + "peerDependencies": { + "prettier": ">= 0.11.0" + } + }, + "node_modules/eslint-plugin-prettier/node_modules/jest-docblock": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/espree": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.3.tgz", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^5.4.0", + "acorn-jsx": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "dev": true, + "license": "BSD", + "dependencies": { + "estraverse": "^4.0.0" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^4.1.0", + "object-assign": "^4.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exec-sh": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "merge": "^1.1.3" + } + }, + "node_modules/execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-posix-bracket": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expect": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.0", + "jest-diff": "^22.1.0", + "jest-get-type": "^22.1.0", + "jest-matcher-utils": "^22.2.0", + "jest-message-util": "^22.2.0", + "jest-regex-util": "^22.1.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "^2.0.0" + } + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/flat-cache/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-base/node_modules/glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^2.0.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-parent/node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^2.6" + } + }, + "node_modules/handlebars/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "dev": true, + "license": "ISC", + "dependencies": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "dev": true, + "dependencies": { + "function-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hoek": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.1" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "node_modules/invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-callable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-ci": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^1.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-primitive": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-generator-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-api": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.2.1.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "async": "^2.1.4", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.1.1", + "istanbul-lib-hook": "^1.1.0", + "istanbul-lib-instrument": "^1.9.1", + "istanbul-lib-report": "^1.1.2", + "istanbul-lib-source-maps": "^1.2.2", + "istanbul-reports": "^1.1.3", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/istanbul-lib-hook": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "append-transform": "^0.4.0" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.1.1", + "semver": "^5.3.0" + } + }, + "node_modules/istanbul-lib-report": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^1.1.1", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.1.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/istanbul-reports": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.3.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "handlebars": "^4.0.3" + } + }, + "node_modules/jest": { + "version": "22.2.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-22.2.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "import-local": "^1.0.0", + "jest-cli": "^22.2.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-changed-files": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "throat": "^4.0.0" + } + }, + "node_modules/jest-cli": { + "version": "22.2.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-22.2.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "import-local": "^1.0.0", + "is-ci": "^1.0.10", + "istanbul-api": "^1.1.14", + "istanbul-lib-coverage": "^1.1.1", + "istanbul-lib-instrument": "^1.8.0", + "istanbul-lib-source-maps": "^1.2.1", + "jest-changed-files": "^22.2.0", + "jest-config": "^22.2.1", + "jest-environment-jsdom": "^22.2.0", + "jest-get-type": "^22.1.0", + "jest-haste-map": "^22.2.0", + "jest-message-util": "^22.2.0", + "jest-regex-util": "^22.1.0", + "jest-resolve-dependencies": "^22.1.0", + "jest-runner": "^22.2.1", + "jest-runtime": "^22.2.1", + "jest-snapshot": "^22.2.0", + "jest-util": "^22.2.0", + "jest-worker": "^22.2.0", + "micromatch": "^2.3.11", + "node-notifier": "^5.2.1", + "realpath-native": "^1.0.0", + "rimraf": "^2.5.4", + "slash": "^1.0.0", + "string-length": "^2.0.0", + "strip-ansi": "^4.0.0", + "which": "^1.2.12", + "yargs": "^10.0.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-config": { + "version": "22.2.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.2.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^22.2.0", + "jest-environment-node": "^22.2.0", + "jest-get-type": "^22.1.0", + "jest-jasmine2": "^22.2.1", + "jest-regex-util": "^22.1.0", + "jest-resolve": "^22.2.0", + "jest-util": "^22.2.0", + "jest-validate": "^22.2.0", + "pretty-format": "^22.1.0" + } + }, + "node_modules/jest-diff": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.0.1", + "diff": "^3.2.0", + "jest-get-type": "^22.1.0", + "pretty-format": "^22.1.0" + } + }, + "node_modules/jest-docblock": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^2.1.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-mock": "^22.2.0", + "jest-util": "^22.2.0", + "jsdom": "^11.5.1" + } + }, + "node_modules/jest-environment-node": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-mock": "^22.2.0", + "jest-util": "^22.2.0" + } + }, + "node_modules/jest-get-type": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.1.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-haste-map": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.11", + "jest-docblock": "^22.2.0", + "jest-worker": "^22.2.0", + "micromatch": "^2.3.11", + "sane": "^2.0.0" + } + }, + "node_modules/jest-jasmine2": { + "version": "22.2.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.2.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^22.2.0", + "graceful-fs": "^4.1.11", + "is-generator-fn": "^1.0.0", + "jest-diff": "^22.1.0", + "jest-matcher-utils": "^22.2.0", + "jest-message-util": "^22.2.0", + "jest-snapshot": "^22.2.0", + "source-map-support": "^0.5.0" + } + }, + "node_modules/jest-jasmine2/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-jasmine2/node_modules/source-map-support": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.3.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "^0.6.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-22.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "pretty-format": "^22.1.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "pretty-format": "^22.1.0" + } + }, + "node_modules/jest-message-util": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" + } + }, + "node_modules/jest-message-util/node_modules/@babel/code-frame": { + "version": "7.0.0-beta.39", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.39.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" + } + }, + "node_modules/jest-mock": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.2.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-regex-util": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.1.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-resolve": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-resolve": "^1.11.2", + "chalk": "^2.0.1" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-22.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^22.1.0" + } + }, + "node_modules/jest-runner": { + "version": "22.2.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-22.2.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "exit": "^0.1.2", + "jest-config": "^22.2.1", + "jest-docblock": "^22.2.0", + "jest-haste-map": "^22.2.0", + "jest-jasmine2": "^22.2.1", + "jest-leak-detector": "^22.1.0", + "jest-message-util": "^22.2.0", + "jest-runtime": "^22.2.1", + "jest-util": "^22.2.0", + "jest-worker": "^22.2.0", + "throat": "^4.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "22.2.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-22.2.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-core": "^6.0.0", + "babel-jest": "^22.2.0", + "babel-plugin-istanbul": "^4.1.5", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "exit": "^0.1.2", + "graceful-fs": "^4.1.11", + "jest-config": "^22.2.1", + "jest-haste-map": "^22.2.0", + "jest-regex-util": "^22.1.0", + "jest-resolve": "^22.2.0", + "jest-util": "^22.2.0", + "json-stable-stringify": "^1.0.1", + "micromatch": "^2.3.11", + "realpath-native": "^1.0.0", + "slash": "^1.0.0", + "strip-bom": "3.0.0", + "write-file-atomic": "^2.1.0", + "yargs": "^10.0.3" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + } + }, + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/jest-snapshot": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.0.1", + "jest-diff": "^22.1.0", + "jest-matcher-utils": "^22.2.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^22.1.0" + } + }, + "node_modules/jest-util": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.11", + "is-ci": "^1.0.10", + "jest-message-util": "^22.2.0", + "jest-validate": "^22.2.0", + "mkdirp": "^0.5.1" + } + }, + "node_modules/jest-validate": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^22.1.0" + } + }, + "node_modules/jest-worker": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-22.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "merge-stream": "^1.0.1" + } + }, + "node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "11.6.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.6.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^1.0.4", + "acorn": "^5.3.0", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "browser-process-hrtime": "^0.1.2", + "content-type-parser": "^1.0.2", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": ">= 0.2.37 < 0.3.0", + "domexception": "^1.0.0", + "escodegen": "^1.9.0", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.2.0", + "nwmatcher": "^1.4.3", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.83.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.3", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-url": "^6.4.0", + "ws": "^4.0.0", + "xml-name-validator": "^3.0.0" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.0", + "webidl-conversions": "^4.0.1" + } + }, + "node_modules/jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "dev": true, + "license": "Public Domain" + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/left-pad": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.2.0.tgz", + "dev": true, + "license": "WTFPL" + }, + "node_modules/leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "license": "ISC" + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "dev": true, + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.x" + } + }, + "node_modules/mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "~1.30.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp/node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/nan": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/node-notifier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "growly": "^1.3.0", + "semver": "^5.4.1", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node_modules/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nwmatcher": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "dev": true, + "license": "MIT/X11", + "dependencies": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "node_modules/optimist/node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/optionator/node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "license": "ISC" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-nesting": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.2.tgz", + "integrity": "sha512-FUmTHGDNundodutB4PUBxt/EPuhgtpk8FJGRsBhOuy+6FnkR2A8RZWIsyyy6XmhvX2DZQQWIkvu+HB4IbJm+Ew==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/selector-resolve-nested": "^1.1.0", + "@csstools/selector-specificity": "^3.0.3", + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/randomatic/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/randomatic/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/randomatic/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/realpath-native": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "util.promisify": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-equal-shallow": "^0.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/request": { + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "dev": true, + "license": "ISC", + "dependencies": { + "lodash": "^4.13.1" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "dev": true, + "license": "ISC", + "dependencies": { + "request-promise-core": "1.1.1", + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request/node_modules/boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "hoek": "4.x.x" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/request/node_modules/cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "boom": "5.x.x" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/request/node_modules/cryptiles/node_modules/boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "hoek": "4.x.x" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/request/node_modules/hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" + }, + "engines": { + "node": ">=4.5.0" + } + }, + "node_modules/request/node_modules/sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "hoek": "4.x.x" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "align-text": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.0.5" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-promise": "^2.1.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "dev": true + }, + "node_modules/rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "dev": true, + "dependencies": { + "rx-lite": "*" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sane": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-2.3.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "^1.3.0", + "exec-sh": "^0.2.0", + "fb-watchman": "^2.0.0", + "minimatch": "^3.0.2", + "minimist": "^1.1.1", + "walker": "~1.0.5", + "watch": "~0.18.0" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": ">=0.6.0" + }, + "optionalDependencies": { + "fsevents": "^1.1.1" + } + }, + "node_modules/sane/node_modules/anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "dev": true, + "license": "ISC", + "dependencies": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "node_modules/sane/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/sass": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.51.0.tgz", + "integrity": "sha512-haGdpTgywJTvHC2b91GSq+clTKGbtkkZmVAb82jZQN/wTy6qs8DdFm2lhEQbEwrY0QDRgSQ3xDurqM977C3noA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-license-ids": "^1.0.2" + } + }, + "node_modules/spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "dev": true, + "license": "(MIT AND CC-BY-3.0)" + }, + "node_modules/spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "dev": true, + "license": "Unlicense" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + } + }, + "node_modules/terser": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.0.tgz", + "integrity": "sha512-sgQ99P+fRBM1jAYzN9RTnD/xEWx/7LZgYTCRgmYriSq1wxxqiQPJgXkkLBBuwySDWJ2PP0PnVQyuf4xLUuH4Ng==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "dependencies": { + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map": "~0.8.0-beta.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/test-exclude": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.1.1.tgz", + "dev": true, + "license": "ISC", + "dependencies": { + "arrify": "^1.0.1", + "micromatch": "^2.3.11", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-regex-range/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/tough-cookie": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "punycode": "^1.4.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "dependencies": { + "source-map": "~0.5.1", + "yargs": "~3.10.0" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + }, + "optionalDependencies": { + "uglify-to-browserify": "~1.0.0" + } + }, + "node_modules/uglify-js/node_modules/camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uglify-js/node_modules/cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "node_modules/uglify-js/node_modules/yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + }, + "node_modules/uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "dev": true, + "license": "MIT" + }, + "node_modules/util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node_modules/uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vite": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz", + "integrity": "sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==", + "dev": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/vite/node_modules/rollup": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.1.tgz", + "integrity": "sha512-0gG94inrUtg25sB2V/pApwiv1lUb0bQ25FPNuzO89Baa+B+c0ccaaBKM5zkZV/12pUUdH+lWCSm9wmHqyocuVQ==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.17.1", + "@rollup/rollup-android-arm64": "4.17.1", + "@rollup/rollup-darwin-arm64": "4.17.1", + "@rollup/rollup-darwin-x64": "4.17.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.17.1", + "@rollup/rollup-linux-arm-musleabihf": "4.17.1", + "@rollup/rollup-linux-arm64-gnu": "4.17.1", + "@rollup/rollup-linux-arm64-musl": "4.17.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.17.1", + "@rollup/rollup-linux-riscv64-gnu": "4.17.1", + "@rollup/rollup-linux-s390x-gnu": "4.17.1", + "@rollup/rollup-linux-x64-gnu": "4.17.1", + "@rollup/rollup-linux-x64-musl": "4.17.1", + "@rollup/rollup-win32-arm64-msvc": "4.17.1", + "@rollup/rollup-win32-ia32-msvc": "4.17.1", + "@rollup/rollup-win32-x64-msvc": "4.17.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-process-hrtime": "^0.1.2" + } + }, + "node_modules/walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.x" + } + }, + "node_modules/watch": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.19" + } + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "dev": true, + "license": "MIT/X11", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true, + "license": "ISC" + }, + "node_modules/write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/ws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.0.0.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.0" + } + }, + "node_modules/yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^4.1.0" + } + } + } +} diff --git a/package.json b/package.json index 85de70c..45faccf 100755 --- a/package.json +++ b/package.json @@ -1,52 +1,60 @@ { - "name": "frappe-gantt", - "version": "0.6.1", - "description": "A simple, modern, interactive gantt library for the web", - "main": "src/index.js", - "scripts": { - "start": "yarn run dev", - "build": "rollup -c", - "dev": "rollup -c -w", - "test": "jest", - "test:watch": "jest --watch", - "prettier": "prettier --write \"{src/*,tests/*,rollup.config}.js\"", - "prettier-check": "prettier --check \"{src/*,tests/*,rollup.config}.js\"" - }, - "repository": { - "type": "git", - "url": "https://github.com/frappe/gantt.git" - }, - "files": [ - "src", - "dist", - "README.md" - ], - "keywords": [ - "gantt", - "svg", - "simple gantt", - "project timeline", - "interactive gantt", - "project management" - ], - "author": "Faris Ansari", - "license": "MIT", - "bugs": { - "url": "https://github.com/frappe/gantt/issues" - }, - "homepage": "https://github.com/frappe/gantt", - "devDependencies": { - "babel-preset-env": "^1.6.1", - "eslint": "^4.17.0", - "eslint-config-prettier": "^2.9.0", - "eslint-plugin-prettier": "^2.6.0", - "jest": "^22.2.1", - "prettier": "3.2.5", - "rollup": "^2.70.2", - "rollup-plugin-sass": "^1.2.12", - "rollup-plugin-terser": "^7.0.2" - }, - "eslintIgnore": [ - "dist" - ] + "name": "frappe-gantt", + "version": "0.8", + "description": "A simple, modern, interactive gantt library for the web", + "main": "src/index.js", + "type": "module", + "scripts": { + "start": "yarn run dev", + "dev": "vite", + "build-dev": "vite build --watch", + "build": "vite build", + "test": "jest", + "lint": "eslint src/**/*.js", + "test:watch": "jest --watch", + "prettier": "prettier --write \"{src/*,tests/*,rollup.config}.js\"", + "prettier-check": "prettier --check \"{src/*,tests/*,rollup.config}.js\"" + }, + "repository": { + "type": "git", + "url": "https://github.com/frappe/gantt.git" + }, + "files": [ + "src", + "dist", + "README.md" + ], + "exports": { + ".": { + "import": "./dist/frappe-gantt.es.js", + "require": "./dist/frappe-gantt.umd.js" + } + }, + "keywords": [ + "gantt", + "svg", + "simple gantt", + "project timeline", + "interactive gantt", + "project management" + ], + "author": "Faris Ansari", + "license": "MIT", + "bugs": { + "url": "https://github.com/frappe/gantt/issues" + }, + "homepage": "https://github.com/frappe/gantt", + "devDependencies": { + "eslint": "^4.17.0", + "eslint-config-prettier": "^2.9.0", + "eslint-plugin-prettier": "^2.6.0", + "jest": "^22.2.1", + "postcss-nesting": "^12.1.2", + "prettier": "3.2.5", + "vite": "^5.2.10" + }, + "eslintIgnore": [ + "dist" + ], + "packageManager": "yarn@3.2.3" } diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..c08a9d3 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,4 @@ +/* eslint-disable */ +module.exports = { + plugins: [require('postcss-nesting')], +}; \ No newline at end of file diff --git a/rollup.config.js b/rollup.config.js deleted file mode 100644 index ed53480..0000000 --- a/rollup.config.js +++ /dev/null @@ -1,37 +0,0 @@ -import sass from "rollup-plugin-sass"; -import { terser } from "rollup-plugin-terser"; - -const dev = { - input: "src/index.js", - output: { - name: "Gantt", - file: "dist/frappe-gantt.js", - sourcemap: true, - format: "iife", - }, - plugins: [ - sass({ - output: true, - }), - ], -}; -const prod = { - input: "src/index.js", - output: { - name: "Gantt", - file: "dist/frappe-gantt.min.js", - sourcemap: true, - format: "iife", - }, - plugins: [ - sass({ - output: true, - options: { - outputStyle: "compressed", - }, - }), - terser(), - ], -}; - -export default [dev, prod]; diff --git a/src/arrow.js b/src/arrow.js index 4384e7e..258a44d 100644 --- a/src/arrow.js +++ b/src/arrow.js @@ -1,52 +1,53 @@ -import { createSVG } from "./svg_utils"; +import { createSVG } from './svg_utils'; export default class Arrow { - constructor(gantt, from_task, to_task) { - this.gantt = gantt; - this.from_task = from_task; - this.to_task = to_task; + constructor(gantt, from_task, to_task) { + this.gantt = gantt; + this.from_task = from_task; + this.to_task = to_task; - this.calculate_path(); - this.draw(); - } - - calculate_path() { - let start_x = - this.from_task.$bar.getX() + this.from_task.$bar.getWidth() / 2; - - const condition = () => - this.to_task.$bar.getX() < start_x + this.gantt.options.padding && - start_x > this.from_task.$bar.getX() + this.gantt.options.padding; - - while (condition()) { - start_x -= 10; + this.calculate_path(); + this.draw(); } - const start_y = - this.gantt.options.header_height + - this.gantt.options.bar_height + - (this.gantt.options.padding + this.gantt.options.bar_height) * - this.from_task.task._index + - this.gantt.options.padding; + calculate_path() { + let start_x = + this.from_task.$bar.getX() + this.from_task.$bar.getWidth() / 2; - const end_x = this.to_task.$bar.getX() - this.gantt.options.padding / 2 - 7; - const end_y = - this.gantt.options.header_height + - this.gantt.options.bar_height / 2 + - (this.gantt.options.padding + this.gantt.options.bar_height) * - this.to_task.task._index + - this.gantt.options.padding; + const condition = () => + this.to_task.$bar.getX() < start_x + this.gantt.options.padding && + start_x > this.from_task.$bar.getX() + this.gantt.options.padding; - const from_is_below_to = - this.from_task.task._index > this.to_task.task._index; - const curve = this.gantt.options.arrow_curve; - const clockwise = from_is_below_to ? 1 : 0; - const curve_y = from_is_below_to ? -curve : curve; - const offset = from_is_below_to - ? end_y + this.gantt.options.arrow_curve - : end_y - this.gantt.options.arrow_curve; + while (condition()) { + start_x -= 10; + } - this.path = ` + const start_y = + this.gantt.options.header_height + + this.gantt.options.bar_height + + (this.gantt.options.padding + this.gantt.options.bar_height) * + this.from_task.task._index + + this.gantt.options.padding; + + const end_x = + this.to_task.$bar.getX() - this.gantt.options.padding / 2 - 7; + const end_y = + this.gantt.options.header_height + + this.gantt.options.bar_height / 2 + + (this.gantt.options.padding + this.gantt.options.bar_height) * + this.to_task.task._index + + this.gantt.options.padding; + + const from_is_below_to = + this.from_task.task._index > this.to_task.task._index; + const curve = this.gantt.options.arrow_curve; + const clockwise = from_is_below_to ? 1 : 0; + const curve_y = from_is_below_to ? -curve : curve; + const offset = from_is_below_to + ? end_y + this.gantt.options.arrow_curve + : end_y - this.gantt.options.arrow_curve; + + this.path = ` M ${start_x} ${start_y} V ${offset} a ${curve} ${curve} 0 0 ${clockwise} ${curve} ${curve_y} @@ -55,16 +56,18 @@ export default class Arrow { l 5 5 l -5 5`; - if ( - this.to_task.$bar.getX() < - this.from_task.$bar.getX() + this.gantt.options.padding - ) { - const down_1 = this.gantt.options.padding / 2 - curve; - const down_2 = - this.to_task.$bar.getY() + this.to_task.$bar.getHeight() / 2 - curve_y; - const left = this.to_task.$bar.getX() - this.gantt.options.padding; + if ( + this.to_task.$bar.getX() < + this.from_task.$bar.getX() + this.gantt.options.padding + ) { + const down_1 = this.gantt.options.padding / 2 - curve; + const down_2 = + this.to_task.$bar.getY() + + this.to_task.$bar.getHeight() / 2 - + curve_y; + const left = this.to_task.$bar.getX() - this.gantt.options.padding; - this.path = ` + this.path = ` M ${start_x} ${start_y} v ${down_1} a ${curve} ${curve} 0 0 1 -${curve} ${curve} @@ -76,19 +79,19 @@ export default class Arrow { m -5 -5 l 5 5 l -5 5`; + } } - } - draw() { - this.element = createSVG("path", { - d: this.path, - "data-from": this.from_task.task.id, - "data-to": this.to_task.task.id, - }); - } + draw() { + this.element = createSVG('path', { + d: this.path, + 'data-from': this.from_task.task.id, + 'data-to': this.to_task.task.id, + }); + } - update() { - this.calculate_path(); - this.element.setAttribute("d", this.path); - } + update() { + this.calculate_path(); + this.element.setAttribute('d', this.path); + } } diff --git a/src/bar.js b/src/bar.js index 09e3776..afa469b 100644 --- a/src/bar.js +++ b/src/bar.js @@ -1,623 +1,654 @@ -import date_utils from "./date_utils"; -import { $, createSVG, animateSVG } from "./svg_utils"; +import date_utils from './date_utils'; +import { $, createSVG, animateSVG } from './svg_utils'; export default class Bar { - constructor(gantt, task) { - this.set_defaults(gantt, task); - this.prepare(); - this.draw(); - this.bind(); - } - - set_defaults(gantt, task) { - this.action_completed = false; - this.gantt = gantt; - this.task = task; - } - - prepare() { - this.prepare_values(); - this.prepare_helpers(); - } - - prepare_values() { - this.invalid = this.task.invalid; - this.height = this.gantt.options.bar_height; - this.image_size = this.height - 5; - this.compute_x(); - this.compute_y(); - this.compute_duration(); - this.corner_radius = this.gantt.options.bar_corner_radius; - this.width = this.gantt.options.column_width * this.duration; - this.progress_width = - this.gantt.options.column_width * - this.duration * - (this.task.progress / 100) || 0; - this.group = createSVG("g", { - class: "bar-wrapper" + (this.task.custom_class ? " " + this.task.custom_class : "") + (this.task.important ? ' important' : ''), - "data-id": this.task.id, - }); - this.bar_group = createSVG("g", { - class: "bar-group", - append_to: this.group, - }); - this.handle_group = createSVG("g", { - class: "handle-group", - append_to: this.group, - }); - } - - prepare_helpers() { - SVGElement.prototype.getX = function () { - return +this.getAttribute("x"); - }; - SVGElement.prototype.getY = function () { - return +this.getAttribute("y"); - }; - SVGElement.prototype.getWidth = function () { - return +this.getAttribute("width"); - }; - SVGElement.prototype.getHeight = function () { - return +this.getAttribute("height"); - }; - SVGElement.prototype.getEndX = function () { - return this.getX() + this.getWidth(); - }; - } - - prepare_expected_progress_values() { - this.compute_expected_progress(); - this.expected_progress_width = - this.gantt.options.column_width * - this.duration * - (this.expected_progress / 100) || 0; - } - - draw() { - this.draw_bar(); - this.draw_progress_bar(); - if (this.gantt.options.show_expected_progress) { - this.prepare_expected_progress_values(); - this.draw_expected_progress_bar(); - } - this.draw_label(); - this.draw_resize_handles(); - - if (this.task.thumbnail) { - this.draw_thumbnail(); - } - } - - draw_bar() { - this.$bar = createSVG("rect", { - x: this.x, - y: this.y, - width: this.width, - height: this.height, - rx: this.corner_radius, - ry: this.corner_radius, - class: "bar", - append_to: this.bar_group, - }); - - animateSVG(this.$bar, "width", 0, this.width); - - if (this.invalid) { - this.$bar.classList.add("bar-invalid"); - } - } - - draw_expected_progress_bar() { - if (this.invalid) return; - this.$expected_bar_progress = createSVG("rect", { - x: this.x, - y: this.y, - width: this.expected_progress_width, - height: this.height, - rx: this.corner_radius, - ry: this.corner_radius, - class: "bar-expected-progress", - append_to: this.bar_group, - }); - - animateSVG( - this.$expected_bar_progress, - "width", - 0, - this.expected_progress_width, - ); - } - - draw_progress_bar() { - if (this.invalid) return; - this.$bar_progress = createSVG("rect", { - x: this.x, - y: this.y, - width: this.progress_width, - height: this.height, - rx: this.corner_radius, - ry: this.corner_radius, - class: "bar-progress", - append_to: this.bar_group, - }); - const x = (date_utils.diff(this.task._start, this.gantt.gantt_start, 'hour') / - this.gantt.options.step) * - this.gantt.options.column_width; - - let $date_highlight = document.createElement("div"); - $date_highlight.id = `${this.task.id}-highlight` - $date_highlight.classList.add('date-highlight') - $date_highlight.style.height = this.height * 0.8 + 'px' - $date_highlight.style.width = this.width + 'px' - $date_highlight.style.top = this.gantt.options.header_height - 25 + 'px' - $date_highlight.style.left = x + 'px' - this.$date_highlight = $date_highlight - this.gantt.$lower_header.prepend($date_highlight) - - - - animateSVG(this.$bar_progress, "width", 0, this.progress_width); - } - - draw_label() { - let x_coord = this.x + this.$bar.getWidth() / 2; - - if (this.task.thumbnail) { - x_coord = this.x + this.image_size + 5; + constructor(gantt, task) { + this.set_defaults(gantt, task); + this.prepare(); + this.draw(); + this.bind(); } - createSVG("text", { - x: x_coord, - y: this.y + this.height / 2, - innerHTML: this.task.name, - class: "bar-label", - append_to: this.bar_group, - }); - // labels get BBox in the next tick - requestAnimationFrame(() => this.update_label_position()); - } - draw_thumbnail() { - let x_offset = 10, y_offset = 2; - let defs, clipPath; - - defs = createSVG('defs', { - append_to: this.bar_group - }); - - createSVG('rect', { - id: 'rect_' + this.task.id, - x: this.x + x_offset, - y: this.y + y_offset, - width: this.image_size, - height: this.image_size, - rx: '15', - class: 'img_mask', - append_to: defs - }); - - clipPath = createSVG('clipPath', { - id: 'clip_' + this.task.id, - append_to: defs - }); - - createSVG('use', { - href: '#rect_' + this.task.id, - append_to: clipPath - }); - - createSVG('image', { - x: this.x + x_offset, - y: this.y + y_offset, - width: this.image_size, - height: this.image_size, - class: 'bar-img', - href: this.task.thumbnail, - clipPath: 'clip_' + this.task.id, - append_to: this.bar_group - }); - } - - draw_resize_handles() { - if (this.invalid || this.gantt.options.readonly) return; - - const bar = this.$bar; - const handle_width = 8; - - createSVG("rect", { - x: bar.getX() + bar.getWidth() + handle_width - 4, - y: bar.getY() + 1, - width: handle_width, - height: this.height - 2, - rx: this.corner_radius, - ry: this.corner_radius, - class: "handle right", - append_to: this.handle_group, - }); - - createSVG("rect", { - x: bar.getX() - handle_width - 4, - y: bar.getY() + 1, - width: handle_width, - height: this.height - 2, - rx: this.corner_radius, - ry: this.corner_radius, - class: "handle left", - append_to: this.handle_group, - }); - - this.$handle_progress = createSVG("polygon", { - points: this.get_progress_polygon_points().join(","), - class: "handle progress", - append_to: this.handle_group, - }); - } - - get_progress_polygon_points() { - const bar_progress = this.$bar_progress; - let icon_width = 10; - let icon_height = 15; - - return [ - bar_progress.getEndX() - icon_width / 2, - bar_progress.getY() + bar_progress.getHeight() / 2, - - bar_progress.getEndX(), - bar_progress.getY() + bar_progress.getHeight() / 2 - icon_height / 2, - - bar_progress.getEndX() + icon_width / 2, - bar_progress.getY() + bar_progress.getHeight() / 2, - - bar_progress.getEndX(), - bar_progress.getY() + bar_progress.getHeight() / 2 + icon_height / 2, - - bar_progress.getEndX() - icon_width / 2, - bar_progress.getY() + bar_progress.getHeight() / 2, - ]; - } - - bind() { - if (this.invalid) return; - this.setup_click_event(); - } - - setup_click_event() { - let task_id = this.task.id; - $.on(this.group, "mouseover", (e) => { - this.gantt.trigger_event("hover", [this.task, e.screenX, e.screenY, e]) - }) - - let timeout; - $.on(this.group, "mouseenter", (e) => timeout = setTimeout(() => { - this.show_popup(e.offsetX) - document.querySelector(`#${task_id}-highlight`).style.display = 'block' - }, 200)) - - $.on(this.group, "mouseleave", () => { - clearTimeout(timeout) - this.gantt.popup?.hide?.() - document.querySelector(`#${task_id}-highlight`).style.display = 'none' - }) - - - $.on(this.group, this.gantt.options.popup_trigger, () => { - this.gantt.trigger_event("click", [this.task]); - }); - - $.on(this.group, "dblclick", (e) => { - if (this.action_completed) { - // just finished a move action, wait for a few seconds - return; - } - - this.gantt.trigger_event("double_click", [this.task]); - }); - } - - show_popup(x) { - if (this.gantt.bar_being_dragged) return; - - const start_date = date_utils.format( - this.task._start, - "MMM D", - this.gantt.options.language, - ); - const end_date = date_utils.format( - date_utils.add(this.task._end, -1, "second"), - "MMM D", - this.gantt.options.language, - ); - const subtitle = `${start_date} - ${end_date}
Progress: ${this.task.progress}`; - - this.gantt.show_popup({ - x, - target_element: this.$bar, - title: this.task.name, - subtitle: subtitle, - task: this.task, - }); - } - - update_bar_position({ x = null, width = null }) { - const bar = this.$bar; - if (x) { - // get all x values of parent task - const xs = this.task.dependencies.map((dep) => { - return this.gantt.get_bar(dep).$bar.getX(); - }); - // child task must not go before parent - const valid_x = xs.reduce((_, curr) => { - return x >= curr; - }, x); - if (!valid_x) { - width = null; - return; - } - this.update_attr(bar, "x", x); - this.$date_highlight.style.left = x + 'px' - } - if (width) { - this.update_attr(bar, "width", width); - this.$date_highlight.style.width = width + 'px' - } - this.update_label_position(); - this.update_handle_position(); - if (this.gantt.options.show_expected_progress) { - this.date_changed(); - this.compute_duration(); - this.update_expected_progressbar_position(); - } - this.update_progressbar_position(); - this.update_arrow_position(); - } - - update_label_position_on_horizontal_scroll({ x, sx }) { - const container = document.querySelector('.gantt-container'); - const label = this.group.querySelector('.bar-label'); - const img = this.group.querySelector('.bar-img') || ''; - const img_mask = this.bar_group.querySelector('.img_mask') || ''; - - let barWidthLimit = this.$bar.getX() + this.$bar.getWidth(); - let newLabelX = label.getX() + x; - let newImgX = img && img.getX() + x || 0; - let imgWidth = img && img.getBBox().width + 7 || 7; - let labelEndX = newLabelX + label.getBBox().width + 7; - let viewportCentral = sx + container.clientWidth / 2; - - if (label.classList.contains('big')) return; - - if (labelEndX < barWidthLimit && x > 0 && labelEndX < viewportCentral) { - label.setAttribute('x', newLabelX); - if (img) { - img.setAttribute('x', newImgX); - img_mask.setAttribute('x', newImgX); - } - } else if ((newLabelX - imgWidth) > this.$bar.getX() && x < 0 && labelEndX > viewportCentral) { - label.setAttribute('x', newLabelX); - if (img) { - img.setAttribute('x', newImgX); - img_mask.setAttribute('x', newImgX); - } - - } - } - - date_changed() { - let changed = false; - const { new_start_date, new_end_date } = this.compute_start_end_date(); - - if (Number(this.task._start) !== Number(new_start_date)) { - changed = true; - this.task._start = new_start_date; + set_defaults(gantt, task) { + this.action_completed = false; + this.gantt = gantt; + this.task = task; } - if (Number(this.task._end) !== Number(new_end_date)) { - changed = true; - this.task._end = new_end_date; + prepare() { + this.prepare_values(); + this.prepare_helpers(); } - if (!changed) return; - - this.gantt.trigger_event("date_change", [ - this.task, - new_start_date, - date_utils.add(new_end_date, -1, "second"), - ]); - } - - progress_changed() { - const new_progress = this.compute_progress(); - this.task.progress = new_progress; - this.gantt.trigger_event("progress_change", [this.task, new_progress]); - } - - set_action_completed() { - this.action_completed = true; - setTimeout(() => (this.action_completed = false), 1000); - } - - compute_start_end_date() { - const bar = this.$bar; - const x_in_units = bar.getX() / this.gantt.options.column_width; - const new_start_date = date_utils.add( - this.gantt.gantt_start, - x_in_units * this.gantt.options.step, - "hour", - ); - const width_in_units = bar.getWidth() / this.gantt.options.column_width; - const new_end_date = date_utils.add( - new_start_date, - width_in_units * this.gantt.options.step, - "hour", - ); - - return { new_start_date, new_end_date }; - } - - compute_progress() { - const progress = - (this.$bar_progress.getWidth() / this.$bar.getWidth()) * 100; - return parseInt(progress, 10); - } - - compute_expected_progress() { - this.expected_progress = - date_utils.diff(date_utils.today(), this.task._start, "hour") / - this.gantt.options.step; - this.expected_progress = - ((this.expected_progress < this.duration - ? this.expected_progress - : this.duration) * - 100) / - this.duration; - } - - compute_x() { - const { step, column_width } = this.gantt.options; - const task_start = this.task._start; - const gantt_start = this.gantt.gantt_start; - - const diff = date_utils.diff(task_start, gantt_start, "hour"); - let x = (diff / step) * column_width; - - if (this.gantt.view_is("Month")) { - const diff = date_utils.diff(task_start, gantt_start, "day"); - x = (diff * column_width) / 30; + prepare_values() { + this.invalid = this.task.invalid; + this.height = this.gantt.options.bar_height; + this.image_size = this.height - 5; + this.compute_x(); + this.compute_y(); + this.compute_duration(); + this.corner_radius = this.gantt.options.bar_corner_radius; + this.width = this.gantt.options.column_width * this.duration; + this.progress_width = + this.gantt.options.column_width * + this.duration * + (this.task.progress / 100) || 0; + this.group = createSVG('g', { + class: + 'bar-wrapper' + + (this.task.custom_class ? ' ' + this.task.custom_class : '') + + (this.task.important ? ' important' : ''), + 'data-id': this.task.id, + }); + this.bar_group = createSVG('g', { + class: 'bar-group', + append_to: this.group, + }); + this.handle_group = createSVG('g', { + class: 'handle-group', + append_to: this.group, + }); } - this.x = x; - } - compute_y() { - this.y = - this.gantt.options.header_height + - this.gantt.options.padding + - this.task._index * (this.height + this.gantt.options.padding); - } - - compute_duration() { - this.duration = - date_utils.diff(this.task._end, this.task._start, "hour") / - this.gantt.options.step; - } - - get_snap_position(dx) { - let odx = dx, - rem, - position; - - if (this.gantt.view_is("Week")) { - rem = dx % (this.gantt.options.column_width / 7); - position = - odx - - rem + - (rem < this.gantt.options.column_width / 14 - ? 0 - : this.gantt.options.column_width / 7); - } else if (this.gantt.view_is("Month")) { - rem = dx % (this.gantt.options.column_width / 30); - position = - odx - - rem + - (rem < this.gantt.options.column_width / 60 - ? 0 - : this.gantt.options.column_width / 30); - } else { - rem = dx % this.gantt.options.column_width; - position = - odx - - rem + - (rem < this.gantt.options.column_width / 2 - ? 0 - : this.gantt.options.column_width); + prepare_helpers() { + SVGElement.prototype.getX = function () { + return +this.getAttribute('x'); + }; + SVGElement.prototype.getY = function () { + return +this.getAttribute('y'); + }; + SVGElement.prototype.getWidth = function () { + return +this.getAttribute('width'); + }; + SVGElement.prototype.getHeight = function () { + return +this.getAttribute('height'); + }; + SVGElement.prototype.getEndX = function () { + return this.getX() + this.getWidth(); + }; } - return position; - } - update_attr(element, attr, value) { - value = +value; - if (!isNaN(value)) { - element.setAttribute(attr, value); + prepare_expected_progress_values() { + this.compute_expected_progress(); + this.expected_progress_width = + this.gantt.options.column_width * + this.duration * + (this.expected_progress / 100) || 0; } - return element; - } - update_expected_progressbar_position() { - if (this.invalid) return; - this.$expected_bar_progress.setAttribute("x", this.$bar.getX()); - this.compute_expected_progress(); - this.$expected_bar_progress.setAttribute( - "width", - this.gantt.options.column_width * - this.duration * - (this.expected_progress / 100) || 0, - ); - } + draw() { + this.draw_bar(); + this.draw_progress_bar(); + if (this.gantt.options.show_expected_progress) { + this.prepare_expected_progress_values(); + this.draw_expected_progress_bar(); + } + this.draw_label(); + this.draw_resize_handles(); - update_progressbar_position() { - if (this.invalid || this.gantt.options.readonly) return; - this.$bar_progress.setAttribute("x", this.$bar.getX()); - this.$bar_progress.setAttribute( - "width", - this.$bar.getWidth() * (this.task.progress / 100), - ); - } - - update_label_position() { - const img_mask = this.bar_group.querySelector('.img_mask') || ''; - const bar = this.$bar, - label = this.group.querySelector(".bar-label"), - img = this.group.querySelector('.bar-img'); - - - let padding = 5; - let x_offset_label_img = this.image_size + 10; - const labelWidth = label.getBBox().width - const barWidth = bar.getWidth() - if (labelWidth > barWidth) { - label.classList.add("big"); - if (img) { - img.setAttribute('x', bar.getX() + bar.getWidth() + padding); - img_mask.setAttribute('x', bar.getX() + bar.getWidth() + padding); - label.setAttribute('x', bar.getX() + bar.getWidth() + x_offset_label_img); - } else { - label.setAttribute('x', bar.getX() + bar.getWidth() + padding); - } - } else { - label.classList.remove("big"); - if (img) { - img.setAttribute('x', bar.getX() + padding); - img_mask.setAttribute('x', bar.getX() + padding); - label.setAttribute('x', bar.getX() + barWidth / 2 + x_offset_label_img); - } else { - label.setAttribute('x', bar.getX() + barWidth / 2 - labelWidth / 2); - } + if (this.task.thumbnail) { + this.draw_thumbnail(); + } } - } - update_handle_position() { - if (this.invalid || this.gantt.options.readonly) return; - const bar = this.$bar; - this.handle_group - .querySelector(".handle.left") - .setAttribute("x", bar.getX() - 12); - this.handle_group - .querySelector(".handle.right") - .setAttribute("x", bar.getEndX() + 4); - const handle = this.group.querySelector(".handle.progress"); - handle && handle.setAttribute("points", this.get_progress_polygon_points()); - } + draw_bar() { + this.$bar = createSVG('rect', { + x: this.x, + y: this.y, + width: this.width, + height: this.height, + rx: this.corner_radius, + ry: this.corner_radius, + class: + 'bar' + + (/^((?!chrome|android).)*safari/i.test(navigator.userAgent) && + !this.task.important + ? ' safari' + : ''), + append_to: this.bar_group, + }); - update_arrow_position() { - this.arrows = this.arrows || []; - for (let arrow of this.arrows) { - arrow.update(); + animateSVG(this.$bar, 'width', 0, this.width); + + if (this.invalid) { + this.$bar.classList.add('bar-invalid'); + } + } + + draw_expected_progress_bar() { + if (this.invalid) return; + this.$expected_bar_progress = createSVG('rect', { + x: this.x, + y: this.y, + width: this.expected_progress_width, + height: this.height, + rx: this.corner_radius, + ry: this.corner_radius, + class: 'bar-expected-progress', + append_to: this.bar_group, + }); + + animateSVG( + this.$expected_bar_progress, + 'width', + 0, + this.expected_progress_width, + ); + } + + draw_progress_bar() { + if (this.invalid) return; + this.$bar_progress = createSVG('rect', { + x: this.x, + y: this.y, + width: this.progress_width, + height: this.height, + rx: this.corner_radius, + ry: this.corner_radius, + class: 'bar-progress', + append_to: this.bar_group, + }); + const x = + (date_utils.diff(this.task._start, this.gantt.gantt_start, 'hour') / + this.gantt.options.step) * + this.gantt.options.column_width; + + let $date_highlight = document.createElement('div'); + $date_highlight.id = `${this.task.id}-highlight`; + $date_highlight.classList.add('date-highlight'); + $date_highlight.style.height = this.height * 0.8 + 'px'; + $date_highlight.style.width = this.width + 'px'; + $date_highlight.style.top = + this.gantt.options.header_height - 25 + 'px'; + $date_highlight.style.left = x + 'px'; + this.$date_highlight = $date_highlight; + this.gantt.$lower_header.prepend($date_highlight); + + animateSVG(this.$bar_progress, 'width', 0, this.progress_width); + } + + draw_label() { + let x_coord = this.x + this.$bar.getWidth() / 2; + + if (this.task.thumbnail) { + x_coord = this.x + this.image_size + 5; + } + + createSVG('text', { + x: x_coord, + y: this.y + this.height / 2, + innerHTML: this.task.name, + class: 'bar-label', + append_to: this.bar_group, + }); + // labels get BBox in the next tick + requestAnimationFrame(() => this.update_label_position()); + } + draw_thumbnail() { + let x_offset = 10, + y_offset = 2; + let defs, clipPath; + + defs = createSVG('defs', { + append_to: this.bar_group, + }); + + createSVG('rect', { + id: 'rect_' + this.task.id, + x: this.x + x_offset, + y: this.y + y_offset, + width: this.image_size, + height: this.image_size, + rx: '15', + class: 'img_mask', + append_to: defs, + }); + + clipPath = createSVG('clipPath', { + id: 'clip_' + this.task.id, + append_to: defs, + }); + + createSVG('use', { + href: '#rect_' + this.task.id, + append_to: clipPath, + }); + + createSVG('image', { + x: this.x + x_offset, + y: this.y + y_offset, + width: this.image_size, + height: this.image_size, + class: 'bar-img', + href: this.task.thumbnail, + clipPath: 'clip_' + this.task.id, + append_to: this.bar_group, + }); + } + + draw_resize_handles() { + if (this.invalid || this.gantt.options.readonly) return; + + const bar = this.$bar; + const handle_width = 8; + if (!this.gantt.options.dates_readonly) { + createSVG('rect', { + x: bar.getX() + bar.getWidth() + handle_width - 4, + y: bar.getY() + 1, + width: handle_width, + height: this.height - 2, + rx: this.corner_radius, + ry: this.corner_radius, + class: 'handle right', + append_to: this.handle_group, + }); + + createSVG('rect', { + x: bar.getX() - handle_width - 4, + y: bar.getY() + 1, + width: handle_width, + height: this.height - 2, + rx: this.corner_radius, + ry: this.corner_radius, + class: 'handle left', + append_to: this.handle_group, + }); + } + if (!this.gantt.options.progress_readonly) { + const bar_progress = this.$bar_progress; + this.$handle_progress = createSVG('circle', { + cx: bar_progress.getEndX(), + cy: bar_progress.getY() + bar_progress.getHeight() / 2, + r: 5, + class: 'handle progress', + append_to: this.handle_group, + }); + } + } + + bind() { + if (this.invalid) return; + this.setup_click_event(); + } + + setup_click_event() { + let task_id = this.task.id; + $.on(this.group, 'mouseover', (e) => { + this.gantt.trigger_event('hover', [ + this.task, + e.screenX, + e.screenY, + e, + ]); + }); + + let timeout; + $.on( + this.group, + 'mouseenter', + (e) => + (timeout = setTimeout(() => { + this.show_popup(e.offsetX || e.layerX); + document.getElementById( + `${task_id}-highlight`, + ).style.display = 'block'; + }, 200)), + ); + + $.on(this.group, 'mouseleave', () => { + clearTimeout(timeout); + this.gantt.popup?.hide?.(); + document.getElementById(`${task_id}-highlight`).style.display = + 'none'; + }); + + $.on(this.group, 'click', () => { + this.gantt.trigger_event('click', [this.task]); + }); + + $.on(this.group, 'dblclick', (e) => { + if (this.action_completed) { + // just finished a move action, wait for a few seconds + return; + } + this.group.classList.remove('active'); + if (this.gantt.popup) + this.gantt.popup.parent.classList.remove('hidden'); + + this.gantt.trigger_event('double_click', [this.task]); + }); + } + + show_popup(x) { + if (this.gantt.bar_being_dragged) return; + + const start_date = date_utils.format( + this.task._start, + 'MMM D', + this.gantt.options.language, + ); + const end_date = date_utils.format( + date_utils.add(this.task._end, -1, 'second'), + 'MMM D', + this.gantt.options.language, + ); + const subtitle = `${start_date} - ${end_date}
Progress: ${this.task.progress}`; + + this.gantt.show_popup({ + x, + target_element: this.$bar, + title: this.task.name, + subtitle: subtitle, + task: this.task, + }); + } + + update_bar_position({ x = null, width = null }) { + const bar = this.$bar; + if (x) { + // get all x values of parent task + const xs = this.task.dependencies.map((dep) => { + return this.gantt.get_bar(dep).$bar.getX(); + }); + // child task must not go before parent + const valid_x = xs.reduce((_, curr) => { + return x >= curr; + }, x); + if (!valid_x) { + width = null; + return; + } + this.update_attr(bar, 'x', x); + this.$date_highlight.style.left = x + 'px'; + } + if (width) { + this.update_attr(bar, 'width', width); + this.$date_highlight.style.width = width + 'px'; + } + this.update_label_position(); + this.update_handle_position(); + if (this.gantt.options.show_expected_progress) { + this.date_changed(); + this.compute_duration(); + this.update_expected_progressbar_position(); + } + this.update_progressbar_position(); + this.update_arrow_position(); + } + + update_label_position_on_horizontal_scroll({ x, sx }) { + const container = document.querySelector('.gantt-container'); + const label = this.group.querySelector('.bar-label'); + const img = this.group.querySelector('.bar-img') || ''; + const img_mask = this.bar_group.querySelector('.img_mask') || ''; + + let barWidthLimit = this.$bar.getX() + this.$bar.getWidth(); + let newLabelX = label.getX() + x; + let newImgX = (img && img.getX() + x) || 0; + let imgWidth = (img && img.getBBox().width + 7) || 7; + let labelEndX = newLabelX + label.getBBox().width + 7; + let viewportCentral = sx + container.clientWidth / 2; + + if (label.classList.contains('big')) return; + + if (labelEndX < barWidthLimit && x > 0 && labelEndX < viewportCentral) { + label.setAttribute('x', newLabelX); + if (img) { + img.setAttribute('x', newImgX); + img_mask.setAttribute('x', newImgX); + } + } else if ( + newLabelX - imgWidth > this.$bar.getX() && + x < 0 && + labelEndX > viewportCentral + ) { + label.setAttribute('x', newLabelX); + if (img) { + img.setAttribute('x', newImgX); + img_mask.setAttribute('x', newImgX); + } + } + } + + date_changed() { + let changed = false; + const { new_start_date, new_end_date } = this.compute_start_end_date(); + + if (Number(this.task._start) !== Number(new_start_date)) { + changed = true; + this.task._start = new_start_date; + } + + if (Number(this.task._end) !== Number(new_end_date)) { + changed = true; + this.task._end = new_end_date; + } + + if (!changed) return; + + this.gantt.trigger_event('date_change', [ + this.task, + new_start_date, + date_utils.add(new_end_date, -1, 'second'), + ]); + } + + progress_changed() { + const new_progress = this.compute_progress(); + this.task.progress = new_progress; + this.gantt.trigger_event('progress_change', [this.task, new_progress]); + } + + set_action_completed() { + this.action_completed = true; + setTimeout(() => (this.action_completed = false), 1000); + } + + compute_start_end_date() { + const bar = this.$bar; + const x_in_units = bar.getX() / this.gantt.options.column_width; + let new_start_date = date_utils.add( + this.gantt.gantt_start, + x_in_units * this.gantt.options.step, + 'hour', + ); + const start_offset = + this.gantt.gantt_start.getTimezoneOffset() - + new_start_date.getTimezoneOffset(); + if (start_offset) { + new_start_date = date_utils.add( + new_start_date, + start_offset, + 'minute', + ); + } + + const width_in_units = bar.getWidth() / this.gantt.options.column_width; + const new_end_date = date_utils.add( + new_start_date, + width_in_units * this.gantt.options.step, + 'hour', + ); + + return { new_start_date, new_end_date }; + } + + compute_progress() { + const progress = + (this.$bar_progress.getWidth() / this.$bar.getWidth()) * 100; + return parseInt(progress, 10); + } + + compute_expected_progress() { + this.expected_progress = + date_utils.diff(date_utils.today(), this.task._start, 'hour') / + this.gantt.options.step; + this.expected_progress = + ((this.expected_progress < this.duration + ? this.expected_progress + : this.duration) * + 100) / + this.duration; + } + + compute_x() { + const { step, column_width } = this.gantt.options; + const task_start = this.task._start; + const gantt_start = this.gantt.gantt_start; + + const diff = date_utils.diff(task_start, gantt_start, 'hour'); + let x = (diff / step) * column_width; + + if (this.gantt.view_is('Month')) { + const diff = date_utils.diff(task_start, gantt_start, 'day'); + x = (diff * column_width) / 30; + } + this.x = x; + } + + compute_y() { + this.y = + this.gantt.options.header_height + + this.gantt.options.padding + + this.task._index * (this.height + this.gantt.options.padding); + } + + compute_duration() { + this.duration = + date_utils.diff(this.task._end, this.task._start, 'hour') / + this.gantt.options.step; + } + + get_snap_position(dx) { + let odx = dx, + rem, + position; + + if (this.gantt.view_is('Week')) { + rem = dx % (this.gantt.options.column_width / 7); + position = + odx - + rem + + (rem < this.gantt.options.column_width / 14 + ? 0 + : this.gantt.options.column_width / 7); + } else if (this.gantt.view_is('Month')) { + rem = dx % (this.gantt.options.column_width / 30); + position = + odx - + rem + + (rem < this.gantt.options.column_width / 60 + ? 0 + : this.gantt.options.column_width / 30); + } else { + rem = dx % this.gantt.options.column_width; + position = + odx - + rem + + (rem < this.gantt.options.column_width / 2 + ? 0 + : this.gantt.options.column_width); + } + return position; + } + + update_attr(element, attr, value) { + value = +value; + if (!isNaN(value)) { + element.setAttribute(attr, value); + } + return element; + } + + update_expected_progressbar_position() { + if (this.invalid) return; + this.$expected_bar_progress.setAttribute('x', this.$bar.getX()); + this.compute_expected_progress(); + this.$expected_bar_progress.setAttribute( + 'width', + this.gantt.options.column_width * + this.duration * + (this.expected_progress / 100) || 0, + ); + } + + update_progressbar_position() { + if (this.invalid || this.gantt.options.readonly) return; + this.$bar_progress.setAttribute('x', this.$bar.getX()); + this.$bar_progress.setAttribute( + 'width', + this.$bar.getWidth() * (this.task.progress / 100), + ); + } + + update_label_position() { + const img_mask = this.bar_group.querySelector('.img_mask') || ''; + const bar = this.$bar, + label = this.group.querySelector('.bar-label'), + img = this.group.querySelector('.bar-img'); + + let padding = 5; + let x_offset_label_img = this.image_size + 10; + const labelWidth = label.getBBox().width; + const barWidth = bar.getWidth(); + if (labelWidth > barWidth) { + label.classList.add('big'); + if (img) { + img.setAttribute('x', bar.getX() + bar.getWidth() + padding); + img_mask.setAttribute( + 'x', + bar.getX() + bar.getWidth() + padding, + ); + label.setAttribute( + 'x', + bar.getX() + bar.getWidth() + x_offset_label_img, + ); + } else { + label.setAttribute('x', bar.getX() + bar.getWidth() + padding); + } + } else { + label.classList.remove('big'); + if (img) { + img.setAttribute('x', bar.getX() + padding); + img_mask.setAttribute('x', bar.getX() + padding); + label.setAttribute( + 'x', + bar.getX() + barWidth / 2 + x_offset_label_img, + ); + } else { + label.setAttribute( + 'x', + bar.getX() + barWidth / 2 - labelWidth / 2, + ); + } + } + } + + update_handle_position() { + if (this.invalid || this.gantt.options.readonly) return; + const bar = this.$bar; + this.handle_group + .querySelector('.handle.left') + .setAttribute('x', bar.getX() - 12); + this.handle_group + .querySelector('.handle.right') + .setAttribute('x', bar.getEndX() + 4); + const handle = this.group.querySelector('.handle.progress'); + handle && handle.setAttribute('cx', this.$bar_progress.getEndX()); + } + + update_arrow_position() { + this.arrows = this.arrows || []; + for (let arrow of this.arrows) { + arrow.update(); + } } - } } function isFunction(functionToCheck) { - let getType = {}; - return ( - functionToCheck && - getType.toString.call(functionToCheck) === "[object Function]" - ); + let getType = {}; + return ( + functionToCheck && + getType.toString.call(functionToCheck) === '[object Function]' + ); } diff --git a/src/dark.css b/src/dark.css new file mode 100644 index 0000000..c5bc9af --- /dev/null +++ b/src/dark.css @@ -0,0 +1,99 @@ +:root { + --bar-color-dark: #616161; + --bar-stroke-dark: #c6ccd2; + --border-color-dark: #616161; + --light-bg-dark: #3e3e3e; + --light-border-color-dark: #3e3e3e; + --text-muted-dark: #eee; + --text-light-dark: #ececec; + --text-color-dark: #f7f7f7; + --blue-dark: #8a8aff; +} + +.dark>.gantt-container .gantt { + & .grid-row { + fill: #252525; + } + + /* & .grid-row:nth-child(even) { + fill: var(--light-bg-dark); + } */ + + & .row-line { + stroke: var(--light-border-color-dark); + } + + & .tick { + stroke: var(--border-color-dark); + } + + & .holiday-highlight { + fill: var(--light-bg-dark); + } + + & .arrow { + stroke: var(--text-muted-dark); + } + + & .bar { + fill: var(--bar-color-dark); + stroke: none; + } + + & .bar-progress { + fill: var(--blue-dark); + } + + & .bar-invalid { + fill: transparent; + stroke: var(--bar-stroke-dark); + + &~.bar-label { + fill: var(--text-light-dark); + } + } + + & .bar-label.big { + fill: var(--text-light-dark); + } + + & .bar-wrapper { + &:hover { + .bar { + fill: lighten(var(--bar-color-dark, 5)); + } + + & .bar-progress { + fill: lighten(var(--blue-dark, 5)); + } + } + + &.active { + .bar { + fill: lighten(var(--bar-color-dark, 5)); + } + + & .bar-progress { + fill: lighten(var(--blue-dark, 5)); + } + } + } +} + +.dark>.gantt-container { + & .grid-header { + background-color: #252525; + } + + & .popup-wrapper { + background-color: #333; + + & .title { + border-color: lighten(var(--blue-dark, 5)); + } + + & .pointer { + border-top-color: #333; + } + } +} \ No newline at end of file diff --git a/src/dark.scss b/src/dark.scss deleted file mode 100644 index e051f3f..0000000 --- a/src/dark.scss +++ /dev/null @@ -1,97 +0,0 @@ -$bar-color-dark: #616161; -$bar-stroke-dark: #c6ccd2; -$border-color-dark: #616161; -$light-bg-dark: #3e3e3e; -$light-border-color-dark: #3e3e3e; -$text-muted-dark: #eee; -$text-light-dark: #ececec; -$text-color-dark: #f7f7f7; -$blue-dark: #8a8aff; - -.dark > .gantt-container .gantt { - .grid-header { - fill: #252525; - stroke: $border-color-dark; - } - .grid-row { - fill: #252525; - } - .grid-row:nth-child(even) { - fill: $light-bg-dark; - } - .row-line { - stroke: $light-border-color-dark; - } - .tick { - stroke: $border-color-dark; - } - .today-highlight { - opacity: 0.2; - } - - .arrow { - stroke: $text-muted-dark; - } - - .bar { - fill: $bar-color-dark; - stroke: none; - } - .bar-progress { - fill: $blue-dark; - } - .bar-invalid { - fill: transparent; - stroke: $bar-stroke-dark; - - & ~ .bar-label { - fill: $text-light-dark; - } - } - - .bar-label.big { - fill: $text-light-dark; - } - - .bar-wrapper { - &:hover { - .bar { - fill: lighten($bar-color-dark, 5); - } - - .bar-progress { - fill: lighten($blue-dark, 5); - } - } - - &.active { - .bar { - fill: lighten($bar-color-dark, 5); - } - - .bar-progress { - fill: lighten($blue-dark, 5); - } - } - } - - .upper-text { - fill: #a2a2a2; - } - .lower-text { - fill: $text-color-dark; - } -} - -.dark > .gantt-container { - .popup-wrapper { - background-color: #333; - - .title { - border-color: lighten($blue-dark, 5); - } - .pointer { - border-top-color: #333; - } - } -} diff --git a/src/date_utils.js b/src/date_utils.js index 4d9b550..716d2ae 100644 --- a/src/date_utils.js +++ b/src/date_utils.js @@ -1,266 +1,266 @@ -const YEAR = "year"; -const MONTH = "month"; -const DAY = "day"; -const HOUR = "hour"; -const MINUTE = "minute"; -const SECOND = "second"; -const MILLISECOND = "millisecond"; +const YEAR = 'year'; +const MONTH = 'month'; +const DAY = 'day'; +const HOUR = 'hour'; +const MINUTE = 'minute'; +const SECOND = 'second'; +const MILLISECOND = 'millisecond'; const SHORTENED = { - January: "Jan", - February: "Feb", - March: "Mar", - April: "Apr", - May: "May", - June: "Jun", - July: "Jul", - August: "Aug", - September: "Sep", - October: "Oct", - November: "Nov", - December: "Dec" + January: 'Jan', + February: 'Feb', + March: 'Mar', + April: 'Apr', + May: 'May', + June: 'Jun', + July: 'Jul', + August: 'Aug', + September: 'Sep', + October: 'Oct', + November: 'Nov', + December: 'Dec', }; export default { - parse_duration(duration) { - const regex = /([0-9])+(y|m|d|h|min|s|ms)/gm; - const matches = regex.exec(duration); - - if (matches !== null) { - if (matches[2] === "y") { - return { duration: parseInt(matches[1]), scale: `year` }; - } else if (matches[2] === "m") { - return { duration: parseInt(matches[1]), scale: `month` }; - } else if (matches[2] === "d") { - return { duration: parseInt(matches[1]), scale: `day` }; - } else if (matches[2] === "h") { - return { duration: parseInt(matches[1]), scale: `hour` }; - } else if (matches[2] === "min") { - return { duration: parseInt(matches[1]), scale: `minute` }; - } else if (matches[2] === "s") { - return { duration: parseInt(matches[1]), scale: `second` }; - } else if (matches[2] === "ms") { - return { duration: parseInt(matches[1]), scale: `millisecond` }; - } - } - }, - parse(date, date_separator = "-", time_separator = /[.:]/) { - if (date instanceof Date) { - return date; - } - if (typeof date === "string") { - let date_parts, time_parts; - const parts = date.split(" "); - date_parts = parts[0] - .split(date_separator) - .map((val) => parseInt(val, 10)); - time_parts = parts[1] && parts[1].split(time_separator); - - // month is 0 indexed - date_parts[1] = date_parts[1] ? date_parts[1] - 1 : 0; - - let vals = date_parts; - - if (time_parts && time_parts.length) { - if (time_parts.length === 4) { - time_parts[3] = "0." + time_parts[3]; - time_parts[3] = parseFloat(time_parts[3]) * 1000; + parse_duration(duration) { + const regex = /([0-9]+)(y|m|d|h|min|s|ms)/gm; + const matches = regex.exec(duration); + console.log(matches); + if (matches !== null) { + if (matches[2] === 'y') { + return { duration: parseInt(matches[1]), scale: `year` }; + } else if (matches[2] === 'm') { + return { duration: parseInt(matches[1]), scale: `month` }; + } else if (matches[2] === 'd') { + return { duration: parseInt(matches[1]), scale: `day` }; + } else if (matches[2] === 'h') { + return { duration: parseInt(matches[1]), scale: `hour` }; + } else if (matches[2] === 'min') { + return { duration: parseInt(matches[1]), scale: `minute` }; + } else if (matches[2] === 's') { + return { duration: parseInt(matches[1]), scale: `second` }; + } else if (matches[2] === 'ms') { + return { duration: parseInt(matches[1]), scale: `millisecond` }; + } } - vals = vals.concat(time_parts); - } - return new Date(...vals); - } - }, - - to_string(date, with_time = false) { - if (!(date instanceof Date)) { - throw new TypeError("Invalid argument type"); - } - const vals = this.get_date_values(date).map((val, i) => { - if (i === 1) { - // add 1 for month - val = val + 1; - } - - if (i === 6) { - return padStart(val + "", 3, "0"); - } - - return padStart(val + "", 2, "0"); - }); - const date_string = `${vals[0]}-${vals[1]}-${vals[2]}`; - const time_string = `${vals[3]}:${vals[4]}:${vals[5]}.${vals[6]}`; - - return date_string + (with_time ? " " + time_string : ""); - }, - - format(date, format_string = "YYYY-MM-DD HH:mm:ss.SSS", lang = "en") { - const dateTimeFormat = new Intl.DateTimeFormat(lang, { - month: "long", - }); - const month_name = dateTimeFormat.format(date); - const month_name_capitalized = - month_name.charAt(0).toUpperCase() + month_name.slice(1); - - const values = this.get_date_values(date).map((d) => padStart(d, 2, 0)); - const format_map = { - YYYY: values[0], - MM: padStart(+values[1] + 1, 2, 0), - DD: values[2], - HH: values[3], - mm: values[4], - ss: values[5], - SSS: values[6], - D: values[2], - MMMM: month_name_capitalized, - MMM: SHORTENED[month_name_capitalized], - }; - - let str = format_string; - const formatted_values = []; - - Object.keys(format_map) - .sort((a, b) => b.length - a.length) // big string first - .forEach((key) => { - if (str.includes(key)) { - str = str.replaceAll(key, `$${formatted_values.length}`); - formatted_values.push(format_map[key]); + }, + parse(date, date_separator = '-', time_separator = /[.:]/) { + if (date instanceof Date) { + return date; } - }); + if (typeof date === 'string') { + let date_parts, time_parts; + const parts = date.split(' '); + date_parts = parts[0] + .split(date_separator) + .map((val) => parseInt(val, 10)); + time_parts = parts[1] && parts[1].split(time_separator); - formatted_values.forEach((value, i) => { - str = str.replaceAll(`$${i}`, value); - }); + // month is 0 indexed + date_parts[1] = date_parts[1] ? date_parts[1] - 1 : 0; - return str; - }, + let vals = date_parts; - diff(date_a, date_b, scale = DAY) { - let milliseconds, seconds, hours, minutes, days, months, years; + if (time_parts && time_parts.length) { + if (time_parts.length === 4) { + time_parts[3] = '0.' + time_parts[3]; + time_parts[3] = parseFloat(time_parts[3]) * 1000; + } + vals = vals.concat(time_parts); + } + return new Date(...vals); + } + }, - milliseconds = date_a - date_b; - seconds = milliseconds / 1000; - minutes = seconds / 60; - hours = minutes / 60; - days = hours / 24; - months = days / 30; - years = months / 12; + to_string(date, with_time = false) { + if (!(date instanceof Date)) { + throw new TypeError('Invalid argument type'); + } + const vals = this.get_date_values(date).map((val, i) => { + if (i === 1) { + // add 1 for month + val = val + 1; + } - if (!scale.endsWith("s")) { - scale += "s"; - } + if (i === 6) { + return padStart(val + '', 3, '0'); + } - return Math.floor( - { - milliseconds, - seconds, - minutes, - hours, - days, - months, - years, - }[scale], - ); - }, + return padStart(val + '', 2, '0'); + }); + const date_string = `${vals[0]}-${vals[1]}-${vals[2]}`; + const time_string = `${vals[3]}:${vals[4]}:${vals[5]}.${vals[6]}`; - today() { - const vals = this.get_date_values(new Date()).slice(0, 3); - return new Date(...vals); - }, + return date_string + (with_time ? ' ' + time_string : ''); + }, - now() { - return new Date(); - }, + format(date, format_string = 'YYYY-MM-DD HH:mm:ss.SSS', lang = 'en') { + const dateTimeFormat = new Intl.DateTimeFormat(lang, { + month: 'long', + }); + const month_name = dateTimeFormat.format(date); + const month_name_capitalized = + month_name.charAt(0).toUpperCase() + month_name.slice(1); - add(date, qty, scale) { - qty = parseInt(qty, 10); - const vals = [ - date.getFullYear() + (scale === YEAR ? qty : 0), - date.getMonth() + (scale === MONTH ? qty : 0), - date.getDate() + (scale === DAY ? qty : 0), - date.getHours() + (scale === HOUR ? qty : 0), - date.getMinutes() + (scale === MINUTE ? qty : 0), - date.getSeconds() + (scale === SECOND ? qty : 0), - date.getMilliseconds() + (scale === MILLISECOND ? qty : 0), - ]; - return new Date(...vals); - }, + const values = this.get_date_values(date).map((d) => padStart(d, 2, 0)); + const format_map = { + YYYY: values[0], + MM: padStart(+values[1] + 1, 2, 0), + DD: values[2], + HH: values[3], + mm: values[4], + ss: values[5], + SSS: values[6], + D: values[2], + MMMM: month_name_capitalized, + MMM: SHORTENED[month_name_capitalized], + }; - start_of(date, scale) { - const scores = { - [YEAR]: 6, - [MONTH]: 5, - [DAY]: 4, - [HOUR]: 3, - [MINUTE]: 2, - [SECOND]: 1, - [MILLISECOND]: 0, - }; + let str = format_string; + const formatted_values = []; - function should_reset(_scale) { - const max_score = scores[scale]; - return scores[_scale] <= max_score; - } + Object.keys(format_map) + .sort((a, b) => b.length - a.length) // big string first + .forEach((key) => { + if (str.includes(key)) { + str = str.replaceAll(key, `$${formatted_values.length}`); + formatted_values.push(format_map[key]); + } + }); - const vals = [ - date.getFullYear(), - should_reset(YEAR) ? 0 : date.getMonth(), - should_reset(MONTH) ? 1 : date.getDate(), - should_reset(DAY) ? 0 : date.getHours(), - should_reset(HOUR) ? 0 : date.getMinutes(), - should_reset(MINUTE) ? 0 : date.getSeconds(), - should_reset(SECOND) ? 0 : date.getMilliseconds(), - ]; + formatted_values.forEach((value, i) => { + str = str.replaceAll(`$${i}`, value); + }); - return new Date(...vals); - }, + return str; + }, - clone(date) { - return new Date(...this.get_date_values(date)); - }, + diff(date_a, date_b, scale = DAY) { + let milliseconds, seconds, hours, minutes, days, months, years; - get_date_values(date) { - return [ - date.getFullYear(), - date.getMonth(), - date.getDate(), - date.getHours(), - date.getMinutes(), - date.getSeconds(), - date.getMilliseconds(), - ]; - }, + milliseconds = date_a - date_b; + seconds = milliseconds / 1000; + minutes = seconds / 60; + hours = minutes / 60; + days = hours / 24; + months = days / 30; + years = months / 12; - get_days_in_month(date) { - const no_of_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + if (!scale.endsWith('s')) { + scale += 's'; + } - const month = date.getMonth(); + return Math.floor( + { + milliseconds, + seconds, + minutes, + hours, + days, + months, + years, + }[scale], + ); + }, - if (month !== 1) { - return no_of_days[month]; - } + today() { + const vals = this.get_date_values(new Date()).slice(0, 3); + return new Date(...vals); + }, - // Feb - const year = date.getFullYear(); - if ((year % 4 === 0 && year % 100 != 0) || year % 400 === 0) { - return 29; - } - return 28; - }, + now() { + return new Date(); + }, + + add(date, qty, scale) { + qty = parseInt(qty, 10); + const vals = [ + date.getFullYear() + (scale === YEAR ? qty : 0), + date.getMonth() + (scale === MONTH ? qty : 0), + date.getDate() + (scale === DAY ? qty : 0), + date.getHours() + (scale === HOUR ? qty : 0), + date.getMinutes() + (scale === MINUTE ? qty : 0), + date.getSeconds() + (scale === SECOND ? qty : 0), + date.getMilliseconds() + (scale === MILLISECOND ? qty : 0), + ]; + return new Date(...vals); + }, + + start_of(date, scale) { + const scores = { + [YEAR]: 6, + [MONTH]: 5, + [DAY]: 4, + [HOUR]: 3, + [MINUTE]: 2, + [SECOND]: 1, + [MILLISECOND]: 0, + }; + + function should_reset(_scale) { + const max_score = scores[scale]; + return scores[_scale] <= max_score; + } + + const vals = [ + date.getFullYear(), + should_reset(YEAR) ? 0 : date.getMonth(), + should_reset(MONTH) ? 1 : date.getDate(), + should_reset(DAY) ? 0 : date.getHours(), + should_reset(HOUR) ? 0 : date.getMinutes(), + should_reset(MINUTE) ? 0 : date.getSeconds(), + should_reset(SECOND) ? 0 : date.getMilliseconds(), + ]; + + return new Date(...vals); + }, + + clone(date) { + return new Date(...this.get_date_values(date)); + }, + + get_date_values(date) { + return [ + date.getFullYear(), + date.getMonth(), + date.getDate(), + date.getHours(), + date.getMinutes(), + date.getSeconds(), + date.getMilliseconds(), + ]; + }, + + get_days_in_month(date) { + const no_of_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + + const month = date.getMonth(); + + if (month !== 1) { + return no_of_days[month]; + } + + // Feb + const year = date.getFullYear(); + if ((year % 4 === 0 && year % 100 != 0) || year % 400 === 0) { + return 29; + } + return 28; + }, }; // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart function padStart(str, targetLength, padString) { - str = str + ""; - targetLength = targetLength >> 0; - padString = String(typeof padString !== "undefined" ? padString : " "); - if (str.length > targetLength) { - return String(str); - } else { - targetLength = targetLength - str.length; - if (targetLength > padString.length) { - padString += padString.repeat(targetLength / padString.length); + str = str + ''; + targetLength = targetLength >> 0; + padString = String(typeof padString !== 'undefined' ? padString : ' '); + if (str.length > targetLength) { + return String(str); + } else { + targetLength = targetLength - str.length; + if (targetLength > padString.length) { + padString += padString.repeat(targetLength / padString.length); + } + return padString.slice(0, targetLength) + String(str); } - return padString.slice(0, targetLength) + String(str); - } } diff --git a/src/gantt.css b/src/gantt.css new file mode 100644 index 0000000..d595ae8 --- /dev/null +++ b/src/gantt.css @@ -0,0 +1,306 @@ +@import './dark.css'; + +:root { + --bar-color: #fff; + --bar-color-important: #94c4f4; + --bar-stroke: #fff; + --dark-stroke-color: #e0e0e0; + --stroke-color: #ebeef0; + --light-bg: #f5f5f5; + --light-border-color: #ebeff2; + --light-yellow: #f6e796; + --holiday-color: #f9fafa; + --text-muted: #666; + --text-grey: #98a1a9; + --text-light: #fff; + --text-dark: #111; + --progress: #ebeef0; + --handle-color: #dcdce4; + --handle-color-important: #94c4f4; + --light-blue: #c4c4e9; + --middle-blue: #62b2f9; + --dark-blue: #2c94ec; +} + + +.gantt-container { + line-height: 14.5px; + position: relative; + overflow: auto; + font-size: 12px; + height: 500px; + + & .popup-wrapper { + position: absolute; + top: 0; + left: 0; + background: #171b1f; + padding: 10px; + border-radius: 5px; + width: max-content; + + &.hidden { + opacity: 0 !important; + } + + & .title { + margin-bottom: 5px; + text-align: -webkit-center; + text-align: center; + color: var(--text-light); + } + + & .subtitle { + color: var(--text-grey); + } + + & .pointer { + position: absolute; + height: 5px; + margin: 0 0 0 -5px; + border: 5px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.8); + } + } + + & .grid-header { + background-color: #ffffff; + position: sticky; + top: 0; + left: 0; + z-index: 10; + } + + & .lower-text, + & .upper-text { + text-anchor: middle; + color: var(--text-dark); + } + + & .upper-header { + height: 40px; + } + + & .lower-header { + height: 30px; + } + + & .lower-text { + font-size: 14px; + position: absolute; + width: fit-content; + } + + & .upper-text { + position: absolute; + width: fit-content; + font-weight: 500; + font-size: 16px; + } + + & .current-upper { + position: fixed; + } + + & .side-header { + position: fixed; + padding: 0 10px; + margin-right: 10px; + background: white; + line-height: 20px; + font-weight: 400; + } + + & .today-button, + & .viewmode-select { + background: #f4f5f6; + text-align: -webkit-center; + text-align: center; + height: 25px; + border-radius: 8px; + border: none; + color: var(--text-dark); + padding: 4px 10px; + border-radius: 8px; + height: 25px; + } + + & .viewmode-select { + outline: none !important; + padding: 4px 8px; + margin-right: 4px; + + /* -webkit-appearance: none; */ + /* -moz-appearance: none; */ + text-indent: 1px; + text-overflow: ''; + } + + & .date-highlight { + background-color: var(--progress); + border-radius: 12px; + position: absolute; + display: none; + } + + & .current-highlight { + position: absolute; + background: var(--dark-blue); + width: 1px; + } + + & .current-date-highlight { + background: var(--dark-blue); + color: var(--text-light); + padding: 4px 8px; + border-radius: 200px; + } +} + + +.gantt { + user-select: none; + -webkit-user-select: none; + position: absolute; + + & .grid-background { + fill: none; + } + + & .grid-row { + fill: #ffffff; + } + + & .row-line { + stroke: var(--light-border-color); + } + + & .tick { + stroke: var(--stroke-color); + stroke-width: 0.4; + + &.thick { + stroke: var(--dark-stroke-color); + stroke-width: 0.7; + } + } + + & .holiday-highlight { + fill: var(--holiday-color); + } + + & .arrow { + fill: none; + stroke: #9fa9b1; + stroke-width: 1; + } + + & .bar-wrapper .bar { + fill: var(--bar-color); + stroke: var(--bar-stroke); + stroke-width: 0; + transition: stroke-width 0.3s ease; + } + + & .bar-progress { + fill: var(--progress); + } + + & .bar-expected-progress { + fill: var(--light-blue); + } + + & .bar-invalid { + fill: transparent; + stroke: var(--bar-stroke); + stroke-width: 1; + stroke-dasharray: 5; + + &~.bar-label { + fill: var(--text-light); + } + } + + & .bar-label { + fill: var(--text-dark); + dominant-baseline: central; + font-family: Helvetica; + font-size: 13px; + font-weight: 400; + + &.big { + fill: var(--text-dark); + text-anchor: start; + } + } + + & .bar-wrapper.important { + & .bar { + fill: var(--bar-color-important); + } + + & .bar-progress { + fill: var(--dark-blue); + } + + & .bar-label { + fill: var(--text-light); + } + + & .handle { + fill: var(--handle-color-important); + } + + & .handle.progress { + fill: var(--text-light); + } + } + + & .handle { + fill: var(--handle-color); + cursor: ew-resize; + opacity: 0; + visibility: hidden; + transition: opacity 0.3s ease; + } + + & .handle.progress { + fill: var(--text-muted); + } + + & .bar-wrapper { + cursor: pointer; + + + &.active { + & .handle { + visibility: visible; + opacity: 1; + } + } + + & .bar { + -webkit-filter: drop-shadow(3px 3px 2px rgba(0, 0, 0, 0.7)); + filter: drop-shadow(0 0 2px rgba(17, 43, 66, 0.16)); + border-radius: 3px; + } + + & .bar.safari { + outline: 1px solid black; + } + + &:hover { + .bar { + transition: transform 0.3s ease; + } + + .date-highlight { + display: block; + } + } + } + + & .hide { + display: none; + } +} \ No newline at end of file diff --git a/src/gantt.scss b/src/gantt.scss deleted file mode 100644 index ba42fef..0000000 --- a/src/gantt.scss +++ /dev/null @@ -1,316 +0,0 @@ -@import "./dark.scss"; - -$bar-color: #fff !default; -$bar-color-important: #94c4f4 !default; -$bar-stroke: #fff !default; -$dark-stroke-color: #e0e0e0 !default; -$stroke-color: #EBEEF0 !default; -$light-bg: #f5f5f5 !default; -$light-border-color: #ebeff2 !default; -$light-yellow: #f6e796 !default; -$holiday-color: #F9FAFA !default; -$text-muted: #666 !default; -$text-grey: #98A1A9; -$text-light: #fff !default; -$text-dark: #111 !default; -$progress: #EBEEF0 !default; -$handle-color: #dcdce4 !default; -$handle-color-important: #94c4f4 !default; -$light-blue: #c4c4e9 !default; -$middle-blue: #62B2F9 !default; -$dark-blue: #2c94ec !default; - - -.gantt-container { - line-height: 14.5px; - - .grid-header { - background-color: #ffffff; - position: sticky; - top: 0; - left: 0; - z-index: 10; - } - - .lower-text, - .upper-text { - text-anchor: middle; - color: $text-dark; - } - - .upper-header { - height: 40px; - } - - .lower-header { - height: 30px; - } - - .lower-text { - font-size: 14px; - position: absolute; - width: fit-content; - } - - .upper-text { - position: absolute; - width: fit-content; - font-weight: 500; - font-size: 16px; - } - - .current-upper { - position: fixed; - } - - .side-header { - position: fixed; - padding: 0 10px; - margin-right: 10px; - background: white; - line-height: 20px; - font-weight: 400; - } - - .today-button, - .viewmode-select { - background: #F4F5F6; - text-align: -webkit-center; - text-align: center; - height: 25px; - border-radius: 8px; - border: none; - color: $text-dark; - padding: 4px 10px; - border-radius: 8px; - height: 25px; - } - - .viewmode-select { - outline: none !important; - padding: 4px 8px; - margin-right: 4px; - - // Hide select icon - -webkit-appearance: none; - -moz-appearance: none; - text-indent: 1px; - text-overflow: ''; - } - - .date-highlight { - background-color: $progress; - border-radius: 12px; - position: absolute; - display: none; - } - - .current-highlight { - position: absolute; - background: $dark-blue; - width: 1px; - } - - .current-date-highlight { - background: $dark-blue; - color: $text-light; - padding: 4px 8px; - border-radius: 200px; - } -} - -.gantt { - user-select: none; - -webkit-user-select: none; - position: absolute; - - .grid-background { - fill: none; - } - - - - .grid-row { - fill: #ffffff; - } - - // .grid-row:nth-child(even) { - // fill: $light-bg; - // } - - .row-line { - stroke: $light-border-color; - } - - .tick { - stroke: $stroke-color; - stroke-width: 0.4; - - &.thick { - stroke: $dark-stroke-color; - stroke-width: 0.7; - } - } - - - - .holiday-highlight { - fill: $holiday-color; - } - - .arrow { - fill: none; - stroke: #9FA9B1; - stroke-width: 1; - } - - .bar-wrapper .bar { - fill: $bar-color; - stroke: $bar-stroke; - stroke-width: 0; - transition: stroke-width 0.3s ease; - } - - .bar-progress { - fill: $progress; - } - - .bar-expected-progress { - fill: $light-blue; - } - - .bar-invalid { - fill: transparent; - stroke: $bar-stroke; - stroke-width: 1; - stroke-dasharray: 5; - - &~.bar-label { - fill: $text-light; - } - } - - .bar-label { - fill: $text-dark; - dominant-baseline: central; - // text-anchor: middle; - font-family: Helvetica; - font-size: 13px; - font-weight: 400; - - &.big { - fill: $text-dark; - text-anchor: start; - } - } - - .bar-wrapper.important { - .bar { - fill: $bar-color-important; - } - - .bar-progress { - fill: $dark-blue; - } - - .bar-label { - fill: $text-light; - } - - .handle { - fill: $handle-color-important; - } - - .handle.progress { - fill: $text-light; - } - } - - - .handle { - fill: $handle-color; - cursor: ew-resize; - opacity: 0; - visibility: hidden; - transition: opacity 0.3s ease; - } - - .handle.progress { - fill: $text-muted; - } - - .bar-wrapper { - cursor: pointer; - outline: none; - - &.active { - & .handle { - visibility: visible; - opacity: 1; - } - } - - .bar { - -webkit-filter: drop-shadow(3px 3px 2px rgba(0, 0, 0, .7)); - filter: drop-shadow(0 0 2px rgba(17, 43, 66, .16)); - border-radius: 3px; - } - - - &:hover { - .bar { - transition: transform 0.3s ease; - } - - .date-highlight { - display: block; - } - } - } - - - .hide { - display: none; - } -} - -.gantt-container { - position: relative; - overflow: auto; - font-size: 12px; - height: 500px; - - .popup-wrapper { - position: absolute; - top: 0; - left: 0; - background: #171B1F; - padding: 10px; - border-radius: 5px; - width: max-content; - - &.hidden { - opacity: 0 !important; - } - - - .title { - margin-bottom: 5px; - text-align: -webkit-center; - text-align: center; - color: $text-light; - } - - .subtitle { - color: $text-grey; - } - - .pointer { - position: absolute; - height: 5px; - margin: 0 0 0 -5px; - border: 5px solid transparent; - border-bottom-color: rgba(0, 0, 0, 0.8); - } - } -} \ No newline at end of file diff --git a/src/index.js b/src/index.js index 379c2fb..9d8ddaf 100644 --- a/src/index.js +++ b/src/index.js @@ -1,1204 +1,1333 @@ -import date_utils from "./date_utils"; -import { $, createSVG } from "./svg_utils"; -import Bar from "./bar"; -import Arrow from "./arrow"; -import Popup from "./popup"; +import date_utils from './date_utils'; +import { $, createSVG } from './svg_utils'; +import Bar from './bar'; +import Arrow from './arrow'; +import Popup from './popup'; -import "./gantt.scss"; +import './gantt.css'; const VIEW_MODE = { - HOUR: "Hour", - QUARTER_DAY: "Quarter Day", - HALF_DAY: "Half Day", - DAY: "Day", - WEEK: "Week", - MONTH: "Month", - YEAR: "Year", + HOUR: 'Hour', + QUARTER_DAY: 'Quarter Day', + HALF_DAY: 'Half Day', + DAY: 'Day', + WEEK: 'Week', + MONTH: 'Month', + YEAR: 'Year', }; const VIEW_MODE_PADDING = { - HOUR: ["7d", "7d"], - QUARTER_DAY: ["7d", "7d"], - HALF_DAY: ["7d", "7d"], - DAY: ["1m", "1m"], - WEEK: ["1m", "1m"], - MONTH: ["1m", "1m"], - YEAR: ["2y", "2y"], + HOUR: ['7d', '7d'], + QUARTER_DAY: ['7d', '7d'], + HALF_DAY: ['7d', '7d'], + DAY: ['1m', '1m'], + WEEK: ['1m', '1m'], + MONTH: ['1m', '1m'], + YEAR: ['2y', '2y'], }; const DEFAULT_OPTIONS = { - header_height: 65, - column_width: 30, - step: 24, - view_modes: [...Object.values(VIEW_MODE)], - bar_height: 30, - bar_corner_radius: 3, - arrow_curve: 5, - padding: 18, - view_mode: "Day", - date_format: "YYYY-MM-DD", - popup_trigger: "click", - show_expected_progress: false, - popup: null, - language: "en", - readonly: false, - highlight_weekend: true, - scroll_to: 'start', - lines: 'both', - auto_move_label: true, - today_button: true, - view_mode_select: false, + header_height: 65, + column_width: 30, + view_modes: [...Object.values(VIEW_MODE)], + bar_height: 30, + bar_corner_radius: 3, + arrow_curve: 5, + padding: 18, + view_mode: 'Day', + date_format: 'YYYY-MM-DD', + show_expected_progress: false, + popup: null, + language: 'en', + readonly: false, + progress_readonly: false, + dates_readonly: false, + highlight_weekend: true, + scroll_to: 'start', + lines: 'both', + auto_move_label: true, + today_button: true, + view_mode_select: false, }; export default class Gantt { - constructor(wrapper, tasks, options) { - this.setup_wrapper(wrapper); - this.setup_options(options); - this.setup_tasks(tasks); - // initialize with default view mode - this.change_view_mode(); - this.bind_events(); - } - - setup_wrapper(element) { - let svg_element, wrapper_element; - - // CSS Selector is passed - if (typeof element === "string") { - element = document.querySelector(element); + constructor(wrapper, tasks, options) { + this.setup_wrapper(wrapper); + this.setup_options(options); + this.setup_tasks(tasks); + // initialize with default view mode + this.change_view_mode(); + this.bind_events(); } - // get the SVGElement - if (element instanceof HTMLElement) { - wrapper_element = element; - svg_element = element.querySelector("svg"); - } else if (element instanceof SVGElement) { - svg_element = element; - } else { - throw new TypeError( - "Frappé Gantt only supports usage of a string CSS selector," + - " HTML DOM element or SVG DOM element for the 'element' parameter", - ); - } + setup_wrapper(element) { + let svg_element, wrapper_element; - // svg element - if (!svg_element) { - // create it - this.$svg = createSVG("svg", { - append_to: wrapper_element, - class: "gantt", - }); - } else { - this.$svg = svg_element; - this.$svg.classList.add("gantt"); - } - - // wrapper element - this.$container = document.createElement("div"); - this.$container.classList.add("gantt-container"); - - const parent_element = this.$svg.parentElement; - parent_element.appendChild(this.$container); - this.$container.appendChild(this.$svg); - - // popup wrapper - this.$popup_wrapper = document.createElement("div"); - this.$popup_wrapper.classList.add("popup-wrapper"); - this.$container.appendChild(this.$popup_wrapper); - } - - setup_options(options) { - this.options = { ...DEFAULT_OPTIONS, ...options } - if (!options.view_mode_padding) options.view_mode_padding = {} - for (let [key, value] of Object.entries(options.view_mode_padding)) { - if (typeof value === "string") { - // Configure for single value given - options.view_mode_padding[key] = [value, value]; - } - } - - this.options.view_mode_padding = { - ...VIEW_MODE_PADDING, - ...options.view_mode_padding, - }; - } - - setup_tasks(tasks) { - // prepare tasks - this.tasks = tasks.map((task, i) => { - // convert to Date objects - task._start = date_utils.parse(task.start); - if (task.end === undefined && task.duration !== undefined) { - task.end = task._start; - let durations = task.duration.split(" "); - - durations.forEach((tmpDuration) => { - let { duration, scale } = date_utils.parse_duration(tmpDuration); - task.end = date_utils.add(task.end, duration, scale); - }); - } - task._end = date_utils.parse(task.end); - let diff = date_utils.diff(task._end, task._start, "year"); - if (diff < 0) { - throw Error("start of task can't be after end of task: in task #, " + (i + 1)) - } - // make task invalid if duration too large - if (date_utils.diff(task._end, task._start, "year") > 10) { - task.end = null; - } - - - // cache index - task._index = i; - - // invalid dates - if (!task.start && !task.end) { - const today = date_utils.today(); - task._start = today; - task._end = date_utils.add(today, 2, "day"); - } - - if (!task.start && task.end) { - task._start = date_utils.add(task._end, -2, "day"); - } - - if (task.start && !task.end) { - task._end = date_utils.add(task._start, 2, "day"); - } - - // if hours is not set, assume the last day is full day - // e.g: 2018-09-09 becomes 2018-09-09 23:59:59 - const task_end_values = date_utils.get_date_values(task._end); - if (task_end_values.slice(3).every((d) => d === 0)) { - task._end = date_utils.add(task._end, 24, "hour"); - } - - // invalid flag - if (!task.start || !task.end) { - task.invalid = true; - } - - // dependencies - if (typeof task.dependencies === "string" || !task.dependencies) { - let deps = []; - if (task.dependencies) { - deps = task.dependencies - .split(",") - .map((d) => d.trim().replaceAll(' ', '_')) - .filter((d) => d); + // CSS Selector is passed + if (typeof element === 'string') { + element = document.querySelector(element); } - task.dependencies = deps; - } - // uids - if (!task.id) { - task.id = generate_id(task); - } else if (typeof task.id === 'string') { - task.id = task.id.replaceAll(' ', '_') - } else { - task.id = `${task.id}` - } - - return task; - }); - - this.setup_dependencies(); - } - - setup_dependencies() { - this.dependency_map = {}; - for (let t of this.tasks) { - for (let d of t.dependencies) { - this.dependency_map[d] = this.dependency_map[d] || []; - this.dependency_map[d].push(t.id); - } - } - } - - refresh(tasks) { - this.setup_tasks(tasks); - this.change_view_mode(); - } - - change_view_mode(mode = this.options.view_mode) { - this.update_view_scale(mode); - this.setup_dates(); - this.render(); - // fire viewmode_change event - this.trigger_event("view_change", [mode]); - } - - update_view_scale(view_mode) { - this.options.view_mode = view_mode; - if (view_mode === VIEW_MODE.HOUR) { - this.options.step = 24 / 24; - this.options.column_width = 38; - } else if (view_mode === VIEW_MODE.DAY) { - this.options.step = 24; - this.options.column_width = 38; - } else if (view_mode === VIEW_MODE.HALF_DAY) { - this.options.step = 24 / 2; - this.options.column_width = 38; - } else if (view_mode === VIEW_MODE.QUARTER_DAY) { - this.options.step = 24 / 4; - this.options.column_width = 38; - } else if (view_mode === VIEW_MODE.WEEK) { - this.options.step = 24 * 7; - this.options.column_width = 140; - } else if (view_mode === VIEW_MODE.MONTH) { - this.options.step = 24 * 30; - this.options.column_width = 120; - } else if (view_mode === VIEW_MODE.YEAR) { - this.options.step = 24 * 365; - this.options.column_width = 120; - } - } - - setup_dates() { - this.setup_gantt_dates(); - this.setup_date_values(); - } - - setup_gantt_dates() { - this.gantt_start = this.gantt_end = null; - - for (let task of this.tasks) { - // set global start and end date - if (!this.gantt_start || task._start < this.gantt_start) { - this.gantt_start = task._start; - } - if (!this.gantt_end || task._end > this.gantt_end) { - this.gantt_end = task._end; - } - } - let gantt_start, gantt_end; - if (!this.gantt_start) gantt_start = new Date(); - else gantt_start = date_utils.start_of(this.gantt_start, "day"); - if (!this.gantt_end) gantt_end = new Date(); - else gantt_end = date_utils.start_of(this.gantt_end, "day"); - - // add date padding on both sides - let viewKey; - for (let [key, value] of Object.entries(VIEW_MODE)) { - if (value === this.options.view_mode) { - viewKey = key; - } - } - const [padding_start, padding_end] = this.options.view_mode_padding[ - viewKey - ].map(date_utils.parse_duration); - gantt_start = date_utils.add( - gantt_start, - -padding_start.duration, - padding_start.scale, - ); - - let format_string; - if (this.view_is(VIEW_MODE.YEAR)) { - format_string = "YYYY" - } else if (this.view_is(VIEW_MODE.MONTH)) { - format_string = "YYYY-MM" - } else if (this.view_is(VIEW_MODE.DAY)) { - format_string = "YYYY-MM-DD" - } else { - format_string = "YYYY-MM-DD HH" - } - this.gantt_start = date_utils.parse(date_utils.format(gantt_start, format_string)); - this.gantt_start.setHours(0, 0, 0, 0) - this.gantt_end = date_utils.add( - gantt_end, - padding_end.duration, - padding_end.scale, - ); - } - - setup_date_values() { - this.dates = []; - let cur_date = null; - - while (cur_date === null || cur_date < this.gantt_end) { - if (!cur_date) { - cur_date = date_utils.clone(this.gantt_start); - } else { - if (this.view_is(VIEW_MODE.YEAR)) { - cur_date = date_utils.add(cur_date, 1, "year"); - } else if (this.view_is(VIEW_MODE.MONTH)) { - cur_date = date_utils.add(cur_date, 1, "month"); + // get the SVGElement + if (element instanceof HTMLElement) { + wrapper_element = element; + svg_element = element.querySelector('svg'); + } else if (element instanceof SVGElement) { + svg_element = element; } else { - cur_date = date_utils.add(cur_date, this.options.step, "hour"); + throw new TypeError( + 'Frappe Gantt only supports usage of a string CSS selector,' + + " HTML DOM element or SVG DOM element for the 'element' parameter", + ); } - } - this.dates.push(cur_date); - } - } - bind_events() { - if (this.options.readonly) return - this.bind_grid_click(); - this.bind_bar_events(); - } - - render() { - this.clear(); - this.setup_layers(); - this.make_grid(); - this.make_dates(); - this.make_bars(); - this.make_grid_extras(); - this.make_arrows(); - this.map_arrows_on_bars(); - this.set_width(); - this.set_scroll_position(this.options.scroll_to); - } - - setup_layers() { - this.layers = {}; - const layers = ["grid", "arrow", "progress", "bar", "details"]; - // make group layers - for (let layer of layers) { - this.layers[layer] = createSVG("g", { - class: layer, - append_to: this.$svg, - }); - } - } - - make_grid() { - this.make_grid_background(); - this.make_grid_rows(); - this.make_grid_header(); - } - - make_grid_extras() { - this.make_grid_highlights(); - this.make_grid_ticks(); - } - - make_grid_background() { - const grid_width = this.dates.length * this.options.column_width; - const grid_height = - this.options.header_height + - this.options.padding + - (this.options.bar_height + this.options.padding) * this.tasks.length; - - createSVG("rect", { - x: 0, - y: 0, - width: grid_width, - height: grid_height, - class: "grid-background", - append_to: this.$svg, - }); - - $.attr(this.$svg, { - height: grid_height + this.options.padding + 100, - width: "100%", - }); - } - - make_grid_rows() { - const rows_layer = createSVG("g", { append_to: this.layers.grid }); - - const row_width = this.dates.length * this.options.column_width; - const row_height = this.options.bar_height + this.options.padding; - - let row_y = this.options.header_height + this.options.padding / 2; - - for (let _ of this.tasks) { - createSVG("rect", { - x: 0, - y: row_y, - width: row_width, - height: row_height, - class: "grid-row", - append_to: rows_layer, - }); - if (this.options.lines === 'both' || this.options.lines === 'horizontal') { - - } - - row_y += this.options.bar_height + this.options.padding; - } - } - - make_grid_header() { - const curHeader = document.querySelector('.grid-header') - - let $header = document.createElement("div"); - $header.style.height = this.options.header_height + 10 + "px"; - $header.style.width = this.dates.length * this.options.column_width + "px"; - $header.classList.add('grid-header') - this.$header = $header - this.$container.appendChild($header) - - let $upper_header = document.createElement("div"); - $upper_header.classList.add('upper-header') - this.$upper_header = $upper_header - this.$header.appendChild($upper_header) - - let $lower_header = document.createElement("div"); - $lower_header.classList.add('lower-header') - this.$lower_header = $lower_header - this.$header.appendChild($lower_header) - - this.make_side_header() - } - - make_side_header() { - let $side_header = document.createElement('div') - $side_header.classList.add('side-header') - - // Create view mode change select - if (this.options.view_mode_select) { - - const $select = document.createElement("select"); - $select.classList.add('viewmode-select') - - const $el = document.createElement("option"); - $el.selected = true - $el.disabled = true - $el.textContent = 'Mode' - $select.appendChild($el) - - for (const key in VIEW_MODE) { - const $option = document.createElement("option"); - $option.value = VIEW_MODE[key]; - $option.textContent = VIEW_MODE[key]; - $select.appendChild($option); - } - // $select.value = this.options.view_mode - $select.addEventListener("change", (function () { - this.change_view_mode($select.value) - }).bind(this)); - $side_header.appendChild($select) - } - - // Create today button - if (this.options.today_button) { - let $today_button = document.createElement('button') - $today_button.classList.add('today-button') - $today_button.textContent = 'Today' - $today_button.onclick = this.scroll_today.bind(this) - $side_header.appendChild($today_button) - } - - this.$header.appendChild($side_header) - const { left, y } = this.$header.getBoundingClientRect(); - const width = Math.min(this.$header.clientWidth, this.$container.clientWidth) - $side_header.style.left = left + this.$container.scrollLeft + width - $side_header.clientWidth + 'px'; - $side_header.style.top = y + 10 + 'px'; - } - - make_grid_ticks() { - if (!['both', 'vertical', 'horizontal'].includes(this.options.lines)) return - let tick_x = 0; - let tick_y = this.options.header_height + this.options.padding / 2; - let tick_height = - (this.options.bar_height + this.options.padding) * this.tasks.length; - - let $lines_layer = createSVG("g", { class: 'lines_layer', append_to: this.layers.grid }); - - - let row_y = this.options.header_height + this.options.padding / 2; - - const row_width = this.dates.length * this.options.column_width; - const row_height = this.options.bar_height + this.options.padding; - if (this.options.lines !== 'vertical') { - for (let _ of this.tasks) { - createSVG("line", { - x1: 0, - y1: row_y + row_height, - x2: row_width, - y2: row_y + row_height, - class: "row-line", - append_to: $lines_layer, - }); - row_y += row_height; - } - } - if (this.options.lines === 'horizontal') return; - for (let date of this.dates) { - let tick_class = "tick"; - // thick tick for monday - if (this.view_is(VIEW_MODE.DAY) && date.getDate() === 1) { - tick_class += " thick"; - } - // thick tick for first week - if ( - this.view_is(VIEW_MODE.WEEK) && - date.getDate() >= 1 && - date.getDate() < 8 - ) { - tick_class += " thick"; - } - // thick ticks for quarters - if (this.view_is(VIEW_MODE.MONTH) && date.getMonth() % 3 === 0) { - tick_class += " thick"; - } - - createSVG("path", { - d: `M ${tick_x} ${tick_y} v ${tick_height}`, - class: tick_class, - append_to: this.layers.grid, - }); - - if (this.view_is(VIEW_MODE.MONTH)) { - tick_x += - (date_utils.get_days_in_month(date) * this.options.column_width) / 30; - } else { - tick_x += this.options.column_width; - } - } - } - - highlightWeekends() { - if (!this.view_is('Day') && !this.view_is('Half Day')) return - for (let d = new Date(this.gantt_start); d <= this.gantt_end; d.setDate(d.getDate() + 1)) { - if (d.getDay() === 0 || d.getDay() === 6) { - const x = (date_utils.diff(d, this.gantt_start, 'hour') / - this.options.step) * - this.options.column_width; - const height = (this.options.bar_height + this.options.padding) * this.tasks.length; - createSVG('rect', { - x, - y: this.options.header_height + this.options.padding / 2, - width: (this.view_is('Day') ? 1 : 2) * this.options.column_width, - height, - class: 'holiday-highlight', - append_to: this.layers.grid, - }); - } - } - } - - //compute the horizontal x distance - computeGridHighlightDimensions(view_mode) { - let x = this.options.column_width / 2; - - if (this.view_is(VIEW_MODE.DAY)) { - let today = date_utils.today() - return { - x: x + - (date_utils.diff(today, this.gantt_start, "hour") / this.options.step) * - this.options.column_width, - date: today - } - } - - for (let date of this.dates) { - const todayDate = new Date(); - const startDate = new Date(date); - const endDate = new Date(date); - switch (view_mode) { - case VIEW_MODE.WEEK: - endDate.setDate(date.getDate() + 7); - break; - case VIEW_MODE.MONTH: - endDate.setMonth(date.getMonth() + 1); - break; - case VIEW_MODE.YEAR: - endDate.setFullYear(date.getFullYear() + 1); - break; - } - if (todayDate >= startDate && todayDate <= endDate) { - return { x, date: startDate } - } else { - x += this.options.column_width; - } - } - } - - make_grid_highlights() { - if (this.options.highlight_weekend) this.highlightWeekends() - // highlight today's | week's | month's | year's - if ( - this.view_is(VIEW_MODE.DAY) || - this.view_is(VIEW_MODE.WEEK) || - this.view_is(VIEW_MODE.MONTH) || - this.view_is(VIEW_MODE.YEAR) - ) { - // Used as we must find the _end_ of session if view is not Day - const { x: left, date } = this.computeGridHighlightDimensions(this.options.view_mode) - const top = this.options.header_height + this.options.padding / 2; - const height = (this.options.bar_height + this.options.padding) * this.tasks.length; - this.$current_highlight = this.create_el({ top, left, height, classes: 'current-highlight', append_to: this.$container }) - let $today = document.getElementById(date_utils.format(date).replaceAll(' ', '_')) - - $today.classList.add('current-date-highlight') - $today.style.top = +$today.style.top.slice(0, -2) - 4 + 'px' - $today.style.left = +$today.style.left.slice(0, -2) - 8 + 'px' - } - } - - create_el({ left, top, width, height, id, classes, append_to }) { - let $el = document.createElement("div"); - $el.classList.add(classes) - $el.style.top = top + 'px' - $el.style.left = left + 'px' - if (id) $el.id = id - if (width) $el.style.width = height + 'px' - if (height) $el.style.height = height + 'px' - append_to.appendChild($el) - return $el - } - - make_dates() { - this.upper_texts_x = {} - this.get_dates_to_draw().forEach((date, i) => { - let $lower_text = this.create_el({ - left: date.lower_x, - top: date.lower_y, - id: date.formatted_date, - classes: 'lower-text', - append_to: this.$lower_header - }) - $lower_text.innerText = date.lower_text - $lower_text.style.left = +$lower_text.style.left.slice(0, -2) - $lower_text.clientWidth / 2 + 'px' - - if (date.upper_text) { - this.upper_texts_x[date.upper_text] = date.upper_x - let $upper_text = document.createElement('div'); - $upper_text.classList.add('upper-text') - $upper_text.style.left = date.upper_x + 'px' - $upper_text.style.top = date.upper_y + 'px' - $upper_text.innerText = date.upper_text - this.$upper_header.appendChild($upper_text) - - // remove out-of-bound dates - if (date.upper_x > this.layers.grid.getBBox().width) { - $upper_text.remove(); + // svg element + if (!svg_element) { + // create it + this.$svg = createSVG('svg', { + append_to: wrapper_element, + class: 'gantt', + }); + } else { + this.$svg = svg_element; + this.$svg.classList.add('gantt'); } - } - }) - } - get_dates_to_draw() { - let last_date = null; - const dates = this.dates.map((date, i) => { - const d = this.get_date_info(date, last_date, i); - last_date = d; - return d; - }); - return dates; - } + // wrapper element + this.$container = document.createElement('div'); + this.$container.classList.add('gantt-container'); - get_date_info(date, last_date_info) { - let last_date = last_date_info ? last_date_info.date : date_utils.add(date, 1, "day") - const date_text = { - Hour_lower: date_utils.format(date, "HH", this.options.language), - "Quarter Day_lower": date_utils.format(date, "HH", this.options.language), - "Half Day_lower": date_utils.format(date, "HH", this.options.language), - Day_lower: - date.getDate() !== last_date.getDate() - ? date_utils.format(date, "D", this.options.language) - : "", - Week_lower: - date.getMonth() !== last_date.getMonth() - ? date_utils.format(date, "D MMM", this.options.language) - : date_utils.format(date, "D", this.options.language), - Month_lower: date_utils.format(date, "MMMM", this.options.language), - Year_lower: date_utils.format(date, "YYYY", this.options.language), - Hour_upper: - date.getDate() !== last_date.getDate() - ? date_utils.format(date, "D MMMM", this.options.language) - : "", - "Quarter Day_upper": - date.getDate() !== last_date.getDate() - ? date_utils.format(date, "D MMM", this.options.language) - : "", - "Half Day_upper": - date.getDate() !== last_date.getDate() - ? date.getMonth() !== last_date.getMonth() - ? date_utils.format(date, "D MMM", this.options.language) - : date_utils.format(date, "D", this.options.language) - : "", - Day_upper: - date.getMonth() !== last_date.getMonth() || !last_date_info - ? date_utils.format(date, "MMMM", this.options.language) - : "", - Week_upper: - date.getMonth() !== last_date.getMonth() - ? date_utils.format(date, "MMMM", this.options.language) - : "", - Month_upper: - date.getFullYear() !== last_date.getFullYear() - ? date_utils.format(date, "YYYY", this.options.language) - : "", - Year_upper: - date.getFullYear() !== last_date.getFullYear() - ? date_utils.format(date, "YYYY", this.options.language) - : "", - }; - let column_width = this.view_is(VIEW_MODE.MONTH) ? (date_utils.get_days_in_month(date) * this.options.column_width) / 30 : this.options.column_width; - const base_pos = { - x: last_date_info - ? last_date_info.base_pos_x + last_date_info.column_width - : 0, - lower_y: this.options.header_height - 20, - upper_y: this.options.header_height - 50, - }; - const x_pos = { - Hour_lower: column_width / 2, - Hour_upper: column_width * 12, - "Quarter Day_lower": column_width / 2, - "Quarter Day_upper": column_width * 2, - "Half Day_lower": column_width / 2, - "Half Day_upper": column_width, - Day_lower: column_width / 2, - Day_upper: column_width / 2, - Week_lower: column_width / 2, - Week_upper: (column_width * 4) / 2, - Month_lower: column_width / 2, - Month_upper: column_width / 2, - Year_lower: column_width / 2, - Year_upper: (column_width * 30) / 2, - }; - return { - date, - formatted_date: date_utils.format(date).replaceAll(' ', '_'), - column_width, - base_pos_x: base_pos.x, - upper_text: this.options.lower_text ? this.options.upper_text(date, this.options.view_mode, date_text[`${this.options.view_mode}_upper`]) : date_text[`${this.options.view_mode}_upper`], - lower_text: this.options.lower_text ? this.options.lower_text(date, this.options.view_mode, date_text[`${this.options.view_mode}_lower`]) : date_text[`${this.options.view_mode}_lower`], - upper_x: base_pos.x + x_pos[`${this.options.view_mode}_upper`], - upper_y: base_pos.upper_y, - lower_x: base_pos.x + x_pos[`${this.options.view_mode}_lower`], - lower_y: base_pos.lower_y, - }; - } + const parent_element = this.$svg.parentElement; + parent_element.appendChild(this.$container); + this.$container.appendChild(this.$svg); - make_bars() { - this.bars = this.tasks.map((task) => { - const bar = new Bar(this, task); - this.layers.bar.appendChild(bar.group); - return bar; - }); - } - - make_arrows() { - this.arrows = []; - for (let task of this.tasks) { - let arrows = []; - arrows = task.dependencies - .map((task_id) => { - const dependency = this.get_task(task_id); - if (!dependency) return; - const arrow = new Arrow( - this, - this.bars[dependency._index], // from_task - this.bars[task._index], // to_task - ); - this.layers.arrow.appendChild(arrow.element); - return arrow; - }) - .filter(Boolean); // filter falsy values - this.arrows = this.arrows.concat(arrows); + // popup wrapper + this.$popup_wrapper = document.createElement('div'); + this.$popup_wrapper.classList.add('popup-wrapper'); + this.$container.appendChild(this.$popup_wrapper); } - } - map_arrows_on_bars() { - for (let bar of this.bars) { - bar.arrows = this.arrows.filter((arrow) => { - return ( - arrow.from_task.task.id === bar.task.id || - arrow.to_task.task.id === bar.task.id + setup_options(options) { + this.options = { ...DEFAULT_OPTIONS, ...options }; + if (!options.view_mode_padding) options.view_mode_padding = {}; + for (let [key, value] of Object.entries(options.view_mode_padding)) { + if (typeof value === 'string') { + // Configure for single value given + options.view_mode_padding[key] = [value, value]; + } + } + + this.options.view_mode_padding = { + ...VIEW_MODE_PADDING, + ...options.view_mode_padding, + }; + } + + setup_tasks(tasks) { + // prepare tasks + this.tasks = tasks.map((task, i) => { + // convert to Date objects + task._start = date_utils.parse(task.start); + if (task.end === undefined && task.duration !== undefined) { + task.end = task._start; + let durations = task.duration.split(' '); + + durations.forEach((tmpDuration) => { + let { duration, scale } = + date_utils.parse_duration(tmpDuration); + task.end = date_utils.add(task.end, duration, scale); + }); + } + task._end = date_utils.parse(task.end); + let diff = date_utils.diff(task._end, task._start, 'year'); + if (diff < 0) { + throw Error( + "start of task can't be after end of task: in task #, " + + (i + 1), + ); + } + // make task invalid if duration too large + if (date_utils.diff(task._end, task._start, 'year') > 10) { + task.end = null; + } + + // cache index + task._index = i; + + // invalid dates + if (!task.start && !task.end) { + const today = date_utils.today(); + task._start = today; + task._end = date_utils.add(today, 2, 'day'); + } + + if (!task.start && task.end) { + task._start = date_utils.add(task._end, -2, 'day'); + } + + if (task.start && !task.end) { + task._end = date_utils.add(task._start, 2, 'day'); + } + + // if hours is not set, assume the last day is full day + // e.g: 2018-09-09 becomes 2018-09-09 23:59:59 + const task_end_values = date_utils.get_date_values(task._end); + if (task_end_values.slice(3).every((d) => d === 0)) { + task._end = date_utils.add(task._end, 24, 'hour'); + } + + // invalid flag + if (!task.start || !task.end) { + task.invalid = true; + } + + // dependencies + if (typeof task.dependencies === 'string' || !task.dependencies) { + let deps = []; + if (task.dependencies) { + deps = task.dependencies + .split(',') + .map((d) => d.trim().replaceAll(' ', '_')) + .filter((d) => d); + } + task.dependencies = deps; + } + + // uids + if (!task.id) { + task.id = generate_id(task); + } else if (typeof task.id === 'string') { + task.id = task.id.replaceAll(' ', '_'); + } else { + task.id = `${task.id}`; + } + + return task; + }); + + this.setup_dependencies(); + } + + setup_dependencies() { + this.dependency_map = {}; + for (let t of this.tasks) { + for (let d of t.dependencies) { + this.dependency_map[d] = this.dependency_map[d] || []; + this.dependency_map[d].push(t.id); + } + } + } + + refresh(tasks) { + this.setup_tasks(tasks); + this.change_view_mode(); + } + + change_view_mode(mode = this.options.view_mode) { + this.update_view_scale(mode); + this.setup_dates(); + this.render(); + // fire viewmode_change event + this.trigger_event('view_change', [mode]); + } + + update_view_scale(view_mode) { + this.options.view_mode = view_mode; + if (view_mode === VIEW_MODE.HOUR) { + this.options.step = 24 / 24; + this.options.column_width = 38; + } else if (view_mode === VIEW_MODE.DAY) { + this.options.step = 24; + this.options.column_width = 38; + } else if (view_mode === VIEW_MODE.HALF_DAY) { + this.options.step = 24 / 2; + this.options.column_width = 38; + } else if (view_mode === VIEW_MODE.QUARTER_DAY) { + this.options.step = 24 / 4; + this.options.column_width = 38; + } else if (view_mode === VIEW_MODE.WEEK) { + this.options.step = 24 * 7; + this.options.column_width = 140; + } else if (view_mode === VIEW_MODE.MONTH) { + this.options.step = 24 * 30; + this.options.column_width = 120; + } else if (view_mode === VIEW_MODE.YEAR) { + this.options.step = 24 * 365; + this.options.column_width = 120; + } + } + + setup_dates() { + this.setup_gantt_dates(); + this.setup_date_values(); + } + + setup_gantt_dates() { + this.gantt_start = this.gantt_end = null; + + for (let task of this.tasks) { + // set global start and end date + if (!this.gantt_start || task._start < this.gantt_start) { + this.gantt_start = task._start; + } + if (!this.gantt_end || task._end > this.gantt_end) { + this.gantt_end = task._end; + } + } + let gantt_start, gantt_end; + if (!this.gantt_start) gantt_start = new Date(); + else gantt_start = date_utils.start_of(this.gantt_start, 'day'); + if (!this.gantt_end) gantt_end = new Date(); + else gantt_end = date_utils.start_of(this.gantt_end, 'day'); + + // add date padding on both sides + let viewKey; + for (let [key, value] of Object.entries(VIEW_MODE)) { + if (value === this.options.view_mode) { + viewKey = key; + } + } + const [padding_start, padding_end] = this.options.view_mode_padding[ + viewKey + ].map(date_utils.parse_duration); + gantt_start = date_utils.add( + gantt_start, + -padding_start.duration, + padding_start.scale, ); - }); - } - } - set_width() { - const cur_width = this.$svg.getBoundingClientRect().width; - const actual_width = this.$svg.querySelector('.grid .grid-row') ? this.$svg - .querySelector('.grid .grid-row') - .getAttribute('width') : 0; - if (cur_width < actual_width) { - this.$svg.setAttribute("width", actual_width); - } - } - - set_scroll_position(date) { - if (!date || date === 'start') { - date = this.gantt_start - } else if (date === 'today') { - return this.scroll_today() - } else if (typeof date === 'string') { - date = date_utils.parse(date) + let format_string; + if (this.view_is(VIEW_MODE.YEAR)) { + format_string = 'YYYY'; + } else if (this.view_is(VIEW_MODE.MONTH)) { + format_string = 'YYYY-MM'; + } else if (this.view_is(VIEW_MODE.DAY)) { + format_string = 'YYYY-MM-DD'; + } else { + format_string = 'YYYY-MM-DD HH'; + } + this.gantt_start = date_utils.parse( + date_utils.format(gantt_start, format_string), + ); + this.gantt_start.setHours(0, 0, 0, 0); + this.gantt_end = date_utils.add( + gantt_end, + padding_end.duration, + padding_end.scale, + ); } - const parent_element = this.$svg.parentElement; - if (!parent_element) return; + setup_date_values() { + this.dates = []; + let cur_date = null; - const hours_before_first_task = date_utils.diff( - date, - this.gantt_start, - "hour", - ) + 24; - - const scroll_pos = - (hours_before_first_task / this.options.step) * - this.options.column_width - - this.options.column_width; - parent_element.scrollTo({ left: scroll_pos, behavior: 'smooth' }) - } - - scroll_today() { - this.set_scroll_position(new Date()) - } - - bind_grid_click() { - $.on( - this.$svg, - this.options.popup_trigger, - ".grid-row, .grid-header", - () => { - this.unselect_all(); - this.hide_popup(); - }, - ); - } - - bind_bar_events() { - let is_dragging = false; - let x_on_start = 0; - let x_on_scroll_start = 0; - let y_on_start = 0; - let is_resizing_left = false; - let is_resizing_right = false; - let parent_bar_id = null; - let bars = []; // instanceof Bar - this.bar_being_dragged = null; - - function action_in_progress() { - return is_dragging || is_resizing_left || is_resizing_right; + while (cur_date === null || cur_date < this.gantt_end) { + if (!cur_date) { + cur_date = date_utils.clone(this.gantt_start); + } else { + if (this.view_is(VIEW_MODE.YEAR)) { + cur_date = date_utils.add(cur_date, 1, 'year'); + } else if (this.view_is(VIEW_MODE.MONTH)) { + cur_date = date_utils.add(cur_date, 1, 'month'); + } else { + cur_date = date_utils.add( + cur_date, + this.options.step, + 'hour', + ); + } + } + this.dates.push(cur_date); + } } - $.on(this.$svg, "mousedown", ".bar-wrapper, .handle", (e, element) => { - const bar_wrapper = $.closest(".bar-wrapper", element); - bars.forEach((bar) => bar.group.classList.remove("active")); + bind_events() { + if (this.options.readonly) return; + this.bind_grid_click(); + this.bind_bar_events(); + } - if (element.classList.contains("left")) { - is_resizing_left = true; - } else if (element.classList.contains("right")) { - is_resizing_right = true; - } else if (element.classList.contains("bar-wrapper")) { - is_dragging = true; - } + render() { + this.clear(); + this.setup_layers(); + this.make_grid(); + this.make_dates(); + this.make_bars(); + this.make_grid_extras(); + this.make_arrows(); + this.map_arrows_on_bars(); + this.set_width(); + this.set_scroll_position(this.options.scroll_to); + this.update_button_position(); + } - bar_wrapper.classList.add("active"); - this.popup.parent.classList.add('hidden') + setup_layers() { + this.layers = {}; + const layers = ['grid', 'arrow', 'progress', 'bar', 'details']; + // make group layers + for (let layer of layers) { + this.layers[layer] = createSVG('g', { + class: layer, + append_to: this.$svg, + }); + } + } - x_on_start = e.offsetX; - y_on_start = e.offsetY; + make_grid() { + this.make_grid_background(); + this.make_grid_rows(); + this.make_grid_header(); + } - parent_bar_id = bar_wrapper.getAttribute("data-id"); - const ids = [ - parent_bar_id, - ...this.get_all_dependent_tasks(parent_bar_id), - ]; - bars = ids.map((id) => this.get_bar(id)); + make_grid_extras() { + this.make_grid_highlights(); + this.make_grid_ticks(); + } - this.bar_being_dragged = parent_bar_id; + make_grid_background() { + const grid_width = this.dates.length * this.options.column_width; + const grid_height = + this.options.header_height + + this.options.padding + + (this.options.bar_height + this.options.padding) * + this.tasks.length; - bars.forEach((bar) => { - const $bar = bar.$bar; - $bar.ox = $bar.getX(); - $bar.oy = $bar.getY(); - $bar.owidth = $bar.getWidth(); - $bar.finaldx = 0; - }); - }); - $.on(this.$container, 'scroll', e => { - let elements = document.querySelectorAll('.bar-wrapper'); - let localBars = []; - const ids = []; - let dx; - if (x_on_scroll_start) { - dx = e.currentTarget.scrollLeft - x_on_scroll_start; - } + createSVG('rect', { + x: 0, + y: 0, + width: grid_width, + height: grid_height, + class: 'grid-background', + append_to: this.$svg, + }); - const daysSinceStart = e.currentTarget.scrollLeft / this.options.column_width * this.options.step / 24; - let format_str = "D MMM" - if (["Year", "Month"].includes(this.options.view_mode)) format_str = 'YYYY' - else if (["Day", "Week"].includes(this.options.view_mode)) format_str = 'MMMM' - else if (this.view_is('Half Day')) format_str = 'D' - else if (this.view_is('Hour')) format_str = "D MMMM" + $.attr(this.$svg, { + height: grid_height + this.options.padding + 100, + width: '100%', + }); + } + make_grid_rows() { + const rows_layer = createSVG('g', { append_to: this.layers.grid }); - let currentUpper = date_utils.format( - date_utils.add(this.gantt_start, daysSinceStart, 'day'), - format_str - ); - const upperTexts = Array.from(document.querySelectorAll('.upper-text')); - const $el = upperTexts.find(el => el.textContent === currentUpper) - if ($el && !$el.classList.contains('current-upper')) { - const $current = document.querySelector('.current-upper') - if ($current) { - $current.classList.remove('current-upper') - $current.style.left = this.upper_texts_x[$current.textContent] + 'px'; - $current.style.top = this.options.header_height - 50 + 'px'; + const row_width = this.dates.length * this.options.column_width; + const row_height = this.options.bar_height + this.options.padding; + + let row_y = this.options.header_height + this.options.padding / 2; + + for (let _ of this.tasks) { + createSVG('rect', { + x: 0, + y: row_y, + width: row_width, + height: row_height, + class: 'grid-row', + append_to: rows_layer, + }); + if ( + this.options.lines === 'both' || + this.options.lines === 'horizontal' + ) { + } + + row_y += this.options.bar_height + this.options.padding; + } + } + + make_grid_header() { + let $header = document.createElement('div'); + $header.style.height = this.options.header_height + 10 + 'px'; + $header.style.width = + this.dates.length * this.options.column_width + 'px'; + $header.classList.add('grid-header'); + this.$header = $header; + this.$container.appendChild($header); + + let $upper_header = document.createElement('div'); + $upper_header.classList.add('upper-header'); + this.$upper_header = $upper_header; + this.$header.appendChild($upper_header); + + let $lower_header = document.createElement('div'); + $lower_header.classList.add('lower-header'); + this.$lower_header = $lower_header; + this.$header.appendChild($lower_header); + + this.make_side_header(); + } + + make_side_header() { + let $side_header = document.createElement('div'); + $side_header.classList.add('side-header'); + + // Create view mode change select + if (this.options.view_mode_select) { + const $select = document.createElement('select'); + $select.classList.add('viewmode-select'); + + const $el = document.createElement('option'); + $el.selected = true; + $el.disabled = true; + $el.textContent = 'Mode'; + $select.appendChild($el); + + for (const key in VIEW_MODE) { + const $option = document.createElement('option'); + $option.value = VIEW_MODE[key]; + $option.textContent = VIEW_MODE[key]; + $select.appendChild($option); + } + // $select.value = this.options.view_mode + $select.addEventListener( + 'change', + function () { + this.change_view_mode($select.value); + }.bind(this), + ); + $side_header.appendChild($select); } - $el.classList.add('current-upper') - let dimensions = this.$svg.getBoundingClientRect() - $el.style.left = dimensions.x + this.$container.scrollLeft + 10 + 'px'; - $el.style.top = dimensions.y + this.options.header_height - 50 + 'px'; - } - - Array.prototype.forEach.call(elements, function (el, i) { - ids.push(el.getAttribute('data-id')); - }); - - if (dx) { - localBars = ids.map(id => this.get_bar(id)); - if (this.options.auto_move_label) { - localBars.forEach(bar => { - bar.update_label_position_on_horizontal_scroll({ x: dx, sx: e.currentTarget.scrollLeft }); - }); + // Create today button + if (this.options.today_button) { + let $today_button = document.createElement('button'); + $today_button.classList.add('today-button'); + $today_button.textContent = 'Today'; + $today_button.onclick = this.scroll_today.bind(this); + $side_header.appendChild($today_button); + this.$today_button = $today_button; } - } - x_on_scroll_start = e.currentTarget.scrollLeft; - }); + this.$header.appendChild($side_header); + this.$side_header = $side_header; - $.on(this.$svg, "mousemove", (e) => { - if (!action_in_progress()) return; - const dx = e.offsetX - x_on_start; - const dy = e.offsetY - y_on_start; + window.addEventListener( + 'scroll', + this.update_button_position.bind(this), + ); + window.addEventListener( + 'resize', + this.update_button_position.bind(this), + ); + } - bars.forEach((bar) => { - const $bar = bar.$bar; - $bar.finaldx = this.get_snap_position(dx); - this.hide_popup(); - if (is_resizing_left) { - if (parent_bar_id === bar.task.id) { - bar.update_bar_position({ - x: $bar.ox + $bar.finaldx, - width: $bar.owidth - $bar.finaldx, - }); - } else { - bar.update_bar_position({ - x: $bar.ox + $bar.finaldx, - }); - } - } else if (is_resizing_right) { - if (parent_bar_id === bar.task.id) { - bar.update_bar_position({ - width: $bar.owidth + $bar.finaldx, - }); - } - } else if (is_dragging && !this.options.readonly) { - bar.update_bar_position({ x: $bar.ox + $bar.finaldx }); + update_button_position() { + const containerRect = this.$container.getBoundingClientRect(); + const buttonRect = this.$side_header.getBoundingClientRect(); + const { left, y } = this.$header.getBoundingClientRect(); + + // Check if the button is scrolled out of the container vertically + console.log('heyy'); + if ( + buttonRect.top < containerRect.top || + buttonRect.bottom > containerRect.bottom + ) { + this.$side_header.style.position = 'absolute'; + this.$side_header.style.top = `${containerRect.scrollTop + buttonRect.top}px`; + } else { + this.$side_header.style.position = 'fixed'; + this.$side_header.style.top = y + 10 + 'px'; } - }); - }); + const width = Math.min( + this.$header.clientWidth, + this.$container.clientWidth, + ); - document.addEventListener("mouseup", (e) => { + this.$side_header.style.left = + left + + this.$container.scrollLeft + + width - + this.$side_header.clientWidth + + 'px'; - is_dragging = false; - is_resizing_left = false; - is_resizing_right = false; - }); - - $.on(this.$svg, "mouseup", (e) => { - this.bar_being_dragged = null; - bars.forEach((bar) => { - const $bar = bar.$bar; - if (!$bar.finaldx) return; - bar.date_changed(); - bar.set_action_completed(); - }); - }); - - this.bind_bar_progress(); - } - - bind_bar_progress() { - let x_on_start = 0; - let y_on_start = 0; - let is_resizing = null; - let bar = null; - let $bar_progress = null; - let $bar = null; - - $.on(this.$svg, "mousedown", ".handle.progress", (e, handle) => { - is_resizing = true; - x_on_start = e.offsetX; - y_on_start = e.offsetY; - - const $bar_wrapper = $.closest(".bar-wrapper", handle); - const id = $bar_wrapper.getAttribute("data-id"); - bar = this.get_bar(id); - - $bar_progress = bar.$bar_progress; - $bar = bar.$bar; - - $bar_progress.finaldx = 0; - $bar_progress.owidth = $bar_progress.getWidth(); - $bar_progress.min_dx = -$bar_progress.getWidth(); - $bar_progress.max_dx = $bar.getWidth() - $bar_progress.getWidth(); - }); - - $.on(this.$svg, "mousemove", (e) => { - if (!is_resizing) return; - let dx = e.offsetX - x_on_start; - let dy = e.offsetY - y_on_start; - - if (dx > $bar_progress.max_dx) { - dx = $bar_progress.max_dx; - } - if (dx < $bar_progress.min_dx) { - dx = $bar_progress.min_dx; - } - - const $handle = bar.$handle_progress; - $.attr($bar_progress, "width", $bar_progress.owidth + dx); - $.attr($handle, "points", bar.get_progress_polygon_points()); - $bar_progress.finaldx = dx; - }); - - $.on(this.$svg, "mouseup", () => { - is_resizing = false; - if (!($bar_progress && $bar_progress.finaldx)) return; - - $bar_progress.finaldx = 0; - bar.progress_changed(); - bar.set_action_completed(); - bar = null; - $bar_progress = null; - $bar = null; - }); - } - - get_all_dependent_tasks(task_id) { - let out = []; - let to_process = [task_id]; - while (to_process.length) { - const deps = to_process.reduce((acc, curr) => { - acc = acc.concat(this.dependency_map[curr]); - return acc; - }, []); - - out = out.concat(deps); - to_process = deps.filter((d) => !to_process.includes(d)); + // Update the left value on page resize + this.$today_button.style.left = `${containerRect.left + 20}px`; } - return out.filter(Boolean); - } + make_grid_ticks() { + if (!['both', 'vertical', 'horizontal'].includes(this.options.lines)) + return; + let tick_x = 0; + let tick_y = this.options.header_height + this.options.padding / 2; + let tick_height = + (this.options.bar_height + this.options.padding) * + this.tasks.length; - get_snap_position(dx) { - let odx = dx, - rem, - position; + let $lines_layer = createSVG('g', { + class: 'lines_layer', + append_to: this.layers.grid, + }); - if (this.view_is(VIEW_MODE.WEEK)) { - rem = dx % (this.options.column_width / 7); - position = - odx - - rem + - (rem < this.options.column_width / 14 - ? 0 - : this.options.column_width / 7); - } else if (this.view_is(VIEW_MODE.MONTH)) { - rem = dx % (this.options.column_width / 30); - position = - odx - - rem + - (rem < this.options.column_width / 60 - ? 0 - : this.options.column_width / 30); - } else { - rem = dx % this.options.column_width; - position = - odx - - rem + - (rem < this.options.column_width / 2 ? 0 : this.options.column_width); - } - return position; - } + let row_y = this.options.header_height + this.options.padding / 2; - unselect_all() { - [...this.$svg.querySelectorAll(".bar-wrapper")].forEach((el) => { - el.classList.remove("active"); - }); - this.popup.parent.classList.remove('hidden') - } + const row_width = this.dates.length * this.options.column_width; + const row_height = this.options.bar_height + this.options.padding; + if (this.options.lines !== 'vertical') { + for (let _ of this.tasks) { + createSVG('line', { + x1: 0, + y1: row_y + row_height, + x2: row_width, + y2: row_y + row_height, + class: 'row-line', + append_to: $lines_layer, + }); + row_y += row_height; + } + } + if (this.options.lines === 'horizontal') return; + for (let date of this.dates) { + let tick_class = 'tick'; + // thick tick for monday + if (this.view_is(VIEW_MODE.DAY) && date.getDate() === 1) { + tick_class += ' thick'; + } + // thick tick for first week + if ( + this.view_is(VIEW_MODE.WEEK) && + date.getDate() >= 1 && + date.getDate() < 8 + ) { + tick_class += ' thick'; + } + // thick ticks for quarters + if (this.view_is(VIEW_MODE.MONTH) && date.getMonth() % 3 === 0) { + tick_class += ' thick'; + } - view_is(modes) { - if (typeof modes === "string") { - return this.options.view_mode === modes; + createSVG('path', { + d: `M ${tick_x} ${tick_y} v ${tick_height}`, + class: tick_class, + append_to: this.layers.grid, + }); + + if (this.view_is(VIEW_MODE.MONTH)) { + tick_x += + (date_utils.get_days_in_month(date) * + this.options.column_width) / + 30; + } else { + tick_x += this.options.column_width; + } + } } - if (Array.isArray(modes)) { - return modes.some((mode) => this.options.view_mode === mode); + highlightWeekends() { + if (!this.view_is('Day') && !this.view_is('Half Day')) return; + for ( + let d = new Date(this.gantt_start); + d <= this.gantt_end; + d.setDate(d.getDate() + 1) + ) { + if (d.getDay() === 0 || d.getDay() === 6) { + const x = + (date_utils.diff(d, this.gantt_start, 'hour') / + this.options.step) * + this.options.column_width; + const height = + (this.options.bar_height + this.options.padding) * + this.tasks.length; + createSVG('rect', { + x, + y: this.options.header_height + this.options.padding / 2, + width: + (this.view_is('Day') ? 1 : 2) * + this.options.column_width, + height, + class: 'holiday-highlight', + append_to: this.layers.grid, + }); + } + } } - return false; - } + //compute the horizontal x distance + computeGridHighlightDimensions(view_mode) { + let x = this.options.column_width / 2; - get_task(id) { - return this.tasks.find((task) => { - return task.id === id; - }); - } + if (this.view_is(VIEW_MODE.DAY)) { + let today = date_utils.today(); + return { + x: + x + + (date_utils.diff(today, this.gantt_start, 'hour') / + this.options.step) * + this.options.column_width, + date: today, + }; + } - get_bar(id) { - return this.bars.find((bar) => { - return bar.task.id === id; - }); - } - - show_popup(options) { - if (this.options.popup === false) return - if (!this.popup) { - this.popup = new Popup( - this.$popup_wrapper, - this.options.popup, - ); + for (let date of this.dates) { + const todayDate = new Date(); + const startDate = new Date(date); + const endDate = new Date(date); + switch (view_mode) { + case VIEW_MODE.WEEK: + endDate.setDate(date.getDate() + 7); + break; + case VIEW_MODE.MONTH: + endDate.setMonth(date.getMonth() + 1); + break; + case VIEW_MODE.YEAR: + endDate.setFullYear(date.getFullYear() + 1); + break; + } + if (todayDate >= startDate && todayDate <= endDate) { + return { x, date: startDate }; + } else { + x += this.options.column_width; + } + } } - this.popup.show(options); - } - hide_popup() { - this.popup && this.popup.hide(); - } - - trigger_event(event, args) { - if (this.options["on_" + event]) { - this.options["on_" + event].apply(null, args); + make_grid_highlights() { + if (this.options.highlight_weekend) this.highlightWeekends(); + // highlight today's | week's | month's | year's + if ( + this.view_is(VIEW_MODE.DAY) || + this.view_is(VIEW_MODE.WEEK) || + this.view_is(VIEW_MODE.MONTH) || + this.view_is(VIEW_MODE.YEAR) + ) { + // Used as we must find the _end_ of session if view is not Day + const { x: left, date } = this.computeGridHighlightDimensions( + this.options.view_mode, + ); + if (!this.dates.find((d) => d.getTime() == date.getTime())) return; + const top = this.options.header_height + this.options.padding / 2; + const height = + (this.options.bar_height + this.options.padding) * + this.tasks.length; + this.$current_highlight = this.create_el({ + top, + left, + height, + classes: 'current-highlight', + append_to: this.$container, + }); + let $today = document.getElementById( + date_utils.format(date).replaceAll(' ', '_'), + ); + if ($today) { + $today.classList.add('current-date-highlight'); + $today.style.top = +$today.style.top.slice(0, -2) - 4 + 'px'; + $today.style.left = +$today.style.left.slice(0, -2) - 8 + 'px'; + } + } } - } - /** - * Gets the oldest starting date from the list of tasks - * - * @returns Date - * @memberof Gantt - */ - get_oldest_starting_date() { - if (!this.tasks.length) return new Date() - return this.tasks - .map((task) => task._start) - .reduce((prev_date, cur_date) => - cur_date <= prev_date ? cur_date : prev_date, - ); - } + create_el({ left, top, width, height, id, classes, append_to }) { + let $el = document.createElement('div'); + $el.classList.add(classes); + $el.style.top = top + 'px'; + $el.style.left = left + 'px'; + if (id) $el.id = id; + if (width) $el.style.width = height + 'px'; + if (height) $el.style.height = height + 'px'; + append_to.appendChild($el); + return $el; + } - /** - * Clear all elements from the parent svg element - * - * @memberof Gantt - */ - clear() { - this.$svg.innerHTML = ""; - this.$header?.remove?.() - this.$current_highlight?.remove?.() - this.popup?.hide?.() - } + make_dates() { + this.upper_texts_x = {}; + this.get_dates_to_draw().forEach((date, i) => { + let $lower_text = this.create_el({ + left: date.lower_x, + top: date.lower_y, + id: date.formatted_date, + classes: 'lower-text', + append_to: this.$lower_header, + }); + $lower_text.innerText = date.lower_text; + $lower_text.style.left = + +$lower_text.style.left.slice(0, -2) - + $lower_text.clientWidth / 2 + + 'px'; + + if (date.upper_text) { + this.upper_texts_x[date.upper_text] = date.upper_x; + let $upper_text = document.createElement('div'); + $upper_text.classList.add('upper-text'); + $upper_text.style.left = date.upper_x + 'px'; + $upper_text.style.top = date.upper_y + 'px'; + $upper_text.innerText = date.upper_text; + this.$upper_header.appendChild($upper_text); + + // remove out-of-bound dates + if (date.upper_x > this.layers.grid.getBBox().width) { + $upper_text.remove(); + } + } + }); + } + + get_dates_to_draw() { + let last_date = null; + const dates = this.dates.map((date, i) => { + const d = this.get_date_info(date, last_date, i); + last_date = d; + return d; + }); + return dates; + } + + get_date_info(date, last_date_info) { + let last_date = last_date_info + ? last_date_info.date + : date_utils.add(date, 1, 'day'); + const date_text = { + Hour_lower: date_utils.format(date, 'HH', this.options.language), + 'Quarter Day_lower': date_utils.format( + date, + 'HH', + this.options.language, + ), + 'Half Day_lower': date_utils.format( + date, + 'HH', + this.options.language, + ), + Day_lower: + date.getDate() !== last_date.getDate() + ? date_utils.format(date, 'D', this.options.language) + : '', + Week_lower: + date.getMonth() !== last_date.getMonth() + ? date_utils.format(date, 'D MMM', this.options.language) + : date_utils.format(date, 'D', this.options.language), + Month_lower: date_utils.format(date, 'MMMM', this.options.language), + Year_lower: date_utils.format(date, 'YYYY', this.options.language), + Hour_upper: + date.getDate() !== last_date.getDate() + ? date_utils.format(date, 'D MMMM', this.options.language) + : '', + 'Quarter Day_upper': + date.getDate() !== last_date.getDate() + ? date_utils.format(date, 'D MMM', this.options.language) + : '', + 'Half Day_upper': + date.getDate() !== last_date.getDate() + ? date.getMonth() !== last_date.getMonth() + ? date_utils.format( + date, + 'D MMM', + this.options.language, + ) + : date_utils.format(date, 'D', this.options.language) + : '', + Day_upper: + date.getMonth() !== last_date.getMonth() || !last_date_info + ? date_utils.format(date, 'MMMM', this.options.language) + : '', + Week_upper: + date.getMonth() !== last_date.getMonth() + ? date_utils.format(date, 'MMMM', this.options.language) + : '', + Month_upper: + date.getFullYear() !== last_date.getFullYear() + ? date_utils.format(date, 'YYYY', this.options.language) + : '', + Year_upper: + date.getFullYear() !== last_date.getFullYear() + ? date_utils.format(date, 'YYYY', this.options.language) + : '', + }; + let column_width = this.view_is(VIEW_MODE.MONTH) + ? (date_utils.get_days_in_month(date) * this.options.column_width) / + 30 + : this.options.column_width; + const base_pos = { + x: last_date_info + ? last_date_info.base_pos_x + last_date_info.column_width + : 0, + lower_y: this.options.header_height - 20, + upper_y: this.options.header_height - 50, + }; + const x_pos = { + Hour_lower: column_width / 2, + Hour_upper: column_width * 12, + 'Quarter Day_lower': column_width / 2, + 'Quarter Day_upper': column_width * 2, + 'Half Day_lower': column_width / 2, + 'Half Day_upper': column_width, + Day_lower: column_width / 2, + Day_upper: column_width / 2, + Week_lower: column_width / 2, + Week_upper: (column_width * 4) / 2, + Month_lower: column_width / 2, + Month_upper: column_width / 2, + Year_lower: column_width / 2, + Year_upper: (column_width * 30) / 2, + }; + return { + date, + formatted_date: date_utils.format(date).replaceAll(' ', '_'), + column_width, + base_pos_x: base_pos.x, + upper_text: this.options.lower_text + ? this.options.upper_text( + date, + this.options.view_mode, + date_text[`${this.options.view_mode}_upper`], + ) + : date_text[`${this.options.view_mode}_upper`], + lower_text: this.options.lower_text + ? this.options.lower_text( + date, + this.options.view_mode, + date_text[`${this.options.view_mode}_lower`], + ) + : date_text[`${this.options.view_mode}_lower`], + upper_x: base_pos.x + x_pos[`${this.options.view_mode}_upper`], + upper_y: base_pos.upper_y, + lower_x: base_pos.x + x_pos[`${this.options.view_mode}_lower`], + lower_y: base_pos.lower_y, + }; + } + + make_bars() { + this.bars = this.tasks.map((task) => { + const bar = new Bar(this, task); + this.layers.bar.appendChild(bar.group); + return bar; + }); + } + + make_arrows() { + this.arrows = []; + for (let task of this.tasks) { + let arrows = []; + arrows = task.dependencies + .map((task_id) => { + const dependency = this.get_task(task_id); + if (!dependency) return; + const arrow = new Arrow( + this, + this.bars[dependency._index], // from_task + this.bars[task._index], // to_task + ); + this.layers.arrow.appendChild(arrow.element); + return arrow; + }) + .filter(Boolean); // filter falsy values + this.arrows = this.arrows.concat(arrows); + } + } + + map_arrows_on_bars() { + for (let bar of this.bars) { + bar.arrows = this.arrows.filter((arrow) => { + return ( + arrow.from_task.task.id === bar.task.id || + arrow.to_task.task.id === bar.task.id + ); + }); + } + } + + set_width() { + const cur_width = this.$svg.getBoundingClientRect().width; + const actual_width = this.$svg.querySelector('.grid .grid-row') + ? this.$svg.querySelector('.grid .grid-row').getAttribute('width') + : 0; + if (cur_width < actual_width) { + this.$svg.setAttribute('width', actual_width); + } + } + + set_scroll_position(date) { + if (!date || date === 'start') { + date = this.gantt_start; + } else if (date === 'today') { + return this.scroll_today(); + } else if (typeof date === 'string') { + date = date_utils.parse(date); + } + + const parent_element = this.$svg.parentElement; + if (!parent_element) return; + + const hours_before_first_task = + date_utils.diff(date, this.gantt_start, 'hour') + 24; + + const scroll_pos = + (hours_before_first_task / this.options.step) * + this.options.column_width - + this.options.column_width; + parent_element.scrollTo({ left: scroll_pos, behavior: 'smooth' }); + } + + scroll_today() { + this.set_scroll_position(new Date()); + } + + bind_grid_click() { + $.on(this.$svg, 'click', '.grid-row, .grid-header', () => { + this.unselect_all(); + this.hide_popup(); + }); + } + + bind_bar_events() { + let is_dragging = false; + let x_on_start = 0; + let x_on_scroll_start = 0; + let y_on_start = 0; + let is_resizing_left = false; + let is_resizing_right = false; + let parent_bar_id = null; + let bars = []; // instanceof Bar + this.bar_being_dragged = null; + + function action_in_progress() { + return is_dragging || is_resizing_left || is_resizing_right; + } + + this.$svg.onclick = (e) => { + if (e.target.classList.contains('grid-row')) this.unselect_all(); + }; + + $.on(this.$svg, 'mousedown', '.bar-wrapper, .handle', (e, element) => { + const bar_wrapper = $.closest('.bar-wrapper', element); + bars.forEach((bar) => bar.group.classList.remove('active')); + + if (element.classList.contains('left')) { + is_resizing_left = true; + } else if (element.classList.contains('right')) { + is_resizing_right = true; + } else if (element.classList.contains('bar-wrapper')) { + is_dragging = true; + } + + bar_wrapper.classList.add('active'); + if (this.popup) this.popup.parent.classList.add('hidden'); + + if (this.popup) this.popup.parent.classList.add('hidden'); + + x_on_start = e.offsetX || e.layerX; + y_on_start = e.offsetY || e.layerY; + + parent_bar_id = bar_wrapper.getAttribute('data-id'); + const ids = [ + parent_bar_id, + ...this.get_all_dependent_tasks(parent_bar_id), + ]; + bars = ids.map((id) => this.get_bar(id)); + + this.bar_being_dragged = parent_bar_id; + + bars.forEach((bar) => { + const $bar = bar.$bar; + $bar.ox = $bar.getX(); + $bar.oy = $bar.getY(); + $bar.owidth = $bar.getWidth(); + $bar.finaldx = 0; + }); + }); + $.on(this.$container, 'scroll', (e) => { + let elements = document.querySelectorAll('.bar-wrapper'); + let localBars = []; + const ids = []; + let dx; + if (x_on_scroll_start) { + dx = e.currentTarget.scrollLeft - x_on_scroll_start; + } + + const daysSinceStart = + ((e.currentTarget.scrollLeft / this.options.column_width) * + this.options.step) / + 24; + let format_str = 'D MMM'; + if (['Year', 'Month'].includes(this.options.view_mode)) + format_str = 'YYYY'; + else if (['Day', 'Week'].includes(this.options.view_mode)) + format_str = 'MMMM'; + else if (this.view_is('Half Day')) format_str = 'D'; + else if (this.view_is('Hour')) format_str = 'D MMMM'; + + let currentUpper = date_utils.format( + date_utils.add(this.gantt_start, daysSinceStart, 'day'), + format_str, + ); + const upperTexts = Array.from( + document.querySelectorAll('.upper-text'), + ); + const $el = upperTexts.find( + (el) => el.textContent === currentUpper, + ); + if ($el && !$el.classList.contains('current-upper')) { + const $current = document.querySelector('.current-upper'); + if ($current) { + $current.classList.remove('current-upper'); + $current.style.left = + this.upper_texts_x[$current.textContent] + 'px'; + $current.style.top = this.options.header_height - 50 + 'px'; + } + + $el.classList.add('current-upper'); + let dimensions = this.$svg.getBoundingClientRect(); + $el.style.left = + dimensions.x + this.$container.scrollLeft + 10 + 'px'; + $el.style.top = + dimensions.y + this.options.header_height - 50 + 'px'; + } + + Array.prototype.forEach.call(elements, function (el, i) { + ids.push(el.getAttribute('data-id')); + }); + + if (dx) { + localBars = ids.map((id) => this.get_bar(id)); + if (this.options.auto_move_label) { + localBars.forEach((bar) => { + bar.update_label_position_on_horizontal_scroll({ + x: dx, + sx: e.currentTarget.scrollLeft, + }); + }); + } + } + + x_on_scroll_start = e.currentTarget.scrollLeft; + }); + + $.on(this.$svg, 'mousemove', (e) => { + if (!action_in_progress()) return; + const dx = (e.offsetX || e.layerX) - x_on_start; + + bars.forEach((bar) => { + const $bar = bar.$bar; + $bar.finaldx = this.get_snap_position(dx); + this.hide_popup(); + if (is_resizing_left) { + if (parent_bar_id === bar.task.id) { + bar.update_bar_position({ + x: $bar.ox + $bar.finaldx, + width: $bar.owidth - $bar.finaldx, + }); + } else { + bar.update_bar_position({ + x: $bar.ox + $bar.finaldx, + }); + } + } else if (is_resizing_right) { + if (parent_bar_id === bar.task.id) { + bar.update_bar_position({ + width: $bar.owidth + $bar.finaldx, + }); + } + } else if ( + is_dragging && + !this.options.readonly && + !this.options.dates_readonly + ) { + bar.update_bar_position({ x: $bar.ox + $bar.finaldx }); + } + }); + }); + + document.addEventListener('mouseup', (e) => { + is_dragging = false; + is_resizing_left = false; + is_resizing_right = false; + }); + + $.on(this.$svg, 'mouseup', (e) => { + this.bar_being_dragged = null; + bars.forEach((bar) => { + const $bar = bar.$bar; + if (!$bar.finaldx) return; + bar.date_changed(); + bar.set_action_completed(); + }); + }); + + this.bind_bar_progress(); + } + + bind_bar_progress() { + let x_on_start = 0; + let y_on_start = 0; + let is_resizing = null; + let bar = null; + let $bar_progress = null; + let $bar = null; + + $.on(this.$svg, 'mousedown', '.handle.progress', (e, handle) => { + is_resizing = true; + x_on_start = e.offsetX || e.layerX; + y_on_start = e.offsetY || e.layerY; + + const $bar_wrapper = $.closest('.bar-wrapper', handle); + const id = $bar_wrapper.getAttribute('data-id'); + bar = this.get_bar(id); + + $bar_progress = bar.$bar_progress; + $bar = bar.$bar; + + $bar_progress.finaldx = 0; + $bar_progress.owidth = $bar_progress.getWidth(); + $bar_progress.min_dx = -$bar_progress.getWidth(); + $bar_progress.max_dx = $bar.getWidth() - $bar_progress.getWidth(); + }); + + $.on(this.$svg, 'mousemove', (e) => { + if (!is_resizing) return; + let dx = (e.offsetX || e.layerX) - x_on_start; + + if (dx > $bar_progress.max_dx) { + dx = $bar_progress.max_dx; + } + if (dx < $bar_progress.min_dx) { + dx = $bar_progress.min_dx; + } + + const $handle = bar.$handle_progress; + $.attr($bar_progress, 'width', $bar_progress.owidth + dx); + $.attr($handle, 'cx', $bar_progress.getEndX()); + $bar_progress.finaldx = dx; + }); + + $.on(this.$svg, 'mouseup', () => { + is_resizing = false; + if (!($bar_progress && $bar_progress.finaldx)) return; + + $bar_progress.finaldx = 0; + bar.progress_changed(); + bar.set_action_completed(); + bar = null; + $bar_progress = null; + $bar = null; + }); + } + + get_all_dependent_tasks(task_id) { + let out = []; + let to_process = [task_id]; + while (to_process.length) { + const deps = to_process.reduce((acc, curr) => { + acc = acc.concat(this.dependency_map[curr]); + return acc; + }, []); + + out = out.concat(deps); + to_process = deps.filter((d) => !to_process.includes(d)); + } + + return out.filter(Boolean); + } + + get_snap_position(dx) { + let odx = dx, + rem, + position; + + if (this.view_is(VIEW_MODE.WEEK)) { + rem = dx % (this.options.column_width / 7); + position = + odx - + rem + + (rem < this.options.column_width / 14 + ? 0 + : this.options.column_width / 7); + } else if (this.view_is(VIEW_MODE.MONTH)) { + rem = dx % (this.options.column_width / 30); + position = + odx - + rem + + (rem < this.options.column_width / 60 + ? 0 + : this.options.column_width / 30); + } else { + rem = dx % this.options.column_width; + position = + odx - + rem + + (rem < this.options.column_width / 2 + ? 0 + : this.options.column_width); + } + return position; + } + + unselect_all() { + [...this.$svg.querySelectorAll('.bar-wrapper')].forEach((el) => { + el.classList.remove('active'); + }); + if (this.popup) this.popup.parent.classList.remove('hidden'); + } + + view_is(modes) { + if (typeof modes === 'string') { + return this.options.view_mode === modes; + } + + if (Array.isArray(modes)) { + return modes.some((mode) => this.options.view_mode === mode); + } + + return false; + } + + get_task(id) { + return this.tasks.find((task) => { + return task.id === id; + }); + } + + get_bar(id) { + return this.bars.find((bar) => { + return bar.task.id === id; + }); + } + + show_popup(options) { + if (this.options.popup === false) return; + if (!this.popup) { + this.popup = new Popup(this.$popup_wrapper, this.options.popup); + } + this.popup.show(options); + } + + hide_popup() { + this.popup && this.popup.hide(); + } + + trigger_event(event, args) { + if (this.options['on_' + event]) { + this.options['on_' + event].apply(null, args); + } + } + + /** + * Gets the oldest starting date from the list of tasks + * + * @returns Date + * @memberof Gantt + */ + get_oldest_starting_date() { + if (!this.tasks.length) return new Date(); + return this.tasks + .map((task) => task._start) + .reduce((prev_date, cur_date) => + cur_date <= prev_date ? cur_date : prev_date, + ); + } + + /** + * Clear all elements from the parent svg element + * + * @memberof Gantt + */ + clear() { + this.$svg.innerHTML = ''; + this.$header?.remove?.(); + this.$current_highlight?.remove?.(); + this.popup?.hide?.(); + } } Gantt.VIEW_MODE = VIEW_MODE; function generate_id(task) { - return task.name + "_" + Math.random().toString(36).slice(2, 12); + return task.name + '_' + Math.random().toString(36).slice(2, 12); } diff --git a/src/popup.js b/src/popup.js index c1c9dc5..d2b9c76 100644 --- a/src/popup.js +++ b/src/popup.js @@ -1,61 +1,62 @@ export default class Popup { - constructor(parent, custom_html) { - this.parent = parent; - this.custom_html = custom_html; - this.make(); - } + constructor(parent, custom_html) { + this.parent = parent; + this.custom_html = custom_html; + this.make(); + } - make() { - this.parent.innerHTML = ` + make() { + this.parent.innerHTML = `
`; - this.hide(); + this.hide(); - this.title = this.parent.querySelector(".title"); - this.subtitle = this.parent.querySelector(".subtitle"); - this.pointer = this.parent.querySelector(".pointer"); - } - - show(options) { - if (!options.target_element) { - throw new Error("target_element is required to show popup"); - } - const target_element = options.target_element; - - if (this.custom_html) { - let html = this.custom_html(options.task); - html += '
'; - this.parent.innerHTML = html; - this.pointer = this.parent.querySelector(".pointer"); - } else { - // set data - this.title.innerHTML = options.title; - this.subtitle.innerHTML = options.subtitle; + this.title = this.parent.querySelector('.title'); + this.subtitle = this.parent.querySelector('.subtitle'); + this.pointer = this.parent.querySelector('.pointer'); } - // set position - let position_meta; - if (target_element instanceof HTMLElement) { - position_meta = target_element.getBoundingClientRect(); - } else if (target_element instanceof SVGElement) { - position_meta = options.target_element.getBBox(); + show(options) { + if (!options.target_element) { + throw new Error('target_element is required to show popup'); + } + const target_element = options.target_element; + + if (this.custom_html) { + let html = this.custom_html(options.task); + html += '
'; + this.parent.innerHTML = html; + this.pointer = this.parent.querySelector('.pointer'); + } else { + // set data + this.title.innerHTML = options.title; + this.subtitle.innerHTML = options.subtitle; + } + + // set position + let position_meta; + if (target_element instanceof HTMLElement) { + position_meta = target_element.getBoundingClientRect(); + } else if (target_element instanceof SVGElement) { + position_meta = options.target_element.getBBox(); + } + + this.parent.style.left = options.x - this.parent.clientWidth / 2 + 'px'; + this.parent.style.top = + position_meta.y + position_meta.height + 10 + 'px'; + + this.pointer.style.left = this.parent.clientWidth / 2 + 'px'; + this.pointer.style.top = '-15px'; + + // show + this.parent.style.opacity = 1; } - this.parent.style.left = options.x - this.parent.clientWidth / 2 + "px"; - this.parent.style.top = position_meta.y + position_meta.height + 10 + "px"; - - this.pointer.style.left = this.parent.clientWidth / 2 + "px"; - this.pointer.style.top = "-15px"; - - // show - this.parent.style.opacity = 1; - } - - hide() { - this.parent.style.opacity = 0; - this.parent.style.left = 0; - } + hide() { + this.parent.style.opacity = 0; + this.parent.style.left = 0; + } } diff --git a/src/svg_utils.js b/src/svg_utils.js index 7e91b07..f0f370b 100644 --- a/src/svg_utils.js +++ b/src/svg_utils.js @@ -1,135 +1,135 @@ export function $(expr, con) { - return typeof expr === "string" - ? (con || document).querySelector(expr) - : expr || null; + return typeof expr === 'string' + ? (con || document).querySelector(expr) + : expr || null; } export function createSVG(tag, attrs) { - const elem = document.createElementNS("http://www.w3.org/2000/svg", tag); - for (let attr in attrs) { - if (attr === "append_to") { - const parent = attrs.append_to; - parent.appendChild(elem); - } else if (attr === "innerHTML") { - elem.innerHTML = attrs.innerHTML; - } else if (attr === 'clipPath') { - elem.setAttribute('clip-path', 'url(#' + attrs[attr] + ')'); - } else { - elem.setAttribute(attr, attrs[attr]); + const elem = document.createElementNS('http://www.w3.org/2000/svg', tag); + for (let attr in attrs) { + if (attr === 'append_to') { + const parent = attrs.append_to; + parent.appendChild(elem); + } else if (attr === 'innerHTML') { + elem.innerHTML = attrs.innerHTML; + } else if (attr === 'clipPath') { + elem.setAttribute('clip-path', 'url(#' + attrs[attr] + ')'); + } else { + elem.setAttribute(attr, attrs[attr]); + } } - } - return elem; + return elem; } export function animateSVG(svgElement, attr, from, to) { - const animatedSvgElement = getAnimationElement(svgElement, attr, from, to); + const animatedSvgElement = getAnimationElement(svgElement, attr, from, to); - if (animatedSvgElement === svgElement) { - // triggered 2nd time programmatically - // trigger artificial click event - const event = document.createEvent("HTMLEvents"); - event.initEvent("click", true, true); - event.eventName = "click"; - animatedSvgElement.dispatchEvent(event); - } + if (animatedSvgElement === svgElement) { + // triggered 2nd time programmatically + // trigger artificial click event + const event = document.createEvent('HTMLEvents'); + event.initEvent('click', true, true); + event.eventName = 'click'; + animatedSvgElement.dispatchEvent(event); + } } function getAnimationElement( - svgElement, - attr, - from, - to, - dur = "0.4s", - begin = "0.1s", -) { - const animEl = svgElement.querySelector("animate"); - if (animEl) { - $.attr(animEl, { - attributeName: attr, - from, - to, - dur, - begin: "click + " + begin, // artificial click - }); - return svgElement; - } - - const animateElement = createSVG("animate", { - attributeName: attr, + svgElement, + attr, from, to, - dur, - begin, - calcMode: "spline", - values: from + ";" + to, - keyTimes: "0; 1", - keySplines: cubic_bezier("ease-out"), - }); - svgElement.appendChild(animateElement); + dur = '0.4s', + begin = '0.1s', +) { + const animEl = svgElement.querySelector('animate'); + if (animEl) { + $.attr(animEl, { + attributeName: attr, + from, + to, + dur, + begin: 'click + ' + begin, // artificial click + }); + return svgElement; + } - return svgElement; + const animateElement = createSVG('animate', { + attributeName: attr, + from, + to, + dur, + begin, + calcMode: 'spline', + values: from + ';' + to, + keyTimes: '0; 1', + keySplines: cubic_bezier('ease-out'), + }); + svgElement.appendChild(animateElement); + + return svgElement; } function cubic_bezier(name) { - return { - ease: ".25 .1 .25 1", - linear: "0 0 1 1", - "ease-in": ".42 0 1 1", - "ease-out": "0 0 .58 1", - "ease-in-out": ".42 0 .58 1", - }[name]; + return { + ease: '.25 .1 .25 1', + linear: '0 0 1 1', + 'ease-in': '.42 0 1 1', + 'ease-out': '0 0 .58 1', + 'ease-in-out': '.42 0 .58 1', + }[name]; } $.on = (element, event, selector, callback) => { - if (!callback) { - callback = selector; - $.bind(element, event, callback); - } else { - $.delegate(element, event, selector, callback); - } + if (!callback) { + callback = selector; + $.bind(element, event, callback); + } else { + $.delegate(element, event, selector, callback); + } }; $.off = (element, event, handler) => { - element.removeEventListener(event, handler); + element.removeEventListener(event, handler); }; $.bind = (element, event, callback) => { - event.split(/\s+/).forEach(function (event) { - element.addEventListener(event, callback); - }); + event.split(/\s+/).forEach(function (event) { + element.addEventListener(event, callback); + }); }; $.delegate = (element, event, selector, callback) => { - element.addEventListener(event, function (e) { - const delegatedTarget = e.target.closest(selector); - if (delegatedTarget) { - e.delegatedTarget = delegatedTarget; - callback.call(this, e, delegatedTarget); - } - }); + element.addEventListener(event, function (e) { + const delegatedTarget = e.target.closest(selector); + if (delegatedTarget) { + e.delegatedTarget = delegatedTarget; + callback.call(this, e, delegatedTarget); + } + }); }; $.closest = (selector, element) => { - if (!element) return null; + if (!element) return null; - if (element.matches(selector)) { - return element; - } + if (element.matches(selector)) { + return element; + } - return $.closest(selector, element.parentNode); + return $.closest(selector, element.parentNode); }; $.attr = (element, attr, value) => { - if (!value && typeof attr === "string") { - return element.getAttribute(attr); - } - - if (typeof attr === "object") { - for (let key in attr) { - $.attr(element, key, attr[key]); + if (!value && typeof attr === 'string') { + return element.getAttribute(attr); } - return; - } - element.setAttribute(attr, value); + if (typeof attr === 'object') { + for (let key in attr) { + $.attr(element, key, attr[key]); + } + return; + } + + element.setAttribute(attr, value); }; diff --git a/tests/date_utils.test.js b/tests/date_utils.test.js index 9f4875d..eb31d95 100644 --- a/tests/date_utils.test.js +++ b/tests/date_utils.test.js @@ -1,124 +1,124 @@ -import date_utils from "../src/date_utils"; +import date_utils from '../src/date_utils'; -test("Parse: parses string date", () => { - const date = date_utils.parse("2017-09-09"); +test('Parse: parses string date', () => { + const date = date_utils.parse('2017-09-09'); - expect(date.getDate()).toBe(9); - expect(date.getMonth()).toBe(8); - expect(date.getFullYear()).toBe(2017); + expect(date.getDate()).toBe(9); + expect(date.getMonth()).toBe(8); + expect(date.getFullYear()).toBe(2017); }); -test("Parse: parses string datetime", () => { - const date = date_utils.parse("2017-08-27 16:08:34"); +test('Parse: parses string datetime', () => { + const date = date_utils.parse('2017-08-27 16:08:34'); - expect(date.getFullYear()).toBe(2017); - expect(date.getMonth()).toBe(7); - expect(date.getDate()).toBe(27); - expect(date.getHours()).toBe(16); - expect(date.getMinutes()).toBe(8); - expect(date.getSeconds()).toBe(34); + expect(date.getFullYear()).toBe(2017); + expect(date.getMonth()).toBe(7); + expect(date.getDate()).toBe(27); + expect(date.getHours()).toBe(16); + expect(date.getMinutes()).toBe(8); + expect(date.getSeconds()).toBe(34); }); -test("Parse: parses string datetime", () => { - const date = date_utils.parse("2016-02-29 16:08:34.3"); +test('Parse: parses string datetime', () => { + const date = date_utils.parse('2016-02-29 16:08:34.3'); - expect(date.getFullYear()).toBe(2016); - expect(date.getMonth()).toBe(1); - expect(date.getDate()).toBe(29); - expect(date.getHours()).toBe(16); - expect(date.getMinutes()).toBe(8); - expect(date.getSeconds()).toBe(34); - expect(date.getMilliseconds()).toBe(300); + expect(date.getFullYear()).toBe(2016); + expect(date.getMonth()).toBe(1); + expect(date.getDate()).toBe(29); + expect(date.getHours()).toBe(16); + expect(date.getMinutes()).toBe(8); + expect(date.getSeconds()).toBe(34); + expect(date.getMilliseconds()).toBe(300); }); -test("Parse: parses string datetime", () => { - const date = date_utils.parse("2015-07-01 00:00:59.200"); +test('Parse: parses string datetime', () => { + const date = date_utils.parse('2015-07-01 00:00:59.200'); - expect(date.getFullYear()).toBe(2015); - expect(date.getMonth()).toBe(6); - expect(date.getDate()).toBe(1); - expect(date.getHours()).toBe(0); - expect(date.getMinutes()).toBe(0); - expect(date.getSeconds()).toBe(59); - expect(date.getMilliseconds()).toBe(200); + expect(date.getFullYear()).toBe(2015); + expect(date.getMonth()).toBe(6); + expect(date.getDate()).toBe(1); + expect(date.getHours()).toBe(0); + expect(date.getMinutes()).toBe(0); + expect(date.getSeconds()).toBe(59); + expect(date.getMilliseconds()).toBe(200); }); -test("Format: converts date object to string", () => { - const date = new Date("2017-09-18"); - expect(date_utils.to_string(date)).toBe("2017-09-18"); +test('Format: converts date object to string', () => { + const date = new Date('2017-09-18'); + expect(date_utils.to_string(date)).toBe('2017-09-18'); }); -test("Format: converts date object to string", () => { - const date = new Date("2016-02-29 16:08:34.3"); - expect(date_utils.to_string(date, true)).toBe("2016-02-29 16:08:34.300"); +test('Format: converts date object to string', () => { + const date = new Date('2016-02-29 16:08:34.3'); + expect(date_utils.to_string(date, true)).toBe('2016-02-29 16:08:34.300'); }); -test("Format: converts date object to string", () => { - const date = new Date("2016-02-29 16:08:34.3"); - expect(date_utils.to_string(date, true)).toBe("2016-02-29 16:08:34.300"); +test('Format: converts date object to string', () => { + const date = new Date('2016-02-29 16:08:34.3'); + expect(date_utils.to_string(date, true)).toBe('2016-02-29 16:08:34.300'); }); -test("Parse: returns Date Object as is", () => { - const d = new Date(); - const date = date_utils.parse(d); +test('Parse: returns Date Object as is', () => { + const d = new Date(); + const date = date_utils.parse(d); - expect(d).toBe(date); + expect(d).toBe(date); }); -test("Diff: returns diff between 2 date objects", () => { - const a = date_utils.parse("2017-09-08"); - const b = date_utils.parse("2017-06-07"); +test('Diff: returns diff between 2 date objects', () => { + const a = date_utils.parse('2017-09-08'); + const b = date_utils.parse('2017-06-07'); - expect(date_utils.diff(a, b, "day")).toBe(93); - expect(date_utils.diff(a, b, "month")).toBe(3); - expect(date_utils.diff(a, b, "year")).toBe(0); + expect(date_utils.diff(a, b, 'day')).toBe(93); + expect(date_utils.diff(a, b, 'month')).toBe(3); + expect(date_utils.diff(a, b, 'year')).toBe(0); }); -test("StartOf", () => { - const date = date_utils.parse("2017-08-12 15:07:34.012"); +test('StartOf', () => { + const date = date_utils.parse('2017-08-12 15:07:34.012'); - const start_of_millisecond = date_utils.start_of(date, "millisecond"); - expect(date_utils.to_string(start_of_millisecond, true)).toBe( - "2017-08-12 15:07:34.012", - ); + const start_of_millisecond = date_utils.start_of(date, 'millisecond'); + expect(date_utils.to_string(start_of_millisecond, true)).toBe( + '2017-08-12 15:07:34.012', + ); - const start_of_second = date_utils.start_of(date, "second"); - expect(date_utils.to_string(start_of_second, true)).toBe( - "2017-08-12 15:07:34.000", - ); + const start_of_second = date_utils.start_of(date, 'second'); + expect(date_utils.to_string(start_of_second, true)).toBe( + '2017-08-12 15:07:34.000', + ); - const start_of_minute = date_utils.start_of(date, "minute"); - expect(date_utils.to_string(start_of_minute, true)).toBe( - "2017-08-12 15:07:00.000", - ); + const start_of_minute = date_utils.start_of(date, 'minute'); + expect(date_utils.to_string(start_of_minute, true)).toBe( + '2017-08-12 15:07:00.000', + ); - const start_of_hour = date_utils.start_of(date, "hour"); - expect(date_utils.to_string(start_of_hour, true)).toBe( - "2017-08-12 15:00:00.000", - ); + const start_of_hour = date_utils.start_of(date, 'hour'); + expect(date_utils.to_string(start_of_hour, true)).toBe( + '2017-08-12 15:00:00.000', + ); - const start_of_day = date_utils.start_of(date, "day"); - expect(date_utils.to_string(start_of_day, true)).toBe( - "2017-08-12 00:00:00.000", - ); + const start_of_day = date_utils.start_of(date, 'day'); + expect(date_utils.to_string(start_of_day, true)).toBe( + '2017-08-12 00:00:00.000', + ); - const start_of_month = date_utils.start_of(date, "month"); - expect(date_utils.to_string(start_of_month, true)).toBe( - "2017-08-01 00:00:00.000", - ); + const start_of_month = date_utils.start_of(date, 'month'); + expect(date_utils.to_string(start_of_month, true)).toBe( + '2017-08-01 00:00:00.000', + ); - const start_of_year = date_utils.start_of(date, "year"); - expect(date_utils.to_string(start_of_year, true)).toBe( - "2017-01-01 00:00:00.000", - ); + const start_of_year = date_utils.start_of(date, 'year'); + expect(date_utils.to_string(start_of_year, true)).toBe( + '2017-01-01 00:00:00.000', + ); }); -test("format", () => { - const date = date_utils.parse("2017-08-12 15:07:23"); - expect(date_utils.format(date, "YYYY-MM-DD")).toBe("2017-08-12"); +test('format', () => { + const date = date_utils.parse('2017-08-12 15:07:23'); + expect(date_utils.format(date, 'YYYY-MM-DD')).toBe('2017-08-12'); }); -test("format", () => { - const date = date_utils.parse("2016-02-29 16:08:34.3"); - expect(date_utils.format(date)).toBe("2016-02-29 16:08:34.300"); +test('format', () => { + const date = date_utils.parse('2016-02-29 16:08:34.3'); + expect(date_utils.format(date)).toBe('2016-02-29 16:08:34.300'); }); diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..f97ff10 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,22 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + build: { + lib: { + entry: resolve(__dirname, 'src/index.js'), + name: 'Gantt', + fileName: 'frappe-gantt', + }, + rollupOptions: { + external: ['vue'], + output: { + globals: { + vue: 'Vue' + } + }, + }, + }, + output: { interop: 'auto' }, + server: { watch: { include: ['dist/*', 'src/*'] } } +}); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 22541d8..0688e27 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,3507 +1,6964 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0-beta.35": - version "7.0.0-beta.39" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.39.tgz#91c90bb65207fc5a55128cb54956ded39e850457" - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -"@babel/code-frame@^7.10.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/highlight@^7.16.7": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3" - integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/node@*": - version "17.0.29" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.29.tgz#7f2e1159231d4a077bb660edab0fde373e375a3d" - integrity sha512-tx5jMmMFwx7wBwq/V7OohKDVb/JwJU5qCVkeLMh1//xycAJ/ESuw9aJ9SEtlCZDYi2pBfe4JkisSoAtbOsBNAA== - -abab@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" - -acorn-globals@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" - dependencies: - acorn "^5.0.0" - -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - dependencies: - acorn "^3.0.4" - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - -acorn@^5.0.0, acorn@^5.3.0, acorn@^5.4.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102" - -acorn@^8.5.0: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== - -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - -ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -ansi-escapes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.1.0, ansi-styles@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" - dependencies: - color-convert "^1.9.0" - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" - dependencies: - default-require-extensions "^1.0.0" - -argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-flatten@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -arrify@^1.0.0, arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - -async@^2.1.4: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - -aws4@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@^6.0.0, babel-core@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.0" - debug "^2.6.8" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.7" - slash "^1.0.0" - source-map "^0.5.6" - -babel-generator@^6.18.0, babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-jest@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.2.0.tgz#2d04087f5d149585e14f641d529551963fc9b4f8" - dependencies: - babel-plugin-istanbul "^4.1.5" - babel-preset-jest "^22.2.0" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-istanbul@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" - dependencies: - find-up "^2.1.0" - istanbul-lib-instrument "^1.7.5" - test-exclude "^4.1.1" - -babel-plugin-jest-hoist@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.2.0.tgz#bd34f39d652406669713b8c89e23ef25c890b993" - -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - -babel-plugin-syntax-object-rest-spread@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - -babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - -babel-plugin-transform-async-to-generator@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.23.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-for-of@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-es2015-modules-systemjs@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-umd@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-exponentiation-operator@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-regenerator@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-preset-env@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.23.0" - babel-plugin-transform-es2015-classes "^6.23.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.23.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.23.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.23.0" - babel-plugin-transform-es2015-modules-systemjs "^6.23.0" - babel-plugin-transform-es2015-modules-umd "^6.23.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.23.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.23.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - browserslist "^2.1.2" - invariant "^2.2.2" - semver "^5.3.0" - -babel-preset-jest@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.2.0.tgz#f77b43f06ef4d8547214b2e206cc76a25c3ba0e2" - dependencies: - babel-plugin-jest-hoist "^22.2.0" - babel-plugin-syntax-object-rest-spread "^6.13.0" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browser-process-hrtime@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" - -browser-resolve@^1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" - dependencies: - resolve "1.1.7" - -browserslist@^2.1.2: - version "2.11.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" - dependencies: - caniuse-lite "^1.0.30000792" - electron-to-chromium "^1.3.30" - -bser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - -caniuse-lite@^1.0.30000792: - version "1.0.30000804" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000804.tgz#8729a143d65378e8936adbb161f550e9c49fc09d" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - -"chokidar@>=3.0.0 <4.0.0": - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -ci-info@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - dependencies: - restore-cursor "^2.0.0" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - -cliui@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" - dependencies: - color-name "^1.1.1" - -color-name@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" - dependencies: - delayed-stream "~1.0.0" - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -content-type-parser@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" - -convert-source-map@^1.4.0, convert-source-map@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" - -core-js@^2.4.0, core-js@^2.5.0: - version "2.5.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cross-spawn@^5.0.1, cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" - -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" - -"cssstyle@>= 0.2.37 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" - dependencies: - cssom "0.3.x" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -debug@^2.6.8: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -decamelize@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" - dependencies: - strip-bom "^2.0.0" - -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" - dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" - -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - -diff@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - dependencies: - esutils "^2.0.2" - -domexception@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - dependencies: - webidl-conversions "^4.0.2" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -electron-to-chromium@^1.3.30: - version "1.3.33" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.33.tgz#bf00703d62a7c65238136578c352d6c5c042a545" - -error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.5.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escodegen@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.5.6" - -eslint-config-prettier@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" - dependencies: - get-stdin "^5.0.1" - -eslint-plugin-prettier@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz#33e4e228bdb06142d03c560ce04ec23f6c767dd7" - dependencies: - fast-diff "^1.1.1" - jest-docblock "^21.0.0" - -eslint-scope@^3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - -eslint@^4.17.0: - version "4.17.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.17.0.tgz#dc24bb51ede48df629be7031c71d9dc0ee4f3ddf" - dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.2" - esquery "^1.0.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" - imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "^4.0.1" - text-table "~0.2.0" - -espree@^3.5.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6" - dependencies: - acorn "^5.4.0" - acorn-jsx "^3.0.0" - -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" - -esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" - dependencies: - estraverse "^4.1.0" - object-assign "^4.0.1" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -exec-sh@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" - dependencies: - merge "^1.1.3" - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -expect@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-22.2.0.tgz#dddcaab2e22ccc9f51e7c1732e0aa723f2f1f2b8" - dependencies: - ansi-styles "^3.2.0" - jest-diff "^22.1.0" - jest-get-type "^22.1.0" - jest-matcher-utils "^22.2.0" - jest-message-util "^22.2.0" - jest-regex-util "^22.1.0" - -extend@~3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extsprintf@1.3.0, extsprintf@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -fast-deep-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" - -fast-diff@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - dependencies: - bser "^2.0.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - -flat-cache@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" - dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" - -for-in@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.1.1: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.0.2, function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - -get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" - -get-stdin@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.0.1: - version "11.3.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.11: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -graceful-fs@^4.1.2: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - -handlebars@^4.0.3: - version "4.7.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.2" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" - dependencies: - ajv "^5.1.0" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" - dependencies: - function-bind "^1.0.2" - -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" - -hoek@4.x.x: - version "4.2.0" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - dependencies: - whatwg-encoding "^1.0.1" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -iconv-lite@0.4.19, iconv-lite@^0.4.17: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - -ignore@^3.3.3: - version "3.3.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" - -immutable@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23" - integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw== - -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -invariant@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" - -is-ci@^1.0.10: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" - dependencies: - ci-info "^1.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-generator-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - dependencies: - path-is-inside "^1.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -istanbul-api@^1.1.14: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620" - dependencies: - async "^2.1.4" - fileset "^2.0.2" - istanbul-lib-coverage "^1.1.1" - istanbul-lib-hook "^1.1.0" - istanbul-lib-instrument "^1.9.1" - istanbul-lib-report "^1.1.2" - istanbul-lib-source-maps "^1.2.2" - istanbul-reports "^1.1.3" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" - -istanbul-lib-hook@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" - dependencies: - append-transform "^0.4.0" - -istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.1.1" - semver "^5.3.0" - -istanbul-lib-report@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425" - dependencies: - istanbul-lib-coverage "^1.1.1" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - -istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c" - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.1.1" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-reports@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10" - dependencies: - handlebars "^4.0.3" - -jest-changed-files@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.2.0.tgz#517610c4a8ca0925bdc88b0ca53bd678aa8d019e" - dependencies: - throat "^4.0.0" - -jest-cli@^22.2.1: - version "22.2.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.2.1.tgz#f1df6675cd719e0773be77d6314c5f4b1d8af47f" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.1.11" - import-local "^1.0.0" - is-ci "^1.0.10" - istanbul-api "^1.1.14" - istanbul-lib-coverage "^1.1.1" - istanbul-lib-instrument "^1.8.0" - istanbul-lib-source-maps "^1.2.1" - jest-changed-files "^22.2.0" - jest-config "^22.2.1" - jest-environment-jsdom "^22.2.0" - jest-get-type "^22.1.0" - jest-haste-map "^22.2.0" - jest-message-util "^22.2.0" - jest-regex-util "^22.1.0" - jest-resolve-dependencies "^22.1.0" - jest-runner "^22.2.1" - jest-runtime "^22.2.1" - jest-snapshot "^22.2.0" - jest-util "^22.2.0" - jest-worker "^22.2.0" - micromatch "^2.3.11" - node-notifier "^5.2.1" - realpath-native "^1.0.0" - rimraf "^2.5.4" - slash "^1.0.0" - string-length "^2.0.0" - strip-ansi "^4.0.0" - which "^1.2.12" - yargs "^10.0.3" - -jest-config@^22.2.1: - version "22.2.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.2.1.tgz#8617e99cff0544f0a5f254a5dde37f43b5383934" - dependencies: - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^22.2.0" - jest-environment-node "^22.2.0" - jest-get-type "^22.1.0" - jest-jasmine2 "^22.2.1" - jest-regex-util "^22.1.0" - jest-resolve "^22.2.0" - jest-util "^22.2.0" - jest-validate "^22.2.0" - pretty-format "^22.1.0" - -jest-diff@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.1.0.tgz#0fad9d96c87b453896bf939df3dc8aac6919ac38" - dependencies: - chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.1.0" - pretty-format "^22.1.0" - -jest-docblock@^21.0.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" - -jest-docblock@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.2.0.tgz#4d054eac354751e94a43a0ea2e2fe5c04cc61bbb" - dependencies: - detect-newline "^2.1.0" - -jest-environment-jsdom@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.2.0.tgz#e9537400cbdef2d1e61d7196f8afa40e826fe9d8" - dependencies: - jest-mock "^22.2.0" - jest-util "^22.2.0" - jsdom "^11.5.1" - -jest-environment-node@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.2.0.tgz#ba7d0183fac076d34867367a4ac53ced69e3d3a9" - dependencies: - jest-mock "^22.2.0" - jest-util "^22.2.0" - -jest-get-type@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.1.0.tgz#4e90af298ed6181edc85d2da500dbd2753e0d5a9" - -jest-haste-map@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.2.0.tgz#c9f508b8f63322490339ba02343dd688474d9ad5" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^22.2.0" - jest-worker "^22.2.0" - micromatch "^2.3.11" - sane "^2.0.0" - -jest-jasmine2@^22.2.1: - version "22.2.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.2.1.tgz#58d115f3f4a0a186b5e90c5db8ac68aecfc41051" - dependencies: - callsites "^2.0.0" - chalk "^2.0.1" - co "^4.6.0" - expect "^22.2.0" - graceful-fs "^4.1.11" - is-generator-fn "^1.0.0" - jest-diff "^22.1.0" - jest-matcher-utils "^22.2.0" - jest-message-util "^22.2.0" - jest-snapshot "^22.2.0" - source-map-support "^0.5.0" - -jest-leak-detector@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.1.0.tgz#08376644cee07103da069baac19adb0299b772c2" - dependencies: - pretty-format "^22.1.0" - -jest-matcher-utils@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.2.0.tgz#5390f823c18c748543d463825aa8e4df0db253ca" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - pretty-format "^22.1.0" - -jest-message-util@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.2.0.tgz#84a6bb34186d8b9af7e0732fabbef63f7355f7b2" - dependencies: - "@babel/code-frame" "^7.0.0-beta.35" - chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.0.0" - stack-utils "^1.0.1" - -jest-mock@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.2.0.tgz#444b3f9488a7473adae09bc8a77294afded397a7" - -jest-regex-util@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.1.0.tgz#5daf2fe270074b6da63e5d85f1c9acc866768f53" - -jest-resolve-dependencies@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.1.0.tgz#340e4139fb13315cd43abc054e6c06136be51e31" - dependencies: - jest-regex-util "^22.1.0" - -jest-resolve@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.2.0.tgz#25aa8b887b31ab8c79763503e209d7c136f74ab1" - dependencies: - browser-resolve "^1.11.2" - chalk "^2.0.1" - -jest-runner@^22.2.1: - version "22.2.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.2.1.tgz#539b2b7eb0ceb34e63a1ca78a1eda46ace70b940" - dependencies: - exit "^0.1.2" - jest-config "^22.2.1" - jest-docblock "^22.2.0" - jest-haste-map "^22.2.0" - jest-jasmine2 "^22.2.1" - jest-leak-detector "^22.1.0" - jest-message-util "^22.2.0" - jest-runtime "^22.2.1" - jest-util "^22.2.0" - jest-worker "^22.2.0" - throat "^4.0.0" - -jest-runtime@^22.2.1: - version "22.2.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.2.1.tgz#c5b0173a7f5274b28da30019cf7bb7b8cda68040" - dependencies: - babel-core "^6.0.0" - babel-jest "^22.2.0" - babel-plugin-istanbul "^4.1.5" - chalk "^2.0.1" - convert-source-map "^1.4.0" - exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^22.2.1" - jest-haste-map "^22.2.0" - jest-regex-util "^22.1.0" - jest-resolve "^22.2.0" - jest-util "^22.2.0" - json-stable-stringify "^1.0.1" - micromatch "^2.3.11" - realpath-native "^1.0.0" - slash "^1.0.0" - strip-bom "3.0.0" - write-file-atomic "^2.1.0" - yargs "^10.0.3" - -jest-snapshot@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.2.0.tgz#0c0ba152d296ef70fa198cc84977a2cc269ee4cf" - dependencies: - chalk "^2.0.1" - jest-diff "^22.1.0" - jest-matcher-utils "^22.2.0" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^22.1.0" - -jest-util@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.2.0.tgz#afad693641447858bec7b37f32952516bf887262" - dependencies: - callsites "^2.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^22.2.0" - jest-validate "^22.2.0" - mkdirp "^0.5.1" - -jest-validate@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.2.0.tgz#f7ce459105a8210825e5e57279f868ab080063fa" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^22.1.0" - -jest-worker@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.2.0.tgz#d88d6ee176d6409f206cbbf7b485250793264262" - dependencies: - merge-stream "^1.0.1" - -jest-worker@^26.2.1: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest@^22.2.1: - version "22.2.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-22.2.1.tgz#fb6524d35bd02968afe3b17f330d6f7207846147" - dependencies: - import-local "^1.0.0" - jest-cli "^22.2.1" - -js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.7.0, js-yaml@^3.9.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^11.5.1: - version "11.6.2" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.6.2.tgz#25d1ef332d48adf77fc5221fe2619967923f16bb" - dependencies: - abab "^1.0.4" - acorn "^5.3.0" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - browser-process-hrtime "^0.1.2" - content-type-parser "^1.0.2" - cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" - domexception "^1.0.0" - escodegen "^1.9.0" - html-encoding-sniffer "^1.0.2" - left-pad "^1.2.0" - nwmatcher "^1.4.3" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.83.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.3" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-url "^6.4.0" - ws "^4.0.0" - xml-name-validator "^3.0.0" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - -left-pad@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - -lodash@^4.13.1, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.3.0: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" - dependencies: - js-tokens "^3.0.0" - -lru-cache@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - dependencies: - tmpl "1.0.x" - -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - dependencies: - mimic-fn "^1.0.0" - -merge-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - dependencies: - readable-stream "^2.0.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge@^1.1.3: - version "1.2.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== - -micromatch@^2.1.5, micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -mime-db@~1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" - -mime-types@^2.1.12, mime-types@~2.1.17: - version "2.1.17" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" - dependencies: - mime-db "~1.30.0" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - -minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.1.1, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -minimist@^1.2.5: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - -nan@^2.12.1: - version "2.19.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.19.0.tgz#bb58122ad55a6c5bc973303908d5b16cfdd5a8c0" - integrity sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - -node-notifier@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" - dependencies: - growly "^1.3.0" - semver "^5.4.1" - shellwords "^0.1.1" - which "^1.3.0" - -normalize-package-data@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.0, normalize-path@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -nwmatcher@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" - -oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" - -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - dependencies: - mimic-fn "^1.0.0" - -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -p-limit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" - dependencies: - p-try "^1.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - dependencies: - p-limit "^1.1.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -path-key@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - -path-parse@^1.0.5, path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - dependencies: - find-up "^2.1.0" - -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -prettier@3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== - -pretty-format@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.1.0.tgz#2277605b40ed4529ae4db51ff62f4be817647914" - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -private@^0.1.6, private@^0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - -progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -punycode@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - -qs@~6.5.1: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -readable-stream@^2.0.1, readable-stream@^2.2.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -realpath-native@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" - dependencies: - util.promisify "^1.0.0" - -regenerate@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -request-promise-core@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" - dependencies: - lodash "^4.13.1" - -request-promise-native@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" - dependencies: - request-promise-core "1.1.1" - stealthy-require "^1.1.0" - tough-cookie ">=2.3.3" - -request@^2.83.0: - version "2.83.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - dependencies: - resolve-from "^3.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -resolve@^1.5.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - -rollup-plugin-sass@^1.2.12: - version "1.2.12" - resolved "https://registry.yarnpkg.com/rollup-plugin-sass/-/rollup-plugin-sass-1.2.12.tgz#a7ed9710482b932dac758f8526c14e1da33d02ac" - integrity sha512-LD1LwKOGRFwg42PsSsOjYwYlt6B+YuGTA0yjgZiVTfx/sXBr8FBjX97YEPVW6Z/lNKRsxP+xufFONp2ADOWkVQ== - dependencies: - "@rollup/pluginutils" "^3.1.0" - resolve "^1.5.0" - sass "^1.7.2" - -rollup-plugin-terser@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== - dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - -rollup@^2.70.2: - version "2.70.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.70.2.tgz#808d206a8851628a065097b7ba2053bd83ba0c0d" - integrity sha512-EitogNZnfku65I1DD5Mxe8JYRUCy0hkK5X84IlDtUs+O6JRMpRciXTzyCUuX11b5L5pvjH+OmFXiQ3XjabcXgg== - optionalDependencies: - fsevents "~2.3.2" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - dependencies: - is-promise "^2.1.0" - -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - -safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - -safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.3.0.tgz#3f3df584abf69e63d4bb74f0f8c42468e4d7d46b" - dependencies: - anymatch "^1.3.0" - exec-sh "^0.2.0" - fb-watchman "^2.0.0" - minimatch "^3.0.2" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.18.0" - optionalDependencies: - fsevents "^1.1.1" - -sass@^1.7.2: - version "1.51.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.51.0.tgz#25ea36cf819581fe1fe8329e8c3a4eaaf70d2845" - integrity sha512-haGdpTgywJTvHC2b91GSq+clTKGbtkkZmVAb82jZQN/wTy6qs8DdFm2lhEQbEwrY0QDRgSQ3xDurqM977C3noA== - dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - dependencies: - is-fullwidth-code-point "^2.0.0" - -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" - -"source-map-js@>=0.6.2 <2.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - -source-map-support@^0.5.0, source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" - dependencies: - spdx-license-ids "^1.0.2" - -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" - -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stack-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" - -stealthy-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - dependencies: - safe-buffer "~5.1.0" - -stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-bom@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.1.2: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - -supports-color@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - dependencies: - has-flag "^2.0.0" - -supports-color@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -symbol-tree@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - -table@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" - dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - -terser@^5.0.0: - version "5.16.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" - integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - -test-exclude@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" - dependencies: - arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - -text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" - dependencies: - punycode "^1.4.1" - -tr46@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - dependencies: - punycode "^2.1.0" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util.promisify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -uuid@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" - -validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" - dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - dependencies: - browser-process-hrtime "^0.1.2" - -walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - dependencies: - makeerror "1.0.x" - -watch@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" - dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" - -webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" - dependencies: - iconv-lite "0.4.19" - -whatwg-url@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.0" - webidl-conversions "^4.0.1" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - -which@^1.2.12, which@^1.2.9, which@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" - dependencies: - isexe "^2.0.0" - -wordwrap@^1.0.0, wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - -ws@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-4.0.0.tgz#bfe1da4c08eeb9780b986e0e4d10eccd7345999f" - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - -y18n@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" - integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yargs-parser@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" - dependencies: - camelcase "^4.1.0" - -yargs@^10.0.3: - version "10.1.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^8.1.0" +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@babel/code-frame@npm:^7.0.0-beta.35": + version: 7.24.7 + resolution: "@babel/code-frame@npm:7.24.7" + dependencies: + "@babel/highlight": ^7.24.7 + picocolors: ^1.0.0 + checksum: 830e62cd38775fdf84d612544251ce773d544a8e63df667728cc9e0126eeef14c6ebda79be0f0bc307e8318316b7f58c27ce86702e0a1f5c321d842eb38ffda4 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-validator-identifier@npm:7.24.7" + checksum: 6799ab117cefc0ecd35cd0b40ead320c621a298ecac88686a14cffceaac89d80cdb3c178f969861bf5fa5e4f766648f9161ea0752ecfe080d8e89e3147270257 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/highlight@npm:7.24.7" + dependencies: + "@babel/helper-validator-identifier": ^7.24.7 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + picocolors: ^1.0.0 + checksum: 5cd3a89f143671c4ac129960024ba678b669e6fc673ce078030f5175002d1d3d52bc10b22c5b916a6faf644b5028e9a4bd2bb264d053d9b05b6a98690f1d46f1 + languageName: node + linkType: hard + +"@csstools/selector-resolve-nested@npm:^1.1.0": + version: 1.1.0 + resolution: "@csstools/selector-resolve-nested@npm:1.1.0" + peerDependencies: + postcss-selector-parser: ^6.0.13 + checksum: bb7591e790cf6112157870f8ba3ebb7018924b88f49feff51ab07476ceca3b290cae900734e0aad30d308add07e07082f0e61625b3931572c04952c5531df2b2 + languageName: node + linkType: hard + +"@csstools/selector-specificity@npm:^3.1.1": + version: 3.1.1 + resolution: "@csstools/selector-specificity@npm:3.1.1" + peerDependencies: + postcss-selector-parser: ^6.0.13 + checksum: 3786a6afea97b08ad739ee8f4004f7e0a9e25049cee13af809dbda6462090744012a54bd9275a44712791e8f103f85d21641f14e81799f9dab946b0459a5e1ef + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: ^7.1.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.1 + lru-cache: ^10.0.1 + socks-proxy-agent: ^8.0.3 + checksum: 67de7b88cc627a79743c88bab35e023e23daf13831a8aa4e15f998b92f5507b644d8ffc3788afc8e64423c612e0785a6a92b74782ce368f49a6746084b50d874 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: ^7.3.5 + checksum: d960cab4b93adcb31ce223bfb75c5714edbd55747342efb67dcc2f25e023d930a7af6ece3e75f2f459b6f38fc14d031c766f116cd124fdc937fd33112579e820 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@rollup/rollup-android-arm-eabi@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.18.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-android-arm64@npm:4.18.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.18.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.18.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.18.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.18.0" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.18.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.18.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.18.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.18.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.18.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.18.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.18.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.18.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.18.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.18.0": + version: 4.18.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.18.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@types/estree@npm:1.0.5": + version: 1.0.5 + resolution: "@types/estree@npm:1.0.5" + checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a + languageName: node + linkType: hard + +"abab@npm:^2.0.0": + version: 2.0.6 + resolution: "abab@npm:2.0.6" + checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 + languageName: node + linkType: hard + +"acorn-globals@npm:^4.1.0": + version: 4.3.4 + resolution: "acorn-globals@npm:4.3.4" + dependencies: + acorn: ^6.0.1 + acorn-walk: ^6.0.1 + checksum: c31bfde102d8a104835e9591c31dd037ec771449f9c86a6b1d2ac3c7c336694f828cfabba7687525b094f896a854affbf1afe6e1b12c0d998be6bab5d49c9663 + languageName: node + linkType: hard + +"acorn-jsx@npm:^3.0.0": + version: 3.0.1 + resolution: "acorn-jsx@npm:3.0.1" + dependencies: + acorn: ^3.0.4 + checksum: 43f1302dabfd263674e029537558be832b4bb8baa095a17823bf0ca0509e779deddcb39ab7c398a3f0de406dbf5e6d32dce87da24188ad52397701aa6ebcb6b2 + languageName: node + linkType: hard + +"acorn-walk@npm:^6.0.1": + version: 6.2.0 + resolution: "acorn-walk@npm:6.2.0" + checksum: ea241a5d96338f1e8030aafae72a91ff0ec4360e2775e44a2fdb2eb618b07fc309e000a5126056631ac7f00fe8bd9bbd23fcb6d018eee4ba11086eb36c1b2e61 + languageName: node + linkType: hard + +"acorn@npm:^3.0.4": + version: 3.3.0 + resolution: "acorn@npm:3.3.0" + bin: + acorn: ./bin/acorn + checksum: d24aee1c838a3467c5ab493601ed4b646e4fd0599ca19b16f47f764e7929d0ffcb4d536935283a8d823d64ca3817d27dd5f93830bb86f592249d9feb0fcf78f9 + languageName: node + linkType: hard + +"acorn@npm:^5.5.0, acorn@npm:^5.5.3": + version: 5.7.4 + resolution: "acorn@npm:5.7.4" + bin: + acorn: bin/acorn + checksum: f51392a4d25c7705fadb890f784c59cde4ac1c5452ccd569fa59bd2191b7951b4a6398348ab7ea08a54f0bc0a56c13776710f4e1bae9de441e4d33e2015ad1e0 + languageName: node + linkType: hard + +"acorn@npm:^6.0.1": + version: 6.4.2 + resolution: "acorn@npm:6.4.2" + bin: + acorn: bin/acorn + checksum: 44b07053729db7f44d28343eed32247ed56dc4a6ec6dff2b743141ecd6b861406bbc1c20bf9d4f143ea7dd08add5dc8c290582756539bc03a8db605050ce2fb4 + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: ^4.3.4 + checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv-keywords@npm:^2.1.0": + version: 2.1.1 + resolution: "ajv-keywords@npm:2.1.1" + peerDependencies: + ajv: ^5.0.0 + checksum: 82b3d691e321b2fafd6a0887c0ee09859f9cac54ea5b28881ab867017e984d1bedca0b5ac0ccbedf0b9abda7ebf10eddce6bb1cd67600f9d2a46fe5a47bf015a + languageName: node + linkType: hard + +"ajv@npm:^5.2.3, ajv@npm:^5.3.0": + version: 5.5.2 + resolution: "ajv@npm:5.5.2" + dependencies: + co: ^4.6.0 + fast-deep-equal: ^1.0.0 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.3.0 + checksum: a69645c843e1676b0ae1c5192786e546427f808f386d26127c6585479378066c64341ceec0b127b6789d79628e71d2a732d402f575b98f9262db230d7b715a94 + languageName: node + linkType: hard + +"ajv@npm:^6.12.3": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + +"ansi-escapes@npm:^3.0.0": + version: 3.2.0 + resolution: "ansi-escapes@npm:3.2.0" + checksum: 0f94695b677ea742f7f1eed961f7fd8d05670f744c6ad1f8f635362f6681dcfbc1575cb05b43abc7bb6d67e25a75fb8c7ea8f2a57330eb2c76b33f18cb2cef0a + languageName: node + linkType: hard + +"ansi-regex@npm:^2.0.0": + version: 2.1.1 + resolution: "ansi-regex@npm:2.1.1" + checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1 + languageName: node + linkType: hard + +"ansi-regex@npm:^3.0.0": + version: 3.0.1 + resolution: "ansi-regex@npm:3.0.1" + checksum: 09daf180c5f59af9850c7ac1bd7fda85ba596cc8cbeb210826e90755f06c818af86d9fa1e6e8322fab2c3b9e9b03f56c537b42241139f824dd75066a1e7257cc + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^2.2.1": + version: 2.2.1 + resolution: "ansi-styles@npm:2.2.1" + checksum: ebc0e00381f2a29000d1dac8466a640ce11943cef3bda3cd0020dc042e31e1058ab59bf6169cd794a54c3a7338a61ebc404b7c91e004092dd20e028c432c9c2c + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"anymatch@npm:^2.0.0": + version: 2.0.0 + resolution: "anymatch@npm:2.0.0" + dependencies: + micromatch: ^3.1.4 + normalize-path: ^2.1.1 + checksum: f7bb1929842b4585cdc28edbb385767d499ce7d673f96a8f11348d2b2904592ffffc594fe9229b9a1e9e4dccb9329b7692f9f45e6a11dcefbb76ecdc9ab740f6 + languageName: node + linkType: hard + +"append-transform@npm:^0.4.0": + version: 0.4.0 + resolution: "append-transform@npm:0.4.0" + dependencies: + default-require-extensions: ^1.0.0 + checksum: f5edcf48e3327e8c9594d3ff57ea250401c1cda8dd2460704025fca5ef304b31cdba6e4ad522101ca69bd2245835add4831427bb18a7eb454ec275af08be11d0 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 + languageName: node + linkType: hard + +"arr-diff@npm:^2.0.0": + version: 2.0.0 + resolution: "arr-diff@npm:2.0.0" + dependencies: + arr-flatten: ^1.0.1 + checksum: b56e8d34e8c8d8dba40de3235c61e3ef4e3626486d6d1c83c34fba4fe6187eff96ffde872100e834e8931e724a96ab9dbd71b0bf0068ba5a3deb7d19cb596892 + languageName: node + linkType: hard + +"arr-diff@npm:^4.0.0": + version: 4.0.0 + resolution: "arr-diff@npm:4.0.0" + checksum: ea7c8834842ad3869297f7915689bef3494fd5b102ac678c13ffccab672d3d1f35802b79e90c4cfec2f424af3392e44112d1ccf65da34562ed75e049597276a0 + languageName: node + linkType: hard + +"arr-flatten@npm:^1.0.1, arr-flatten@npm:^1.1.0": + version: 1.1.0 + resolution: "arr-flatten@npm:1.1.0" + checksum: 963fe12564fca2f72c055f3f6c206b9e031f7c433a0c66ca9858b484821f248c5b1e5d53c8e4989d80d764cd776cf6d9b160ad05f47bdc63022bfd63b5455e22 + languageName: node + linkType: hard + +"arr-union@npm:^3.1.0": + version: 3.1.0 + resolution: "arr-union@npm:3.1.0" + checksum: b5b0408c6eb7591143c394f3be082fee690ddd21f0fdde0a0a01106799e847f67fcae1b7e56b0a0c173290e29c6aca9562e82b300708a268bc8f88f3d6613cb9 + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.5 + is-array-buffer: ^3.0.4 + checksum: 53524e08f40867f6a9f35318fafe467c32e45e9c682ba67b11943e167344d2febc0f6977a17e699b05699e805c3e8f073d876f8bbf1b559ed494ad2cd0fae09e + languageName: node + linkType: hard + +"array-equal@npm:^1.0.0": + version: 1.0.2 + resolution: "array-equal@npm:1.0.2" + checksum: 5c37df0cad330516d1255663dfa4fa761fb0ea63878f535aa70dfefe5499853a8b372faf0a27b91781ca1230f4b4333bbeb751e9b1748527d96df2bee30032ea + languageName: node + linkType: hard + +"array-unique@npm:^0.2.1": + version: 0.2.1 + resolution: "array-unique@npm:0.2.1" + checksum: 899deaf07abedf17ee89a757c7bcc9253fb248a7f6c394a1fec9ec3f3ac244314feb3048efee80ed7fdcb047960e32d7c234291bfd26b78ced668c346d9f4e3c + languageName: node + linkType: hard + +"array-unique@npm:^0.3.2": + version: 0.3.2 + resolution: "array-unique@npm:0.3.2" + checksum: da344b89cfa6b0a5c221f965c21638bfb76b57b45184a01135382186924f55973cd9b171d4dad6bf606c6d9d36b0d721d091afdc9791535ead97ccbe78f8a888 + languageName: node + linkType: hard + +"array.prototype.reduce@npm:^1.0.6": + version: 1.0.7 + resolution: "array.prototype.reduce@npm:1.0.7" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-array-method-boxes-properly: ^1.0.0 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + is-string: ^1.0.7 + checksum: 90303617bd70c8e9a81ebff041d3e10fad1a97f163699cb015b7c84a3f9e6960d9bb161a30f1d0309d6e476f166af5668c1e24f7add3202213d25f7c7f15475d + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: ^1.0.1 + call-bind: ^1.0.5 + define-properties: ^1.2.1 + es-abstract: ^1.22.3 + es-errors: ^1.2.1 + get-intrinsic: ^1.2.3 + is-array-buffer: ^3.0.4 + is-shared-array-buffer: ^1.0.2 + checksum: 352259cba534dcdd969c92ab002efd2ba5025b2e3b9bead3973150edbdf0696c629d7f4b3f061c5931511e8207bdc2306da614703c820b45dabce39e3daf7e3e + languageName: node + linkType: hard + +"arrify@npm:^1.0.1": + version: 1.0.1 + resolution: "arrify@npm:1.0.1" + checksum: 745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 + languageName: node + linkType: hard + +"asn1@npm:~0.2.3": + version: 0.2.6 + resolution: "asn1@npm:0.2.6" + dependencies: + safer-buffer: ~2.1.0 + checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d + languageName: node + linkType: hard + +"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": + version: 1.0.0 + resolution: "assert-plus@npm:1.0.0" + checksum: 19b4340cb8f0e6a981c07225eacac0e9d52c2644c080198765d63398f0075f83bbc0c8e95474d54224e297555ad0d631c1dcd058adb1ddc2437b41a6b424ac64 + languageName: node + linkType: hard + +"assign-symbols@npm:^1.0.0": + version: 1.0.0 + resolution: "assign-symbols@npm:1.0.0" + checksum: c0eb895911d05b6b2d245154f70461c5e42c107457972e5ebba38d48967870dee53bcdf6c7047990586daa80fab8dab3cc6300800fbd47b454247fdedd859a2c + languageName: node + linkType: hard + +"astral-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "astral-regex@npm:1.0.0" + checksum: 93417fc0879531cd95ace2560a54df865c9461a3ac0714c60cbbaa5f1f85d2bee85489e78d82f70b911b71ac25c5f05fc5a36017f44c9bb33c701bee229ff848 + languageName: node + linkType: hard + +"async-limiter@npm:~1.0.0": + version: 1.0.1 + resolution: "async-limiter@npm:1.0.1" + checksum: 2b849695b465d93ad44c116220dee29a5aeb63adac16c1088983c339b0de57d76e82533e8e364a93a9f997f28bbfc6a92948cefc120652bd07f3b59f8d75cf2b + languageName: node + linkType: hard + +"async@npm:^2.1.4": + version: 2.6.4 + resolution: "async@npm:2.6.4" + dependencies: + lodash: ^4.17.14 + checksum: a52083fb32e1ebe1d63e5c5624038bb30be68ff07a6c8d7dfe35e47c93fc144bd8652cbec869e0ac07d57dde387aa5f1386be3559cdee799cb1f789678d88e19 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"atob@npm:^2.1.2": + version: 2.1.2 + resolution: "atob@npm:2.1.2" + bin: + atob: bin/atob.js + checksum: dfeeeb70090c5ebea7be4b9f787f866686c645d9f39a0d184c817252d0cf08455ed25267d79c03254d3be1f03ac399992a792edcd5ffb9c91e097ab5ef42833a + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: ^1.0.0 + checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3 + languageName: node + linkType: hard + +"aws-sign2@npm:~0.7.0": + version: 0.7.0 + resolution: "aws-sign2@npm:0.7.0" + checksum: b148b0bb0778098ad8cf7e5fc619768bcb51236707ca1d3e5b49e41b171166d8be9fdc2ea2ae43d7decf02989d0aaa3a9c4caa6f320af95d684de9b548a71525 + languageName: node + linkType: hard + +"aws4@npm:^1.8.0": + version: 1.13.0 + resolution: "aws4@npm:1.13.0" + checksum: 71594a17a5f7b1a9151ef515500c18f1029caa51e2cb65c1b5b324d9bd8dac89896a9e296825d4e6befdcd612d7fc3b0d8042c667555a56df3ee1ab15d4d9b35 + languageName: node + linkType: hard + +"babel-code-frame@npm:^6.22.0, babel-code-frame@npm:^6.26.0": + version: 6.26.0 + resolution: "babel-code-frame@npm:6.26.0" + dependencies: + chalk: ^1.1.3 + esutils: ^2.0.2 + js-tokens: ^3.0.2 + checksum: 9410c3d5a921eb02fa409675d1a758e493323a49e7b9dddb7a2a24d47e61d39ab1129dd29f9175836eac9ce8b1d4c0a0718fcdc57ce0b865b529fd250dbab313 + languageName: node + linkType: hard + +"babel-core@npm:^6.0.0, babel-core@npm:^6.26.0": + version: 6.26.3 + resolution: "babel-core@npm:6.26.3" + dependencies: + babel-code-frame: ^6.26.0 + babel-generator: ^6.26.0 + babel-helpers: ^6.24.1 + babel-messages: ^6.23.0 + babel-register: ^6.26.0 + babel-runtime: ^6.26.0 + babel-template: ^6.26.0 + babel-traverse: ^6.26.0 + babel-types: ^6.26.0 + babylon: ^6.18.0 + convert-source-map: ^1.5.1 + debug: ^2.6.9 + json5: ^0.5.1 + lodash: ^4.17.4 + minimatch: ^3.0.4 + path-is-absolute: ^1.0.1 + private: ^0.1.8 + slash: ^1.0.0 + source-map: ^0.5.7 + checksum: 3d6a37e5c69ea7f7d66c2a261cbd7219197f2f938700e6ebbabb6d84a03f2bf86691ffa066866dcb49ba6c4bd702d347c9e0e147660847d709705cf43c964752 + languageName: node + linkType: hard + +"babel-generator@npm:^6.18.0, babel-generator@npm:^6.26.0": + version: 6.26.1 + resolution: "babel-generator@npm:6.26.1" + dependencies: + babel-messages: ^6.23.0 + babel-runtime: ^6.26.0 + babel-types: ^6.26.0 + detect-indent: ^4.0.0 + jsesc: ^1.3.0 + lodash: ^4.17.4 + source-map: ^0.5.7 + trim-right: ^1.0.1 + checksum: 5397f4d4d1243e7157e3336be96c10fcb1f29f73bf2d9842229c71764d9a6431397d249483a38c4d8b1581459e67be4df6f32d26b1666f02d0f5bfc2c2f25193 + languageName: node + linkType: hard + +"babel-helpers@npm:^6.24.1": + version: 6.24.1 + resolution: "babel-helpers@npm:6.24.1" + dependencies: + babel-runtime: ^6.22.0 + babel-template: ^6.24.1 + checksum: 751c6010e18648eebae422adfea5f3b5eff70d592d693bfe0f53346227d74b38e6cd2553c4c18de1e64faac585de490eccbd3ab86ba0885bdac42ed4478bc6b0 + languageName: node + linkType: hard + +"babel-jest@npm:^22.4.4": + version: 22.4.4 + resolution: "babel-jest@npm:22.4.4" + dependencies: + babel-plugin-istanbul: ^4.1.5 + babel-preset-jest: ^22.4.4 + peerDependencies: + babel-core: ^6.0.0 || ^7.0.0-0 + checksum: 68501a59c0a040aa18e987ac0b3bdf8f5bcfe21d75beca0644cae7dc610c118cf7684eaf77742d49ca7ceb434448a93968106cc2d029a1831e5837317da699ac + languageName: node + linkType: hard + +"babel-messages@npm:^6.23.0": + version: 6.23.0 + resolution: "babel-messages@npm:6.23.0" + dependencies: + babel-runtime: ^6.22.0 + checksum: c8075c17587a33869e1a5bd0a5b73bbe395b68188362dacd5418debbc7c8fd784bcd3295e81ee7e410dc2c2655755add6af03698c522209f6a68334c15e6d6ca + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^4.1.5": + version: 4.1.6 + resolution: "babel-plugin-istanbul@npm:4.1.6" + dependencies: + babel-plugin-syntax-object-rest-spread: ^6.13.0 + find-up: ^2.1.0 + istanbul-lib-instrument: ^1.10.1 + test-exclude: ^4.2.1 + checksum: 38456e3e426ffba8e708e1995ad527c62a666cf59fe809687a8c521d0acad52b92dac8fe17d4f2b93c593f19b6fd808b69a5d66729449af7662413f4a84e8a1c + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^22.4.4": + version: 22.4.4 + resolution: "babel-plugin-jest-hoist@npm:22.4.4" + checksum: 9e22209b773b4ad06444e512671b697a5a2ae069269f217d609ea12f3a9cc4d4127ff356640dad544e69707926af8df03487695065abecc6f2e3eb9cefb850ff + languageName: node + linkType: hard + +"babel-plugin-syntax-object-rest-spread@npm:^6.13.0": + version: 6.13.0 + resolution: "babel-plugin-syntax-object-rest-spread@npm:6.13.0" + checksum: 14083f2783c760f5f199160f48e42ad4505fd35fc7cf9c4530812b176705259562b77db6d3ddc5e3cbce9e9b2b61ec9db3065941f0949b68e77cae3e395a6eef + languageName: node + linkType: hard + +"babel-preset-jest@npm:^22.4.4": + version: 22.4.4 + resolution: "babel-preset-jest@npm:22.4.4" + dependencies: + babel-plugin-jest-hoist: ^22.4.4 + babel-plugin-syntax-object-rest-spread: ^6.13.0 + checksum: 69a70fa37a3a7bcb9ba37c8eae72e9add910f3bf2848923eeff8c128e0156c814c6304f9629149742986584120c32fd827bf6215c69223a0b3efaabe3ae98386 + languageName: node + linkType: hard + +"babel-register@npm:^6.26.0": + version: 6.26.0 + resolution: "babel-register@npm:6.26.0" + dependencies: + babel-core: ^6.26.0 + babel-runtime: ^6.26.0 + core-js: ^2.5.0 + home-or-tmp: ^2.0.0 + lodash: ^4.17.4 + mkdirp: ^0.5.1 + source-map-support: ^0.4.15 + checksum: 75d5fe060e4850dbdbd5f56db2928cd0b6b6c93a65ba5f2a991465af4dc3f4adf46d575138f228b2169b1e25e3b4a7cdd16515a355fea41b873321bf56467583 + languageName: node + linkType: hard + +"babel-runtime@npm:^6.22.0, babel-runtime@npm:^6.26.0": + version: 6.26.0 + resolution: "babel-runtime@npm:6.26.0" + dependencies: + core-js: ^2.4.0 + regenerator-runtime: ^0.11.0 + checksum: 8aeade94665e67a73c1ccc10f6fd42ba0c689b980032b70929de7a6d9a12eb87ef51902733f8fefede35afea7a5c3ef7e916a64d503446c1eedc9e3284bd3d50 + languageName: node + linkType: hard + +"babel-template@npm:^6.16.0, babel-template@npm:^6.24.1, babel-template@npm:^6.26.0": + version: 6.26.0 + resolution: "babel-template@npm:6.26.0" + dependencies: + babel-runtime: ^6.26.0 + babel-traverse: ^6.26.0 + babel-types: ^6.26.0 + babylon: ^6.18.0 + lodash: ^4.17.4 + checksum: 028dd57380f09b5641b74874a19073c53c4fb3f1696e849575aae18f8c80eaf21db75209057db862f3b893ce2cd9b795d539efa591b58f4a0fb011df0a56fbed + languageName: node + linkType: hard + +"babel-traverse@npm:^6.18.0, babel-traverse@npm:^6.26.0": + version: 6.26.0 + resolution: "babel-traverse@npm:6.26.0" + dependencies: + babel-code-frame: ^6.26.0 + babel-messages: ^6.23.0 + babel-runtime: ^6.26.0 + babel-types: ^6.26.0 + babylon: ^6.18.0 + debug: ^2.6.8 + globals: ^9.18.0 + invariant: ^2.2.2 + lodash: ^4.17.4 + checksum: fca037588d2791ae0409f1b7aa56075b798699cccc53ea04d82dd1c0f97b9e7ab17065f7dd3ecd69101d7874c9c8fd5e0f88fa53abbae1fe94e37e6b81ebcb8d + languageName: node + linkType: hard + +"babel-types@npm:^6.18.0, babel-types@npm:^6.26.0": + version: 6.26.0 + resolution: "babel-types@npm:6.26.0" + dependencies: + babel-runtime: ^6.26.0 + esutils: ^2.0.2 + lodash: ^4.17.4 + to-fast-properties: ^1.0.3 + checksum: d16b0fa86e9b0e4c2623be81d0a35679faff24dd2e43cde4ca58baf49f3e39415a011a889e6c2259ff09e1228e4c3a3db6449a62de59e80152fe1ce7398fde76 + languageName: node + linkType: hard + +"babylon@npm:^6.18.0": + version: 6.18.0 + resolution: "babylon@npm:6.18.0" + bin: + babylon: ./bin/babylon.js + checksum: 0777ae0c735ce1cbfc856d627589ed9aae212b84fb0c03c368b55e6c5d3507841780052808d0ad46e18a2ba516e93d55eeed8cd967f3b2938822dfeccfb2a16d + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"base@npm:^0.11.1": + version: 0.11.2 + resolution: "base@npm:0.11.2" + dependencies: + cache-base: ^1.0.1 + class-utils: ^0.3.5 + component-emitter: ^1.2.1 + define-property: ^1.0.0 + isobject: ^3.0.1 + mixin-deep: ^1.2.0 + pascalcase: ^0.1.1 + checksum: a4a146b912e27eea8f66d09cb0c9eab666f32ce27859a7dfd50f38cd069a2557b39f16dba1bc2aecb3b44bf096738dd207b7970d99b0318423285ab1b1994edd + languageName: node + linkType: hard + +"bcrypt-pbkdf@npm:^1.0.0": + version: 1.0.2 + resolution: "bcrypt-pbkdf@npm:1.0.2" + dependencies: + tweetnacl: ^0.14.3 + checksum: 4edfc9fe7d07019609ccf797a2af28351736e9d012c8402a07120c4453a3b789a15f2ee1530dc49eee8f7eb9379331a8dd4b3766042b9e502f74a68e7f662291 + languageName: node + linkType: hard + +"bindings@npm:^1.5.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: 1.0.0 + checksum: 65b6b48095717c2e6105a021a7da4ea435aa8d3d3cd085cb9e85bcb6e5773cf318c4745c3f7c504412855940b585bdf9b918236612a1c7a7942491de176f1ae7 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^1.8.2": + version: 1.8.5 + resolution: "braces@npm:1.8.5" + dependencies: + expand-range: ^1.8.1 + preserve: ^0.2.0 + repeat-element: ^1.1.2 + checksum: 9ea4fb6af8c0a224e515678d7be27ddc450bd974620542a3436188d7fae263f7987406d12ea36c1d92a862e7317b089aa3a0ebda7f1f1663b9332beddc92249e + languageName: node + linkType: hard + +"braces@npm:^2.3.1": + version: 2.3.2 + resolution: "braces@npm:2.3.2" + dependencies: + arr-flatten: ^1.1.0 + array-unique: ^0.3.2 + extend-shallow: ^2.0.1 + fill-range: ^4.0.0 + isobject: ^3.0.1 + repeat-element: ^1.1.2 + snapdragon: ^0.8.1 + snapdragon-node: ^2.0.1 + split-string: ^3.0.2 + to-regex: ^3.0.1 + checksum: e30dcb6aaf4a31c8df17d848aa283a65699782f75ad61ae93ec25c9729c66cf58e66f0000a9fec84e4add1135bb7da40f7cb9601b36bebcfa9ca58e8d5c07de0 + languageName: node + linkType: hard + +"browser-process-hrtime@npm:^1.0.0": + version: 1.0.0 + resolution: "browser-process-hrtime@npm:1.0.0" + checksum: e30f868cdb770b1201afb714ad1575dd86366b6e861900884665fb627109b3cc757c40067d3bfee1ff2a29c835257ea30725a8018a9afd02ac1c24b408b1e45f + languageName: node + linkType: hard + +"browser-resolve@npm:^1.11.2": + version: 1.11.3 + resolution: "browser-resolve@npm:1.11.3" + dependencies: + resolve: 1.1.7 + checksum: 431bfc1a17406362a3010a2c35503eb7d1253dbcb8081c1ce236ddb0b954a33d52dcaf0b07f64c0f20394d6eeec1be4f6551da3734ce9ed5dcc38e876c96d5d5 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: ^0.4.0 + checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.3 + resolution: "cacache@npm:18.0.3" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^2.0.1 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b717fd9b36e9c3279bfde4545c3a8f6d5a539b084ee26a9504d48f83694beb724057d26e090b97540f9cc62bea18b9f6cf671c50e18fb7dac60eda9db691714f + languageName: node + linkType: hard + +"cache-base@npm:^1.0.1": + version: 1.0.1 + resolution: "cache-base@npm:1.0.1" + dependencies: + collection-visit: ^1.0.0 + component-emitter: ^1.2.1 + get-value: ^2.0.6 + has-value: ^1.0.0 + isobject: ^3.0.1 + set-value: ^2.0.0 + to-object-path: ^0.3.0 + union-value: ^1.0.0 + unset-value: ^1.0.0 + checksum: 9114b8654fe2366eedc390bad0bcf534e2f01b239a888894e2928cb58cdc1e6ea23a73c6f3450dcfd2058aa73a8a981e723cd1e7c670c047bf11afdc65880107 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + set-function-length: ^1.2.1 + checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029 + languageName: node + linkType: hard + +"caller-path@npm:^0.1.0": + version: 0.1.0 + resolution: "caller-path@npm:0.1.0" + dependencies: + callsites: ^0.2.0 + checksum: f4f2216897d2c150e30d06c6a9243115e500184433b42d597f0b8816fda8f6b7f782dba39fc37310dcc67c90e1112729709d3bb9e10983552e76632250b075f3 + languageName: node + linkType: hard + +"callsites@npm:^0.2.0": + version: 0.2.0 + resolution: "callsites@npm:0.2.0" + checksum: 7ed36d5565ec37600fd9642b6e1e00915c078bf2d1c536115c45fe9c07969b50a7d7db61384e533625fa9fee3e6187740784722f0636d52a99419111284cc236 + languageName: node + linkType: hard + +"callsites@npm:^2.0.0": + version: 2.0.0 + resolution: "callsites@npm:2.0.0" + checksum: be2f67b247df913732b7dec1ec0bbfcdbaea263e5a95968b19ec7965affae9496b970e3024317e6d4baa8e28dc6ba0cec03f46fdddc2fdcc51396600e53c2623 + languageName: node + linkType: hard + +"camelcase@npm:^4.1.0": + version: 4.1.0 + resolution: "camelcase@npm:4.1.0" + checksum: 9683356daf9b64fae4b30c91f8ceb1f34f22746e03d1804efdbe738357d38b47f206cdd71efcf2ed72018b2e88eeb8ec3f79adb09c02f1253a4b6d5d405ff2ae + languageName: node + linkType: hard + +"capture-exit@npm:^1.2.0": + version: 1.2.0 + resolution: "capture-exit@npm:1.2.0" + dependencies: + rsvp: ^3.3.3 + checksum: 8d38f66d36cdc891fc5371315c0e6e8e094bfb86d769f0781d8acf1551ef513a43f5b8bd4c984255fc85ce4cc7a111f334d2aae454b86eef535d44ddec344ec7 + languageName: node + linkType: hard + +"caseless@npm:~0.12.0": + version: 0.12.0 + resolution: "caseless@npm:0.12.0" + checksum: b43bd4c440aa1e8ee6baefee8063b4850fd0d7b378f6aabc796c9ec8cb26d27fb30b46885350777d9bd079c5256c0e1329ad0dc7c2817e0bb466810ebb353751 + languageName: node + linkType: hard + +"chalk@npm:^1.1.3": + version: 1.1.3 + resolution: "chalk@npm:1.1.3" + dependencies: + ansi-styles: ^2.2.1 + escape-string-regexp: ^1.0.2 + has-ansi: ^2.0.0 + strip-ansi: ^3.0.0 + supports-color: ^2.0.0 + checksum: 9d2ea6b98fc2b7878829eec223abcf404622db6c48396a9b9257f6d0ead2acf18231ae368d6a664a83f272b0679158da12e97b5229f794939e555cc574478acd + languageName: node + linkType: hard + +"chalk@npm:^2.0.0, chalk@npm:^2.0.1, chalk@npm:^2.1.0, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"chardet@npm:^0.4.0": + version: 0.4.2 + resolution: "chardet@npm:0.4.2" + checksum: fec7a41f78b9c09ed29c44990a9a0fce7a946ab81298231045db5786719fef664cd9ff4217dd7159a9c35c81f32cede04619c45f9a96965ca2c1d8883f8cf433 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"ci-info@npm:^1.5.0": + version: 1.6.0 + resolution: "ci-info@npm:1.6.0" + checksum: dfc058f60c3889793befe77349c3cd1a5452d21bed5ff60cb34382bee7bbdccc5c4c2ff2b77eab8c411c54d84f93963dacf593b9d901b43b93b7ad2a422aa163 + languageName: node + linkType: hard + +"circular-json@npm:^0.3.1": + version: 0.3.3 + resolution: "circular-json@npm:0.3.3" + checksum: 61c5e5c244cc752f2d81fa337260327bf9dcb0332eb801039f21b69383050318fd4b30541ce4ebfe6fdd62993a38cb1be3a0d777abfeadf723479a4fc2da70ed + languageName: node + linkType: hard + +"class-utils@npm:^0.3.5": + version: 0.3.6 + resolution: "class-utils@npm:0.3.6" + dependencies: + arr-union: ^3.1.0 + define-property: ^0.2.5 + isobject: ^3.0.0 + static-extend: ^0.1.1 + checksum: be108900801e639e50f96a7e4bfa8867c753a7750a7603879f3981f8b0a89cba657497a2d5f40cd4ea557ff15d535a100818bb486baf6e26fe5d7872e75f1078 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cli-cursor@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-cursor@npm:2.1.0" + dependencies: + restore-cursor: ^2.0.0 + checksum: d88e97bfdac01046a3ffe7d49f06757b3126559d7e44aa2122637eb179284dc6cd49fca2fac4f67c19faaf7e6dab716b6fe1dfcd309977407d8c7578ec2d044d + languageName: node + linkType: hard + +"cli-width@npm:^2.0.0": + version: 2.2.1 + resolution: "cli-width@npm:2.2.1" + checksum: 3c21b897a2ff551ae5b3c3ab32c866ed2965dcf7fb442f81adf0e27f4a397925c8f84619af7bcc6354821303f6ee9b2aa31d248306174f32c287986158cf4eed + languageName: node + linkType: hard + +"cliui@npm:^4.0.0": + version: 4.1.0 + resolution: "cliui@npm:4.1.0" + dependencies: + string-width: ^2.1.1 + strip-ansi: ^4.0.0 + wrap-ansi: ^2.0.0 + checksum: 0f8a77e55c66ab4400f8cc24a46e496af186ebfbf301709341a24c26d398200c2ccc5cac892566d586c3c393a079974f34f0ce05210df336f97b70805c02865e + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 + languageName: node + linkType: hard + +"code-point-at@npm:^1.0.0": + version: 1.1.0 + resolution: "code-point-at@npm:1.1.0" + checksum: 17d5666611f9b16d64fdf48176d9b7fb1c7d1c1607a189f7e600040a11a6616982876af148230336adb7d8fe728a559f743a4e29db3747e3b1a32fa7f4529681 + languageName: node + linkType: hard + +"collection-visit@npm:^1.0.0": + version: 1.0.0 + resolution: "collection-visit@npm:1.0.0" + dependencies: + map-visit: ^1.0.0 + object-visit: ^1.0.0 + checksum: 15d9658fe6eb23594728346adad5433b86bb7a04fd51bbab337755158722f9313a5376ef479de5b35fbc54140764d0d39de89c339f5d25b959ed221466981da9 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.6, combined-stream@npm:~1.0.6": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"component-emitter@npm:^1.2.1": + version: 1.3.1 + resolution: "component-emitter@npm:1.3.1" + checksum: 94550aa462c7bd5a61c1bc480e28554aa306066930152d1b1844a0dd3845d4e5db7e261ddec62ae184913b3e59b55a2ad84093b9d3596a8f17c341514d6c483d + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"concat-stream@npm:^1.6.0": + version: 1.6.2 + resolution: "concat-stream@npm:1.6.2" + dependencies: + buffer-from: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^2.2.2 + typedarray: ^0.0.6 + checksum: 1ef77032cb4459dcd5187bd710d6fc962b067b64ec6a505810de3d2b8cc0605638551b42f8ec91edf6fcd26141b32ef19ad749239b58fae3aba99187adc32285 + languageName: node + linkType: hard + +"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.1": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 + languageName: node + linkType: hard + +"copy-descriptor@npm:^0.1.0": + version: 0.1.1 + resolution: "copy-descriptor@npm:0.1.1" + checksum: d4b7b57b14f1d256bb9aa0b479241048afd7f5bcf22035fc7b94e8af757adeae247ea23c1a774fe44869fd5694efba4a969b88d966766c5245fdee59837fe45b + languageName: node + linkType: hard + +"core-js@npm:^2.4.0, core-js@npm:^2.5.0": + version: 2.6.12 + resolution: "core-js@npm:2.6.12" + checksum: 44fa9934a85f8c78d61e0c8b7b22436330471ffe59ec5076fe7f324d6e8cf7f824b14b1c81ca73608b13bdb0fef035bd820989bf059767ad6fa13123bb8bd016 + languageName: node + linkType: hard + +"core-util-is@npm:1.0.2": + version: 1.0.2 + resolution: "core-util-is@npm:1.0.2" + checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + +"cross-spawn@npm:^5.0.1, cross-spawn@npm:^5.1.0": + version: 5.1.0 + resolution: "cross-spawn@npm:5.1.0" + dependencies: + lru-cache: ^4.0.1 + shebang-command: ^1.2.0 + which: ^1.2.9 + checksum: 726939c9954fc70c20e538923feaaa33bebc253247d13021737c3c7f68cdc3e0a57f720c0fe75057c0387995349f3f12e20e9bfdbf12274db28019c7ea4ec166 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 + languageName: node + linkType: hard + +"cssom@npm:0.3.x, cssom@npm:>= 0.3.2 < 0.4.0": + version: 0.3.8 + resolution: "cssom@npm:0.3.8" + checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 + languageName: node + linkType: hard + +"cssstyle@npm:^1.0.0": + version: 1.4.0 + resolution: "cssstyle@npm:1.4.0" + dependencies: + cssom: 0.3.x + checksum: 7efb9731d68dd042f32e0e3bbc7c1096653ba521f21ab1c5b158862321e4fcbfb51070641b834fadc8dd070a634dd43f328177e00d1b8481b5143a3e09f3d3f6 + languageName: node + linkType: hard + +"dashdash@npm:^1.12.0": + version: 1.14.1 + resolution: "dashdash@npm:1.14.1" + dependencies: + assert-plus: ^1.0.0 + checksum: 3634c249570f7f34e3d34f866c93f866c5b417f0dd616275decae08147dcdf8fccfaa5947380ccfb0473998ea3a8057c0b4cd90c875740ee685d0624b2983598 + languageName: node + linkType: hard + +"data-urls@npm:^1.0.0": + version: 1.1.0 + resolution: "data-urls@npm:1.1.0" + dependencies: + abab: ^2.0.0 + whatwg-mimetype: ^2.2.0 + whatwg-url: ^7.0.0 + checksum: dc4bd9621df0dff336d7c4c0517c792488ef3cf11cd37e72ab80f3a7f0a0aa14bad677ac97cf22c87c6eb9518e58b98590e1c8c756b56240940f0e470c81612e + languageName: node + linkType: hard + +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: ce24348f3c6231223b216da92e7e6a57a12b4af81a23f27eff8feabdf06acfb16c00639c8b705ca4d167f761cfc756e27e5f065d0a1f840c10b907fdaf8b988c + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: dbb3200edcb7c1ef0d68979834f81d64fd8cab2f7691b3a4c6b97e67f22182f3ec2c8602efd7b76997b55af6ff8bce485829c1feda4fa2165a6b71fb7baa4269 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: 7f0bf8720b7414ca719eedf1846aeec392f2054d7af707c5dc9a753cc77eb8625f067fa901e0b5127e831f9da9056138d894b9c2be79c27a21f6db5824f009c2 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.3.4": + version: 4.3.5 + resolution: "debug@npm:4.3.5" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 7c002b51e256257f936dda09eb37167df952758c57badf6bf44bdc40b89a4bcb8e5a0a2e4c7b53f97c69e2970dd5272d33a757378a12c8f8e64ea7bf99e8e86e + languageName: node + linkType: hard + +"debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.8, debug@npm:^2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + +"debug@npm:^3.1.0": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c + languageName: node + linkType: hard + +"decamelize@npm:^1.1.1": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa + languageName: node + linkType: hard + +"decode-uri-component@npm:^0.2.0": + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 + languageName: node + linkType: hard + +"deep-is@npm:~0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + languageName: node + linkType: hard + +"default-require-extensions@npm:^1.0.0": + version: 1.0.0 + resolution: "default-require-extensions@npm:1.0.0" + dependencies: + strip-bom: ^2.0.0 + checksum: 8be10a3e1f997c8a579c3f00fdd8117c30fa3a12d2ac544dc1ee93fd6138c77fba69fe69546c76d0299d7f74c26416301b9a1dc775557e99991a6ebe2f850df4 + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + gopd: ^1.0.1 + checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b + languageName: node + linkType: hard + +"define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: ^1.0.1 + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 + languageName: node + linkType: hard + +"define-property@npm:^0.2.5": + version: 0.2.5 + resolution: "define-property@npm:0.2.5" + dependencies: + is-descriptor: ^0.1.0 + checksum: 85af107072b04973b13f9e4128ab74ddfda48ec7ad2e54b193c0ffb57067c4ce5b7786a7b4ae1f24bd03e87c5d18766b094571810b314d7540f86d4354dbd394 + languageName: node + linkType: hard + +"define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "define-property@npm:1.0.0" + dependencies: + is-descriptor: ^1.0.0 + checksum: 5fbed11dace44dd22914035ba9ae83ad06008532ca814d7936a53a09e897838acdad5b108dd0688cc8d2a7cf0681acbe00ee4136cf36743f680d10517379350a + languageName: node + linkType: hard + +"define-property@npm:^2.0.2": + version: 2.0.2 + resolution: "define-property@npm:2.0.2" + dependencies: + is-descriptor: ^1.0.2 + isobject: ^3.0.1 + checksum: 3217ed53fc9eed06ba8da6f4d33e28c68a82e2f2a8ab4d562c4920d8169a166fe7271453675e6c69301466f36a65d7f47edf0cf7f474b9aa52a5ead9c1b13c99 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"detect-indent@npm:^4.0.0": + version: 4.0.0 + resolution: "detect-indent@npm:4.0.0" + dependencies: + repeating: ^2.0.0 + checksum: 328f273915c1610899bc7d4784ce874413d0a698346364cd3ee5d79afba1c5cf4dbc97b85a801e20f4d903c0598bd5096af32b800dfb8696b81464ccb3dfda2c + languageName: node + linkType: hard + +"detect-newline@npm:^2.1.0": + version: 2.1.0 + resolution: "detect-newline@npm:2.1.0" + checksum: c55146fd5b97a9ce914f17f85a01466c9e8679289e2d390588b027a58f2e090dbc38457923072369c603b8904f982f87b78fee17e48d5706f35571642f4599f8 + languageName: node + linkType: hard + +"diff@npm:^3.2.0": + version: 3.5.0 + resolution: "diff@npm:3.5.0" + checksum: 00842950a6551e26ce495bdbce11047e31667deea546527902661f25cc2e73358967ebc78cf86b1a9736ec3e14286433225f9970678155753a6291c3bca5227b + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: ^2.0.2 + checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8 + languageName: node + linkType: hard + +"domexception@npm:^1.0.1": + version: 1.0.1 + resolution: "domexception@npm:1.0.1" + dependencies: + webidl-conversions: ^4.0.2 + checksum: f564a9c0915dcb83ceefea49df14aaed106b1468fbe505119e8bcb0b77e242534f3aba861978537c0fc9dc6f35b176d0ffc77b3e342820fb27a8f215e7ae4d52 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"ecc-jsbn@npm:~0.1.1": + version: 0.1.2 + resolution: "ecc-jsbn@npm:0.1.2" + dependencies: + jsbn: ~0.1.0 + safer-buffer: ^2.1.0 + checksum: 22fef4b6203e5f31d425f5b711eb389e4c6c2723402e389af394f8411b76a488fa414d309d866e2b577ce3e8462d344205545c88a8143cc21752a5172818888a + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"error-ex@npm:^1.2.0": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: ^0.2.1 + checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 + languageName: node + linkType: hard + +"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": + version: 1.23.3 + resolution: "es-abstract@npm:1.23.3" + dependencies: + array-buffer-byte-length: ^1.0.1 + arraybuffer.prototype.slice: ^1.0.3 + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + data-view-buffer: ^1.0.1 + data-view-byte-length: ^1.0.1 + data-view-byte-offset: ^1.0.0 + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-set-tostringtag: ^2.0.3 + es-to-primitive: ^1.2.1 + function.prototype.name: ^1.1.6 + get-intrinsic: ^1.2.4 + get-symbol-description: ^1.0.2 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + has-proto: ^1.0.3 + has-symbols: ^1.0.3 + hasown: ^2.0.2 + internal-slot: ^1.0.7 + is-array-buffer: ^3.0.4 + is-callable: ^1.2.7 + is-data-view: ^1.0.1 + is-negative-zero: ^2.0.3 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.3 + is-string: ^1.0.7 + is-typed-array: ^1.1.13 + is-weakref: ^1.0.2 + object-inspect: ^1.13.1 + object-keys: ^1.1.1 + object.assign: ^4.1.5 + regexp.prototype.flags: ^1.5.2 + safe-array-concat: ^1.1.2 + safe-regex-test: ^1.0.3 + string.prototype.trim: ^1.2.9 + string.prototype.trimend: ^1.0.8 + string.prototype.trimstart: ^1.0.8 + typed-array-buffer: ^1.0.2 + typed-array-byte-length: ^1.0.1 + typed-array-byte-offset: ^1.0.2 + typed-array-length: ^1.0.6 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.15 + checksum: f840cf161224252512f9527306b57117192696571e07920f777cb893454e32999206198b4f075516112af6459daca282826d1735c450528470356d09eff3a9ae + languageName: node + linkType: hard + +"es-array-method-boxes-properly@npm:^1.0.0": + version: 1.0.0 + resolution: "es-array-method-boxes-properly@npm:1.0.0" + checksum: 2537fcd1cecf187083890bc6f5236d3a26bf39237433587e5bf63392e88faae929dbba78ff0120681a3f6f81c23fe3816122982c160d63b38c95c830b633b826 + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: ^1.2.4 + checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 + languageName: node + linkType: hard + +"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" + dependencies: + es-errors: ^1.3.0 + checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" + dependencies: + get-intrinsic: ^1.2.4 + has-tostringtag: ^1.0.2 + hasown: ^2.0.1 + checksum: 7227fa48a41c0ce83e0377b11130d324ac797390688135b8da5c28994c0165be8b252e15cd1de41e1325e5a5412511586960213e88f9ab4a5e7d028895db5129 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: ^1.1.4 + is-date-object: ^1.0.1 + is-symbol: ^1.0.2 + checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed + languageName: node + linkType: hard + +"esbuild@npm:^0.21.3": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": 0.21.5 + "@esbuild/android-arm": 0.21.5 + "@esbuild/android-arm64": 0.21.5 + "@esbuild/android-x64": 0.21.5 + "@esbuild/darwin-arm64": 0.21.5 + "@esbuild/darwin-x64": 0.21.5 + "@esbuild/freebsd-arm64": 0.21.5 + "@esbuild/freebsd-x64": 0.21.5 + "@esbuild/linux-arm": 0.21.5 + "@esbuild/linux-arm64": 0.21.5 + "@esbuild/linux-ia32": 0.21.5 + "@esbuild/linux-loong64": 0.21.5 + "@esbuild/linux-mips64el": 0.21.5 + "@esbuild/linux-ppc64": 0.21.5 + "@esbuild/linux-riscv64": 0.21.5 + "@esbuild/linux-s390x": 0.21.5 + "@esbuild/linux-x64": 0.21.5 + "@esbuild/netbsd-x64": 0.21.5 + "@esbuild/openbsd-x64": 0.21.5 + "@esbuild/sunos-x64": 0.21.5 + "@esbuild/win32-arm64": 0.21.5 + "@esbuild/win32-ia32": 0.21.5 + "@esbuild/win32-x64": 0.21.5 + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 2911c7b50b23a9df59a7d6d4cdd3a4f85855787f374dce751148dbb13305e0ce7e880dde1608c2ab7a927fc6cec3587b80995f7fc87a64b455f8b70b55fd8ec1 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + +"escodegen@npm:^1.9.1": + version: 1.14.3 + resolution: "escodegen@npm:1.14.3" + dependencies: + esprima: ^4.0.1 + estraverse: ^4.2.0 + esutils: ^2.0.2 + optionator: ^0.8.1 + source-map: ~0.6.1 + dependenciesMeta: + source-map: + optional: true + bin: + escodegen: bin/escodegen.js + esgenerate: bin/esgenerate.js + checksum: 381cdc4767ecdb221206bbbab021b467bbc2a6f5c9a99c9e6353040080bdd3dfe73d7604ad89a47aca6ea7d58bc635f6bd3fbc8da9a1998e9ddfa8372362ccd0 + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^2.9.0": + version: 2.10.0 + resolution: "eslint-config-prettier@npm:2.10.0" + dependencies: + get-stdin: ^5.0.1 + peerDependencies: + eslint: ">=3.14.1" + bin: + eslint-config-prettier-check: bin/cli.js + checksum: 3a5ddd340882027dc0f923c09f2bf8d279b08751b032f6a2a73ef15a8b66e41b7309ce9d928c9355f6d7e55a91f8e3f775297ae7154185efd1f73d63dee1ddb0 + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:^2.6.0": + version: 2.7.0 + resolution: "eslint-plugin-prettier@npm:2.7.0" + dependencies: + fast-diff: ^1.1.1 + jest-docblock: ^21.0.0 + peerDependencies: + prettier: ">= 0.11.0" + checksum: 6cb6440d0cac858e65c3bb9c82cc3e257118d1631eaa69b5caa10b39e70af39053dc696a2f431d40e1f8912b98311c8154fc1dbfde9f1b85fe82f6d6533e9f30 + languageName: node + linkType: hard + +"eslint-scope@npm:^3.7.1": + version: 3.7.3 + resolution: "eslint-scope@npm:3.7.3" + dependencies: + esrecurse: ^4.1.0 + estraverse: ^4.1.1 + checksum: 9b9b81fc1056f02db2ad0130dc494d54a2bf6417e2777e38c7aca8a659261870ad1686c98adf2d5501558cf3fb5c6f977a7893027c99307b5c44e9b3fe53c3a5 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^1.0.0": + version: 1.3.0 + resolution: "eslint-visitor-keys@npm:1.3.0" + checksum: 37a19b712f42f4c9027e8ba98c2b06031c17e0c0a4c696cd429bd9ee04eb43889c446f2cd545e1ff51bef9593fcec94ecd2c2ef89129fcbbf3adadbef520376a + languageName: node + linkType: hard + +"eslint@npm:^4.17.0": + version: 4.19.1 + resolution: "eslint@npm:4.19.1" + dependencies: + ajv: ^5.3.0 + babel-code-frame: ^6.22.0 + chalk: ^2.1.0 + concat-stream: ^1.6.0 + cross-spawn: ^5.1.0 + debug: ^3.1.0 + doctrine: ^2.1.0 + eslint-scope: ^3.7.1 + eslint-visitor-keys: ^1.0.0 + espree: ^3.5.4 + esquery: ^1.0.0 + esutils: ^2.0.2 + file-entry-cache: ^2.0.0 + functional-red-black-tree: ^1.0.1 + glob: ^7.1.2 + globals: ^11.0.1 + ignore: ^3.3.3 + imurmurhash: ^0.1.4 + inquirer: ^3.0.6 + is-resolvable: ^1.0.0 + js-yaml: ^3.9.1 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.3.0 + lodash: ^4.17.4 + minimatch: ^3.0.2 + mkdirp: ^0.5.1 + natural-compare: ^1.4.0 + optionator: ^0.8.2 + path-is-inside: ^1.0.2 + pluralize: ^7.0.0 + progress: ^2.0.0 + regexpp: ^1.0.1 + require-uncached: ^1.0.3 + semver: ^5.3.0 + strip-ansi: ^4.0.0 + strip-json-comments: ~2.0.1 + table: 4.0.2 + text-table: ~0.2.0 + bin: + eslint: ./bin/eslint.js + checksum: f0c617ecc255bcf5bda30c248e9fe54a113d7396292a5bd5ab1e81e53ee87331646ed1991d5589efa5878f0d534ab04ba267a25c7f86c49f72bd1256ef6ad09d + languageName: node + linkType: hard + +"espree@npm:^3.5.4": + version: 3.5.4 + resolution: "espree@npm:3.5.4" + dependencies: + acorn: ^5.5.0 + acorn-jsx: ^3.0.0 + checksum: cbc8da4cafcc45f802fc561adece3a74d86f7bfbc2434bca34fadcf9dabb3337c25d2d202e4e1a4ff73b0105e887945fb75c375081067fc23ecaae86f5cb6400 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 + languageName: node + linkType: hard + +"esquery@npm:^1.0.0": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: ^5.1.0 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + languageName: node + linkType: hard + +"esrecurse@npm:^4.1.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: ^5.2.0 + checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1, estraverse@npm:^4.2.0": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 + languageName: node + linkType: hard + +"exec-sh@npm:^0.2.0": + version: 0.2.2 + resolution: "exec-sh@npm:0.2.2" + dependencies: + merge: ^1.2.0 + checksum: 3ec5f99c8f7c4bebfeed1a797818f8754de00415d60a99f327e7f970834ca85252c449bf4b2efbff4c11e76eccc6b976a1956a5394a612d8e3d412185f59b0c0 + languageName: node + linkType: hard + +"execa@npm:^0.7.0": + version: 0.7.0 + resolution: "execa@npm:0.7.0" + dependencies: + cross-spawn: ^5.0.1 + get-stream: ^3.0.0 + is-stream: ^1.1.0 + npm-run-path: ^2.0.0 + p-finally: ^1.0.0 + signal-exit: ^3.0.0 + strip-eof: ^1.0.0 + checksum: dd70206d74b7217bf678ec9f04dddedc82f425df4c1d70e34c9f429d630ec407819e4bd42e3af2618981a4a3a1be000c9b651c0637be486cdab985160c20337c + languageName: node + linkType: hard + +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 + languageName: node + linkType: hard + +"expand-brackets@npm:^0.1.4": + version: 0.1.5 + resolution: "expand-brackets@npm:0.1.5" + dependencies: + is-posix-bracket: ^0.1.0 + checksum: 71b2971027eb026f055a1c310d24d18a266427b84fc18cadddcedb4de2e07aaef6084e252406b20e58f7aa7613f6bfbe6136962955562529a66675bf49bb10d7 + languageName: node + linkType: hard + +"expand-brackets@npm:^2.1.4": + version: 2.1.4 + resolution: "expand-brackets@npm:2.1.4" + dependencies: + debug: ^2.3.3 + define-property: ^0.2.5 + extend-shallow: ^2.0.1 + posix-character-classes: ^0.1.0 + regex-not: ^1.0.0 + snapdragon: ^0.8.1 + to-regex: ^3.0.1 + checksum: 1781d422e7edfa20009e2abda673cadb040a6037f0bd30fcd7357304f4f0c284afd420d7622722ca4a016f39b6d091841ab57b401c1f7e2e5131ac65b9f14fa1 + languageName: node + linkType: hard + +"expand-range@npm:^1.8.1": + version: 1.8.2 + resolution: "expand-range@npm:1.8.2" + dependencies: + fill-range: ^2.1.0 + checksum: ca773ec06838d7d53cfd835b7d58c9c662a3773e5d57647ca6f83e50218efd93e29b5ee6cc1ea9c5651794e9005562cad28c4911ea06aac27323a05f3c6b787d + languageName: node + linkType: hard + +"expect@npm:^22.4.0": + version: 22.4.3 + resolution: "expect@npm:22.4.3" + dependencies: + ansi-styles: ^3.2.0 + jest-diff: ^22.4.3 + jest-get-type: ^22.4.3 + jest-matcher-utils: ^22.4.3 + jest-message-util: ^22.4.3 + jest-regex-util: ^22.4.3 + checksum: 10c3128cfcacbce822466134c4870d2e27c36ab24114d346f0c1a4f97638a6249dc39403361b541cc0bfb6dab10c1923beb940f8427fe19b0b79a9e6621aaab2 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"extend-shallow@npm:^2.0.1": + version: 2.0.1 + resolution: "extend-shallow@npm:2.0.1" + dependencies: + is-extendable: ^0.1.0 + checksum: 8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8 + languageName: node + linkType: hard + +"extend-shallow@npm:^3.0.0, extend-shallow@npm:^3.0.2": + version: 3.0.2 + resolution: "extend-shallow@npm:3.0.2" + dependencies: + assign-symbols: ^1.0.0 + is-extendable: ^1.0.1 + checksum: a920b0cd5838a9995ace31dfd11ab5e79bf6e295aa566910ce53dff19f4b1c0fda2ef21f26b28586c7a2450ca2b42d97bd8c0f5cec9351a819222bf861e02461 + languageName: node + linkType: hard + +"extend@npm:~3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 + languageName: node + linkType: hard + +"external-editor@npm:^2.0.4": + version: 2.2.0 + resolution: "external-editor@npm:2.2.0" + dependencies: + chardet: ^0.4.0 + iconv-lite: ^0.4.17 + tmp: ^0.0.33 + checksum: 5e164e033ed93fcbfe311b5760b98e292685ea58e6e62737365de2d625d0043d60b36c5b537795c496b520db568d9e5f5109994e869ca0d9b6b443aacf533efe + languageName: node + linkType: hard + +"extglob@npm:^0.3.1": + version: 0.3.2 + resolution: "extglob@npm:0.3.2" + dependencies: + is-extglob: ^1.0.0 + checksum: c1c8d5365fe4992fc5b007140cbb37292ffadcd767cb602606de4d572ff96f38620e42855f8cb75020c050aacf1eeb51212dd6312de46eab42e2200277b5fc45 + languageName: node + linkType: hard + +"extglob@npm:^2.0.4": + version: 2.0.4 + resolution: "extglob@npm:2.0.4" + dependencies: + array-unique: ^0.3.2 + define-property: ^1.0.0 + expand-brackets: ^2.1.4 + extend-shallow: ^2.0.1 + fragment-cache: ^0.2.1 + regex-not: ^1.0.0 + snapdragon: ^0.8.1 + to-regex: ^3.0.1 + checksum: a41531b8934735b684cef5e8c5a01d0f298d7d384500ceca38793a9ce098125aab04ee73e2d75d5b2901bc5dddd2b64e1b5e3bf19139ea48bac52af4a92f1d00 + languageName: node + linkType: hard + +"extsprintf@npm:1.3.0": + version: 1.3.0 + resolution: "extsprintf@npm:1.3.0" + checksum: cee7a4a1e34cffeeec18559109de92c27517e5641991ec6bab849aa64e3081022903dd53084f2080d0d2530803aa5ee84f1e9de642c365452f9e67be8f958ce2 + languageName: node + linkType: hard + +"extsprintf@npm:^1.2.0": + version: 1.4.1 + resolution: "extsprintf@npm:1.4.1" + checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^1.0.0": + version: 1.1.0 + resolution: "fast-deep-equal@npm:1.1.0" + checksum: 69b4c9534d9805f13a341aa72f69641d0b9ae3cc8beb25c64e68a257241c7bb34370266db27ae4fc3c4da0518448c01a5f587a096a211471c86a38facd9a1486 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"fast-diff@npm:^1.1.1": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fast-levenshtein@npm:~2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: 2.1.1 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 + languageName: node + linkType: hard + +"figures@npm:^2.0.0": + version: 2.0.0 + resolution: "figures@npm:2.0.0" + dependencies: + escape-string-regexp: ^1.0.5 + checksum: 081beb16ea57d1716f8447c694f637668322398b57017b20929376aaf5def9823b35245b734cdd87e4832dc96e9c6f46274833cada77bfe15e5f980fea1fd21f + languageName: node + linkType: hard + +"file-entry-cache@npm:^2.0.0": + version: 2.0.0 + resolution: "file-entry-cache@npm:2.0.0" + dependencies: + flat-cache: ^1.2.1 + object-assign: ^4.0.1 + checksum: e22ca2b848709b76ab80d3d4fb5908669a63f35f54d4129e9952959ab58217dabd6d34e5f385c2360c6bd6f561bf52fe4ad80aa3d27160a6454296d6f1e327bf + languageName: node + linkType: hard + +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: b648580bdd893a008c92c7ecc96c3ee57a5e7b6c4c18a9a09b44fb5d36d79146f8e442578bc0e173dc027adf3987e254ba1dfd6e3ec998b7c282873010502144 + languageName: node + linkType: hard + +"filename-regex@npm:^2.0.0": + version: 2.0.1 + resolution: "filename-regex@npm:2.0.1" + checksum: ac181f8184cf49d2f08889a446995537c3967e6f6195752d903b69c7d85f134425fb1446c4e384e77390bac488b60a9658805debc5a91e8c0bc9f81340505371 + languageName: node + linkType: hard + +"fileset@npm:^2.0.2": + version: 2.0.3 + resolution: "fileset@npm:2.0.3" + dependencies: + glob: ^7.0.3 + minimatch: ^3.0.3 + checksum: b083d3bcc0edd76ae7d413b8f2bd5a5205d9c54f92726e7d416d8b55bebdf03f25006e0f5fd130f5843e42cef7c7e0a3baed874b69e8a98671f1eef8a9e7e907 + languageName: node + linkType: hard + +"fill-range@npm:^2.1.0": + version: 2.2.4 + resolution: "fill-range@npm:2.2.4" + dependencies: + is-number: ^2.1.0 + isobject: ^2.0.0 + randomatic: ^3.0.0 + repeat-element: ^1.1.2 + repeat-string: ^1.5.2 + checksum: ee7cb386c983bf7ff8aa120164c8b857a937c9d2b9c4ddf47af22f9d2bb1bd03dfa821946d7246f1631e86816562dd60059e081948d0804ce2ac0ac83f7edc61 + languageName: node + linkType: hard + +"fill-range@npm:^4.0.0": + version: 4.0.0 + resolution: "fill-range@npm:4.0.0" + dependencies: + extend-shallow: ^2.0.1 + is-number: ^3.0.0 + repeat-string: ^1.6.1 + to-regex-range: ^2.1.0 + checksum: dbb5102467786ab42bc7a3ec7380ae5d6bfd1b5177b2216de89e4a541193f8ba599a6db84651bd2c58c8921db41b8cc3d699ea83b477342d3ce404020f73c298 + languageName: node + linkType: hard + +"find-up@npm:^1.0.0": + version: 1.1.2 + resolution: "find-up@npm:1.1.2" + dependencies: + path-exists: ^2.0.0 + pinkie-promise: ^2.0.0 + checksum: a2cb9f4c9f06ee3a1e92ed71d5aed41ac8ae30aefa568132f6c556fac7678a5035126153b59eaec68da78ac409eef02503b2b059706bdbf232668d7245e3240a + languageName: node + linkType: hard + +"find-up@npm:^2.1.0": + version: 2.1.0 + resolution: "find-up@npm:2.1.0" + dependencies: + locate-path: ^2.0.0 + checksum: 43284fe4da09f89011f08e3c32cd38401e786b19226ea440b75386c1b12a4cb738c94969808d53a84f564ede22f732c8409e3cfc3f7fb5b5c32378ad0bbf28bd + languageName: node + linkType: hard + +"flat-cache@npm:^1.2.1": + version: 1.3.4 + resolution: "flat-cache@npm:1.3.4" + dependencies: + circular-json: ^0.3.1 + graceful-fs: ^4.1.2 + rimraf: ~2.6.2 + write: ^0.2.1 + checksum: 95605618db585e09881579b28d7b7e53215654451103425d1eb3fde2427ede7d71abf791f624c8c24d9dc0f7a4a3a3fa4ce8d146c846a31aa3b089380a89b1f3 + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: ^1.1.3 + checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 + languageName: node + linkType: hard + +"for-in@npm:^1.0.1, for-in@npm:^1.0.2": + version: 1.0.2 + resolution: "for-in@npm:1.0.2" + checksum: 09f4ae93ce785d253ac963d94c7f3432d89398bf25ac7a24ed034ca393bf74380bdeccc40e0f2d721a895e54211b07c8fad7132e8157827f6f7f059b70b4043d + languageName: node + linkType: hard + +"for-own@npm:^0.1.4": + version: 0.1.5 + resolution: "for-own@npm:0.1.5" + dependencies: + for-in: ^1.0.1 + checksum: 07eb0a2e98eb55ce13b56dd11ef4fb5e619ba7380aaec388b9eec1946153d74fa734ce409e8434020557e9489a50c34bc004d55754f5863bf7d77b441d8dee8c + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.2.1 + resolution: "foreground-child@npm:3.2.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 3e2e844d6003c96d70affe8ae98d7eaaba269a868c14d997620c088340a8775cd5d2d9043e6ceebae1928d8d9a874911c4d664b9a267e8995945df20337aebc0 + languageName: node + linkType: hard + +"forever-agent@npm:~0.6.1": + version: 0.6.1 + resolution: "forever-agent@npm:0.6.1" + checksum: 766ae6e220f5fe23676bb4c6a99387cec5b7b62ceb99e10923376e27bfea72f3c3aeec2ba5f45f3f7ba65d6616965aa7c20b15002b6860833bb6e394dea546a8 + languageName: node + linkType: hard + +"form-data@npm:~2.3.2": + version: 2.3.3 + resolution: "form-data@npm:2.3.3" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.6 + mime-types: ^2.1.12 + checksum: 10c1780fa13dbe1ff3100114c2ce1f9307f8be10b14bf16e103815356ff567b6be39d70fc4a40f8990b9660012dc24b0f5e1dde1b6426166eb23a445ba068ca3 + languageName: node + linkType: hard + +"fragment-cache@npm:^0.2.1": + version: 0.2.1 + resolution: "fragment-cache@npm:0.2.1" + dependencies: + map-cache: ^0.2.2 + checksum: 1cbbd0b0116b67d5790175de0038a11df23c1cd2e8dcdbade58ebba5594c2d641dade6b4f126d82a7b4a6ffc2ea12e3d387dbb64ea2ae97cf02847d436f60fdc + languageName: node + linkType: hard + +"frappe-gantt@workspace:.": + version: 0.0.0-use.local + resolution: "frappe-gantt@workspace:." + dependencies: + eslint: ^4.17.0 + eslint-config-prettier: ^2.9.0 + eslint-plugin-prettier: ^2.6.0 + jest: ^22.2.1 + postcss-nesting: ^12.1.2 + prettier: 3.2.5 + vite: ^5.2.10 + languageName: unknown + linkType: soft + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:^1.2.3": + version: 1.2.13 + resolution: "fsevents@npm:1.2.13" + dependencies: + bindings: ^1.5.0 + nan: ^2.12.1 + checksum: ae855aa737aaa2f9167e9f70417cf6e45a5cd11918e1fee9923709a0149be52416d765433b4aeff56c789b1152e718cd1b13ddec6043b78cdda68260d86383c1 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@^1.2.3#~builtin": + version: 1.2.13 + resolution: "fsevents@patch:fsevents@npm%3A1.2.13#~builtin::version=1.2.13&hash=18f3a7" + dependencies: + bindings: ^1.5.0 + nan: ^2.12.1 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@~2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + functions-have-names: ^1.2.3 + checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 + languageName: node + linkType: hard + +"functional-red-black-tree@npm:^1.0.1": + version: 1.0.1 + resolution: "functional-red-black-tree@npm:1.0.1" + checksum: ca6c170f37640e2d94297da8bb4bf27a1d12bea3e00e6a3e007fd7aa32e37e000f5772acf941b4e4f3cf1c95c3752033d0c509af157ad8f526e7f00723b9eb9f + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 + languageName: node + linkType: hard + +"get-caller-file@npm:^1.0.1": + version: 1.0.3 + resolution: "get-caller-file@npm:1.0.3" + checksum: 2b90a7f848896abcebcdc0acc627a435bcf05b9cd280599bc980ebfcdc222416c3df12c24c4845f69adc4346728e8966f70b758f9369f3534182791dfbc25c05 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: ^1.3.0 + function-bind: ^1.1.2 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + hasown: ^2.0.0 + checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951 + languageName: node + linkType: hard + +"get-stdin@npm:^5.0.1": + version: 5.0.1 + resolution: "get-stdin@npm:5.0.1" + checksum: f9784638ad3e68a0a8bdc031aedf0fca749843cd134956fbd4f3bbac17c359e0fb9210343fcbed72ee79fb19d8e4c49b7a6e742cc5d44e94ac1405e9371d4b3e + languageName: node + linkType: hard + +"get-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "get-stream@npm:3.0.0" + checksum: 36142f46005ed74ce3a45c55545ec4e7da8e243554179e345a786baf144e5c4a35fb7bdc49fadfa9f18bd08000589b6fe364abdadfc4e1eb0e1b9914a6bb9c56 + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" + dependencies: + call-bind: ^1.0.5 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + checksum: e1cb53bc211f9dbe9691a4f97a46837a553c4e7caadd0488dc24ac694db8a390b93edd412b48dcdd0b4bbb4c595de1709effc75fc87c0839deedc6968f5bd973 + languageName: node + linkType: hard + +"get-value@npm:^2.0.3, get-value@npm:^2.0.6": + version: 2.0.6 + resolution: "get-value@npm:2.0.6" + checksum: 5c3b99cb5398ea8016bf46ff17afc5d1d286874d2ad38ca5edb6e87d75c0965b0094cb9a9dddef2c59c23d250702323539a7fbdd870620db38c7e7d7ec87c1eb + languageName: node + linkType: hard + +"getpass@npm:^0.1.1": + version: 0.1.7 + resolution: "getpass@npm:0.1.7" + dependencies: + assert-plus: ^1.0.0 + checksum: ab18d55661db264e3eac6012c2d3daeafaab7a501c035ae0ccb193c3c23e9849c6e29b6ac762b9c2adae460266f925d55a3a2a3a3c8b94be2f222df94d70c046 + languageName: node + linkType: hard + +"glob-base@npm:^0.3.0": + version: 0.3.0 + resolution: "glob-base@npm:0.3.0" + dependencies: + glob-parent: ^2.0.0 + is-glob: ^2.0.0 + checksum: d0e3054a7df6033936980a3454ee6c91bb6661300b86b7a616d822a521e089afff1f5fbbd2582f9cee9f5823aed31d90244ee2e2e55f425103d42558615df294 + languageName: node + linkType: hard + +"glob-parent@npm:^2.0.0": + version: 2.0.0 + resolution: "glob-parent@npm:2.0.0" + dependencies: + is-glob: ^2.0.0 + checksum: 734fc461d9d2753dd490dd072df6ce41fe4ebb60e9319b108bc538707b21780af3a61c3961ec2264131fad5d3d9a493e013a775aef11a69ac2f49fd7d8f46457 + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.4.1 + resolution: "glob@npm:10.4.1" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^3.1.2 + minimatch: ^9.0.4 + minipass: ^7.1.2 + path-scurry: ^1.11.1 + bin: + glob: dist/esm/bin.mjs + checksum: 5d33c686c80bf6877f4284adf99a8c3cbb2a6eccbc92342943fe5d4b42c01d78c1881f2223d950c92a938d0f857e12e37b86a8e5483ab2141822e053b67d0dde + languageName: node + linkType: hard + +"glob@npm:^7.0.3, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.1.1 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"globals@npm:^11.0.1": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e + languageName: node + linkType: hard + +"globals@npm:^9.18.0": + version: 9.18.0 + resolution: "globals@npm:9.18.0" + checksum: e9c066aecfdc5ea6f727344a4246ecc243aaf66ede3bffee10ddc0c73351794c25e727dd046090dcecd821199a63b9de6af299a6e3ba292c8b22f0a80ea32073 + languageName: node + linkType: hard + +"globalthis@npm:^1.0.3": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: ^1.2.1 + gopd: ^1.0.1 + checksum: 39ad667ad9f01476474633a1834a70842041f70a55571e8dcef5fb957980a92da5022db5430fca8aecc5d47704ae30618c0bc877a579c70710c904e9ef06108a + languageName: node + linkType: hard + +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"growly@npm:^1.3.0": + version: 1.3.0 + resolution: "growly@npm:1.3.0" + checksum: 53cdecd4c16d7d9154a9061a9ccb87d602e957502ca69b529d7d1b2436c2c0b700ec544fc6b3e4cd115d59b81e62e44ce86bd0521403b579d3a2a97d7ce72a44 + languageName: node + linkType: hard + +"handlebars@npm:^4.0.3": + version: 4.7.8 + resolution: "handlebars@npm:4.7.8" + dependencies: + minimist: ^1.2.5 + neo-async: ^2.6.2 + source-map: ^0.6.1 + uglify-js: ^3.1.4 + wordwrap: ^1.0.0 + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: 00e68bb5c183fd7b8b63322e6234b5ac8fbb960d712cb3f25587d559c2951d9642df83c04a1172c918c41bcfc81bfbd7a7718bbce93b893e0135fc99edea93ff + languageName: node + linkType: hard + +"har-schema@npm:^2.0.0": + version: 2.0.0 + resolution: "har-schema@npm:2.0.0" + checksum: d8946348f333fb09e2bf24cc4c67eabb47c8e1d1aa1c14184c7ffec1140a49ec8aa78aa93677ae452d71d5fc0fdeec20f0c8c1237291fc2bcb3f502a5d204f9b + languageName: node + linkType: hard + +"har-validator@npm:~5.1.3": + version: 5.1.5 + resolution: "har-validator@npm:5.1.5" + dependencies: + ajv: ^6.12.3 + har-schema: ^2.0.0 + checksum: b998a7269ca560d7f219eedc53e2c664cd87d487e428ae854a6af4573fc94f182fe9d2e3b92ab968249baec7ebaf9ead69cf975c931dc2ab282ec182ee988280 + languageName: node + linkType: hard + +"has-ansi@npm:^2.0.0": + version: 2.0.0 + resolution: "has-ansi@npm:2.0.0" + dependencies: + ansi-regex: ^2.0.0 + checksum: 1b51daa0214440db171ff359d0a2d17bc20061164c57e76234f614c91dbd2a79ddd68dfc8ee73629366f7be45a6df5f2ea9de83f52e1ca24433f2cc78c35d8ec + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b + languageName: node + linkType: hard + +"has-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "has-flag@npm:1.0.0" + checksum: ce3f8ae978e70f16e4bbe17d3f0f6d6c0a3dd3b62a23f97c91d0fda9ed8e305e13baf95cc5bee4463b9f25ac9f5255de113165c5fb285e01b8065b2ac079b301 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: ^1.0.0 + checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: ^1.0.3 + checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d + languageName: node + linkType: hard + +"has-value@npm:^0.3.1": + version: 0.3.1 + resolution: "has-value@npm:0.3.1" + dependencies: + get-value: ^2.0.3 + has-values: ^0.1.4 + isobject: ^2.0.0 + checksum: 29e2a1e6571dad83451b769c7ce032fce6009f65bccace07c2962d3ad4d5530b6743d8f3229e4ecf3ea8e905d23a752c5f7089100c1f3162039fa6dc3976558f + languageName: node + linkType: hard + +"has-value@npm:^1.0.0": + version: 1.0.0 + resolution: "has-value@npm:1.0.0" + dependencies: + get-value: ^2.0.6 + has-values: ^1.0.0 + isobject: ^3.0.0 + checksum: b9421d354e44f03d3272ac39fd49f804f19bc1e4fa3ceef7745df43d6b402053f828445c03226b21d7d934a21ac9cf4bc569396dc312f496ddff873197bbd847 + languageName: node + linkType: hard + +"has-values@npm:^0.1.4": + version: 0.1.4 + resolution: "has-values@npm:0.1.4" + checksum: ab1c4bcaf811ccd1856c11cfe90e62fca9e2b026ebe474233a3d282d8d67e3b59ed85b622c7673bac3db198cb98bd1da2b39300a2f98e453729b115350af49bc + languageName: node + linkType: hard + +"has-values@npm:^1.0.0": + version: 1.0.0 + resolution: "has-values@npm:1.0.0" + dependencies: + is-number: ^3.0.0 + kind-of: ^4.0.0 + checksum: 77e6693f732b5e4cf6c38dfe85fdcefad0fab011af74995c3e83863fabf5e3a836f406d83565816baa0bc0a523c9410db8b990fe977074d61aeb6d8f4fcffa11 + languageName: node + linkType: hard + +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: ^1.1.2 + checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db + languageName: node + linkType: hard + +"home-or-tmp@npm:^2.0.0": + version: 2.0.0 + resolution: "home-or-tmp@npm:2.0.0" + dependencies: + os-homedir: ^1.0.0 + os-tmpdir: ^1.0.1 + checksum: b783c6ffd22f716d82f53e8c781cbe49bc9f4109a89ea86a27951e54c0bd335caf06bd828be2958cd9f4681986df1739558ae786abda6298cdd6d3edc2c362f1 + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd + languageName: node + linkType: hard + +"html-encoding-sniffer@npm:^1.0.2": + version: 1.0.2 + resolution: "html-encoding-sniffer@npm:1.0.2" + dependencies: + whatwg-encoding: ^1.0.1 + checksum: b874df6750451b7642fbe8e998c6bdd2911b0f42ad2927814b717bf1f4b082b0904b6178a1bfbc40117bf5799777993b0825e7713ca0fca49844e5aec03aa0e2 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: ^7.1.0 + debug: ^4.3.4 + checksum: 670858c8f8f3146db5889e1fa117630910101db601fff7d5a8aa637da0abedf68c899f03d3451cac2f83bcc4c3d2dabf339b3aa00ff8080571cceb02c3ce02f3 + languageName: node + linkType: hard + +"http-signature@npm:~1.2.0": + version: 1.2.0 + resolution: "http-signature@npm:1.2.0" + dependencies: + assert-plus: ^1.0.0 + jsprim: ^1.2.2 + sshpk: ^1.7.0 + checksum: 3324598712266a9683585bb84a75dec4fd550567d5e0dd4a0fff6ff3f74348793404d3eeac4918fa0902c810eeee1a86419e4a2e92a164132dfe6b26743fb47c + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.4 + resolution: "https-proxy-agent@npm:7.0.4" + dependencies: + agent-base: ^7.0.2 + debug: 4 + checksum: daaab857a967a2519ddc724f91edbbd388d766ff141b9025b629f92b9408fc83cee8a27e11a907aede392938e9c398e240d643e178408a59e4073539cde8cfe9 + languageName: node + linkType: hard + +"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.17": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: ">= 2.1.2 < 3" + checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"ignore@npm:^3.3.3": + version: 3.3.10 + resolution: "ignore@npm:3.3.10" + checksum: 23e8cc776e367b56615ab21b78decf973a35dfca5522b39d9b47643d8168473b0d1f18dd1321a1bab466a12ea11a2411903f3b21644f4d5461ee0711ec8678bd + languageName: node + linkType: hard + +"import-local@npm:^1.0.0": + version: 1.0.0 + resolution: "import-local@npm:1.0.0" + dependencies: + pkg-dir: ^2.0.0 + resolve-cwd: ^2.0.0 + bin: + import-local-fixture: fixtures/cli.js + checksum: e7918eb5e20dcc755d6aa6b710ef0a346478256a3d7d7cde9e813c8f33019eda0fa3fe7427a9874314512f514c66c8156b7859e75ce8639769f25f2509ebd013 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"inquirer@npm:^3.0.6": + version: 3.3.0 + resolution: "inquirer@npm:3.3.0" + dependencies: + ansi-escapes: ^3.0.0 + chalk: ^2.0.0 + cli-cursor: ^2.1.0 + cli-width: ^2.0.0 + external-editor: ^2.0.4 + figures: ^2.0.0 + lodash: ^4.3.0 + mute-stream: 0.0.7 + run-async: ^2.2.0 + rx-lite: ^4.0.8 + rx-lite-aggregates: ^4.0.8 + string-width: ^2.1.0 + strip-ansi: ^4.0.0 + through: ^2.3.6 + checksum: e8fb13a639a704e83706c838c3a79ca66310a8707f6fa1ec799fa00abd5a95f307ef034cbd4910a0d4bc8efb3fe4af7dca411efa4b6065d205d90a8519856626 + languageName: node + linkType: hard + +"internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" + dependencies: + es-errors: ^1.3.0 + hasown: ^2.0.0 + side-channel: ^1.0.4 + checksum: cadc5eea5d7d9bc2342e93aae9f31f04c196afebb11bde97448327049f492cd7081e18623ae71388aac9cd237b692ca3a105be9c68ac39c1dec679d7409e33eb + languageName: node + linkType: hard + +"invariant@npm:^2.2.2": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: ^1.0.0 + checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 + languageName: node + linkType: hard + +"invert-kv@npm:^1.0.0": + version: 1.0.0 + resolution: "invert-kv@npm:1.0.0" + checksum: aebeee31dda3b3d25ffd242e9a050926e7fe5df642d60953ab183aca1a7d1ffb39922eb2618affb0e850cf2923116f0da1345367759d88d097df5da1f1e1590e + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: 1.1.0 + sprintf-js: ^1.1.3 + checksum: aa15f12cfd0ef5e38349744e3654bae649a34c3b10c77a674a167e99925d1549486c5b14730eebce9fea26f6db9d5e42097b00aa4f9f612e68c79121c71652dc + languageName: node + linkType: hard + +"is-accessor-descriptor@npm:^1.0.1": + version: 1.0.1 + resolution: "is-accessor-descriptor@npm:1.0.1" + dependencies: + hasown: ^2.0.0 + checksum: 8db44c02230a5e9b9dec390a343178791f073d5d5556a400527d2fd67a72d93b226abab2bd4123305c268f5dc22831bfdbd38430441fda82ea9e0b95ddc6b267 + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + checksum: e4e3e6ef0ff2239e75371d221f74bc3c26a03564a22efb39f6bb02609b598917ddeecef4e8c877df2a25888f247a98198959842a5e73236bc7f22cabdf6351a7 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f + languageName: node + linkType: hard + +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: ^1.0.1 + checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 + languageName: node + linkType: hard + +"is-buffer@npm:^1.1.5": + version: 1.1.6 + resolution: "is-buffer@npm:1.1.6" + checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac + languageName: node + linkType: hard + +"is-ci@npm:^1.0.10": + version: 1.2.1 + resolution: "is-ci@npm:1.2.1" + dependencies: + ci-info: ^1.5.0 + bin: + is-ci: bin.js + checksum: eca06c5626e54ec01be6f9114a8f19b3f571602cfe66458e42ccc42e401e2ebbe1bd3b2fcaa93b5896b9c759e964f3c7f4d9b2d0f4fc4ef5dba78a7c4825e0be + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" + dependencies: + hasown: ^2.0.0 + checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c + languageName: node + linkType: hard + +"is-data-descriptor@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-descriptor@npm:1.0.1" + dependencies: + hasown: ^2.0.0 + checksum: fc6da5be5177149d554c5612cc382e9549418ed72f2d3ed5a3e6511b03dd119ae1b2258320ca94931df50b7e9ee012894eccd4ca45bbcadf0d5b27da6faeb15a + languageName: node + linkType: hard + +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" + dependencies: + is-typed-array: ^1.1.13 + checksum: 4ba4562ac2b2ec005fefe48269d6bd0152785458cd253c746154ffb8a8ab506a29d0cfb3b74af87513843776a88e4981ae25c89457bf640a33748eab1a7216b5 + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: ^1.0.0 + checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc + languageName: node + linkType: hard + +"is-descriptor@npm:^0.1.0": + version: 0.1.7 + resolution: "is-descriptor@npm:0.1.7" + dependencies: + is-accessor-descriptor: ^1.0.1 + is-data-descriptor: ^1.0.1 + checksum: 45743109f0bb03f9fa989c34d31ece87cc15792649f147b896a7c4db2906a02fca685867619f4d312e024d7bbd53b945a47c6830d01f5e73efcc6388ac211963 + languageName: node + linkType: hard + +"is-descriptor@npm:^1.0.0, is-descriptor@npm:^1.0.2": + version: 1.0.3 + resolution: "is-descriptor@npm:1.0.3" + dependencies: + is-accessor-descriptor: ^1.0.1 + is-data-descriptor: ^1.0.1 + checksum: 316153b2fd86ac23b0a2f28b77744ae0a4e3c7a54fe52fa70b125d0971eb0a3bcfb562fa8e74537af0dad5bc405cc606726eb501fc748a241c10910deea89cfb + languageName: node + linkType: hard + +"is-dotfile@npm:^1.0.0": + version: 1.0.3 + resolution: "is-dotfile@npm:1.0.3" + checksum: 5257760d998d50ba2d5b4707007c043c69da0b62172f2221505edc6671ff634581c05df494a19d8d7206d248154c2f29f8432193ee199d33b09733e66371fb35 + languageName: node + linkType: hard + +"is-equal-shallow@npm:^0.1.3": + version: 0.1.3 + resolution: "is-equal-shallow@npm:0.1.3" + dependencies: + is-primitive: ^2.0.0 + checksum: 1a296b660b8749ba1449017d9572e81fe8a96764877d5f9739c523a20cc7cdfa49594c16fa17052d0c3ee4711e35fd6919b06bf1b11b7126feab61abb9503ce6 + languageName: node + linkType: hard + +"is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": + version: 0.1.1 + resolution: "is-extendable@npm:0.1.1" + checksum: 3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672 + languageName: node + linkType: hard + +"is-extendable@npm:^1.0.1": + version: 1.0.1 + resolution: "is-extendable@npm:1.0.1" + dependencies: + is-plain-object: ^2.0.4 + checksum: db07bc1e9de6170de70eff7001943691f05b9d1547730b11be01c0ebfe67362912ba743cf4be6fd20a5e03b4180c685dad80b7c509fe717037e3eee30ad8e84f + languageName: node + linkType: hard + +"is-extglob@npm:^1.0.0": + version: 1.0.0 + resolution: "is-extglob@npm:1.0.0" + checksum: 5eea8517feeae5206547c0fc838c1416ec763b30093c286e1965a05f46b74a59ad391f912565f3b67c9c31cab4769ab9c35420e016b608acb47309be8d0d6e94 + languageName: node + linkType: hard + +"is-finite@npm:^1.0.0": + version: 1.1.0 + resolution: "is-finite@npm:1.1.0" + checksum: 532b97ed3d03e04c6bd203984d9e4ba3c0c390efee492bad5d1d1cd1802a68ab27adbd3ef6382f6312bed6c8bb1bd3e325ea79a8dc8fe080ed7a06f5f97b93e7 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^1.0.0": + version: 1.0.0 + resolution: "is-fullwidth-code-point@npm:1.0.0" + dependencies: + number-is-nan: ^1.0.0 + checksum: 4d46a7465a66a8aebcc5340d3b63a56602133874af576a9ca42c6f0f4bd787a743605771c5f246db77da96605fefeffb65fc1dbe862dcc7328f4b4d03edf5a57 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^2.0.0": + version: 2.0.0 + resolution: "is-fullwidth-code-point@npm:2.0.0" + checksum: eef9c6e15f68085fec19ff6a978a6f1b8f48018fd1265035552078ee945573594933b09bbd6f562553e2a241561439f1ef5339276eba68d272001343084cfab8 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-generator-fn@npm:^1.0.0": + version: 1.0.0 + resolution: "is-generator-fn@npm:1.0.0" + checksum: 9ea6404bdcbafc1edf2881e8fc57a7e2e8f48b2c04f24e4e889e670837d538c7e5a6ee645ee5217abb3e327ae511ed143824f8fde9c5c8e83129b20df9d2c78e + languageName: node + linkType: hard + +"is-glob@npm:^2.0.0, is-glob@npm:^2.0.1": + version: 2.0.1 + resolution: "is-glob@npm:2.0.1" + dependencies: + is-extglob: ^1.0.0 + checksum: 089f5f93640072491396a5f075ce73e949a90f35832b782bc49a6b7637d58e392d53cb0b395e059ccab70fcb82ff35d183f6f9ebbcb43227a1e02e3fed5430c9 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: c1e6b23d2070c0539d7b36022d5a94407132411d01aba39ec549af824231f3804b1aea90b5e4e58e807a65d23ceb538ed6e355ce76b267bdd86edb757ffcbdcd + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 + languageName: node + linkType: hard + +"is-number@npm:^2.1.0": + version: 2.1.0 + resolution: "is-number@npm:2.1.0" + dependencies: + kind-of: ^3.0.2 + checksum: d80e041a43a8de31ecc02037d532f1f448ec9c5b6c02fe7ee67bdd45d21cd9a4b3b4cf07e428ae5adafc2f17408c49fcb0a227915916d94a16d576c39e689f60 + languageName: node + linkType: hard + +"is-number@npm:^3.0.0": + version: 3.0.0 + resolution: "is-number@npm:3.0.0" + dependencies: + kind-of: ^3.0.2 + checksum: 0c62bf8e9d72c4dd203a74d8cfc751c746e75513380fef420cda8237e619a988ee43e678ddb23c87ac24d91ac0fe9f22e4ffb1301a50310c697e9d73ca3994e9 + languageName: node + linkType: hard + +"is-number@npm:^4.0.0": + version: 4.0.0 + resolution: "is-number@npm:4.0.0" + checksum: e71962a5ae97400211e6be5946eff2b81d3fa85154dad498bfe2704999e63ac6b3f8591fdb7971a121122cc6e25915c2cfe882ff7b77e243d51b92ca6961267e + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: ^3.0.1 + checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + languageName: node + linkType: hard + +"is-posix-bracket@npm:^0.1.0": + version: 0.1.1 + resolution: "is-posix-bracket@npm:0.1.1" + checksum: 8a6391b41e7acef6898e64b00e06885b28c14b0c76398d3251a6ab1e5350d495dd32ec3f7f88f3f877558ce4b970939356fb315ee607f8f99a1716d4db7bdd40 + languageName: node + linkType: hard + +"is-primitive@npm:^2.0.0": + version: 2.0.0 + resolution: "is-primitive@npm:2.0.0" + checksum: 4d63fe952e31a4bc1d1a65d72f8485f5952407dce8d1cd8d8f070586936ea9ae2df79e0a83956b224aa7776cbbf5767eba3277f28119c36a616b20a439f057c0 + languageName: node + linkType: hard + +"is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 + languageName: node + linkType: hard + +"is-resolvable@npm:^1.0.0": + version: 1.1.0 + resolution: "is-resolvable@npm:1.1.0" + checksum: 2ddff983be0cabc2c8d60246365755f8fb322f5fb9db834740d3e694c635c1b74c1bd674cf221e072fc4bd911ef3f08f2247d390e476f7e80af9092443193c68 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" + dependencies: + call-bind: ^1.0.7 + checksum: a4fff602c309e64ccaa83b859255a43bb011145a42d3f56f67d9268b55bc7e6d98a5981a1d834186ad3105d6739d21547083fe7259c76c0468483fc538e716d8 + languageName: node + linkType: hard + +"is-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "is-stream@npm:1.1.0" + checksum: 063c6bec9d5647aa6d42108d4c59723d2bd4ae42135a2d4db6eadbd49b7ea05b750fd69d279e5c7c45cf9da753ad2c00d8978be354d65aa9f6bb434969c6a2ae + languageName: node + linkType: hard + +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: ^1.0.2 + checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.13": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" + dependencies: + which-typed-array: ^1.1.14 + checksum: 150f9ada183a61554c91e1c4290086d2c100b0dff45f60b028519be72a8db964da403c48760723bf5253979b8dffe7b544246e0e5351dcd05c5fdb1dcc1dc0f0 + languageName: node + linkType: hard + +"is-typedarray@npm:~1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 + languageName: node + linkType: hard + +"is-utf8@npm:^0.2.0": + version: 0.2.1 + resolution: "is-utf8@npm:0.2.1" + checksum: 167ccd2be869fc228cc62c1a28df4b78c6b5485d15a29027d3b5dceb09b383e86a3522008b56dcac14b592b22f0a224388718c2505027a994fd8471465de54b3 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de + languageName: node + linkType: hard + +"is-windows@npm:^1.0.2": + version: 1.0.2 + resolution: "is-windows@npm:1.0.2" + checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 + languageName: node + linkType: hard + +"is-wsl@npm:^1.1.0": + version: 1.1.0 + resolution: "is-wsl@npm:1.1.0" + checksum: ea157d232351e68c92bd62fc541771096942fe72f69dff452dd26dcc31466258c570a3b04b8cda2e01cd2968255b02951b8670d08ea4ed76d6b1a646061ac4fe + languageName: node + linkType: hard + +"isarray@npm:1.0.0, isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e + languageName: node + linkType: hard + +"isobject@npm:^2.0.0": + version: 2.1.0 + resolution: "isobject@npm:2.1.0" + dependencies: + isarray: 1.0.0 + checksum: 811c6f5a866877d31f0606a88af4a45f282544de886bf29f6a34c46616a1ae2ed17076cc6bf34c0128f33eecf7e1fcaa2c82cf3770560d3e26810894e96ae79f + languageName: node + linkType: hard + +"isobject@npm:^3.0.0, isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + +"isstream@npm:~0.1.2": + version: 0.1.2 + resolution: "isstream@npm:0.1.2" + checksum: 1eb2fe63a729f7bdd8a559ab552c69055f4f48eb5c2f03724430587c6f450783c8f1cd936c1c952d0a927925180fcc892ebd5b174236cf1065d4bd5bdb37e963 + languageName: node + linkType: hard + +"istanbul-api@npm:^1.1.14": + version: 1.3.7 + resolution: "istanbul-api@npm:1.3.7" + dependencies: + async: ^2.1.4 + fileset: ^2.0.2 + istanbul-lib-coverage: ^1.2.1 + istanbul-lib-hook: ^1.2.2 + istanbul-lib-instrument: ^1.10.2 + istanbul-lib-report: ^1.1.5 + istanbul-lib-source-maps: ^1.2.6 + istanbul-reports: ^1.5.1 + js-yaml: ^3.7.0 + mkdirp: ^0.5.1 + once: ^1.4.0 + checksum: fb8d42546a9105f100f1772fc5ff616aa0295ca05c6ad2d59b019e742d52e744d4b6d980ec3a2031601648025e02459a2294a250e57595a18dfaf25ab3fc4d73 + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^1.1.1, istanbul-lib-coverage@npm:^1.2.1": + version: 1.2.1 + resolution: "istanbul-lib-coverage@npm:1.2.1" + checksum: 72bfeaa9212f5a6abb243cbce4933712599ba9a6fbdee819f4f5a4cf87ed15cb92772fcab219e93c3712c578774d6d8e54084440423356b3da5d9f8ecaba9888 + languageName: node + linkType: hard + +"istanbul-lib-hook@npm:^1.2.2": + version: 1.2.2 + resolution: "istanbul-lib-hook@npm:1.2.2" + dependencies: + append-transform: ^0.4.0 + checksum: 356028b9f2436936fd7d36306460347da47d85e33678547203e809df88cc5b9747c23d629887e7c8fc6d28414f5a65ec0edddf056f5999740c2bdcdd9bf4c537 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^1.10.1, istanbul-lib-instrument@npm:^1.10.2, istanbul-lib-instrument@npm:^1.8.0": + version: 1.10.2 + resolution: "istanbul-lib-instrument@npm:1.10.2" + dependencies: + babel-generator: ^6.18.0 + babel-template: ^6.16.0 + babel-traverse: ^6.18.0 + babel-types: ^6.18.0 + babylon: ^6.18.0 + istanbul-lib-coverage: ^1.2.1 + semver: ^5.3.0 + checksum: c299d73820b0ac93d1c53f436181da09579083dc4a0febadbda93f598f9a5591fe4888c3071a913eede36148d6481fdf163fa0b6ec7156fffe2a95cff965fc51 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^1.1.5": + version: 1.1.5 + resolution: "istanbul-lib-report@npm:1.1.5" + dependencies: + istanbul-lib-coverage: ^1.2.1 + mkdirp: ^0.5.1 + path-parse: ^1.0.5 + supports-color: ^3.1.2 + checksum: 9a16d1fc1aa502f0c7594851637af99bc6e2db768b5eec171e04c5f1eb0cae5ca81cf7c31ad6c8138ec8528723603c123ff262abfa365f1d08859e512ab075e9 + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^1.2.1, istanbul-lib-source-maps@npm:^1.2.6": + version: 1.2.6 + resolution: "istanbul-lib-source-maps@npm:1.2.6" + dependencies: + debug: ^3.1.0 + istanbul-lib-coverage: ^1.2.1 + mkdirp: ^0.5.1 + rimraf: ^2.6.1 + source-map: ^0.5.3 + checksum: 70a9811233a1558e2b3efcdfa0177b39ea84693843e181f7df1ba77c031a3b8dc5ab6cc0a21bd3b1840db1c3f73fec5a936f23d9727da46a08ae5a6b150c7949 + languageName: node + linkType: hard + +"istanbul-reports@npm:^1.5.1": + version: 1.5.1 + resolution: "istanbul-reports@npm:1.5.1" + dependencies: + handlebars: ^4.0.3 + checksum: 7ac5c4cea6f81a5511047836906847177861ad5f8d23ddd84a4535f9ca47ee511b9cb0c07b5c72a928ab147645b41ab7942659e83d166e94dccf1868e6282435 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.0 + resolution: "jackspeak@npm:3.4.0" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 350f6f311018bb175ffbe736b19c26ac0b134bb5a17a638169e89594eb0c24ab1c658ab3a2fda24ff63b3b19292e1a5ec19d2255bc526df704e8168d392bef85 + languageName: node + linkType: hard + +"jest-changed-files@npm:^22.2.0": + version: 22.4.3 + resolution: "jest-changed-files@npm:22.4.3" + dependencies: + throat: ^4.0.0 + checksum: 29e809482e817da460802651e7236f62db265308f1b9eb69636e36deecde4389ff47831d3d0bd82948ef54b6014181b8557ef661bd220dce3d005728ca655f77 + languageName: node + linkType: hard + +"jest-cli@npm:^22.4.4": + version: 22.4.4 + resolution: "jest-cli@npm:22.4.4" + dependencies: + ansi-escapes: ^3.0.0 + chalk: ^2.0.1 + exit: ^0.1.2 + glob: ^7.1.2 + graceful-fs: ^4.1.11 + import-local: ^1.0.0 + is-ci: ^1.0.10 + istanbul-api: ^1.1.14 + istanbul-lib-coverage: ^1.1.1 + istanbul-lib-instrument: ^1.8.0 + istanbul-lib-source-maps: ^1.2.1 + jest-changed-files: ^22.2.0 + jest-config: ^22.4.4 + jest-environment-jsdom: ^22.4.1 + jest-get-type: ^22.1.0 + jest-haste-map: ^22.4.2 + jest-message-util: ^22.4.0 + jest-regex-util: ^22.1.0 + jest-resolve-dependencies: ^22.1.0 + jest-runner: ^22.4.4 + jest-runtime: ^22.4.4 + jest-snapshot: ^22.4.0 + jest-util: ^22.4.1 + jest-validate: ^22.4.4 + jest-worker: ^22.2.2 + micromatch: ^2.3.11 + node-notifier: ^5.2.1 + realpath-native: ^1.0.0 + rimraf: ^2.5.4 + slash: ^1.0.0 + string-length: ^2.0.0 + strip-ansi: ^4.0.0 + which: ^1.2.12 + yargs: ^10.0.3 + bin: + jest: ./bin/jest.js + checksum: 32b7a7eb1927c4d83d3e4195b689e27938bfc89ff41a299b46b52f9b3f9f6d2e9f9626a776eda88f5fa82bb5b1e73a23084bb896b2527e0d70b4495b2d16d680 + languageName: node + linkType: hard + +"jest-config@npm:^22.4.4": + version: 22.4.4 + resolution: "jest-config@npm:22.4.4" + dependencies: + chalk: ^2.0.1 + glob: ^7.1.1 + jest-environment-jsdom: ^22.4.1 + jest-environment-node: ^22.4.1 + jest-get-type: ^22.1.0 + jest-jasmine2: ^22.4.4 + jest-regex-util: ^22.1.0 + jest-resolve: ^22.4.2 + jest-util: ^22.4.1 + jest-validate: ^22.4.4 + pretty-format: ^22.4.0 + checksum: 6d3e70255f4cb42cb5bd3a314c3f49f6c3def48cc7d439dbe9d6d338e7e347b948a29fba4bffdf71da385b123d8cc8ff96724e40ac62207f8464e0ded6a1f184 + languageName: node + linkType: hard + +"jest-diff@npm:^22.4.0, jest-diff@npm:^22.4.3": + version: 22.4.3 + resolution: "jest-diff@npm:22.4.3" + dependencies: + chalk: ^2.0.1 + diff: ^3.2.0 + jest-get-type: ^22.4.3 + pretty-format: ^22.4.3 + checksum: 1396d1f064570cd2dec35a235022017a338d4370180a492e1afce05b174fdced971b51c9771a5ff94f22b1ed6dd005d9dc53d2f049704d6285bfe4820217a7c8 + languageName: node + linkType: hard + +"jest-docblock@npm:^21.0.0": + version: 21.2.0 + resolution: "jest-docblock@npm:21.2.0" + checksum: 62530c4cefdd0d79863557b519b97e075f1231cd835809e08d7bd2346222a4772f33fd3c6010ad4fdbd64084b32c2f528dccf43998c2bebe7afa9b19eab9f84e + languageName: node + linkType: hard + +"jest-docblock@npm:^22.4.0, jest-docblock@npm:^22.4.3": + version: 22.4.3 + resolution: "jest-docblock@npm:22.4.3" + dependencies: + detect-newline: ^2.1.0 + checksum: 716e426ebaf61a8dcc538a35d75936a58d076b40d7e2119c128b0dcd330d31afc68f7302ca71121ba1596aa3e93636eafb5a24d09d5f2c997d9843d293b56a1b + languageName: node + linkType: hard + +"jest-environment-jsdom@npm:^22.4.1": + version: 22.4.3 + resolution: "jest-environment-jsdom@npm:22.4.3" + dependencies: + jest-mock: ^22.4.3 + jest-util: ^22.4.3 + jsdom: ^11.5.1 + checksum: ae79b0cdeadfa07962843b6dd0918d470b78ab689f2f4527fcdc2805ca68b5c7665ab548bedabd4f0a77162d95ff8d5df99d9ab286f99c31591e9f3a6a6645dc + languageName: node + linkType: hard + +"jest-environment-node@npm:^22.4.1": + version: 22.4.3 + resolution: "jest-environment-node@npm:22.4.3" + dependencies: + jest-mock: ^22.4.3 + jest-util: ^22.4.3 + checksum: 9334c074be2ca149d246fdab1eeddb932ba15cb4750c3fcf6acee73622ec11336da3da4ccc06540bec00223b7b7b0c5bb750d1947d940eb2bbc5ba1663f85bb1 + languageName: node + linkType: hard + +"jest-get-type@npm:^22.1.0, jest-get-type@npm:^22.4.3": + version: 22.4.3 + resolution: "jest-get-type@npm:22.4.3" + checksum: f2daab7cb762457cdcd5500e3b0222cc96856649b685c40a621fe7395147ee67bbb594a2285b28c0b3cb9d80819eca4f99dd450df1bcac8a7cffa8a2dbaeec31 + languageName: node + linkType: hard + +"jest-haste-map@npm:^22.4.2": + version: 22.4.3 + resolution: "jest-haste-map@npm:22.4.3" + dependencies: + fb-watchman: ^2.0.0 + graceful-fs: ^4.1.11 + jest-docblock: ^22.4.3 + jest-serializer: ^22.4.3 + jest-worker: ^22.4.3 + micromatch: ^2.3.11 + sane: ^2.0.0 + checksum: 7d9aa2741bcfc6400a47476acb97aeb2873986ef79dfb10417ef79934dcb73dda0d1238a21b531b053767ec1f6d03b4348619a86ad09bccb0e063c26830b782b + languageName: node + linkType: hard + +"jest-jasmine2@npm:^22.4.4": + version: 22.4.4 + resolution: "jest-jasmine2@npm:22.4.4" + dependencies: + chalk: ^2.0.1 + co: ^4.6.0 + expect: ^22.4.0 + graceful-fs: ^4.1.11 + is-generator-fn: ^1.0.0 + jest-diff: ^22.4.0 + jest-matcher-utils: ^22.4.0 + jest-message-util: ^22.4.0 + jest-snapshot: ^22.4.0 + jest-util: ^22.4.1 + source-map-support: ^0.5.0 + checksum: e8c4798762a950633666a85b874d10f58063fefbb9490100b0f8e33442e06818a49de6955771f19aab803a7fcae8a2715345183bd14a7f34eb6187d0b4515b70 + languageName: node + linkType: hard + +"jest-leak-detector@npm:^22.4.0": + version: 22.4.3 + resolution: "jest-leak-detector@npm:22.4.3" + dependencies: + pretty-format: ^22.4.3 + checksum: 1f5f74bc87c85f3c49e61cc4d77355f5964660b99849494ca0ae306ee64e265ffa58623ad426345d938e6fcf4cd38d1dfeac339409d8e13d25d210cfb372a0f8 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^22.4.0, jest-matcher-utils@npm:^22.4.3": + version: 22.4.3 + resolution: "jest-matcher-utils@npm:22.4.3" + dependencies: + chalk: ^2.0.1 + jest-get-type: ^22.4.3 + pretty-format: ^22.4.3 + checksum: 358d11aaea171f62db2ca4d93051fb22706a4c0f59666f452cca1155aab5b221ec5453b97eac77663785cb47a5ef34a1a0a4c585361bb41539d36b0440ad2793 + languageName: node + linkType: hard + +"jest-message-util@npm:^22.4.0, jest-message-util@npm:^22.4.3": + version: 22.4.3 + resolution: "jest-message-util@npm:22.4.3" + dependencies: + "@babel/code-frame": ^7.0.0-beta.35 + chalk: ^2.0.1 + micromatch: ^2.3.11 + slash: ^1.0.0 + stack-utils: ^1.0.1 + checksum: 2fa10ba5dff20827aa11b0a03b5866a24ea12709733898ead87c398cf7f3083bc7800f2999f7cbeabd34b95e7f3de05b776a5a7380686af872f6c35205d8c620 + languageName: node + linkType: hard + +"jest-mock@npm:^22.4.3": + version: 22.4.3 + resolution: "jest-mock@npm:22.4.3" + checksum: f76218c4f45bfd6936bc5f438b528f4e572d72aad667440e10ad7201c5082113c46f6a2fa953c003539799b2947eb6ce53e6fd1f94f73971554d51307e62175f + languageName: node + linkType: hard + +"jest-regex-util@npm:^22.1.0, jest-regex-util@npm:^22.4.3": + version: 22.4.3 + resolution: "jest-regex-util@npm:22.4.3" + checksum: 198d2367c8ee2d29bf4cab6174d86835ffd631b6f58f99cf31c24d6580c25304dd8b3cc9598498c057ab4c0a747a2f02a7075084b16c6e0a2cb7c50b75265396 + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^22.1.0": + version: 22.4.3 + resolution: "jest-resolve-dependencies@npm:22.4.3" + dependencies: + jest-regex-util: ^22.4.3 + checksum: 3a56fb922c28a2336935de14e14684520cecbe3c030eac2159ab1deb05d584f12d19a97733328caccc268eeb16f7fb4be0e22abe39132aa5230ed8a936bb3daf + languageName: node + linkType: hard + +"jest-resolve@npm:^22.4.2": + version: 22.4.3 + resolution: "jest-resolve@npm:22.4.3" + dependencies: + browser-resolve: ^1.11.2 + chalk: ^2.0.1 + checksum: ad18af6385849832532c68b9c7617824f2d10737b46ed3e9ab2df07f87873943a00b2e81df47d53f2346425fd488bd00b34cf3d172c4e6c9854d11f1918f1f6e + languageName: node + linkType: hard + +"jest-runner@npm:^22.4.4": + version: 22.4.4 + resolution: "jest-runner@npm:22.4.4" + dependencies: + exit: ^0.1.2 + jest-config: ^22.4.4 + jest-docblock: ^22.4.0 + jest-haste-map: ^22.4.2 + jest-jasmine2: ^22.4.4 + jest-leak-detector: ^22.4.0 + jest-message-util: ^22.4.0 + jest-runtime: ^22.4.4 + jest-util: ^22.4.1 + jest-worker: ^22.2.2 + throat: ^4.0.0 + checksum: 6018437a4112df30a2054b931dc9c73890852bdd68f0660d31fb9a73c5bb60df184864b397548e3a4e50ee109581c264913aba76fabe48c0385319b99d98fabe + languageName: node + linkType: hard + +"jest-runtime@npm:^22.4.4": + version: 22.4.4 + resolution: "jest-runtime@npm:22.4.4" + dependencies: + babel-core: ^6.0.0 + babel-jest: ^22.4.4 + babel-plugin-istanbul: ^4.1.5 + chalk: ^2.0.1 + convert-source-map: ^1.4.0 + exit: ^0.1.2 + graceful-fs: ^4.1.11 + jest-config: ^22.4.4 + jest-haste-map: ^22.4.2 + jest-regex-util: ^22.1.0 + jest-resolve: ^22.4.2 + jest-util: ^22.4.1 + jest-validate: ^22.4.4 + json-stable-stringify: ^1.0.1 + micromatch: ^2.3.11 + realpath-native: ^1.0.0 + slash: ^1.0.0 + strip-bom: 3.0.0 + write-file-atomic: ^2.1.0 + yargs: ^10.0.3 + bin: + jest-runtime: ./bin/jest-runtime.js + checksum: e436d0e1dfcc1669d190a3039db78d9cdb9ad3b98a2beaa4c5b5f9eff5727dbe89ea2d2c2374dfb202c0d368905acddabc187e880271f41e73a0afc5234c6240 + languageName: node + linkType: hard + +"jest-serializer@npm:^22.4.3": + version: 22.4.3 + resolution: "jest-serializer@npm:22.4.3" + checksum: 51de1be3a21c6cd729d7c4f44a222d26428a429a5ee0e457710cb3d1a907314f54a8172de62a06917686c9badc8c11d176cb4f7c59916a1b255150e46eb8ccae + languageName: node + linkType: hard + +"jest-snapshot@npm:^22.4.0": + version: 22.4.3 + resolution: "jest-snapshot@npm:22.4.3" + dependencies: + chalk: ^2.0.1 + jest-diff: ^22.4.3 + jest-matcher-utils: ^22.4.3 + mkdirp: ^0.5.1 + natural-compare: ^1.4.0 + pretty-format: ^22.4.3 + checksum: 84b468435039cb359a173572a030c4daed9772e755acd3a12dc97cb38c7d8e53c9d92cce00186e1b760dd3faffe5850965b7516e52f27b687ae63c7f26e51ef0 + languageName: node + linkType: hard + +"jest-util@npm:^22.4.1, jest-util@npm:^22.4.3": + version: 22.4.3 + resolution: "jest-util@npm:22.4.3" + dependencies: + callsites: ^2.0.0 + chalk: ^2.0.1 + graceful-fs: ^4.1.11 + is-ci: ^1.0.10 + jest-message-util: ^22.4.3 + mkdirp: ^0.5.1 + source-map: ^0.6.0 + checksum: 640cc9f9357d7d5720a61df9ec613162fa1e3a3c0c925c8fec71702a4a4bb5415a44b07c338f3f2ab224304c7347c9049f1d5f0108de2ebd6f654b03322a262c + languageName: node + linkType: hard + +"jest-validate@npm:^22.4.4": + version: 22.4.4 + resolution: "jest-validate@npm:22.4.4" + dependencies: + chalk: ^2.0.1 + jest-config: ^22.4.4 + jest-get-type: ^22.1.0 + leven: ^2.1.0 + pretty-format: ^22.4.0 + checksum: b80b588446c17dcec5e27a507dad080bd28934979e206ae1fd77c3a98a07dd7696f325d6ee6f9d7de60350967b16fd5179d6905b24c06edb58f05e4e38d3270c + languageName: node + linkType: hard + +"jest-worker@npm:^22.2.2, jest-worker@npm:^22.4.3": + version: 22.4.3 + resolution: "jest-worker@npm:22.4.3" + dependencies: + merge-stream: ^1.0.1 + checksum: 5069ed1587388c37e6e39a1462ebaf9d7d890eb0838b6000171b665a71bf3f71dba53eb7e338da04174ef70b6bac23ca2e7992a9ef497304ee8879bbbd7bece5 + languageName: node + linkType: hard + +"jest@npm:^22.2.1": + version: 22.4.4 + resolution: "jest@npm:22.4.4" + dependencies: + import-local: ^1.0.0 + jest-cli: ^22.4.4 + bin: + jest: ./bin/jest.js + checksum: 12e592e7a8ff20ef4668845d3d0835d145573893edeb1964f659d1f5ec3036d09fe12269d6374865a352c09e48707666a62af00c6ced37843d0eaf81d130b742 + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.2": + version: 3.0.2 + resolution: "js-tokens@npm:3.0.2" + checksum: ff24cf90e6e4ac446eba56e604781c1aaf3bdaf9b13a00596a0ebd972fa3b25dc83c0f0f67289c33252abb4111e0d14e952a5d9ffb61f5c22532d555ebd8d8a9 + languageName: node + linkType: hard + +"js-yaml@npm:^3.7.0, js-yaml@npm:^3.9.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 944f924f2bd67ad533b3850eee47603eed0f6ae425fd1ee8c760f477e8c34a05f144c1bd4f5a5dd1963141dc79a2c55f89ccc5ab77d039e7077f3ad196b64965 + languageName: node + linkType: hard + +"jsbn@npm:~0.1.0": + version: 0.1.1 + resolution: "jsbn@npm:0.1.1" + checksum: e5ff29c1b8d965017ef3f9c219dacd6e40ad355c664e277d31246c90545a02e6047018c16c60a00f36d561b3647215c41894f5d869ada6908a2e0ce4200c88f2 + languageName: node + linkType: hard + +"jsdom@npm:^11.5.1": + version: 11.12.0 + resolution: "jsdom@npm:11.12.0" + dependencies: + abab: ^2.0.0 + acorn: ^5.5.3 + acorn-globals: ^4.1.0 + array-equal: ^1.0.0 + cssom: ">= 0.3.2 < 0.4.0" + cssstyle: ^1.0.0 + data-urls: ^1.0.0 + domexception: ^1.0.1 + escodegen: ^1.9.1 + html-encoding-sniffer: ^1.0.2 + left-pad: ^1.3.0 + nwsapi: ^2.0.7 + parse5: 4.0.0 + pn: ^1.1.0 + request: ^2.87.0 + request-promise-native: ^1.0.5 + sax: ^1.2.4 + symbol-tree: ^3.2.2 + tough-cookie: ^2.3.4 + w3c-hr-time: ^1.0.1 + webidl-conversions: ^4.0.2 + whatwg-encoding: ^1.0.3 + whatwg-mimetype: ^2.1.0 + whatwg-url: ^6.4.1 + ws: ^5.2.0 + xml-name-validator: ^3.0.0 + checksum: 1dab757e92ce857df648ebec3dbe487954f886652faf9d97953c3b502958b1e4487e147baef5494718294e8625ae238e68354db710456fa73c394fb93dbfc68b + languageName: node + linkType: hard + +"jsesc@npm:^1.3.0": + version: 1.3.0 + resolution: "jsesc@npm:1.3.0" + bin: + jsesc: bin/jsesc + checksum: 9384cc72bf8ef7f2eb75fea64176b8b0c1c5e77604854c72cb4670b7072e112e3baaa69ef134be98cb078834a7812b0bfe676ad441ccd749a59427f5ed2127f1 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.3.0": + version: 0.3.1 + resolution: "json-schema-traverse@npm:0.3.1" + checksum: a685c36222023471c25c86cddcff506306ecb8f8941922fd356008419889c41c38e1c16d661d5499d0a561b34f417693e9bb9212ba2b2b2f8f8a345a49e4ec1a + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + languageName: node + linkType: hard + +"json-schema@npm:0.4.0": + version: 0.4.0 + resolution: "json-schema@npm:0.4.0" + checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72 + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 + languageName: node + linkType: hard + +"json-stable-stringify@npm:^1.0.1": + version: 1.1.1 + resolution: "json-stable-stringify@npm:1.1.1" + dependencies: + call-bind: ^1.0.5 + isarray: ^2.0.5 + jsonify: ^0.0.1 + object-keys: ^1.1.1 + checksum: e1ba06600fd278767eeff53f28e408e29c867e79abf564e7aadc3ce8f31f667258f8db278ef28831e45884dd687388fa1910f46e599fc19fb94c9afbbe3a4de8 + languageName: node + linkType: hard + +"json-stringify-safe@npm:~5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee + languageName: node + linkType: hard + +"json5@npm:^0.5.1": + version: 0.5.1 + resolution: "json5@npm:0.5.1" + bin: + json5: lib/cli.js + checksum: 9b85bf06955b23eaa4b7328aa8892e3887e81ca731dd27af04a5f5f1458fbc5e1de57a24442e3272f8a888dd1abe1cb68eb693324035f6b3aeba4fcab7667d62 + languageName: node + linkType: hard + +"jsonify@npm:^0.0.1": + version: 0.0.1 + resolution: "jsonify@npm:0.0.1" + checksum: 027287e1c0294fce15f18c0ff990cfc2318e7f01fb76515f784d5cd0784abfec6fc5c2355c3a2f2cb0ad7f4aa2f5b74ebbfe4e80476c35b2d13cabdb572e1134 + languageName: node + linkType: hard + +"jsprim@npm:^1.2.2": + version: 1.4.2 + resolution: "jsprim@npm:1.4.2" + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + checksum: 2ad1b9fdcccae8b3d580fa6ced25de930eaa1ad154db21bbf8478a4d30bbbec7925b5f5ff29b933fba9412b16a17bd484a8da4fdb3663b5e27af95dd693bab2a + languageName: node + linkType: hard + +"kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": + version: 3.2.2 + resolution: "kind-of@npm:3.2.2" + dependencies: + is-buffer: ^1.1.5 + checksum: e898df8ca2f31038f27d24f0b8080da7be274f986bc6ed176f37c77c454d76627619e1681f6f9d2e8d2fd7557a18ecc419a6bb54e422abcbb8da8f1a75e4b386 + languageName: node + linkType: hard + +"kind-of@npm:^4.0.0": + version: 4.0.0 + resolution: "kind-of@npm:4.0.0" + dependencies: + is-buffer: ^1.1.5 + checksum: 1b9e7624a8771b5a2489026e820f3bbbcc67893e1345804a56b23a91e9069965854d2a223a7c6ee563c45be9d8c6ff1ef87f28ed5f0d1a8d00d9dcbb067c529f + languageName: node + linkType: hard + +"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + +"lcid@npm:^1.0.0": + version: 1.0.0 + resolution: "lcid@npm:1.0.0" + dependencies: + invert-kv: ^1.0.0 + checksum: e8c7a4db07663068c5c44b650938a2bc41aa992037eebb69376214320f202c1250e70b50c32f939e28345fd30c2d35b8e8cd9a19d5932c398246a864ce54843d + languageName: node + linkType: hard + +"left-pad@npm:^1.3.0": + version: 1.3.0 + resolution: "left-pad@npm:1.3.0" + checksum: 13fa96e17b70a54836490de22d4bab706e2ed508338bbabecfac72ecce445a74139c5b009a8112252cab8fc4ab7ac4ebd870e5b35bd236b443b12be96f8745ac + languageName: node + linkType: hard + +"leven@npm:^2.1.0": + version: 2.1.0 + resolution: "leven@npm:2.1.0" + checksum: f7b4a01b15c0ee2f92a04c0367ea025d10992b044df6f0d4ee1a845d4a488b343e99799e2f31212d72a2b1dea67124f57c1bb1b4561540df45190e44b5b8b394 + languageName: node + linkType: hard + +"levn@npm:^0.3.0, levn@npm:~0.3.0": + version: 0.3.0 + resolution: "levn@npm:0.3.0" + dependencies: + prelude-ls: ~1.1.2 + type-check: ~0.3.2 + checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e + languageName: node + linkType: hard + +"load-json-file@npm:^1.0.0": + version: 1.1.0 + resolution: "load-json-file@npm:1.1.0" + dependencies: + graceful-fs: ^4.1.2 + parse-json: ^2.2.0 + pify: ^2.0.0 + pinkie-promise: ^2.0.0 + strip-bom: ^2.0.0 + checksum: 0e4e4f380d897e13aa236246a917527ea5a14e4fc34d49e01ce4e7e2a1e08e2740ee463a03fb021c04f594f29a178f4adb994087549d7c1c5315fcd29bf9934b + languageName: node + linkType: hard + +"locate-path@npm:^2.0.0": + version: 2.0.0 + resolution: "locate-path@npm:2.0.0" + dependencies: + p-locate: ^2.0.0 + path-exists: ^3.0.0 + checksum: 02d581edbbbb0fa292e28d96b7de36b5b62c2fa8b5a7e82638ebb33afa74284acf022d3b1e9ae10e3ffb7658fbc49163fcd5e76e7d1baaa7801c3e05a81da755 + languageName: node + linkType: hard + +"lodash.sortby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.sortby@npm:4.7.0" + checksum: db170c9396d29d11fe9a9f25668c4993e0c1331bcb941ddbd48fb76f492e732add7f2a47cfdf8e9d740fa59ac41bbfaf931d268bc72aab3ab49e9f89354d718c + languageName: node + linkType: hard + +"lodash@npm:^4.17.14, lodash@npm:^4.17.19, lodash@npm:^4.17.4, lodash@npm:^4.3.0": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"loose-envify@npm:^1.0.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.2.2 + resolution: "lru-cache@npm:10.2.2" + checksum: 98e8fc93691c546f719a76103ef2bee5a3ac823955c755a47641ec41f8c7fafa1baeaba466937cc1cbfa9cfd47e03536d10e2db3158a64ad91ff3a58a32c893e + languageName: node + linkType: hard + +"lru-cache@npm:^4.0.1": + version: 4.1.5 + resolution: "lru-cache@npm:4.1.5" + dependencies: + pseudomap: ^1.0.2 + yallist: ^2.1.2 + checksum: 4bb4b58a36cd7dc4dcec74cbe6a8f766a38b7426f1ff59d4cf7d82a2aa9b9565cd1cb98f6ff60ce5cd174524868d7bc9b7b1c294371851356066ca9ac4cf135a + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": ^2.0.0 + cacache: ^18.0.0 + http-cache-semantics: ^4.1.1 + is-lambda: ^1.0.1 + minipass: ^7.0.2 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + proc-log: ^4.2.0 + promise-retry: ^2.0.1 + ssri: ^10.0.0 + checksum: 5c9fad695579b79488fa100da05777213dd9365222f85e4757630f8dd2a21a79ddd3206c78cfd6f9b37346819681782b67900ac847a57cf04190f52dda5343fd + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + languageName: node + linkType: hard + +"map-cache@npm:^0.2.2": + version: 0.2.2 + resolution: "map-cache@npm:0.2.2" + checksum: 3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 + languageName: node + linkType: hard + +"map-visit@npm:^1.0.0": + version: 1.0.0 + resolution: "map-visit@npm:1.0.0" + dependencies: + object-visit: ^1.0.0 + checksum: c27045a5021c344fc19b9132eb30313e441863b2951029f8f8b66f79d3d8c1e7e5091578075a996f74e417479506fe9ede28c44ca7bc351a61c9d8073daec36a + languageName: node + linkType: hard + +"math-random@npm:^1.0.1": + version: 1.0.4 + resolution: "math-random@npm:1.0.4" + checksum: 9edf31ea337bba21994eb968218fd571d55fce86b51661158d8e241886b73121d9e1a35a5bb8997dba8ce67417a83c8dbd0811917248f886840035b7f1c667b9 + languageName: node + linkType: hard + +"mem@npm:^1.1.0": + version: 1.1.0 + resolution: "mem@npm:1.1.0" + dependencies: + mimic-fn: ^1.0.0 + checksum: 2fbcc5741bc4125b6484c271ddd9902ca62662731d322808a0f68ff7cc603f270479bb4d733cf8686e59b7eff85f019a23af14767765a306ac74183da6e2e3a3 + languageName: node + linkType: hard + +"merge-stream@npm:^1.0.1": + version: 1.0.1 + resolution: "merge-stream@npm:1.0.1" + dependencies: + readable-stream: ^2.0.1 + checksum: 3be7887dffd8899da0f930c0f85812ab8993252f467dcd61e60a8d085836ebbb23756b8e481a7f71824206342afe1b1a2b80c05a1cd0ed0e792a09c5812a9082 + languageName: node + linkType: hard + +"merge@npm:^1.2.0": + version: 1.2.1 + resolution: "merge@npm:1.2.1" + checksum: 2298c4fdcf64561f320b92338681f7ffcafafb579a6e294066ae3e7bd10ae25df363903d2f028072733b9f79a1f75d2b999aef98ad5d73de13641da39cda0913 + languageName: node + linkType: hard + +"micromatch@npm:^2.3.11": + version: 2.3.11 + resolution: "micromatch@npm:2.3.11" + dependencies: + arr-diff: ^2.0.0 + array-unique: ^0.2.1 + braces: ^1.8.2 + expand-brackets: ^0.1.4 + extglob: ^0.3.1 + filename-regex: ^2.0.0 + is-extglob: ^1.0.0 + is-glob: ^2.0.1 + kind-of: ^3.0.2 + normalize-path: ^2.0.1 + object.omit: ^2.0.0 + parse-glob: ^3.0.4 + regex-cache: ^0.4.2 + checksum: 562681808a3149c77ba90947cb8cf1874ea6d07da6fa86416a4f9454f847fb6329aea5234e1af060d9465d9bb14eaaf4bc6c482bf24bc561649042f2b81d3092 + languageName: node + linkType: hard + +"micromatch@npm:^3.1.4": + version: 3.1.10 + resolution: "micromatch@npm:3.1.10" + dependencies: + arr-diff: ^4.0.0 + array-unique: ^0.3.2 + braces: ^2.3.1 + define-property: ^2.0.2 + extend-shallow: ^3.0.2 + extglob: ^2.0.4 + fragment-cache: ^0.2.1 + kind-of: ^6.0.2 + nanomatch: ^1.2.9 + object.pick: ^1.3.0 + regex-not: ^1.0.0 + snapdragon: ^0.8.1 + to-regex: ^3.0.2 + checksum: ad226cba4daa95b4eaf47b2ca331c8d2e038d7b41ae7ed0697cde27f3f1d6142881ab03d4da51b65d9d315eceb5e4cdddb3fbb55f5f72cfa19cf3ea469d054dc + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mimic-fn@npm:^1.0.0": + version: 1.2.0 + resolution: "mimic-fn@npm:1.2.0" + checksum: 69c08205156a1f4906d9c46f9b4dc08d18a50176352e77fdeb645cedfe9f20c0b19865d465bd2dec27a5c432347f24dc07fc3695e11159d193f892834233e939 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.2, minimatch@npm:^3.0.3, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.4 + resolution: "minimatch@npm:9.0.4" + dependencies: + brace-expansion: ^2.0.1 + checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5 + languageName: node + linkType: hard + +"minimist@npm:^1.1.1, minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: ^7.0.3 + checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: 8047d273236157aab27ab7cd8eab7ea79e6ecd63e8f80c3366ec076cb9a0fed550a6935bab51764369027c414647fd8256c2a20c5445fb250c483de43350de83 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mixin-deep@npm:^1.2.0": + version: 1.3.2 + resolution: "mixin-deep@npm:1.3.2" + dependencies: + for-in: ^1.0.2 + is-extendable: ^1.0.1 + checksum: 820d5a51fcb7479f2926b97f2c3bb223546bc915e6b3a3eb5d906dda871bba569863595424a76682f2b15718252954644f3891437cb7e3f220949bed54b1750d + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: ^1.2.6 + bin: + mkdirp: bin/cmd.js + checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:^2.1.1": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"mute-stream@npm:0.0.7": + version: 0.0.7 + resolution: "mute-stream@npm:0.0.7" + checksum: a9d4772c1c84206aa37c218ed4751cd060239bf1d678893124f51e037f6f22f4a159b2918c030236c93252638a74beb29c9b1fd3267c9f24d4b3253cf1eaa86f + languageName: node + linkType: hard + +"nan@npm:^2.12.1": + version: 2.20.0 + resolution: "nan@npm:2.20.0" + dependencies: + node-gyp: latest + checksum: eb09286e6c238a3582db4d88c875db73e9b5ab35f60306090acd2f3acae21696c9b653368b4a0e32abcef64ee304a923d6223acaddd16169e5eaaf5c508fb533 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.7": + version: 3.3.7 + resolution: "nanoid@npm:3.3.7" + bin: + nanoid: bin/nanoid.cjs + checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2 + languageName: node + linkType: hard + +"nanomatch@npm:^1.2.9": + version: 1.2.13 + resolution: "nanomatch@npm:1.2.13" + dependencies: + arr-diff: ^4.0.0 + array-unique: ^0.3.2 + define-property: ^2.0.2 + extend-shallow: ^3.0.2 + fragment-cache: ^0.2.1 + is-windows: ^1.0.2 + kind-of: ^6.0.2 + object.pick: ^1.3.0 + regex-not: ^1.0.0 + snapdragon: ^0.8.1 + to-regex: ^3.0.1 + checksum: 54d4166d6ef08db41252eb4e96d4109ebcb8029f0374f9db873bd91a1f896c32ec780d2a2ea65c0b2d7caf1f28d5e1ea33746a470f32146ac8bba821d80d38d8 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.1.0 + resolution: "node-gyp@npm:10.1.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^10.3.10 + graceful-fs: ^4.2.6 + make-fetch-happen: ^13.0.0 + nopt: ^7.0.0 + proc-log: ^3.0.0 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^4.0.0 + bin: + node-gyp: bin/node-gyp.js + checksum: 72e2ab4b23fc32007a763da94018f58069fc0694bf36115d49a2b195c8831e12cf5dd1e7a3718fa85c06969aedf8fc126722d3b672ec1cb27e06ed33caee3c60 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e + languageName: node + linkType: hard + +"node-notifier@npm:^5.2.1": + version: 5.4.5 + resolution: "node-notifier@npm:5.4.5" + dependencies: + growly: ^1.3.0 + is-wsl: ^1.1.0 + semver: ^5.5.0 + shellwords: ^0.1.1 + which: ^1.3.0 + checksum: 8de174eb055a2ec55c1b0beede9328e8f9d4e32e7eacb7e3e2fddff48534105d0e2e10b4947dd422cc0602c65141317499c6fb1dc3b8ba03c775fb159e360bef + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: ^2.0.0 + bin: + nopt: bin/nopt.js + checksum: 6fa729cc77ce4162cfad8abbc9ba31d4a0ff6850c3af61d59b505653bef4781ec059f8890ecfe93ee8aa0c511093369cca88bfc998101616a2904e715bbbb7c9 + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.3.2": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: ^2.1.4 + resolve: ^1.10.0 + semver: 2 || 3 || 4 || 5 + validate-npm-package-license: ^3.0.1 + checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 + languageName: node + linkType: hard + +"normalize-path@npm:^2.0.1, normalize-path@npm:^2.1.1": + version: 2.1.1 + resolution: "normalize-path@npm:2.1.1" + dependencies: + remove-trailing-separator: ^1.0.1 + checksum: 7e9cbdcf7f5b8da7aa191fbfe33daf290cdcd8c038f422faf1b8a83c972bf7a6d94c5be34c4326cb00fb63bc0fd97d9fbcfaf2e5d6142332c2cd36d2e1b86cea + languageName: node + linkType: hard + +"npm-run-path@npm:^2.0.0": + version: 2.0.2 + resolution: "npm-run-path@npm:2.0.2" + dependencies: + path-key: ^2.0.0 + checksum: acd5ad81648ba4588ba5a8effb1d98d2b339d31be16826a118d50f182a134ac523172101b82eab1d01cb4c2ba358e857d54cfafd8163a1ffe7bd52100b741125 + languageName: node + linkType: hard + +"number-is-nan@npm:^1.0.0": + version: 1.0.1 + resolution: "number-is-nan@npm:1.0.1" + checksum: 13656bc9aa771b96cef209ffca31c31a03b507ca6862ba7c3f638a283560620d723d52e626d57892c7fff475f4c36ac07f0600f14544692ff595abff214b9ffb + languageName: node + linkType: hard + +"nwsapi@npm:^2.0.7": + version: 2.2.10 + resolution: "nwsapi@npm:2.2.10" + checksum: 5f1d361b38c47ab49727d5ea8bbfeb5867ae6de0e538eec9a8b77c88005ddde36d8b930e0730b50ee5e5dda949112c0f9ffed1bf15e7e1b3cd9cfa319f5a9b6f + languageName: node + linkType: hard + +"oauth-sign@npm:~0.9.0": + version: 0.9.0 + resolution: "oauth-sign@npm:0.9.0" + checksum: 8f5497a127967866a3c67094c21efd295e46013a94e6e828573c62220e9af568cc1d2d04b16865ba583e430510fa168baf821ea78f355146d8ed7e350fc44c64 + languageName: node + linkType: hard + +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"object-copy@npm:^0.1.0": + version: 0.1.0 + resolution: "object-copy@npm:0.1.0" + dependencies: + copy-descriptor: ^0.1.0 + define-property: ^0.2.5 + kind-of: ^3.0.3 + checksum: a9e35f07e3a2c882a7e979090360d1a20ab51d1fa19dfdac3aa8873b328a7c4c7683946ee97c824ae40079d848d6740a3788fa14f2185155dab7ed970a72c783 + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.1": + version: 1.13.1 + resolution: "object-inspect@npm:1.13.1" + checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a + languageName: node + linkType: hard + +"object-visit@npm:^1.0.0": + version: 1.0.1 + resolution: "object-visit@npm:1.0.1" + dependencies: + isobject: ^3.0.0 + checksum: b0ee07f5bf3bb881b881ff53b467ebbde2b37ebb38649d6944a6cd7681b32eedd99da9bd1e01c55facf81f54ed06b13af61aba6ad87f0052982995e09333f790 + languageName: node + linkType: hard + +"object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" + dependencies: + call-bind: ^1.0.5 + define-properties: ^1.2.1 + has-symbols: ^1.0.3 + object-keys: ^1.1.1 + checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25 + languageName: node + linkType: hard + +"object.getownpropertydescriptors@npm:^2.1.6": + version: 2.1.8 + resolution: "object.getownpropertydescriptors@npm:2.1.8" + dependencies: + array.prototype.reduce: ^1.0.6 + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + gopd: ^1.0.1 + safe-array-concat: ^1.1.2 + checksum: 073e492700a7f61ff6c471a2ed96e72473b030a7a105617f03cab192fb4bbc0e6068ef76534ec56afd34baf26b5dc5408de59cb0140ec8abde781e00faa3e63e + languageName: node + linkType: hard + +"object.omit@npm:^2.0.0": + version: 2.0.1 + resolution: "object.omit@npm:2.0.1" + dependencies: + for-own: ^0.1.4 + is-extendable: ^0.1.1 + checksum: 581de24e16b72388ad294693daef29072943ef8db3da16aaeb580b5ecefacabe58a744893e9d1564e29130d3465c96ba3e13a03fd130d14f3e06525b3176cac4 + languageName: node + linkType: hard + +"object.pick@npm:^1.3.0": + version: 1.3.0 + resolution: "object.pick@npm:1.3.0" + dependencies: + isobject: ^3.0.1 + checksum: 77fb6eed57c67adf75e9901187e37af39f052ef601cb4480386436561357eb9e459e820762f01fd02c5c1b42ece839ad393717a6d1850d848ee11fbabb3e580a + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"onetime@npm:^2.0.0": + version: 2.0.1 + resolution: "onetime@npm:2.0.1" + dependencies: + mimic-fn: ^1.0.0 + checksum: bb44015ac7a525d0fb43b029a583d4ad359834632b4424ca209b438aacf6d669dda81b5edfbdb42c22636e607b276ba5589f46694a729e3bc27948ce26f4cc1a + languageName: node + linkType: hard + +"optionator@npm:^0.8.1, optionator@npm:^0.8.2": + version: 0.8.3 + resolution: "optionator@npm:0.8.3" + dependencies: + deep-is: ~0.1.3 + fast-levenshtein: ~2.0.6 + levn: ~0.3.0 + prelude-ls: ~1.1.2 + type-check: ~0.3.2 + word-wrap: ~1.2.3 + checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 + languageName: node + linkType: hard + +"os-homedir@npm:^1.0.0": + version: 1.0.2 + resolution: "os-homedir@npm:1.0.2" + checksum: af609f5a7ab72de2f6ca9be6d6b91a599777afc122ac5cad47e126c1f67c176fe9b52516b9eeca1ff6ca0ab8587fe66208bc85e40a3940125f03cdb91408e9d2 + languageName: node + linkType: hard + +"os-locale@npm:^2.0.0": + version: 2.1.0 + resolution: "os-locale@npm:2.1.0" + dependencies: + execa: ^0.7.0 + lcid: ^1.0.0 + mem: ^1.1.0 + checksum: 72ec8b18d037c27355075accc23869ba4613027a314f7f56fc7b98dfc1eef6096b454e351b4c735e594d66250709d65f63d3d6bf44964f2ee47b5123dcbfca63 + languageName: node + linkType: hard + +"os-tmpdir@npm:^1.0.1, os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4 + languageName: node + linkType: hard + +"p-limit@npm:^1.1.0": + version: 1.3.0 + resolution: "p-limit@npm:1.3.0" + dependencies: + p-try: ^1.0.0 + checksum: 281c1c0b8c82e1ac9f81acd72a2e35d402bf572e09721ce5520164e9de07d8274451378a3470707179ad13240535558f4b277f02405ad752e08c7d5b0d54fbfd + languageName: node + linkType: hard + +"p-locate@npm:^2.0.0": + version: 2.0.0 + resolution: "p-locate@npm:2.0.0" + dependencies: + p-limit: ^1.1.0 + checksum: e2dceb9b49b96d5513d90f715780f6f4972f46987dc32a0e18bc6c3fc74a1a5d73ec5f81b1398af5e58b99ea1ad03fd41e9181c01fa81b4af2833958696e3081 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"p-try@npm:^1.0.0": + version: 1.0.0 + resolution: "p-try@npm:1.0.0" + checksum: 3b5303f77eb7722144154288bfd96f799f8ff3e2b2b39330efe38db5dd359e4fb27012464cd85cb0a76e9b7edd1b443568cb3192c22e7cffc34989df0bafd605 + languageName: node + linkType: hard + +"parse-glob@npm:^3.0.4": + version: 3.0.4 + resolution: "parse-glob@npm:3.0.4" + dependencies: + glob-base: ^0.3.0 + is-dotfile: ^1.0.0 + is-extglob: ^1.0.0 + is-glob: ^2.0.0 + checksum: 447bc442d76522c5e03b5babc8582d4a37fe9d59b3e5ef8d7ddae4e03060637ae38d5d28686e03c27e4d20be34983b5cb053cf8b066d34be0f9d1867eb677e45 + languageName: node + linkType: hard + +"parse-json@npm:^2.2.0": + version: 2.2.0 + resolution: "parse-json@npm:2.2.0" + dependencies: + error-ex: ^1.2.0 + checksum: dda78a63e57a47b713a038630868538f718a7ca0cd172a36887b0392ccf544ed0374902eb28f8bf3409e8b71d62b79d17062f8543afccf2745f9b0b2d2bb80ca + languageName: node + linkType: hard + +"parse5@npm:4.0.0": + version: 4.0.0 + resolution: "parse5@npm:4.0.0" + checksum: 2123cec690689fed44e6c76aa8a08215d2dadece7eff7b35156dda7485e6a232c9b737313688ee715eb0678b6a87a31026927dd74690154f8a0811059845ba46 + languageName: node + linkType: hard + +"pascalcase@npm:^0.1.1": + version: 0.1.1 + resolution: "pascalcase@npm:0.1.1" + checksum: f83681c3c8ff75fa473a2bb2b113289952f802ff895d435edd717e7cb898b0408cbdb247117a938edcbc5d141020909846cc2b92c47213d764e2a94d2ad2b925 + languageName: node + linkType: hard + +"path-exists@npm:^2.0.0": + version: 2.1.0 + resolution: "path-exists@npm:2.1.0" + dependencies: + pinkie-promise: ^2.0.0 + checksum: fdb734f1d00f225f7a0033ce6d73bff6a7f76ea08936abf0e5196fa6e54a645103538cd8aedcb90d6d8c3fa3705ded0c58a4da5948ae92aa8834892c1ab44a84 + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0, path-is-absolute@npm:^1.0.1": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-is-inside@npm:^1.0.2": + version: 1.0.2 + resolution: "path-is-inside@npm:1.0.2" + checksum: 0b5b6c92d3018b82afb1f74fe6de6338c4c654de4a96123cb343f2b747d5606590ac0c890f956ed38220a4ab59baddfd7b713d78a62d240b20b14ab801fa02cb + languageName: node + linkType: hard + +"path-key@npm:^2.0.0": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: f7ab0ad42fe3fb8c7f11d0c4f849871e28fbd8e1add65c370e422512fc5887097b9cf34d09c1747d45c942a8c1e26468d6356e2df3f740bf177ab8ca7301ebfd + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.5, path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: ^10.2.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: 890d5abcd593a7912dcce7cf7c6bf7a0b5648e3dee6caf0712c126ca0a65c7f3d7b9d769072a4d1baf370f61ce493ab5b038d59988688e0c5f3f646ee3c69023 + languageName: node + linkType: hard + +"path-type@npm:^1.0.0": + version: 1.1.0 + resolution: "path-type@npm:1.1.0" + dependencies: + graceful-fs: ^4.1.2 + pify: ^2.0.0 + pinkie-promise: ^2.0.0 + checksum: 59a4b2c0e566baf4db3021a1ed4ec09a8b36fca960a490b54a6bcefdb9987dafe772852982b6011cd09579478a96e57960a01f75fa78a794192853c9d468fc79 + languageName: node + linkType: hard + +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.1 + resolution: "picocolors@npm:1.0.1" + checksum: fa68166d1f56009fc02a34cdfd112b0dd3cf1ef57667ac57281f714065558c01828cdf4f18600ad6851cbe0093952ed0660b1e0156bddf2184b6aaf5817553a5 + languageName: node + linkType: hard + +"pify@npm:^2.0.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba + languageName: node + linkType: hard + +"pinkie-promise@npm:^2.0.0": + version: 2.0.1 + resolution: "pinkie-promise@npm:2.0.1" + dependencies: + pinkie: ^2.0.0 + checksum: b53a4a2e73bf56b6f421eef711e7bdcb693d6abb474d57c5c413b809f654ba5ee750c6a96dd7225052d4b96c4d053cdcb34b708a86fceed4663303abee52fcca + languageName: node + linkType: hard + +"pinkie@npm:^2.0.0": + version: 2.0.4 + resolution: "pinkie@npm:2.0.4" + checksum: b12b10afea1177595aab036fc220785488f67b4b0fc49e7a27979472592e971614fa1c728e63ad3e7eb748b4ec3c3dbd780819331dad6f7d635c77c10537b9db + languageName: node + linkType: hard + +"pkg-dir@npm:^2.0.0": + version: 2.0.0 + resolution: "pkg-dir@npm:2.0.0" + dependencies: + find-up: ^2.1.0 + checksum: 8c72b712305b51e1108f0ffda5ec1525a8307e54a5855db8fb1dcf77561a5ae98e2ba3b4814c9806a679f76b2f7e5dd98bde18d07e594ddd9fdd25e9cf242ea1 + languageName: node + linkType: hard + +"pluralize@npm:^7.0.0": + version: 7.0.0 + resolution: "pluralize@npm:7.0.0" + checksum: e3f694924b7c8c03dc9fa40b2312e17787998ac6e20fccace11efa1146046eb9931541bfd247b3ec5535e730d902a5aee7c32681d5bf9a00fc74a72039a3e609 + languageName: node + linkType: hard + +"pn@npm:^1.1.0": + version: 1.1.0 + resolution: "pn@npm:1.1.0" + checksum: e4654186dc92a187c8c7fe4ccda902f4d39dd9c10f98d1c5a08ce5fad5507ef1e33ddb091240c3950bee81bd201b4c55098604c433a33b5e8bdd97f38b732fa0 + languageName: node + linkType: hard + +"posix-character-classes@npm:^0.1.0": + version: 0.1.1 + resolution: "posix-character-classes@npm:0.1.1" + checksum: dedb99913c60625a16050cfed2fb5c017648fc075be41ac18474e1c6c3549ef4ada201c8bd9bd006d36827e289c571b6092e1ef6e756cdbab2fd7046b25c6442 + languageName: node + linkType: hard + +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: b32d403ece71e042385cc7856385cecf1cd8e144fa74d2f1de40d1e16035dba097bc189715925e79b67bdd1472796ff168d3a90d296356c9c94d272d5b95f3ae + languageName: node + linkType: hard + +"postcss-nesting@npm:^12.1.2": + version: 12.1.5 + resolution: "postcss-nesting@npm:12.1.5" + dependencies: + "@csstools/selector-resolve-nested": ^1.1.0 + "@csstools/selector-specificity": ^3.1.1 + postcss-selector-parser: ^6.1.0 + peerDependencies: + postcss: ^8.4 + checksum: b026aa84cde046632c3b149329312f62b54595bdb164e7a2d5c2c1f0e58fb438c86bec313a4323992981031ace5656a65918b3494bf193b869f17b49f0144b6f + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.1.0": + version: 6.1.0 + resolution: "postcss-selector-parser@npm:6.1.0" + dependencies: + cssesc: ^3.0.0 + util-deprecate: ^1.0.2 + checksum: 449f614e6706421be307d8638183c61ba45bc3b460fe3815df8971dbb4d59c4087181940d879daee4a7a2daf3d86e915db1cce0c006dd68ca75b4087079273bd + languageName: node + linkType: hard + +"postcss@npm:^8.4.38": + version: 8.4.38 + resolution: "postcss@npm:8.4.38" + dependencies: + nanoid: ^3.3.7 + picocolors: ^1.0.0 + source-map-js: ^1.2.0 + checksum: 649f9e60a763ca4b5a7bbec446a069edf07f057f6d780a5a0070576b841538d1ecf7dd888f2fbfd1f76200e26c969e405aeeae66332e6927dbdc8bdcb90b9451 + languageName: node + linkType: hard + +"prelude-ls@npm:~1.1.2": + version: 1.1.2 + resolution: "prelude-ls@npm:1.1.2" + checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 + languageName: node + linkType: hard + +"preserve@npm:^0.2.0": + version: 0.2.0 + resolution: "preserve@npm:0.2.0" + checksum: dd31d4fd0e6b218cac7178712ae0683c96e6eaa3e5490a37aba6d47095f87c47ffe980a3061ebe72ca07cb2a9a4f1a41bbeecee8944ec77be311c294e05b2e43 + languageName: node + linkType: hard + +"prettier@npm:3.2.5": + version: 3.2.5 + resolution: "prettier@npm:3.2.5" + bin: + prettier: bin/prettier.cjs + checksum: 2ee4e1417572372afb7a13bb446b34f20f1bf1747db77cf6ccaf57a9be005f2f15c40f903d41a6b79eec3f57fff14d32a20fb6dee1f126da48908926fe43c311 + languageName: node + linkType: hard + +"pretty-format@npm:^22.4.0, pretty-format@npm:^22.4.3": + version: 22.4.3 + resolution: "pretty-format@npm:22.4.3" + dependencies: + ansi-regex: ^3.0.0 + ansi-styles: ^3.2.0 + checksum: 300f4fcf32b6d49cd4e6ed81ee20e4e5484ffb55d3791f1ffe7a5f410d0ed14027134fc04e0032bc09b4a44e548472ead12663384c44bc5813eb5f61fe244830 + languageName: node + linkType: hard + +"private@npm:^0.1.8": + version: 0.1.8 + resolution: "private@npm:0.1.8" + checksum: a00abd713d25389f6de7294f0e7879b8a5d09a9ec5fd81cc2f21b29d4f9a80ec53bc4222927d3a281d4aadd4cd373d9a28726fca3935921950dc75fd71d1fdbb + languageName: node + linkType: hard + +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 + languageName: node + linkType: hard + +"proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + +"progress@npm:^2.0.0": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"pseudomap@npm:^1.0.2": + version: 1.0.2 + resolution: "pseudomap@npm:1.0.2" + checksum: 856c0aae0ff2ad60881168334448e898ad7a0e45fe7386d114b150084254c01e200c957cf378378025df4e052c7890c5bd933939b0e0d2ecfcc1dc2f0b2991f5 + languageName: node + linkType: hard + +"psl@npm:^1.1.28": + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 + languageName: node + linkType: hard + +"qs@npm:~6.5.2": + version: 6.5.3 + resolution: "qs@npm:6.5.3" + checksum: 6f20bf08cabd90c458e50855559539a28d00b2f2e7dddcb66082b16a43188418cb3cb77cbd09268bcef6022935650f0534357b8af9eeb29bf0f27ccb17655692 + languageName: node + linkType: hard + +"randomatic@npm:^3.0.0": + version: 3.1.1 + resolution: "randomatic@npm:3.1.1" + dependencies: + is-number: ^4.0.0 + kind-of: ^6.0.0 + math-random: ^1.0.1 + checksum: 1952baed71801d3698fe84f3ab01e25ea124fc20ce91e133aa1981268c1347647f9ae1fdc62389db2411ebdad61c0f7cea0ce840dee260ad2adadfcf27299018 + languageName: node + linkType: hard + +"read-pkg-up@npm:^1.0.1": + version: 1.0.1 + resolution: "read-pkg-up@npm:1.0.1" + dependencies: + find-up: ^1.0.0 + read-pkg: ^1.0.0 + checksum: d18399a0f46e2da32beb2f041edd0cda49d2f2cc30195a05c759ef3ed9b5e6e19ba1ad1bae2362bdec8c6a9f2c3d18f4d5e8c369e808b03d498d5781cb9122c7 + languageName: node + linkType: hard + +"read-pkg@npm:^1.0.0": + version: 1.1.0 + resolution: "read-pkg@npm:1.1.0" + dependencies: + load-json-file: ^1.0.0 + normalize-package-data: ^2.3.2 + path-type: ^1.0.0 + checksum: a0f5d5e32227ec8e6a028dd5c5134eab229768dcb7a5d9a41a284ed28ad4b9284fecc47383dc1593b5694f4de603a7ffaee84b738956b9b77e0999567485a366 + languageName: node + linkType: hard + +"readable-stream@npm:^2.0.1, readable-stream@npm:^2.2.2": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.3 + isarray: ~1.0.0 + process-nextick-args: ~2.0.0 + safe-buffer: ~5.1.1 + string_decoder: ~1.1.1 + util-deprecate: ~1.0.1 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 + languageName: node + linkType: hard + +"realpath-native@npm:^1.0.0": + version: 1.1.0 + resolution: "realpath-native@npm:1.1.0" + dependencies: + util.promisify: ^1.0.0 + checksum: 75ef0595dea6186384b785a9e0993c58ec604f8be2e39b602fec6d7837c7f770af4a4eb3c81f864a7d81c518a7167a6eaabbc7695b7a88c56e1ef04b91c1d586 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.11.0": + version: 0.11.1 + resolution: "regenerator-runtime@npm:0.11.1" + checksum: 3c97bd2c7b2b3247e6f8e2147a002eb78c995323732dad5dc70fac8d8d0b758d0295e7015b90d3d444446ae77cbd24b9f9123ec3a77018e81d8999818301b4f4 + languageName: node + linkType: hard + +"regex-cache@npm:^0.4.2": + version: 0.4.4 + resolution: "regex-cache@npm:0.4.4" + dependencies: + is-equal-shallow: ^0.1.3 + checksum: fdaf756fbd7048a34dc454ab6da678828148d34ac8e3701636bd747fd9d2df1191f6f80669f7ce7c4173e4631a92d3943ce4dc2a43a1acfa7c5308cdd49a1587 + languageName: node + linkType: hard + +"regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": + version: 1.0.2 + resolution: "regex-not@npm:1.0.2" + dependencies: + extend-shallow: ^3.0.2 + safe-regex: ^1.1.0 + checksum: 3081403de79559387a35ef9d033740e41818a559512668cef3d12da4e8a29ef34ee13c8ed1256b07e27ae392790172e8a15c8a06b72962fd4550476cde3d8f77 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.2": + version: 1.5.2 + resolution: "regexp.prototype.flags@npm:1.5.2" + dependencies: + call-bind: ^1.0.6 + define-properties: ^1.2.1 + es-errors: ^1.3.0 + set-function-name: ^2.0.1 + checksum: d7f333667d5c564e2d7a97c56c3075d64c722c9bb51b2b4df6822b2e8096d623a5e63088fb4c83df919b6951ef8113841de8b47de7224872fa6838bc5d8a7d64 + languageName: node + linkType: hard + +"regexpp@npm:^1.0.1": + version: 1.1.0 + resolution: "regexpp@npm:1.1.0" + checksum: 78c5b75a63fce24447aa26184150779c6c1552e0e468270e142a2361d8c6bd6ad26cbfa67ad869f98541d104b10fa49506e30cd98015bf57e21ffb7495130d7c + languageName: node + linkType: hard + +"remove-trailing-separator@npm:^1.0.1": + version: 1.1.0 + resolution: "remove-trailing-separator@npm:1.1.0" + checksum: d3c20b5a2d987db13e1cca9385d56ecfa1641bae143b620835ac02a6b70ab88f68f117a0021838db826c57b31373d609d52e4f31aca75fc490c862732d595419 + languageName: node + linkType: hard + +"repeat-element@npm:^1.1.2": + version: 1.1.4 + resolution: "repeat-element@npm:1.1.4" + checksum: 1edd0301b7edad71808baad226f0890ba709443f03a698224c9ee4f2494c317892dc5211b2ba8cbea7194a9ddbcac01e283bd66de0467ab24ee1fc1a3711d8a9 + languageName: node + linkType: hard + +"repeat-string@npm:^1.5.2, repeat-string@npm:^1.6.1": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 + languageName: node + linkType: hard + +"repeating@npm:^2.0.0": + version: 2.0.1 + resolution: "repeating@npm:2.0.1" + dependencies: + is-finite: ^1.0.0 + checksum: d2db0b69c5cb0c14dd750036e0abcd6b3c3f7b2da3ee179786b755cf737ca15fa0fff417ca72de33d6966056f4695440e680a352401fc02c95ade59899afbdd0 + languageName: node + linkType: hard + +"request-promise-core@npm:1.1.4": + version: 1.1.4 + resolution: "request-promise-core@npm:1.1.4" + dependencies: + lodash: ^4.17.19 + peerDependencies: + request: ^2.34 + checksum: c798bafd552961e36fbf5023b1d081e81c3995ab390f1bc8ef38a711ba3fe4312eb94dbd61887073d7356c3499b9380947d7f62faa805797c0dc50f039425699 + languageName: node + linkType: hard + +"request-promise-native@npm:^1.0.5": + version: 1.0.9 + resolution: "request-promise-native@npm:1.0.9" + dependencies: + request-promise-core: 1.1.4 + stealthy-require: ^1.1.1 + tough-cookie: ^2.3.3 + peerDependencies: + request: ^2.34 + checksum: 3e2c694eefac88cb20beef8911ad57a275ab3ccbae0c4ca6c679fffb09d5fd502458aab08791f0814ca914b157adab2d4e472597c97a73be702918e41725ed69 + languageName: node + linkType: hard + +"request@npm:^2.87.0": + version: 2.88.2 + resolution: "request@npm:2.88.2" + dependencies: + aws-sign2: ~0.7.0 + aws4: ^1.8.0 + caseless: ~0.12.0 + combined-stream: ~1.0.6 + extend: ~3.0.2 + forever-agent: ~0.6.1 + form-data: ~2.3.2 + har-validator: ~5.1.3 + http-signature: ~1.2.0 + is-typedarray: ~1.0.0 + isstream: ~0.1.2 + json-stringify-safe: ~5.0.1 + mime-types: ~2.1.19 + oauth-sign: ~0.9.0 + performance-now: ^2.1.0 + qs: ~6.5.2 + safe-buffer: ^5.1.2 + tough-cookie: ~2.5.0 + tunnel-agent: ^0.6.0 + uuid: ^3.3.2 + checksum: 4e112c087f6eabe7327869da2417e9d28fcd0910419edd2eb17b6acfc4bfa1dad61954525949c228705805882d8a98a86a0ea12d7f739c01ee92af7062996983 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"require-main-filename@npm:^1.0.1": + version: 1.0.1 + resolution: "require-main-filename@npm:1.0.1" + checksum: 1fef30754da961f4e13c450c3eb60c7ae898a529c6ad6fa708a70bd2eed01564ceb299187b2899f5562804d797a059f39a5789884d0ac7b7ae1defc68fba4abf + languageName: node + linkType: hard + +"require-uncached@npm:^1.0.3": + version: 1.0.3 + resolution: "require-uncached@npm:1.0.3" + dependencies: + caller-path: ^0.1.0 + resolve-from: ^1.0.0 + checksum: ace5261d38072130d1fefcfe9662b0d038fe1e38988a801be3e90fbfcab9f6786eeadcf53ac36d6d81b676b29649c7dc5719be0ee571f63058f842838d704bee + languageName: node + linkType: hard + +"resolve-cwd@npm:^2.0.0": + version: 2.0.0 + resolution: "resolve-cwd@npm:2.0.0" + dependencies: + resolve-from: ^3.0.0 + checksum: e7c16880c460656e77f102d537a6dc82b3657d9173697cd6ea82ffce37df96f6c1fc79d0bb35fd73fff8871ac13f21b4396958b5f0a13e5b99c97d69f5e319fa + languageName: node + linkType: hard + +"resolve-from@npm:^1.0.0": + version: 1.0.1 + resolution: "resolve-from@npm:1.0.1" + checksum: 10134654dd6e758d4a4ad60acf69a90731673058a1a96068afc5f2ee84ac373df4d0237e0f052b5c81cc076273213ed50d228fc09723e0840c5c61ea37eb8854 + languageName: node + linkType: hard + +"resolve-from@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-from@npm:3.0.0" + checksum: fff9819254d2d62b57f74e5c2ca9c0bdd425ca47287c4d801bc15f947533148d858229ded7793b0f59e61e49e782fffd6722048add12996e1bd4333c29669062 + languageName: node + linkType: hard + +"resolve-url@npm:^0.2.1": + version: 0.2.1 + resolution: "resolve-url@npm:0.2.1" + checksum: 7b7035b9ed6e7bc7d289e90aef1eab5a43834539695dac6416ca6e91f1a94132ae4796bbd173cdacfdc2ade90b5f38a3fb6186bebc1b221cd157777a23b9ad14 + languageName: node + linkType: hard + +"resolve@npm:1.1.7": + version: 1.1.7 + resolution: "resolve@npm:1.1.7" + checksum: afd20873fbde7641c9125efe3f940c2a99f6b1f90f1b7b743e744bdaac1cb105b2e4e0317bcc052ed7e31d57afa86b394a4dc9a1b33a297977be134fdf0250ab + languageName: node + linkType: hard + +"resolve@npm:^1.10.0": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c + languageName: node + linkType: hard + +"resolve@patch:resolve@1.1.7#~builtin": + version: 1.1.7 + resolution: "resolve@patch:resolve@npm%3A1.1.7#~builtin::version=1.1.7&hash=07638b" + checksum: e9dbca78600ae56835c43a09f1276876c883e4b4bbd43e2683fa140671519d2bdebeb1c1576ca87c8c508ae2987b3ec481645ac5d3054b0f23254cfc1ce49942 + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.10.0#~builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=07638b" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 + languageName: node + linkType: hard + +"restore-cursor@npm:^2.0.0": + version: 2.0.0 + resolution: "restore-cursor@npm:2.0.0" + dependencies: + onetime: ^2.0.0 + signal-exit: ^3.0.2 + checksum: 482e13d02d834b6e5e3aa90304a8b5e840775d6f06916cc92a50038adf9f098dcc72405b567da8a37e137ae40ad3e31896fa3136ae62f7a426c2fbf53d036536 + languageName: node + linkType: hard + +"ret@npm:~0.1.10": + version: 0.1.15 + resolution: "ret@npm:0.1.15" + checksum: d76a9159eb8c946586567bd934358dfc08a36367b3257f7a3d7255fdd7b56597235af23c6afa0d7f0254159e8051f93c918809962ebd6df24ca2a83dbe4d4151 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"rimraf@npm:^2.5.4, rimraf@npm:^2.6.1": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" + dependencies: + glob: ^7.1.3 + bin: + rimraf: ./bin.js + checksum: cdc7f6eacb17927f2a075117a823e1c5951792c6498ebcce81ca8203454a811d4cf8900314154d3259bb8f0b42ab17f67396a8694a54cae3283326e57ad250cd + languageName: node + linkType: hard + +"rimraf@npm:~2.6.2": + version: 2.6.3 + resolution: "rimraf@npm:2.6.3" + dependencies: + glob: ^7.1.3 + bin: + rimraf: ./bin.js + checksum: 3ea587b981a19016297edb96d1ffe48af7e6af69660e3b371dbfc73722a73a0b0e9be5c88089fbeeb866c389c1098e07f64929c7414290504b855f54f901ab10 + languageName: node + linkType: hard + +"rollup@npm:^4.13.0": + version: 4.18.0 + resolution: "rollup@npm:4.18.0" + dependencies: + "@rollup/rollup-android-arm-eabi": 4.18.0 + "@rollup/rollup-android-arm64": 4.18.0 + "@rollup/rollup-darwin-arm64": 4.18.0 + "@rollup/rollup-darwin-x64": 4.18.0 + "@rollup/rollup-linux-arm-gnueabihf": 4.18.0 + "@rollup/rollup-linux-arm-musleabihf": 4.18.0 + "@rollup/rollup-linux-arm64-gnu": 4.18.0 + "@rollup/rollup-linux-arm64-musl": 4.18.0 + "@rollup/rollup-linux-powerpc64le-gnu": 4.18.0 + "@rollup/rollup-linux-riscv64-gnu": 4.18.0 + "@rollup/rollup-linux-s390x-gnu": 4.18.0 + "@rollup/rollup-linux-x64-gnu": 4.18.0 + "@rollup/rollup-linux-x64-musl": 4.18.0 + "@rollup/rollup-win32-arm64-msvc": 4.18.0 + "@rollup/rollup-win32-ia32-msvc": 4.18.0 + "@rollup/rollup-win32-x64-msvc": 4.18.0 + "@types/estree": 1.0.5 + fsevents: ~2.3.2 + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 54cde921e763017ce952ba76ec77d58dd9c01e3536c3be628d4af8c59d9b2f0e1e6a11b30fda44845c7b74098646cd972feb3bcd2f4a35d3293366f2eeb0a39e + languageName: node + linkType: hard + +"rsvp@npm:^3.3.3": + version: 3.6.2 + resolution: "rsvp@npm:3.6.2" + checksum: 08504ea7ab3dba0349ff820011a460da69de08edf7149ee672f4511310ee4bd3767bfa83b6db019fa99b144125e1e93e6fba122d75a702a005360393f4352864 + languageName: node + linkType: hard + +"run-async@npm:^2.2.0": + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 + languageName: node + linkType: hard + +"rx-lite-aggregates@npm:^4.0.8": + version: 4.0.8 + resolution: "rx-lite-aggregates@npm:4.0.8" + dependencies: + rx-lite: "*" + checksum: e25fde5fa17c2160f3f2948e13096b3e20992ab732786c2b9103a092c9251d65d8b262a8d98a0d63317655fbbf95cd428a400cbeecdd4e58e9c2c11fd8b709d2 + languageName: node + linkType: hard + +"rx-lite@npm:*, rx-lite@npm:^4.0.8": + version: 4.0.8 + resolution: "rx-lite@npm:4.0.8" + checksum: 9caeaa6d6dbb1256eaf0b5207a90c3d57d79fc13ddc8ca7303847c157259b1d5913a4408ea37b7b2799a00c0ec7ec3925b2612198103387e471e0b4f8ca6f8b2 + languageName: node + linkType: hard + +"safe-array-concat@npm:^1.0.0, safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" + dependencies: + call-bind: ^1.0.7 + get-intrinsic: ^1.2.4 + has-symbols: ^1.0.3 + isarray: ^2.0.5 + checksum: a3b259694754ddfb73ae0663829e396977b99ff21cbe8607f35a469655656da8e271753497e59da8a7575baa94d2e684bea3e10ddd74ba046c0c9b4418ffa0c4 + languageName: node + linkType: hard + +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-regex: ^1.1.4 + checksum: 6c7d392ff1ae7a3ae85273450ed02d1d131f1d2c76e177d6b03eb88e6df8fa062639070e7d311802c1615f351f18dc58f9454501c58e28d5ffd9b8f502ba6489 + languageName: node + linkType: hard + +"safe-regex@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex@npm:1.1.0" + dependencies: + ret: ~0.1.10 + checksum: 9a8bba57c87a841f7997b3b951e8e403b1128c1a4fd1182f40cc1a20e2d490593d7c2a21030fadfea320c8e859219019e136f678c6689ed5960b391b822f01d5 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"sane@npm:^2.0.0": + version: 2.5.2 + resolution: "sane@npm:2.5.2" + dependencies: + anymatch: ^2.0.0 + capture-exit: ^1.2.0 + exec-sh: ^0.2.0 + fb-watchman: ^2.0.0 + fsevents: ^1.2.3 + micromatch: ^3.1.4 + minimist: ^1.1.1 + walker: ~1.0.5 + watch: ~0.18.0 + dependenciesMeta: + fsevents: + optional: true + bin: + sane: ./src/cli.js + checksum: 814d11e7728821aad2ca12a090825ca7ce94440c6e137fd1205af511563c26e5d1fd0fcb208021bb66deaee0336f57c1c5c92d9b72ecafc78a20c6d9a22ce3b3 + languageName: node + linkType: hard + +"sax@npm:^1.2.4": + version: 1.4.1 + resolution: "sax@npm:1.4.1" + checksum: 3ad64df16b743f0f2eb7c38ced9692a6d924f1cd07bbe45c39576c2cf50de8290d9d04e7b2228f924c7d05fecc4ec5cf651423278e0c7b63d260c387ef3af84a + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.3.0, semver@npm:^5.5.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 + languageName: node + linkType: hard + +"semver@npm:^7.3.5": + version: 7.6.2 + resolution: "semver@npm:7.6.2" + bin: + semver: bin/semver.js + checksum: 40f6a95101e8d854357a644da1b8dd9d93ce786d5c6a77227bc69dbb17bea83d0d1d1d7c4cd5920a6df909f48e8bd8a5909869535007f90278289f2451d0292d + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.1": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + functions-have-names: ^1.2.3 + has-property-descriptors: ^1.0.2 + checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f + languageName: node + linkType: hard + +"set-value@npm:^2.0.0, set-value@npm:^2.0.1": + version: 2.0.1 + resolution: "set-value@npm:2.0.1" + dependencies: + extend-shallow: ^2.0.1 + is-extendable: ^0.1.1 + is-plain-object: ^2.0.3 + split-string: ^3.0.1 + checksum: 09a4bc72c94641aeae950eb60dc2755943b863780fcc32e441eda964b64df5e3f50603d5ebdd33394ede722528bd55ed43aae26e9df469b4d32e2292b427b601 + languageName: node + linkType: hard + +"shebang-command@npm:^1.2.0": + version: 1.2.0 + resolution: "shebang-command@npm:1.2.0" + dependencies: + shebang-regex: ^1.0.0 + checksum: 9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"shellwords@npm:^0.1.1": + version: 0.1.1 + resolution: "shellwords@npm:0.1.1" + checksum: 8d73a5e9861f5e5f1068e2cfc39bc0002400fe58558ab5e5fa75630d2c3adf44ca1fac81957609c8320d5533e093802fcafc72904bf1a32b95de3c19a0b1c0d4 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + object-inspect: ^1.13.1 + checksum: bfc1afc1827d712271453e91b7cd3878ac0efd767495fd4e594c4c2afaa7963b7b510e249572bfd54b0527e66e4a12b61b80c061389e129755f34c493aad9b97 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"slash@npm:^1.0.0": + version: 1.0.0 + resolution: "slash@npm:1.0.0" + checksum: 4b6e21b1fba6184a7e2efb1dd173f692d8a845584c1bbf9dc818ff86f5a52fc91b413008223d17cc684604ee8bb9263a420b1182027ad9762e35388434918860 + languageName: node + linkType: hard + +"slice-ansi@npm:1.0.0": + version: 1.0.0 + resolution: "slice-ansi@npm:1.0.0" + dependencies: + is-fullwidth-code-point: ^2.0.0 + checksum: b4239e885803d9e35c6a3a17bb530f1d76349753abaf88594ab57dfd666afe8e927efff152d5e010b51d134dd47b6118bb9c47d24c99ed75841c29beae82d9b9 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"snapdragon-node@npm:^2.0.1": + version: 2.1.1 + resolution: "snapdragon-node@npm:2.1.1" + dependencies: + define-property: ^1.0.0 + isobject: ^3.0.0 + snapdragon-util: ^3.0.1 + checksum: 9bb57d759f9e2a27935dbab0e4a790137adebace832b393e350a8bf5db461ee9206bb642d4fe47568ee0b44080479c8b4a9ad0ebe3712422d77edf9992a672fd + languageName: node + linkType: hard + +"snapdragon-util@npm:^3.0.1": + version: 3.0.1 + resolution: "snapdragon-util@npm:3.0.1" + dependencies: + kind-of: ^3.2.0 + checksum: 684997dbe37ec995c03fd3f412fba2b711fc34cb4010452b7eb668be72e8811a86a12938b511e8b19baf853b325178c56d8b78d655305e5cfb0bb8b21677e7b7 + languageName: node + linkType: hard + +"snapdragon@npm:^0.8.1": + version: 0.8.2 + resolution: "snapdragon@npm:0.8.2" + dependencies: + base: ^0.11.1 + debug: ^2.2.0 + define-property: ^0.2.5 + extend-shallow: ^2.0.1 + map-cache: ^0.2.2 + source-map: ^0.5.6 + source-map-resolve: ^0.5.0 + use: ^3.1.0 + checksum: a197f242a8f48b11036563065b2487e9b7068f50a20dd81d9161eca6af422174fc158b8beeadbe59ce5ef172aa5718143312b3aebaae551c124b7824387c8312 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.3 + resolution: "socks-proxy-agent@npm:8.0.3" + dependencies: + agent-base: ^7.1.1 + debug: ^4.3.4 + socks: ^2.7.1 + checksum: 8fab38821c327c190c28f1658087bc520eb065d55bc07b4a0fdf8d1e0e7ad5d115abbb22a95f94f944723ea969dd771ad6416b1e3cde9060c4c71f705c8b85c5 + languageName: node + linkType: hard + +"socks@npm:^2.7.1": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: ^9.0.5 + smart-buffer: ^4.2.0 + checksum: 7a6b7f6eedf7482b9e4597d9a20e09505824208006ea8f2c49b71657427f3c137ca2ae662089baa73e1971c62322d535d9d0cf1c9235cf6f55e315c18203eadd + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.0": + version: 1.2.0 + resolution: "source-map-js@npm:1.2.0" + checksum: 791a43306d9223792e84293b00458bf102a8946e7188f3db0e4e22d8d530b5f80a4ce468eb5ec0bf585443ad55ebbd630bf379c98db0b1f317fd902500217f97 + languageName: node + linkType: hard + +"source-map-resolve@npm:^0.5.0": + version: 0.5.3 + resolution: "source-map-resolve@npm:0.5.3" + dependencies: + atob: ^2.1.2 + decode-uri-component: ^0.2.0 + resolve-url: ^0.2.1 + source-map-url: ^0.4.0 + urix: ^0.1.0 + checksum: c73fa44ac00783f025f6ad9e038ab1a2e007cd6a6b86f47fe717c3d0765b4a08d264f6966f3bd7cd9dbcd69e4832783d5472e43247775b2a550d6f2155d24bae + languageName: node + linkType: hard + +"source-map-support@npm:^0.4.15": + version: 0.4.18 + resolution: "source-map-support@npm:0.4.18" + dependencies: + source-map: ^0.5.6 + checksum: 669aa7e992fec586fac0ba9a8dea8ce81b7328f92806335f018ffac5709afb2920e3870b4e56c68164282607229f04b8bbcf5d0e5c845eb1b5119b092e7585c0 + languageName: node + linkType: hard + +"source-map-support@npm:^0.5.0": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 + languageName: node + linkType: hard + +"source-map-url@npm:^0.4.0": + version: 0.4.1 + resolution: "source-map-url@npm:0.4.1" + checksum: 64c5c2c77aff815a6e61a4120c309ae4cac01298d9bcbb3deb1b46a4dd4c46d4a1eaeda79ec9f684766ae80e8dc86367b89326ce9dd2b89947bd9291fc1ac08c + languageName: node + linkType: hard + +"source-map@npm:^0.5.3, source-map@npm:^0.5.6, source-map@npm:^0.5.7": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: ^3.0.0 + spdx-license-ids: ^3.0.0 + checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: bb127d6e2532de65b912f7c99fc66097cdea7d64c10d3ec9b5e96524dbbd7d20e01cba818a6ddb2ae75e62bb0c63d5e277a7e555a85cbc8ab40044984fa4ae15 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: ^2.1.0 + spdx-license-ids: ^3.0.0 + checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.18 + resolution: "spdx-license-ids@npm:3.0.18" + checksum: 457825df5dd1fc0135b0bb848c896143f70945cc2da148afc71c73ed0837d1d651f809006e406d82109c9dd71a8cb39785a3604815fe46bc0548e9d3976f6b69 + languageName: node + linkType: hard + +"split-string@npm:^3.0.1, split-string@npm:^3.0.2": + version: 3.1.0 + resolution: "split-string@npm:3.1.0" + dependencies: + extend-shallow: ^3.0.0 + checksum: ae5af5c91bdc3633628821bde92fdf9492fa0e8a63cf6a0376ed6afde93c701422a1610916f59be61972717070119e848d10dfbbd5024b7729d6a71972d2a84c + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: a3fdac7b49643875b70864a9d9b469d87a40dfeaf5d34d9d0c5b1cda5fd7d065531fcb43c76357d62254c57184a7b151954156563a4d6a747015cfb41021cad0 + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 + languageName: node + linkType: hard + +"sshpk@npm:^1.7.0": + version: 1.18.0 + resolution: "sshpk@npm:1.18.0" + dependencies: + asn1: ~0.2.3 + assert-plus: ^1.0.0 + bcrypt-pbkdf: ^1.0.0 + dashdash: ^1.12.0 + ecc-jsbn: ~0.1.1 + getpass: ^0.1.1 + jsbn: ~0.1.0 + safer-buffer: ^2.0.2 + tweetnacl: ~0.14.0 + bin: + sshpk-conv: bin/sshpk-conv + sshpk-sign: bin/sshpk-sign + sshpk-verify: bin/sshpk-verify + checksum: 01d43374eee3a7e37b3b82fdbecd5518cbb2e47ccbed27d2ae30f9753f22bd6ffad31225cb8ef013bc3fb7785e686cea619203ee1439a228f965558c367c3cfa + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: ^7.0.3 + checksum: 4603d53a05bcd44188747d38f1cc43833b9951b5a1ee43ba50535bdfc5fe4a0897472dbe69837570a5417c3c073377ef4f8c1a272683b401857f72738ee57299 + languageName: node + linkType: hard + +"stack-utils@npm:^1.0.1": + version: 1.0.5 + resolution: "stack-utils@npm:1.0.5" + dependencies: + escape-string-regexp: ^2.0.0 + checksum: f82baf8d89536252a55c76866d5be3d04c96b09693a8d2ab3794b9fdec3674e05bd3f3d19345093e2cbba116a1f8f413858e0537bc3c81c605249261c3d26182 + languageName: node + linkType: hard + +"static-extend@npm:^0.1.1": + version: 0.1.2 + resolution: "static-extend@npm:0.1.2" + dependencies: + define-property: ^0.2.5 + object-copy: ^0.1.0 + checksum: 8657485b831f79e388a437260baf22784540417a9b29e11572c87735df24c22b84eda42107403a64b30861b2faf13df9f7fc5525d51f9d1d2303aba5cbf4e12c + languageName: node + linkType: hard + +"stealthy-require@npm:^1.1.1": + version: 1.1.1 + resolution: "stealthy-require@npm:1.1.1" + checksum: 6805b857a9f3a6a1079fc6652278038b81011f2a5b22cbd559f71a6c02087e6f1df941eb10163e3fdc5391ab5807aa46758d4258547c1f5ede31e6d9bfda8dd3 + languageName: node + linkType: hard + +"string-length@npm:^2.0.0": + version: 2.0.0 + resolution: "string-length@npm:2.0.0" + dependencies: + astral-regex: ^1.0.0 + strip-ansi: ^4.0.0 + checksum: 3a339b63fd39d6a1077dfbbe3279545e1b67fa4b0a558906158cf0121632b280f34c8768ec7270fb25db732d6323eceb9c7254f6026509694b6a7533ca8cb89e + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^1.0.1": + version: 1.0.2 + resolution: "string-width@npm:1.0.2" + dependencies: + code-point-at: ^1.0.0 + is-fullwidth-code-point: ^1.0.0 + strip-ansi: ^3.0.0 + checksum: 5c79439e95bc3bd7233a332c5f5926ab2ee90b23816ed4faa380ce3b2576d7800b0a5bb15ae88ed28737acc7ea06a518c2eef39142dd727adad0e45c776cd37e + languageName: node + linkType: hard + +"string-width@npm:^2.0.0, string-width@npm:^2.1.0, string-width@npm:^2.1.1": + version: 2.1.1 + resolution: "string-width@npm:2.1.1" + dependencies: + is-fullwidth-code-point: ^2.0.0 + strip-ansi: ^4.0.0 + checksum: d6173abe088c615c8dffaf3861dc5d5906ed3dc2d6fd67ff2bd2e2b5dce7fd683c5240699cf0b1b8aa679a3b3bd6b28b5053c824cb89b813d7f6541d8f89064a + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.9": + version: 1.2.9 + resolution: "string.prototype.trim@npm:1.2.9" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.0 + es-object-atoms: ^1.0.0 + checksum: ea2df6ec1e914c9d4e2dc856fa08228e8b1be59b59e50b17578c94a66a176888f417264bb763d4aac638ad3b3dad56e7a03d9317086a178078d131aa293ba193 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimend@npm:1.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: cc3bd2de08d8968a28787deba9a3cb3f17ca5f9f770c91e7e8fa3e7d47f079bad70fadce16f05dda9f261788be2c6e84a942f618c3bed31e42abc5c1084f8dfd + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96 + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": + version: 3.0.1 + resolution: "strip-ansi@npm:3.0.1" + dependencies: + ansi-regex: ^2.0.0 + checksum: 9b974de611ce5075c70629c00fa98c46144043db92ae17748fb780f706f7a789e9989fd10597b7c2053ae8d1513fd707816a91f1879b2f71e6ac0b6a863db465 + languageName: node + linkType: hard + +"strip-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-ansi@npm:4.0.0" + dependencies: + ansi-regex: ^3.0.0 + checksum: d9186e6c0cf78f25274f6750ee5e4a5725fb91b70fdd79aa5fe648eab092a0ec5b9621b22d69d4534a56319f75d8944efbd84e3afa8d4ad1b9a9491f12c84eca + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-bom@npm:3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b + languageName: node + linkType: hard + +"strip-bom@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-bom@npm:2.0.0" + dependencies: + is-utf8: ^0.2.0 + checksum: 08efb746bc67b10814cd03d79eb31bac633393a782e3f35efbc1b61b5165d3806d03332a97f362822cf0d4dd14ba2e12707fcff44fe1c870c48a063a0c9e4944 + languageName: node + linkType: hard + +"strip-eof@npm:^1.0.0": + version: 1.0.0 + resolution: "strip-eof@npm:1.0.0" + checksum: 40bc8ddd7e072f8ba0c2d6d05267b4e0a4800898c3435b5fb5f5a21e6e47dfaff18467e7aa0d1844bb5d6274c3097246595841fbfeb317e541974ee992cac506 + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 + languageName: node + linkType: hard + +"supports-color@npm:^2.0.0": + version: 2.0.0 + resolution: "supports-color@npm:2.0.0" + checksum: 602538c5812b9006404370b5a4b885d3e2a1f6567d314f8b4a41974ffe7d08e525bf92ae0f9c7030e3b4c78e4e34ace55d6a67a74f1571bc205959f5972f88f0 + languageName: node + linkType: hard + +"supports-color@npm:^3.1.2": + version: 3.2.3 + resolution: "supports-color@npm:3.2.3" + dependencies: + has-flag: ^1.0.0 + checksum: 56afc05fa87d00100d90148c4d0a6e20a0af0d56dca5c54d4d40b2553ee737dab0ca4e8b53c4471afc035227b5b44dfa4824747a7f01ad733173536f7da6fbbb + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae + languageName: node + linkType: hard + +"symbol-tree@npm:^3.2.2": + version: 3.2.4 + resolution: "symbol-tree@npm:3.2.4" + checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d + languageName: node + linkType: hard + +"table@npm:4.0.2": + version: 4.0.2 + resolution: "table@npm:4.0.2" + dependencies: + ajv: ^5.2.3 + ajv-keywords: ^2.1.0 + chalk: ^2.1.0 + lodash: ^4.17.4 + slice-ansi: 1.0.0 + string-width: ^2.1.1 + checksum: 66eecf4992ac8c8d336b6de9b9e771e9ee86e3481f3695f01d227255c458af37fec55894afffd7d0a2caa15eccd4fccd3dbaf973012af85d91f449045693327b + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c + languageName: node + linkType: hard + +"test-exclude@npm:^4.2.1": + version: 4.2.3 + resolution: "test-exclude@npm:4.2.3" + dependencies: + arrify: ^1.0.1 + micromatch: ^2.3.11 + object-assign: ^4.1.0 + read-pkg-up: ^1.0.1 + require-main-filename: ^1.0.1 + checksum: a026932ff069f48cb9ba96a05c9c3eab660ad159b2d56138f69e3e28390e26ac3aa742349d6d7e6cdb2acfb1a57cff0c32d0388732f89761aa6efcced43dca47 + languageName: node + linkType: hard + +"text-table@npm:~0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a + languageName: node + linkType: hard + +"throat@npm:^4.0.0": + version: 4.1.0 + resolution: "throat@npm:4.1.0" + checksum: 43519b0cea6d3b2a8fe056fcbc319e289037be67d2204d4d33513d20d6ee9da6255f7ba8c89e2ec8c97b0f188a910b8666def38d1058d2bf4a39613812c36d98 + languageName: node + linkType: hard + +"through@npm:^2.3.6": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: ~1.0.2 + checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 + languageName: node + linkType: hard + +"to-fast-properties@npm:^1.0.3": + version: 1.0.3 + resolution: "to-fast-properties@npm:1.0.3" + checksum: bd0abb58c4722851df63419de3f6d901d5118f0440d3f71293ed776dd363f2657edaaf2dc470e3f6b7b48eb84aa411193b60db8a4a552adac30de9516c5cc580 + languageName: node + linkType: hard + +"to-object-path@npm:^0.3.0": + version: 0.3.0 + resolution: "to-object-path@npm:0.3.0" + dependencies: + kind-of: ^3.0.2 + checksum: 9425effee5b43e61d720940fa2b889623f77473d459c2ce3d4a580a4405df4403eec7be6b857455908070566352f9e2417304641ed158dda6f6a365fe3e66d70 + languageName: node + linkType: hard + +"to-regex-range@npm:^2.1.0": + version: 2.1.1 + resolution: "to-regex-range@npm:2.1.1" + dependencies: + is-number: ^3.0.0 + repeat-string: ^1.6.1 + checksum: 46093cc14be2da905cc931e442d280b2e544e2bfdb9a24b3cf821be8d342f804785e5736c108d5be026021a05d7b38144980a61917eee3c88de0a5e710e10320 + languageName: node + linkType: hard + +"to-regex@npm:^3.0.1, to-regex@npm:^3.0.2": + version: 3.0.2 + resolution: "to-regex@npm:3.0.2" + dependencies: + define-property: ^2.0.2 + extend-shallow: ^3.0.2 + regex-not: ^1.0.2 + safe-regex: ^1.1.0 + checksum: 4ed4a619059b64e204aad84e4e5f3ea82d97410988bcece7cf6cbfdbf193d11bff48cf53842d88b8bb00b1bfc0d048f61f20f0709e6f393fd8fe0122662d9db4 + languageName: node + linkType: hard + +"tough-cookie@npm:^2.3.3, tough-cookie@npm:^2.3.4, tough-cookie@npm:~2.5.0": + version: 2.5.0 + resolution: "tough-cookie@npm:2.5.0" + dependencies: + psl: ^1.1.28 + punycode: ^2.1.1 + checksum: 16a8cd090224dd176eee23837cbe7573ca0fa297d7e468ab5e1c02d49a4e9a97bb05fef11320605eac516f91d54c57838a25864e8680e27b069a5231d8264977 + languageName: node + linkType: hard + +"tr46@npm:^1.0.1": + version: 1.0.1 + resolution: "tr46@npm:1.0.1" + dependencies: + punycode: ^2.1.0 + checksum: 96d4ed46bc161db75dbf9247a236ea0bfcaf5758baae6749e92afab0bc5a09cb59af21788ede7e55080f2bf02dce3e4a8f2a484cc45164e29f4b5e68f7cbcc1a + languageName: node + linkType: hard + +"trim-right@npm:^1.0.1": + version: 1.0.1 + resolution: "trim-right@npm:1.0.1" + checksum: 9120af534e006a7424a4f9358710e6e707887b6ccf7ea69e50d6ac6464db1fe22268400def01752f09769025d480395159778153fb98d4a2f6f40d4cf5d4f3b6 + languageName: node + linkType: hard + +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: ^5.0.1 + checksum: 05f6510358f8afc62a057b8b692f05d70c1782b70db86d6a1e0d5e28a32389e52fa6e7707b6c5ecccacc031462e4bc35af85ecfe4bbc341767917b7cf6965711 + languageName: node + linkType: hard + +"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": + version: 0.14.5 + resolution: "tweetnacl@npm:0.14.5" + checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487 + languageName: node + linkType: hard + +"type-check@npm:~0.3.2": + version: 0.3.2 + resolution: "type-check@npm:0.3.2" + dependencies: + prelude-ls: ~1.1.2 + checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-typed-array: ^1.1.13 + checksum: 02ffc185d29c6df07968272b15d5319a1610817916ec8d4cd670ded5d1efe72901541ff2202fcc622730d8a549c76e198a2f74e312eabbfb712ed907d45cbb0b + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: f65e5ecd1cf76b1a2d0d6f631f3ea3cdb5e08da106c6703ffe687d583e49954d570cc80434816d3746e18be889ffe53c58bf3e538081ea4077c26a41055b216d + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: c8645c8794a621a0adcc142e0e2c57b1823bbfa4d590ad2c76b266aa3823895cf7afb9a893bf6685e18454ab1b0241e1a8d885a2d1340948efa4b56add4b5f67 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.6": + version: 1.0.6 + resolution: "typed-array-length@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + possible-typed-array-names: ^1.0.0 + checksum: f0315e5b8f0168c29d390ff410ad13e4d511c78e6006df4a104576844812ee447fcc32daab1f3a76c9ef4f64eff808e134528b5b2439de335586b392e9750e5c + languageName: node + linkType: hard + +"typedarray@npm:^0.0.6": + version: 0.0.6 + resolution: "typedarray@npm:0.0.6" + checksum: 33b39f3d0e8463985eeaeeacc3cb2e28bc3dfaf2a5ed219628c0b629d5d7b810b0eb2165f9f607c34871d5daa92ba1dc69f49051cf7d578b4cbd26c340b9d1b1 + languageName: node + linkType: hard + +"uglify-js@npm:^3.1.4": + version: 3.18.0 + resolution: "uglify-js@npm:3.18.0" + bin: + uglifyjs: bin/uglifyjs + checksum: 887733d05d4139a94dffd04a5f07ee7d8be70201c016ea48cb82703778b5c48fadbe6e5e7ac956425522f72e657d3eade23f06ae8a0e2eeed2d684bf6cc25e36 + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + has-bigints: ^1.0.2 + has-symbols: ^1.0.3 + which-boxed-primitive: ^1.0.2 + checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 + languageName: node + linkType: hard + +"union-value@npm:^1.0.0": + version: 1.0.1 + resolution: "union-value@npm:1.0.1" + dependencies: + arr-union: ^3.1.0 + get-value: ^2.0.6 + is-extendable: ^0.1.1 + set-value: ^2.0.1 + checksum: a3464097d3f27f6aa90cf103ed9387541bccfc006517559381a10e0dffa62f465a9d9a09c9b9c3d26d0f4cbe61d4d010e2fbd710fd4bf1267a768ba8a774b0ba + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"unset-value@npm:^1.0.0": + version: 1.0.0 + resolution: "unset-value@npm:1.0.0" + dependencies: + has-value: ^0.3.1 + isobject: ^3.0.0 + checksum: 5990ecf660672be2781fc9fb322543c4aa592b68ed9a3312fa4df0e9ba709d42e823af090fc8f95775b4cd2c9a5169f7388f0cec39238b6d0d55a69fc2ab6b29 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"urix@npm:^0.1.0": + version: 0.1.0 + resolution: "urix@npm:0.1.0" + checksum: 4c076ecfbf3411e888547fe844e52378ab5ada2d2f27625139011eada79925e77f7fbf0e4016d45e6a9e9adb6b7e64981bd49b22700c7c401c5fc15f423303b3 + languageName: node + linkType: hard + +"use@npm:^3.1.0": + version: 3.1.1 + resolution: "use@npm:3.1.1" + checksum: 08a130289f5238fcbf8f59a18951286a6e660d17acccc9d58d9b69dfa0ee19aa038e8f95721b00b432c36d1629a9e32a464bf2e7e0ae6a244c42ddb30bdd8b33 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"util.promisify@npm:^1.0.0": + version: 1.1.2 + resolution: "util.promisify@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + for-each: ^0.3.3 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + object.getownpropertydescriptors: ^2.1.6 + safe-array-concat: ^1.0.0 + checksum: 9a5233e7fd067ca24abe2310f9c93e6df3adb644a662fcd826454d30539d3dd1d557b75bfed4cedd4993203012ea6add6d7dd268fed35bbdac4736dce9446373 + languageName: node + linkType: hard + +"uuid@npm:^3.3.2": + version: 3.4.0 + resolution: "uuid@npm:3.4.0" + bin: + uuid: ./bin/uuid + checksum: 58de2feed61c59060b40f8203c0e4ed7fd6f99d42534a499f1741218a1dd0c129f4aa1de797bcf822c8ea5da7e4137aa3673431a96dae729047f7aca7b27866f + languageName: node + linkType: hard + +"validate-npm-package-license@npm:^3.0.1": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: ^3.0.0 + spdx-expression-parse: ^3.0.0 + checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + languageName: node + linkType: hard + +"verror@npm:1.10.0": + version: 1.10.0 + resolution: "verror@npm:1.10.0" + dependencies: + assert-plus: ^1.0.0 + core-util-is: 1.0.2 + extsprintf: ^1.2.0 + checksum: c431df0bedf2088b227a4e051e0ff4ca54df2c114096b0c01e1cbaadb021c30a04d7dd5b41ab277bcd51246ca135bf931d4c4c796ecae7a4fef6d744ecef36ea + languageName: node + linkType: hard + +"vite@npm:^5.2.10": + version: 5.3.1 + resolution: "vite@npm:5.3.1" + dependencies: + esbuild: ^0.21.3 + fsevents: ~2.3.3 + postcss: ^8.4.38 + rollup: ^4.13.0 + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: a06d35566338794a877538ddacccccfdac30df7e260546dc0513e77191b86a13398b86a8082bb6c842013b0d3062f951f624a3f800867cbf06aef89e49767d6c + languageName: node + linkType: hard + +"w3c-hr-time@npm:^1.0.1": + version: 1.0.2 + resolution: "w3c-hr-time@npm:1.0.2" + dependencies: + browser-process-hrtime: ^1.0.0 + checksum: ec3c2dacbf8050d917bbf89537a101a08c2e333b4c19155f7d3bedde43529d4339db6b3d049d9610789cb915f9515f8be037e0c54c079e9d4735c50b37ed52b9 + languageName: node + linkType: hard + +"walker@npm:~1.0.5": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + +"watch@npm:~0.18.0": + version: 0.18.0 + resolution: "watch@npm:0.18.0" + dependencies: + exec-sh: ^0.2.0 + minimist: ^1.2.0 + bin: + watch: ./cli.js + checksum: 8efc9b0f1b71ab854d121f70b361aea6032abf0bc7a28ec68f64be5a9e939086ffbf53df2370cd77c71e75e2c39d0025d59f6e0a52779a6748c3ad6863889094 + languageName: node + linkType: hard + +"webidl-conversions@npm:^4.0.2": + version: 4.0.2 + resolution: "webidl-conversions@npm:4.0.2" + checksum: c93d8dfe908a0140a4ae9c0ebc87a33805b416a33ee638a605b551523eec94a9632165e54632f6d57a39c5f948c4bab10e0e066525e9a4b87a79f0d04fbca374 + languageName: node + linkType: hard + +"whatwg-encoding@npm:^1.0.1, whatwg-encoding@npm:^1.0.3": + version: 1.0.5 + resolution: "whatwg-encoding@npm:1.0.5" + dependencies: + iconv-lite: 0.4.24 + checksum: 5be4efe111dce29ddee3448d3915477fcc3b28f991d9cf1300b4e50d6d189010d47bca2f51140a844cf9b726e8f066f4aee72a04d687bfe4f2ee2767b2f5b1e6 + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^2.1.0, whatwg-mimetype@npm:^2.2.0": + version: 2.3.0 + resolution: "whatwg-mimetype@npm:2.3.0" + checksum: 23eb885940bcbcca4ff841c40a78e9cbb893ec42743993a42bf7aed16085b048b44b06f3402018931687153550f9a32d259dfa524e4f03577ab898b6965e5383 + languageName: node + linkType: hard + +"whatwg-url@npm:^6.4.1": + version: 6.5.0 + resolution: "whatwg-url@npm:6.5.0" + dependencies: + lodash.sortby: ^4.7.0 + tr46: ^1.0.1 + webidl-conversions: ^4.0.2 + checksum: a10bd5e29f4382cd19789c2a7bbce25416e606b6fefc241c7fe34a2449de5bc5709c165bd13634eda433942d917ca7386a52841780b82dc37afa8141c31a8ebd + languageName: node + linkType: hard + +"whatwg-url@npm:^7.0.0": + version: 7.1.0 + resolution: "whatwg-url@npm:7.1.0" + dependencies: + lodash.sortby: ^4.7.0 + tr46: ^1.0.1 + webidl-conversions: ^4.0.2 + checksum: fecb07c87290b47d2ec2fb6d6ca26daad3c9e211e0e531dd7566e7ff95b5b3525a57d4f32640ad4adf057717e0c215731db842ad761e61d947e81010e05cf5fd + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + dependencies: + is-bigint: ^1.0.1 + is-boolean-object: ^1.1.0 + is-number-object: ^1.0.4 + is-string: ^1.0.5 + is-symbol: ^1.0.3 + checksum: 53ce774c7379071729533922adcca47220228405e1895f26673bbd71bdf7fb09bee38c1d6399395927c6289476b5ae0629863427fd151491b71c4b6cb04f3a5e + languageName: node + linkType: hard + +"which-module@npm:^2.0.0": + version: 2.0.1 + resolution: "which-module@npm:2.0.1" + checksum: 1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.2 + checksum: 65227dcbfadf5677aacc43ec84356d17b5500cb8b8753059bb4397de5cd0c2de681d24e1a7bd575633f976a95f88233abfd6549c2105ef4ebd58af8aa1807c75 + languageName: node + linkType: hard + +"which@npm:^1.2.12, which@npm:^1.2.9, which@npm:^1.3.0": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: ^2.0.0 + bin: + which: ./bin/which + checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: ^3.1.1 + bin: + node-which: bin/which.js + checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 + languageName: node + linkType: hard + +"word-wrap@npm:~1.2.3": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb + languageName: node + linkType: hard + +"wordwrap@npm:^1.0.0": + version: 1.0.0 + resolution: "wordwrap@npm:1.0.0" + checksum: 2a44b2788165d0a3de71fd517d4880a8e20ea3a82c080ce46e294f0b68b69a2e49cff5f99c600e275c698a90d12c5ea32aff06c311f0db2eb3f1201f3e7b2a04 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^2.0.0": + version: 2.1.0 + resolution: "wrap-ansi@npm:2.1.0" + dependencies: + string-width: ^1.0.1 + strip-ansi: ^3.0.1 + checksum: 2dacd4b3636f7a53ee13d4d0fe7fa2ed9ad81e9967e17231924ea88a286ec4619a78288de8d41881ee483f4449ab2c0287cde8154ba1bd0126c10271101b2ee3 + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"write-file-atomic@npm:^2.1.0": + version: 2.4.3 + resolution: "write-file-atomic@npm:2.4.3" + dependencies: + graceful-fs: ^4.1.11 + imurmurhash: ^0.1.4 + signal-exit: ^3.0.2 + checksum: 2db81f92ae974fd87ab4a5e7932feacaca626679a7c98fcc73ad8fcea5a1950eab32fa831f79e9391ac99b562ca091ad49be37a79045bd65f595efbb8f4596ae + languageName: node + linkType: hard + +"write@npm:^0.2.1": + version: 0.2.1 + resolution: "write@npm:0.2.1" + dependencies: + mkdirp: ^0.5.1 + checksum: 91bf45a4cf5c2a23fb56ca6cd3b1583295dafe7633f5fdf247f45ca212364cb2bcfe0c3040775b9c1efea613a49104da73d4ae5c28accb9d822aeb176fc7731e + languageName: node + linkType: hard + +"ws@npm:^5.2.0": + version: 5.2.4 + resolution: "ws@npm:5.2.4" + dependencies: + async-limiter: ~1.0.0 + checksum: a0c39704a752593ce603b0b3d28a3d3901839cd20560503b2c7257d63ee448677a4e00a2b7f69d775363a08700f041e84fe1f77b00931bb471f54380ab6dd50e + languageName: node + linkType: hard + +"xml-name-validator@npm:^3.0.0": + version: 3.0.0 + resolution: "xml-name-validator@npm:3.0.0" + checksum: b3ac459afed783c285bb98e4960bd1f3ba12754fd4f2320efa0f9181ca28928c53cc75ca660d15d205e81f92304419afe94c531c7cfb3e0649aa6d140d53ecb0 + languageName: node + linkType: hard + +"y18n@npm:^3.2.1": + version: 3.2.2 + resolution: "y18n@npm:3.2.2" + checksum: 6154fd7544f8bbf5b18cdf77692ed88d389be49c87238ecb4e0d6a5276446cd2a5c29cc4bdbdddfc7e4e498b08df9d7e38df4a1453cf75eecfead392246ea74a + languageName: node + linkType: hard + +"yallist@npm:^2.1.2": + version: 2.1.2 + resolution: "yallist@npm:2.1.2" + checksum: 9ba99409209f485b6fcb970330908a6d41fa1c933f75e08250316cce19383179a6b70a7e0721b89672ebb6199cc377bf3e432f55100da6a7d6e11902b0a642cb + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yargs-parser@npm:^8.1.0": + version: 8.1.0 + resolution: "yargs-parser@npm:8.1.0" + dependencies: + camelcase: ^4.1.0 + checksum: 150f84a8d2f1eecd426ebbc284719219b143cb75705d29d8506b80ecaa2035641e3bdb2e9012c8009655cdc426501203ef06367aa303820da04cb690ff797407 + languageName: node + linkType: hard + +"yargs@npm:^10.0.3": + version: 10.1.2 + resolution: "yargs@npm:10.1.2" + dependencies: + cliui: ^4.0.0 + decamelize: ^1.1.1 + find-up: ^2.1.0 + get-caller-file: ^1.0.1 + os-locale: ^2.0.0 + require-directory: ^2.1.1 + require-main-filename: ^1.0.1 + set-blocking: ^2.0.0 + string-width: ^2.0.0 + which-module: ^2.0.0 + y18n: ^3.2.1 + yargs-parser: ^8.1.0 + checksum: 09d55c05af2c4a74a0d61be75b4ba0ed766acb17e6ea6d0851ee964502f2bcb5ad5c1ffa5ade265691a7fbff122e92fd311f3a4c03e2b2d338eb54b9b880441a + languageName: node + linkType: hard