From 97e463f36a6f9336f5d83f5660279bac16c74c8b Mon Sep 17 00:00:00 2001 From: Kirsty <kirsty.degreesoflewdity@gmail.com> Date: Wed, 15 May 2024 13:10:51 +0000 Subject: [PATCH] Updating branch to dev and more passouts --- .eslintrc.cjs | 9 +- deprecated.twee-config.yml | 4 + .../03-Patcher/dol-error.js | 4 +- game/03-JavaScript/base.js | 13 +- game/03-JavaScript/canvasmodel-editor.js | 5 +- game/03-JavaScript/event-debug.js | 84 +- game/03-JavaScript/time.js | 10 +- game/04-Variables/canvasmodel-main.js | 153 +- .../04-Variables/variables-versionUpdate.twee | 2 +- game/base-clothing/canvasmodel-img.twee | 5 - game/base-clothing/clothing-face.js | 17 + game/base-clothing/clothing-sets.twee | 6 +- game/base-clothing/clothing-upper.js | 178 +- game/base-clothing/wardrobes.twee | 8 +- game/base-combat/end.twee | 1 + game/base-combat/speech.twee | 79 +- game/base-system/images.twee | 12 +- game/base-system/plant-objects.twee | 6 +- game/base-system/stat-changes.js | 5 +- game/base-system/weather/passout-scenes.twee | 1402 +++- game/base-system/widgets.twee | 7 +- game/overworld-forest/loc-bog/main.twee | 4 +- game/overworld-forest/loc-forest/events.twee | 13 +- game/overworld-plains/loc-bird/main.twee | 191 +- game/overworld-plains/loc-bird/widgets.twee | 103 +- game/overworld-plains/loc-farm/main.twee | 4 +- game/overworld-plains/loc-farm/widgets.twee | 18 +- game/overworld-plains/loc-livestock/main.twee | 316 +- game/overworld-plains/loc-moor/main.twee | 12 +- .../loc-danube-homes/skulduggery.twee | 226 +- game/overworld-town/loc-home/main.twee | 6 +- game/overworld-town/loc-hospital/main.twee | 2 +- game/overworld-town/loc-island/main.twee | 2 +- game/overworld-town/loc-park/robin.twee | 2 +- game/overworld-town/loc-pirates/main.twee | 40 +- game/overworld-town/loc-prison/work.twee | 2 +- game/overworld-town/loc-pub/main.twee | 2 +- game/overworld-town/loc-school/main.twee | 1 + .../special-kylar/kylar-functions.js | 4 +- .../special-robin/crossdressing.twee | 4 +- .../overworld-town/special-robin/widgets.twee | 4 +- game/overworld-town/special-sydney/main.twee | 66 +- .../special-sydney/sydney-functions.js | 4 +- .../special-sydney/widgets.twee | 32 +- .../cableknitcardigan/left_cover_gray.png | Bin 2604 -> 1256 bytes .../cableknitcardigan/right_cover_gray.png | Bin 2776 -> 1362 bytes img/clothes/upper/winterjacket/0_alt_gray.png | Bin 0 -> 778 bytes img/clothes/upper/winterjacket/1_alt_gray.png | Bin 0 -> 778 bytes img/clothes/upper/winterjacket/2_alt_gray.png | Bin 0 -> 778 bytes img/clothes/upper/winterjacket/3_alt_gray.png | Bin 0 -> 1212 bytes img/clothes/upper/winterjacket/4_alt_gray.png | Bin 0 -> 2703 bytes img/clothes/upper/winterjacket/5_alt_gray.png | Bin 0 -> 2749 bytes img/clothes/upper/winterjacket/6_alt_gray.png | Bin 0 -> 2827 bytes .../upper/winterjacket/frayed_alt_gray.png | Bin 0 -> 3284 bytes .../upper/winterjacket/full_alt_gray.png | Bin 0 -> 3202 bytes .../upper/winterjacket/tattered_alt_gray.png | Bin 0 -> 3337 bytes .../upper/winterjacket/torn_alt_gray.png | Bin 0 -> 3330 bytes img/misc/icon/icon.twee-config.yml | 43 +- img/misc/icon/tending/banana.png | Bin 0 -> 484 bytes img/misc/icon/tending/orange.png | Bin 0 -> 684 bytes jsconfig.json | 3 +- modules/css/base.css | 17 +- package-lock.json | 5789 +++-------------- package.json | 26 +- t3lt.twee-config.yml | 253 +- types/clothing.d.ts | 221 + types/combat.d.ts | 79 + types/daily.d.ts | 13 + types/debug.d.ts | 27 + types/game.d.ts | 162 + types/globals.d.ts | 62 + types/npc.d.ts | 96 + types/player.d.ts | 191 + types/school.d.ts | 55 + types/settings.d.ts | 82 + types/weather.d.ts | 7 + types/weekly.d.ts | 58 + 77 files changed, 4781 insertions(+), 5471 deletions(-) create mode 100644 img/clothes/upper/winterjacket/0_alt_gray.png create mode 100644 img/clothes/upper/winterjacket/1_alt_gray.png create mode 100644 img/clothes/upper/winterjacket/2_alt_gray.png create mode 100644 img/clothes/upper/winterjacket/3_alt_gray.png create mode 100644 img/clothes/upper/winterjacket/4_alt_gray.png create mode 100644 img/clothes/upper/winterjacket/5_alt_gray.png create mode 100644 img/clothes/upper/winterjacket/6_alt_gray.png create mode 100644 img/clothes/upper/winterjacket/frayed_alt_gray.png create mode 100644 img/clothes/upper/winterjacket/full_alt_gray.png create mode 100644 img/clothes/upper/winterjacket/tattered_alt_gray.png create mode 100644 img/clothes/upper/winterjacket/torn_alt_gray.png create mode 100644 img/misc/icon/tending/banana.png create mode 100644 img/misc/icon/tending/orange.png create mode 100644 types/clothing.d.ts create mode 100644 types/combat.d.ts create mode 100644 types/daily.d.ts create mode 100644 types/debug.d.ts create mode 100644 types/game.d.ts create mode 100644 types/globals.d.ts create mode 100644 types/npc.d.ts create mode 100644 types/player.d.ts create mode 100644 types/school.d.ts create mode 100644 types/settings.d.ts create mode 100644 types/weather.d.ts create mode 100644 types/weekly.d.ts diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 264d71f01c..5cc4fbba75 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -288,7 +288,7 @@ module.exports = { /* hasOwn */ // No need for this, since we're overriding hasOwn for older browers (01-compatibility.js) // Warn for the hasOwnProperty instead - "es-x/no-object-hasown": "off", + "es-x/no-object-hasown": "off", // eslint-disable-line "prefer-object-has-own": "warn", /* eslint-plugin-jsdoc */ @@ -303,6 +303,13 @@ module.exports = { "jsdoc/require-returns-description": "off", "jsdoc/require-returns": "off", + "jsdoc/no-undefined-types": [ + 1, + { + definedTypes: ["EventNpc"], + }, + ], + /* eslint-plugin-prettier */ "prettier/prettier": "warn", diff --git a/deprecated.twee-config.yml b/deprecated.twee-config.yml index bab46fb6ac..18fe94c117 100644 --- a/deprecated.twee-config.yml +++ b/deprecated.twee-config.yml @@ -330,6 +330,10 @@ sugarcube-2: deprecated: true deprecatedSuggestions: - <<lockericon>> + pregnancyWatersBrokenPassout: # Deprecrated 0.4.6+ + deprecated: true + deprecatedSuggestions: + - <<pregnancyPassout>> printAnd: # Deprecrated 0.4.5.3+ deprecated: true deprecatedSuggestions: diff --git a/game/00-framework-tools/03-Patcher/dol-error.js b/game/00-framework-tools/03-Patcher/dol-error.js index 6d2be5fc63..e2e258dd07 100644 --- a/game/00-framework-tools/03-Patcher/dol-error.js +++ b/game/00-framework-tools/03-Patcher/dol-error.js @@ -1,3 +1,5 @@ +// @ts-check + function getDebuggingInfo() { if (V == null) return "SugarCube variables could not be loaded."; const response = { @@ -133,7 +135,7 @@ throwError = function (place, message, source, isExportable = true, isLogged = t const formattedSource = source.replace(/\n/g, "\n\t"); console.warn(`${mesg}\n\t${formattedSource}`); - if (isLogged && V && V.options && V.options.debugdisable === "f") Errors.report(mesg, getDebuggingInfo()); + if (isLogged && V.options.debugdisable === "f") Errors.report(mesg, getDebuggingInfo()); return false; }; diff --git a/game/03-JavaScript/base.js b/game/03-JavaScript/base.js index f9b149a184..63739a6c31 100644 --- a/game/03-JavaScript/base.js +++ b/game/03-JavaScript/base.js @@ -94,8 +94,8 @@ window.rangeIterate = rangeIterate; * * @param {string} macroName * @param {Function} macroFunction - * @param {object} tags - * @param {boolean} skipArgs + * @param {object=} tags + * @param {boolean=} skipArgs */ function DefineMacro(macroName, macroFunction, tags, skipArgs) { Macro.add(macroName, { @@ -127,9 +127,9 @@ function DefineMacro(macroName, macroFunction, tags, skipArgs) { * * @param {string} macroName * @param {Function} macroFunction - * @param {object} tags - * @param {boolean} skipArgs - * @param {boolean} maintainContext + * @param {object=} tags + * @param {boolean=} skipArgs + * @param {boolean=} maintainContext */ function DefineMacroS(macroName, macroFunction, tags, skipArgs, maintainContext) { DefineMacro( @@ -349,6 +349,7 @@ function outfitChecks() { (V.worn.under_upper.type.includes("swim") || V.worn.under_upper.type.includes("naked")) && (V.worn.upper.type.includes("swim") || V.worn.upper.type.includes("naked")); T.outfit = (T.bottom?.outfitSecondary && T.bottom?.outfitSecondary[1] === T.top?.name) || null; + if (!T.top && !T.shirtless) T.top = T.bottom; } window.outfitChecks = outfitChecks; DefineMacro("outfitChecks", outfitChecks); @@ -512,7 +513,7 @@ window.weightedRandom = weightedRandom; * If the value is a function, the function is invoked and its result is returned. * If it is not a function, the value itself is returned. * If the value is undefined, a specified default value is returned instead. - * + * * @param {Function|number} value The value to resolve, which can be a function or a direct number. * @param {number} defaultValue The default value to use if the provided value is undefined. * @returns {number} The resolved value, either from the function call or directly. diff --git a/game/03-JavaScript/canvasmodel-editor.js b/game/03-JavaScript/canvasmodel-editor.js index 37fa622cd5..e918dcc8c4 100644 --- a/game/03-JavaScript/canvasmodel-editor.js +++ b/game/03-JavaScript/canvasmodel-editor.js @@ -478,7 +478,7 @@ Macro.add("canvasModelEditor", { const options = model.options; function redraw() { - let options = model.options; + const options = model.options; model.reset(); model.options = options; model.redraw(); @@ -823,9 +823,6 @@ Macro.add("canvasModelEditor", { optionCategory("Misc"), booleanOption("upper_tucked"), booleanOption("hood_down"), - booleanOption("alt_position"), - booleanOption("alt_position_neck"), - booleanOption("alt_position_face"), booleanOption("alt_sleeve"), selectOption("facewear_layer", ["front", "back"]), ]), diff --git a/game/03-JavaScript/event-debug.js b/game/03-JavaScript/event-debug.js index fd5218756e..9d32730d78 100644 --- a/game/03-JavaScript/event-debug.js +++ b/game/03-JavaScript/event-debug.js @@ -1,3 +1,5 @@ +// @ts-check + /* Jimmy: Blueprint for event structure, packaged for convenience. * $event = { * buffer = [] : EventNPC, refer to below @@ -25,6 +27,12 @@ class EventData { this.disable = false; } + /** + * @param {string} passage + * @param {number} index + * @param {number} time + * @returns {void} + */ push(passage, index, time) { if (this.disable) return; if (V.event == null) { @@ -37,57 +45,95 @@ class EventData { }); } + /** + * @param {number} index + * @returns {void} + */ pop(index) { if (this.disable) return; - if (V.event) { - V.event.buffer = V.event.buffer.filter(e => e.slot !== index); // TODO: Splice backwards instead. - if (V.event.buffer.length === 0) { - this.clear(); - } + if (!V.event) return; + + V.event.buffer = V.event.buffer.filter(e => e.slot !== index); // TODO: Splice backwards instead. + if (V.event.buffer.length === 0) { + this.clear(); } } + /** + * @param {number} index + * @returns {EventNpc | undefined} + */ get(index) { - return V.event ? V.event.buffer.find(e => e.slot === index) : -1; + return V.event?.buffer.find(e => e.slot === index); } + /** + * @param {number} index + * @returns {boolean} + */ has(index) { - return V.event ? V.event.buffer.some(e => e.slot === index) : false; + return V.event?.buffer.some(e => e.slot === index) || false; } + /** + * @param {number} index + * @returns {EventNpc[]} + */ getEvery(index) { - return V.event ? V.event.buffer.filter(e => e.slot === index) : []; + return V.event?.buffer.filter(e => e.slot === index) || []; } + /** + * @returns {number} + */ count() { - return V.event ? V.event.buffer.length : 0; + return V.event?.buffer.length || 0; } + /** + * @returns {boolean} + */ any() { - return V.event ? V.event.buffer.length > 0 : false; + return this.count() > 0; } + /** + * @returns {void} + */ clear() { if (this.disable) return; delete V.event; } + /** + * @param {number} index + * @returns {boolean} + */ isSlotTaken(index) { - return V.event ? V.event.buffer.some(e => e.slot === index) : false; + return V.event?.buffer.some(e => e.slot === index) || false; } + /** + * @returns {boolean} + */ get Disable() { return this.disable; } + /** + * @param {boolean} value + */ set Disable(value) { - if (typeof value === "boolean") { - this.disable = value; - } else { + if (typeof value !== "boolean") { console.debug("EventData.disable set with unexpected data-type, requires boolean."); + return; } + this.disable = value; } + /** + * @returns {boolean} + */ validate() { // Return false if an event is not in progress. True would be a problem in our stack system for NPCs. False indicates normal operation. if (V.event == null) return true; @@ -104,7 +150,7 @@ class EventData { // We assume the first empty is a mistake, someone not following proper conduct in NPC gen. let numOfNPCs = -1; for (let i = npcList.length - 1; i >= 0; i--) { - if (Object.hasOwn(npcList[i], "type")) { + if ("type" in npcList[i]) { numOfNPCs = i + 1; break; } @@ -147,6 +193,9 @@ class EventData { return true; } + /** + * @returns {void} + */ update() { if (V.event == null) { return; @@ -161,13 +210,16 @@ class EventData { // .event ['Farm Work', 'Farm Work', 'Farm Work', 'Farm Work'] // .eventtime [497, 497, 497, 497] // .eventslot [0, 1, 2, 3] + // @ts-ignore (Updater code) const event = [...V.event]; V.event = { buffer: [], schema: 1, }; for (let i = 0; i < event.length; i++) { - this.push(event[i], V.eventslot[i], V.eventtime[i]); + if (V.eventslot && V.eventtime) { + this.push(event[i], V.eventslot[i], V.eventtime[i]); + } } delete V.eventtime; delete V.eventslot; diff --git a/game/03-JavaScript/time.js b/game/03-JavaScript/time.js index 1eb1c35c4d..24990711dc 100644 --- a/game/03-JavaScript/time.js +++ b/game/03-JavaScript/time.js @@ -50,7 +50,6 @@ */ -/* eslint-disable jsdoc/require-description-complete-sentence */ const Time = (() => { const moonPhases = { new: { @@ -495,7 +494,7 @@ function weekPassed() { if (V.photo.silly === "paid") V.photo.silly = 0; V.photo.shoot = 0; } - if (V.nightmareTimer > 0) { + if (V.nightmareTimer && V.nightmareTimer > 0) { V.nightmareTimer--; if (V.nightmareTimer <= 0) delete V.nightmareTimer; } @@ -507,7 +506,6 @@ function weekPassed() { statChange.worldCorruption("soft", V.world_corruption_hard); - delete V.weekly; V.weekly = clone(setup.weeklyObject); return fragment; @@ -607,9 +605,9 @@ function dayPassed() { if (V.robin.timer.customer >= 1) V.robin.timer.customer--; if (V.robin.timer.hurt >= 1) V.robin.timer.hurt--; if (V.robin.timer.hurt === 0) V.robin.hurtReason = "nothing"; - - V.robin.stayup = (V.robin.stayup == 1) ? 2 : 0; - + + V.robin.stayup = V.robin.stayup === 1 ? 2 : 0; + if (numberOfEarSlime()) { // Daily Corruption if (V.earSlime.growth < 50) statChange.corruption(-1); diff --git a/game/04-Variables/canvasmodel-main.js b/game/04-Variables/canvasmodel-main.js index 2c4fb52aaa..89d7228b23 100644 --- a/game/04-Variables/canvasmodel-main.js +++ b/game/04-Variables/canvasmodel-main.js @@ -182,7 +182,6 @@ replace (?<!["'\w])_(?=\w) with T. * "upper_tucked":boolean - $worn.upper tucked in $worn.lower * "lower_tucked":boolean - $worn.lower tucked in $worn.feet * "hood_down":boolean - hood is pulled down - * "alt_position":boolean - sprite has alternate position (e.g. cardigan tied around waist) * "facewear_layer": "front"|"back" * * GENERATED OPTIONS (temp variables configured by the model itself in preprocess()) @@ -500,10 +499,7 @@ Renderer.CanvasModels["main"] = { "upper_tucked": false, "lower_tucked": false, "hood_down": false, - "alt_position": false, "alt_sleeve": false, - "alt_position_neck":false, - "alt_position_face":false, "acc_layer_under": false, "head_mask_src": "", // generated option "belly_mask_src": "", // generated option @@ -899,17 +895,8 @@ Renderer.CanvasModels["main"] = { options.high_waist_suspenders = null; } - /*clothes whose altposition does not include alternate sleeve/full states*/ - if (options.worn_upper_setup.altdisabled) { - options.worn_upper_setup.altdisabled.includes("sleeves") ? options.alt_without_sleeves = true : - options.alt_without_sleeves = null; - options.worn_upper_setup.altdisabled.includes("full") ? options.alt_without_full = true : - options.alt_without_full = null; - options.worn_upper_setup.altdisabled.includes("breasts") ? options.alt_without_breasts = true : - options.alt_without_breasts = null; - } /*clothes whose sleeves cannot be rolled up*/ - if (options.worn_upper_setup.variable === "schoolcardigan" && options.worn_upper_setup.altposition === "alt") { + if (options.worn_upper_setup.variable === "schoolcardigan" && V.worn.upper.altposition !== "alt") { options.alt_sleeve_state = null; } else { options.alt_sleeve_state = true; @@ -3318,7 +3305,7 @@ Renderer.CanvasModels["main"] = { zfn(options) { if (options.worn_lower_setup.name.includes("ballgown") || options.worn_lower_setup.name.includes("pinafore")) { return ZIndices.upper_top; - } else if (options.worn_lower_setup.covers_top) { + } else if (options.worn_lower_setup.type.includes("covered")) { return ZIndices.lower_cover; } else { return ZIndices.lower; @@ -3852,17 +3839,8 @@ Renderer.CanvasModels["main"] = { */ "face": genlayer_clothing_main('face', { - srcfn(options) { - let isAltPosition = options.alt_position_face && - options.worn_face_setup.altposition !== undefined; - let path = 'img/clothes/face/' + - options.worn_face_setup.variable + '/' + - options.worn_face_integrity + (isAltPosition ? '_alt' : '') + '.png'; - return gray_suffix(path, options.filters['worn_face']); - }, zfn(options) { - let isAltPosition = options.alt_position_face && - options.worn_face_setup.altposition !== undefined; + let isAltPosition = options.worn_face_setup.altposition !== undefined && V.worn.face.altposition === "alt"; if (isAltPosition && options.worn_face_setup.type.includes("cool") || options.worn_face_setup.type.includes("glasses")) { return ZIndices.over_head; } else if (options.facewear_layer === "front") { @@ -3873,19 +3851,8 @@ Renderer.CanvasModels["main"] = { }, }), "face_acc": genlayer_clothing_accessory('face', { - srcfn(options) { - let isAltPosition = options.alt_position_face && - options.worn_face_setup.altposition !== undefined; - let path = 'img/clothes/face/' + - options.worn_face_setup.variable + '/' + - 'acc' + - (setup.accessory_integrity_img ? '_' + options.worn_face_integrity : '') + - (isAltPosition ? '_alt' : '') + '.png'; - return gray_suffix(path, options.filters['worn_face_acc']); - }, zfn(options) { - let isAltPosition = options.alt_position_face && - options.worn_face_setup.altposition !== undefined; + let isAltPosition = options.worn_face_setup.altposition !== undefined && V.worn.face.altposition === "alt"; if (isAltPosition && options.worn_face_setup.type.includes("cool") || options.worn_face_setup.type.includes("glasses")) { return ZIndices.over_head; } else if (options.facewear_layer === "front") { @@ -3909,8 +3876,7 @@ Renderer.CanvasModels["main"] = { */ "neck": genlayer_clothing_main('neck', { srcfn(options) { - let isAltPosition = options.alt_position_neck && - options.worn_neck_setup.altposition !== undefined; + let isAltPosition = options.worn_neck_setup.altposition !== undefined && V.worn.neck.altposition === "alt"; let path = 'img/clothes/neck/' + options.worn_neck_setup.variable + '/' + options.worn_neck_integrity + (options.nocollar ? '_nocollar' : options.serafuku ? '_serafuku' :'') + (isAltPosition ? '_alt' : '') + '.png'; @@ -3925,8 +3891,7 @@ Renderer.CanvasModels["main"] = { }), "neck_acc": genlayer_clothing_accessory('neck', { srcfn(options) { - let isAltPosition = options.alt_position_neck && - options.worn_neck_setup.altposition !== undefined; + let isAltPosition = options.worn_neck_setup.altposition !== undefined && V.worn.neck.altposition === "alt"; let path = 'img/clothes/neck/' + options.worn_neck_setup.variable + '/' + 'acc' + @@ -4072,14 +4037,15 @@ function gray_suffix(path, filter) { // Layer generating functions. function genlayer_clothing_main(slot, overrideOptions) { + return Object.assign({ srcfn(options) { let isHoodDown = options.hood_down && options["worn_" + slot + "_setup"].hoodposition !== undefined && options["worn_" + slot + "_setup"].outfitPrimary.head !== undefined; - let isAltPosition = options.alt_position && - options["worn_" + slot + "_setup"].altposition !== undefined && - !options.alt_without_full; + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("full"); let path = 'img/clothes/' + slot + '/' + options["worn_" + slot + "_setup"].variable + '/' + @@ -4106,9 +4072,9 @@ function genlayer_clothing_fitted_left(slot, overrideOptions) { let isHoodDown = options.hood_down && options["worn_" + slot + "_setup"].hoodposition !== undefined && options["worn_" + slot + "_setup"].outfitPrimary.head !== undefined; - let isAltPosition = options.alt_position && - options["worn_" + slot + "_setup"].altposition !== undefined && - !options.alt_without_full; + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("full"); let path = 'img/clothes/' + slot + '/' + options["worn_" + slot + "_setup"].variable + '/' + @@ -4137,9 +4103,9 @@ function genlayer_clothing_fitted_right(slot, overrideOptions) { let isHoodDown = options.hood_down && options["worn_" + slot + "_setup"].hoodposition !== undefined && options["worn_" + slot + "_setup"].outfitPrimary.head !== undefined; - let isAltPosition = options.alt_position && - options["worn_" + slot + "_setup"].altposition !== undefined && - !options.alt_without_full; + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("full"); let path = 'img/clothes/' + slot + '/' + options["worn_" + slot + "_setup"].variable + '/' + @@ -4169,8 +4135,9 @@ function genlayer_clothing_fitted_left_acc(slot, overrideOptions) { let isHoodDown = options.hood_down && setup.hoodposition !== undefined && setup.outfitPrimary.head !== undefined; - let isAltPosition = options.alt_position && - setup.altposition !== undefined; + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("acc"); let path = 'img/clothes/' + slot + '/' + setup.variable + '/' + @@ -4202,8 +4169,9 @@ function genlayer_clothing_fitted_right_acc(slot, overrideOptions) { let isHoodDown = options.hood_down && setup.hoodposition !== undefined && setup.outfitPrimary.head !== undefined; - let isAltPosition = options.alt_position && - setup.altposition !== undefined; + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("acc"); let path = 'img/clothes/' + slot + '/' + setup.variable + '/' + @@ -4235,8 +4203,9 @@ function genlayer_clothing_accessory(slot, overrideOptions) { let isHoodDown = options.hood_down && setup.hoodposition !== undefined && setup.outfitPrimary.head !== undefined; - let isAltPosition = options.alt_position && - setup.altposition !== undefined; + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("acc"); let path = 'img/clothes/' + slot + '/' + setup.variable + '/' + @@ -4262,9 +4231,9 @@ function genlayer_clothing_accessory(slot, overrideOptions) { function genlayer_clothing_breasts(slot, overrideOptions) { return Object.assign({ srcfn(options) { - let isAltPosition = options.alt_position && - (options["worn_" + slot + "_setup"].altposition !== undefined && - !options.alt_without_breasts); + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("breasts"); let breastImg = options["worn_" + slot + "_setup"].breast_img; let breastSize = typeof breastImg === 'object' ? breastImg[options.breast_size] : Math.min(options.breast_size, 6); let path = 'img/clothes/' + @@ -4304,10 +4273,14 @@ function genlayer_clothing_breasts(slot, overrideOptions) { function genlayer_clothing_belly(slot, overrideOptions) { return Object.assign({ srcfn(options) { + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("full"); let path = 'img/clothes/' + slot + '/' + options["worn_" + slot + "_setup"].variable + '/' + - options["worn_" + slot + "_integrity"] + '.png'; + (options["worn_" + slot + "_integrity"]) + + (isAltPosition ? '_alt' : '') + '.png'; return gray_suffix(path, options.filters['worn_' + slot]); }, showfn(options) { @@ -4356,10 +4329,14 @@ function genlayer_clothing_belly(slot, overrideOptions) { function genlayer_clothing_belly_2(slot, overrideOptions) { return Object.assign({ srcfn(options) { + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("full"); let path = 'img/clothes/' + slot + '/' + options["worn_" + slot + "_setup"].variable + '/' + - options["worn_" + slot + "_integrity"] + '.png'; + (options["worn_" + slot + "_integrity"]) + + (isAltPosition ? '_alt' : '') + '.png'; return gray_suffix(path, options.filters['worn_' + slot]); }, showfn(options) { @@ -4408,10 +4385,14 @@ function genlayer_clothing_belly_2(slot, overrideOptions) { function genlayer_clothing_belly_split(slot, overrideOptions) { return Object.assign({ srcfn(options) { + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("full"); let path = 'img/clothes/' + slot + '/' + options["worn_" + slot + "_setup"].variable + '/' + - options["worn_" + slot + "_integrity"] + '.png'; + (options["worn_" + slot + "_integrity"]) + + (isAltPosition ? '_alt' : '') + '.png'; return gray_suffix(path, options.filters['worn_' + slot]); }, showfn(options) { @@ -4440,8 +4421,9 @@ function genlayer_clothing_belly_split_acc(slot, overrideOptions) { let isHoodDown = options.hood_down && setup.hoodposition !== undefined && setup.outfitPrimary.head !== undefined; - let isAltPosition = options.alt_position && - setup.altposition !== undefined; + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("acc"); let path = 'img/clothes/' + slot + '/' + setup.variable + '/' + @@ -4554,8 +4536,9 @@ function genlayer_clothing_belly_acc(slot, overrideOptions) { let isHoodDown = options.hood_down && setup.hoodposition !== undefined && setup.outfitPrimary.head !== undefined; - let isAltPosition = options.alt_position && - setup.altposition !== undefined; + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("acc"); let path = 'img/clothes/' + slot + '/' + setup.variable + '/' + @@ -4643,8 +4626,9 @@ function genlayer_clothing_breasts_acc(slot, overrideOptions) { function genlayer_clothing_back_img(slot, overrideOptions) { return Object.assign({ srcfn(options) { - let isAltPosition = options.alt_position && - options["worn_" + slot + "_setup"].altposition !== undefined; + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("back"); let setup = options["worn_" + slot + "_setup"]; let path = 'img/clothes/' + slot + '/' + @@ -4682,8 +4666,9 @@ function genlayer_clothing_back_img(slot, overrideOptions) { function genlayer_clothing_back_img_acc(slot, overrideOptions) { return Object.assign({ srcfn(options) { - let isAltPosition = options.alt_position && - options["worn_" + slot + "_setup"].altposition !== undefined; + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("back"); let path = 'img/clothes/' + slot + '/' + options["worn_" + slot + "_setup"].variable + '/' + @@ -4727,12 +4712,11 @@ function genlayer_clothing_back_img_acc(slot, overrideOptions) { function genlayer_clothing_arm(arm, slot, overrideOptions) { return Object.assign({ srcfn(options) { - let isAltPosition = (options.alt_position && - options["worn_" + slot + "_setup"].altposition !== undefined && - !options.alt_without_sleeves); - let isAltSleeve = options.alt_sleeve && - options.alt_sleeve_state && - options["worn_" + slot + "_setup"].altsleeve !== undefined; + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("sleeves"); + let isAltSleeve = options.alt_sleeve_state && + V.worn[slot]?.altsleeve === "alt" let path = 'img/clothes/' + slot + '/' + options["worn_" + slot + "_setup"].variable + '/' + @@ -4776,10 +4760,14 @@ function genlayer_clothing_arm(arm, slot, overrideOptions) { function genlayer_clothing_arm_acc(arm, slot, overrideOptions) { return Object.assign({ srcfn(options) { + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("sleeves") && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("sleeve_acc"); let path = 'img/clothes/' + slot + '/' + options["worn_" + slot + "_setup"].variable + '/' + - (options["arm_" + arm] === "cover" ? (arm + '_cover_acc.png') : options.handheld_position && arm === "right" ? "hold_acc.png" :(arm + "_acc.png")); + (options["arm_" + arm] === "cover" ? (arm + '_cover_acc.png') : options.handheld_position && arm === "right" ? "hold" + (isAltPosition ? "_alt_acc.png" : "_acc.png") : (arm + (isAltPosition ? "_alt_acc.png" : "_acc.png"))); return gray_suffix(path, options.filters[this.filtersfn(options)[0]]); }, showfn(options) { @@ -4818,12 +4806,11 @@ function genlayer_clothing_arm_acc(arm, slot, overrideOptions) { function genlayer_clothing_arm_fitted(arm, slot, overrideOptions) { return Object.assign({ srcfn(options) { - let isAltPosition = (options.alt_position && - options["worn_" + slot + "_setup"].altposition !== undefined && - !options.alt_without_sleeves); - let isAltSleeve = options.alt_sleeve && - options.alt_sleeve_state && - options["worn_" + slot + "_setup"].altsleeve !== undefined; + let isAltPosition = options["worn_" + slot + "_setup"].altposition !== undefined && + V.worn[slot]?.altposition === "alt" && + !options["worn_" + slot + "_setup"]?.altdisabled.includes("sleeves"); + let isAltSleeve = options.alt_sleeve_state && + V.worn[slot]?.altsleeve === "alt" let path = 'img/clothes/' + slot + '/' + options["worn_" + slot + "_setup"].variable + '/' + diff --git a/game/04-Variables/variables-versionUpdate.twee b/game/04-Variables/variables-versionUpdate.twee index 11b1c14cfd..d51b3e0179 100644 --- a/game/04-Variables/variables-versionUpdate.twee +++ b/game/04-Variables/variables-versionUpdate.twee @@ -4083,7 +4083,7 @@ <<unset $swimmingattended>> <</if>> <<if $weekly is undefined>> - <<set $weekly to { theft: {}, sewers: {} }>> + <<set $weekly to clone(setup.weeklyObject)>> <</if>> <<if $robinBrothelWeekly isnot undefined>> <<set $weekly.robinBrothel to $robinBrothelWeekly>> diff --git a/game/base-clothing/canvasmodel-img.twee b/game/base-clothing/canvasmodel-img.twee index 92a0de2d1b..10b82ccc12 100644 --- a/game/base-clothing/canvasmodel-img.twee +++ b/game/base-clothing/canvasmodel-img.twee @@ -593,11 +593,6 @@ Set model options & filters for player clothes <<set _modeloptions.hair_fringe_length to "short">> <</if>> - <<set _modeloptions.alt_position to $worn.upper.altposition is "alt">> - <<set _modeloptions.alt_position_neck to $worn.neck.altposition is "alt">> - <<set _modeloptions.alt_position_face to $worn.face.altposition is "alt">> - <<set _modeloptions.alt_sleeve to $worn.upper.altsleeve is "alt" and $worn.upper.name isnot "school cardigan" || $worn.upper.name is "school cardigan" and $worn.upper.position is "alt">> - <<set _modeloptions.facewear_layer to $facelayer>> <<set _modeloptions.upper_tucked to $upperTucked and !setup.clothes.upper[clothesIndex('upper', $worn.upper)].notuck and $worn.upper.outfitPrimary is undefined>> diff --git a/game/base-clothing/clothing-face.js b/game/base-clothing/clothing-face.js index de60e2de77..91aa70d6c6 100644 --- a/game/base-clothing/clothing-face.js +++ b/game/base-clothing/clothing-face.js @@ -67,6 +67,7 @@ function initFace() { accessory_colour: 0, accessory_colour_options: [], altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "glasses.png", @@ -97,6 +98,7 @@ function initFace() { accessory_colour: 0, accessory_colour_options: [], altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "cool_shades.png", @@ -266,6 +268,7 @@ function initFace() { accessory_colour: 0, accessory_colour_options: [], altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "low_frame_glasses.png", @@ -295,6 +298,7 @@ function initFace() { accessory_colour: 0, accessory_colour_options: [], altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "half_moon_glasses.png", @@ -324,6 +328,7 @@ function initFace() { accessory_colour: 0, accessory_colour_options: [], altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "deep_frame_glasses.png", @@ -355,6 +360,7 @@ function initFace() { accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "pale white", "yellow", "custom"], accessory_colour_sidebar: 1, altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "square_shades.png", @@ -385,6 +391,7 @@ function initFace() { accessory_colour: 0, accessory_colour_options: [], altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "round_shades.png", @@ -416,6 +423,7 @@ function initFace() { accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "pale white", "yellow", "custom"], accessory_colour_sidebar: 1, altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "shield_shades.png", @@ -446,6 +454,7 @@ function initFace() { accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "pale white", "yellow", "custom"], accessory_colour_sidebar: 1, altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "cat_eye_shades.png", @@ -477,6 +486,7 @@ function initFace() { accessory_colour_options: ["original", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "pale white", "yellow", "custom"], accessory_colour_sidebar: 1, altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "aviators.png", @@ -508,6 +518,7 @@ function initFace() { accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "pale white", "yellow", "custom"], accessory_colour_sidebar: 1, altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "punk_shades.png", @@ -594,6 +605,7 @@ function initFace() { accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"], accessory_colour_sidebar: 1, altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "swimming_goggles.png", @@ -997,6 +1009,7 @@ function initFace() { accessory_colour: 0, accessory_colour_options: [], altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "eyepatch.png", @@ -1027,6 +1040,7 @@ function initFace() { accessory_colour: 0, accessory_colour_options: [], altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "medical_eyepatch.png", @@ -1116,6 +1130,7 @@ function initFace() { accessory_colour: 0, accessory_colour_options: [], altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "monocle.png", @@ -1174,6 +1189,7 @@ function initFace() { accessory_colour: 0, accessory_colour_options: [], altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "reading_glasses.png", @@ -1252,6 +1268,7 @@ function initFace() { ], accessory_colour_sidebar: 1, altposition: "none", + altdisabled: [], cursed: 0, location: 0, iconFile: "heart_sunglasses.png", diff --git a/game/base-clothing/clothing-sets.twee b/game/base-clothing/clothing-sets.twee index 4c076eb220..7b066afaa3 100644 --- a/game/base-clothing/clothing-sets.twee +++ b/game/base-clothing/clothing-sets.twee @@ -15,16 +15,14 @@ <br><br> <!-- List the currently saved outfits --> - <div class="outfitContainer"> + <div class="outfitContainer no-numberify"> <<for _index, $_outfit range $outfit>> <<if $_outfit.location and $_outfit.location isnot $wardrobe_location>> <<continue>> <</if>> <<set _outfitname to $_outfit.name + ($_outfit.colors is false ? "" : " [C]") + ($_outfit.location is undefined ? "" : " [L]")>> <<capture _index>> - <div class= "wardrobeOutfit wardrobe-action no-numberify"> - <<link _outfitname>><<set $wear_outfit to _index>><<updatewardrobe "outfits">><</link>> - </div> + <<button _outfitname>><<set $wear_outfit to _index>><<updatewardrobe "outfits">><</button>> <</capture>> <</for>> </div> diff --git a/game/base-clothing/clothing-upper.js b/game/base-clothing/clothing-upper.js index aacc99292b..9f540a89ab 100644 --- a/game/base-clothing/clothing-upper.js +++ b/game/base-clothing/clothing-upper.js @@ -4,7 +4,7 @@ plural - widget will output "are" if 1, and "is" if 0. eg - Your hat <<upperplur Warmth checklist: Base: 0 - Torso: Covers ¼: 1 || Covers ⅓: 2 || Covers ½: 3 || Covers ⅔: 4 || Covers full: 5 + Torso: Covers ¼: 1 || Covers ⅓: 2 || Covers ½: 3 || Covers ⅔ (waist): 4 || Covers full (crotch): 5 Arms: Covers ½: 1 || Covers full: 2 Materials: @@ -2000,7 +2000,7 @@ function initUpper() { set: "upper", gender: "m", femininity: -100, - warmth: 5, + warmth: 8, cost: 8000, description: "Delinquent.", shop: ["clothing"], @@ -2068,7 +2068,7 @@ function initUpper() { set: "upper", gender: "m", femininity: -100, - warmth: 4, + warmth: 8, cost: 6000, description: "Keeps the wind off your neck.", shop: ["clothing"], @@ -2433,7 +2433,7 @@ function initUpper() { type: ["formal", "bellyHide"], set: "upper", gender: "n", - warmth: 7, + warmth: 9, cost: 40000, description: "Made of thick wool.", shop: ["clothing"], @@ -3036,7 +3036,7 @@ function initUpper() { set: "upper", gender: "m", femininity: -100, - warmth: 5, + warmth: 7, cost: 9000, description: "Not a real letterman jacket, but looks the part, and made from high-quality materials.", shop: ["clothing"], @@ -3456,7 +3456,7 @@ function initUpper() { set: "upper", gender: "n", femininity: 0, - warmth: 7, + warmth: 8, cost: 8000, description: "Well-insulated.", shop: ["clothing"], @@ -3740,7 +3740,7 @@ function initUpper() { type: ["normal"], set: "hoodie", gender: "n", - warmth: 8, + warmth: 7, cost: 4000, description: "Warm and comfy. Hood included.", shop: ["clothing"], @@ -5103,6 +5103,8 @@ function initUpper() { sleeve_img: 1, sleeve_acc_img: 1, breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 4, 5: 4, 6: 6 }, + altposition: "none", + altdisabled: ["sleeves", "acc"], cursed: 0, location: 0, iconFile: "winter_jacket.png", @@ -5535,6 +5537,8 @@ function initUpper() { accessory_colour_sidebar: 1, accessory_integrity_img: 1, sleeve_img: 1, + altposition: "none", + altdisabled: [], altsleeve: "none", breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 }, back_img: 1, @@ -5546,7 +5550,6 @@ function initUpper() { accIcon: "cardigan_acc.png", notuck: "tie", pregType: "min", - altposition: "none", }, { @@ -6237,7 +6240,7 @@ function initUpper() { type: ["normal", "bellyShow"], set: "upper", gender: "n", - warmth: 5, + warmth: 6, cost: 7000, description: "Will keep you warm in winter.", shop: ["clothing"], @@ -6464,7 +6467,22 @@ function initUpper() { plural: 0, colour: 0, colour_sidebar: 1, - colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"], + colour_options: [ + "black", + "blue", + "brown", + "green", + "pink", + "purple", + "red", + "tangerine", + "teal", + "white", + "yellow", + "lilac", + "neon blue", + "custom", + ], colour_combat: 0, exposed: 0, exposed_base: 0, @@ -6478,7 +6496,22 @@ function initUpper() { shopGroup: "jumper", accessory: 1, accessory_colour: 0, - accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"], + accessory_colour_options: [ + "black", + "blue", + "brown", + "green", + "pink", + "purple", + "red", + "tangerine", + "teal", + "white", + "yellow", + "lilac", + "neon blue", + "custom", + ], accessory_colour_sidebar: "secondary", accessory_integrity_img: 1, sleeve_img: 1, @@ -6512,7 +6545,22 @@ function initUpper() { plural: 0, colour: 0, colour_sidebar: 1, - colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"], + colour_options: [ + "black", + "blue", + "brown", + "green", + "pink", + "purple", + "red", + "tangerine", + "teal", + "white", + "yellow", + "lilac", + "neon blue", + "custom", + ], colour_combat: 0, exposed: 0, exposed_base: 0, @@ -6558,7 +6606,22 @@ function initUpper() { plural: 0, colour: 0, colour_sidebar: 1, - colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"], + colour_options: [ + "black", + "blue", + "brown", + "green", + "pink", + "purple", + "red", + "tangerine", + "teal", + "white", + "yellow", + "lilac", + "neon blue", + "custom", + ], colour_combat: 0, exposed: 0, exposed_base: 0, @@ -6572,7 +6635,22 @@ function initUpper() { shopGroup: "jumper", accessory: 1, accessory_colour: 0, - accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"], + accessory_colour_options: [ + "black", + "blue", + "brown", + "green", + "pink", + "purple", + "red", + "tangerine", + "teal", + "white", + "yellow", + "lilac", + "neon blue", + "custom", + ], accessory_colour_sidebar: "secondary", accessory_integrity_img: 1, sleeve_img: 1, @@ -6606,7 +6684,22 @@ function initUpper() { plural: 0, colour: 0, colour_sidebar: 1, - colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"], + colour_options: [ + "black", + "blue", + "brown", + "green", + "pink", + "purple", + "red", + "tangerine", + "teal", + "white", + "yellow", + "lilac", + "neon blue", + "custom", + ], colour_combat: 0, exposed: 0, exposed_base: 0, @@ -6621,7 +6714,22 @@ function initUpper() { shopGroup: "jumper", accessory: 1, accessory_colour: 0, - accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"], + accessory_colour_options: [ + "black", + "blue", + "brown", + "green", + "pink", + "purple", + "red", + "tangerine", + "teal", + "white", + "yellow", + "lilac", + "neon blue", + "custom", + ], accessory_colour_sidebar: "secondary", accessory_integrity_img: 1, sleeve_img: 1, @@ -6655,7 +6763,22 @@ function initUpper() { plural: 0, colour: 0, colour_sidebar: 1, - colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"], + colour_options: [ + "black", + "blue", + "brown", + "green", + "pink", + "purple", + "red", + "tangerine", + "teal", + "white", + "yellow", + "lilac", + "neon blue", + "custom", + ], colour_combat: 0, exposed: 0, exposed_base: 0, @@ -6670,7 +6793,22 @@ function initUpper() { shopGroup: "jumper", accessory: 1, accessory_colour: 0, - accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"], + accessory_colour_options: [ + "black", + "blue", + "brown", + "green", + "pink", + "purple", + "red", + "tangerine", + "teal", + "white", + "yellow", + "lilac", + "neon blue", + "custom", + ], accessory_colour_sidebar: "secondary", accessory_integrity_img: 1, sleeve_img: 1, @@ -7261,7 +7399,7 @@ function initUpper() { set: "upper", gender: "m", femininity: -100, - warmth: 7, + warmth: 8, cost: 16000, description: "Smart and sophisticated.", shop: ["clothing"], @@ -7359,7 +7497,7 @@ function initUpper() { set: "upper", gender: "n", femininity: 0, - warmth: 7, + warmth: 5, cost: 12000, description: "For when you need to look your best.", shop: ["clothing", "school"], diff --git a/game/base-clothing/wardrobes.twee b/game/base-clothing/wardrobes.twee index 7dec8f1f14..824b9589a4 100644 --- a/game/base-clothing/wardrobes.twee +++ b/game/base-clothing/wardrobes.twee @@ -700,8 +700,8 @@ <</widget>> <<widget "toggleUpperTuck">> - <<set _linkOption1 to _args[0] || "Untuck">> - <<set _linkOption2 to _args[1] || "Tuck in">> + <<set _linkOption1 to _args[0] || `Untuck from ${$worn.lower.name}`>> + <<set _linkOption2 to _args[1] || `Tuck into ${$worn.lower.name}`>> <div class="toggleUpperTuck"> <<link `($upperTucked ? _linkOption1 : _linkOption2)`>> <<set $upperTucked to +!$upperTucked>> @@ -713,8 +713,8 @@ <</widget>> <<widget "toggleLowerTuck">> - <<set _linkOption1 to _args[0] || "Untuck">> - <<set _linkOption2 to _args[1] || "Tuck in">> + <<set _linkOption1 to _args[0] || `Untuck from ${$worn.feet.name}`>> + <<set _linkOption2 to _args[1] || `Tuck into ${$worn.feet.name}`>> <div class="toggleLowerTuck"> <<link `($lowerTucked ? _linkOption1 : _linkOption2)`>> <<set $lowerTucked to +!$lowerTucked>> diff --git a/game/base-combat/end.twee b/game/base-combat/end.twee index 10d26e2760..b9b2184936 100644 --- a/game/base-combat/end.twee +++ b/game/base-combat/end.twee @@ -125,6 +125,7 @@ <<unset $pounce_delay>> <<unset $hypnosis_deviancy_check>> <<unset $animOverride>> + <<unset $encounterDialogue>> <<if $player.penisExist>> <<set $penisstate to 0>> diff --git a/game/base-combat/speech.twee b/game/base-combat/speech.twee index 5cddab51a2..d6b8a60496 100644 --- a/game/base-combat/speech.twee +++ b/game/base-combat/speech.twee @@ -86,7 +86,68 @@ <<widget "combatspeech">> <<set _n to _args[0]>> <<rng>> - <<if $speechcrossdressangry is 1>> + <<if $encounterDialogue>> + <<switch $encounterDialogue>> + <<case "cold">> + <<He>> speaks. + <<if $enemyanger lte 50>> + <<print [ + `"I'll warm you up in no time."`, + `"Feeling warmer now?"`, + `"I'll get you all hot and bothered, you'll see."`, + `"Your skin is so flushed. See, I'm helping!"`, + `"Look at how red you're getting. You must be feeling better now."`, + ][random(0,4)]>> + <<else>> + <<print [ + `"Stop struggling! You know I'm helping you warm up, right?"`, + `"What's the matter with you? I thought you were cold."`, + `"I know you're cold, but you don't need to act like a frigid bitch."`, + `"That's cold of you. Real cold."` + ][random(0,3)]>> + <</if>> + <<case "hot">> + <<He>> speaks. + <<if $enemyanger lte 50>> + <<print [ + `"Hot and sweaty sex is the best."`, + `"Your body feels so warm."`, + `"I love seeing a <<girl>> all hot and bothered."`, + `"Being flushed is a good sign."`, + `"You'll feel cooler once we're done here."`, + ][random(0,4)]>> + <<else>> + <<print [ + `"Stop struggling! You know you're making yourself feel even hotter, right?"`, + `"Just lay here and take it, and you'll feel better."`, + `"I know you're all hot and bothered, but you're being a right pain."`, + `"Be reasonable here. All this exertion isn't helping your heatstroke any."`, + ][random(0,3)]>> + <</if>> + <<case "hotStrip">> + <<if $enemyanger lte 20>> + <<print [ + `"Come on, I'm just trying to help."`, + `"You'll feel cooler if you let me take this thing off."`, + `"Aren't you hot wearing this?"`, + ][random(0,2)]>> + <<elseif $enemyanger lte 100>> + <<print [ + `"Is this how you treat everyone who tries to help you?"`, + `"Just let me take your clothes off already."`, + `"Be reasonable here. All this exertion isn't helping your heatstroke any."`, + ][random(0,2)]>> + <<else>> + <<print [ + `"Give me your clothes, bitch!"`, + `"You're getting stripped, slut. Stop fighting it."`, + `"Just give it up already. Your clothes belong to me now!"`, + ][random(0,2)]>> + <</if>> + <<default>> + <<basespeech>> + <</switch>> + <<elseif $speechcrossdressangry is 1>> <<He>> glares at your newly-exposed <<genitals>>. <<print [ `"You thought you could trick me? Time to show you your place."`, @@ -3970,7 +4031,7 @@ <<case 3>> "Will make sure <<wife>> has belly full of food and eggs." <<case 4>> "Be careful! I am not food! No need to fight me!" <<case 5>> "Hold still. I want to fill <<wife>> up." - <<default>> "Our babies will be the strongest flyers." + <<default>> "Our babies will be the strongest flyers." <</switch>> <</if>> <<else>> @@ -3990,7 +4051,7 @@ <<case 1>> "Our mating song is the prettiest sound in the world." <<case 2>> "First you'll be full of my seed. Then full of my eggs." <<case 3>> "Does this make <<wife>> feel good, too?" - <<case 4>> "I'll mate with you, make you as happy as you make me." + <<case 4>> "I'll mate with you, make you as happy as you make me." <<case 5>> "Is <<wife>> ready for my seed?" <<default>> "I'm ready to breed with you." <</switch>> @@ -4016,7 +4077,7 @@ <<case 3>> "Will make sure <<wife>> has belly full of food and hole full of me." <<case 4>> "Be careful! I am not food! No need to fight me!" <<case 5>> "Hold still. I want to fill <<wife>> up." - <<default>> "You're taking me so well." + <<default>> "You're taking me so well." <</switch>> <</if>> <<else>> @@ -4036,7 +4097,7 @@ <<case 1>> "Our mating song is the prettiest sound in the world." <<case 2>> "You'll be full of my seed." <<case 3>> "Does this make <<wife>> feel good, too?" - <<case 4>> "I'll mate with you, make you as happy as you make me." + <<case 4>> "I'll mate with you, make you as happy as you make me." <<case 5>> "Is <<wife>> ready for my seed?" <<default>> "I'm ready to breed with you." <</switch>> @@ -4064,7 +4125,7 @@ <<case 3>> "Will make sure <<wife>> has belly full of food and skin marked with my scent." <<case 4>> "Be careful! I am not food! No need to fight me!" <<case 5>> "Hold still. I want to show <<wife>> my love." - <<default>> "You're such a good mate." + <<default>> "You're such a good mate." <</switch>> <</if>> <<else>> @@ -4084,7 +4145,7 @@ <<case 1>> "Our mating song is the prettiest sound in the world." <<case 2>> "First you'll be under me. Then finish under me." <<case 3>> "Does this make <<wife>> feel good, too?" - <<case 4>> "I'll mate with you, make you as happy as you make me." + <<case 4>> "I'll mate with you, make you as happy as you make me." <<case 5>> "Is <<wife>> ready to finish?" <<default>> "I'm ready to breed with you." <</switch>> @@ -4110,7 +4171,7 @@ <<case 3>> "Will make sure <<wife>> has belly full of food and body warmed by me." <<case 4>> "Be careful! I am not food! No need to fight me!" <<case 5>> "Hold still. I want <<wife>> to fill me up." - <<default>> "Our babies will be the strongest flyers." + <<default>> "Our babies will be the strongest flyers." <</switch>> <</if>> <<else>> @@ -4130,7 +4191,7 @@ <<case 1>> "Our mating song is the prettiest sound in the world." <<case 2>> "Fill me with your seed." <<case 3>> "Does this make <<wife>> feel good, too?" - <<case 4>> "I'll mate with you, make you as happy as you make me." + <<case 4>> "I'll mate with you, make you as happy as you make me." <<case 5>> "Is <<wife>> ready to finish in me?" <<default>> "I'm ready to breed with you." <</switch>> diff --git a/game/base-system/images.twee b/game/base-system/images.twee index 6936748f60..167eb84697 100644 --- a/game/base-system/images.twee +++ b/game/base-system/images.twee @@ -1000,6 +1000,12 @@ <</widget>> <<widget "mooricon">> + <<case "remy">><<icon "estate.png">> + <<case "remy cottage">><<icon "remy_cottage.png">> + <<default>><<icon "moor.png">> +<</widget>> + +<<widget "birdicon">> <<switch _args[0]>> <<case "nest">> <<set $_nestImg to "birdTower/nest">> @@ -1098,8 +1104,6 @@ <<case "snare_bait">><<icon "birdTower/snare_bait.png">> <<case "snare_lurker">><<icon "birdTower/snare_lurker.gif">> <<case "sing">><<icon "sing.png">> - <<case "remy">><<icon "estate.png">> - <<case "remy cottage">><<icon "remy_cottage.png">> <<case "tower">><<icon "birdTower/tower.png">> <<case "tools">><<icon "birdTower/toolbox.png">> <<case "pot">><<icon "birdTower/cooking_pot.png">> @@ -1172,7 +1176,7 @@ <</if>> <<set $_baseIcon to "birdTower/child_birds.png">> <<set $_skinIcon to "birdTower/child_birds_skin.png">> - <<print '<span style="filter: ' + $_filter + '">' + `<<icon $_skinIcon infront>>` + '</span>'>><<icon $_baseIcon>> + <<print '<span style="filter: ' + $_filter + '">' + `<<icon $_skinIcon infront>>` + '</span>'>><<icon $_baseIcon>> <</if>> <<else>> <<if $children[_childrenIconSelect[0]].features.monster is "monster">> @@ -1184,7 +1188,7 @@ <<icon "birdTower/child_hawk.png">> <</if>> <</if>> - <<default>><<icon "moor.png">> + <<default>><<icon "birdTower/tower.png">> <</switch>> <</widget>> diff --git a/game/base-system/plant-objects.twee b/game/base-system/plant-objects.twee index 6ab6259e07..0a1b75dc40 100644 --- a/game/base-system/plant-objects.twee +++ b/game/base-system/plant-objects.twee @@ -147,7 +147,8 @@ days: 6, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"] + season: ["spring","summer","autumn","winter"], + icon: "orange.png" }, banana: { @@ -161,7 +162,8 @@ days: 9, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"] + season: ["spring","summer","autumn","winter"], + icon: "banana.png" }, lemon: { diff --git a/game/base-system/stat-changes.js b/game/base-system/stat-changes.js index c16721bc0b..ebb4c0ebe6 100644 --- a/game/base-system/stat-changes.js +++ b/game/base-system/stat-changes.js @@ -1,5 +1,4 @@ -/* eslint-disable no-undef */ -/* eslint-disable no-useless-escape */ +/* global statDisplay */ const statChange = (() => { function paramError(functionName = "", param = "", value, expectedValues = "") { @@ -684,7 +683,7 @@ const statChange = (() => { penis_tiny: V.player.penisExist && V.player.penissize <= 0, penis_small: V.player.penisExist && V.player.penissize === 1, penis_big: V.player.penisExist && V.player.penissize >= 4, - breasts_tiny: V.gender !== "m", + breasts_tiny: V.player.gender !== "m", breasts_small: true, breasts_big: true, pregnancy: playerBellySize() >= 8, diff --git a/game/base-system/weather/passout-scenes.twee b/game/base-system/weather/passout-scenes.twee index 03b6de2bd2..edf445d0e5 100644 --- a/game/base-system/weather/passout-scenes.twee +++ b/game/base-system/weather/passout-scenes.twee @@ -9,13 +9,48 @@ /* FROSTBITE */ <<if _passout is "cold">> <<set V.player.bodyTemperature to Weather.tempSettings.minTemperature>> - You pass out from the cold. - <br><br> + <<if !["moor", "sea", "forest", "beach"].includes($location)>> + You pass out from the cold. + <br><br> + <</if>> <<switch $location>> <<case "asylum">> <<addinlineevent "default" 1>> <<link [[Everything fades to black...|Passout Asylum]]>><</link>> <</addinlineevent>> + <<case "beach">> + You collapse on the <<= Weather.precipitation is "rain" ? "damp sand. Rain pelts your back as you" : Weather.precipitation is "snow" ? "cold sand. Snow falls on your body as you" : "sand. You">> curl into a ball to preserve what little body heat you have left. + <br><br> + <<if ["rain", "snow"].includes(Weather.precipitation)>> + You do your best to <<= $worn.handheld.type.includes("rainproof") ? "cover yourself with your umbrella" : "shield yourself from the " + Weather.precipitation>>, but your fingers are numb with cold, and your arm falls to your side. + <<silently>><<water>><</silently>> + <br><br> + <</if>> + + You pass out from the cold. + <br><br> + + <<if getRobinLocation() is "beach">> + <<addinlineevent "beach" 1.5>> + <<link [[Everything fades to black...|Passout Beach Hypothermia Robin]]>><</link>> + <</addinlineevent>> + <</if>> + + <<addinlineevent "beach" 1>> + <<link [[Everything fades to black...|Passout Beach Hypothermia]]>><</link>> + <</addinlineevent>> + + <<if $fame.good gte 400 or $fame.social gte 400>> + <<addinlineevent "fame" 0.2>> + <<link [[Everything fades to black...|Passout Hypothermia Fame]]>><</link>> + <</addinlineevent>> + <</if>> + + <<if $danger gte (9900 - $allure) and !_fullyNaked>> + <<addinlineevent "beach" 1>> + <<link [[Everything fades to black...|Passout Beach Hypothermia Molest]]>><<set $molestationstart to 1>><</link>> + <</addinlineevent>> + <</if>> <<case "farm">> <<if $bus.includes("farm")>>/* If not the Underground Farm */ <<addinlineevent "molest" 1>> @@ -23,19 +58,91 @@ <</addinlineevent>> <<else>> <<addinlineevent "livestock" 1>> - <<link [[Everything fades to black...|Livestock Hypothermia]]>><</link>> + <<link [[Everything fades to black...|Passout Livestock Hot Cold]]>><<set $passoutReason to "hypothermia">><</link>> + <</addinlineevent>> + <</if>> + <<case "forest">> + You trek through the dense forest, shivering as the relentless cold seeps into your bones with each step. Your body trembles, <<if Weather.isFreezing>>your breath fogs in the frigid air, <</if>>and your heart races as you struggle to push on.<<if Weather.isSnow>>The snow crunches underfoot.<</if>> + <br><br> + + The weight of exhaustion bears down on you, the world blurring as darkness creeps into your vision. Overwhelmed by the cold and fatigue, you collapse onto the forest floor. The ground rushes up to meet you as your consciousness slips away. + <br><br> + + You pass out from the cold. + <br><br> + + <<if $forest lte 20>> + <<addinlineevent "gwylan" .2>> + <<link [[Everything fades to black...|Passout Gwylan Hot Cold]]>><<set $passoutReason to "hypothermia">><</link>> <</addinlineevent>> <</if>> + + <<addinlineevent "wolf" 1>> + <<link [[Everything fades to black...|Passout Wolves Hot Cold]]>><<set $passoutReason to "hypothermia">><</link>> + <</addinlineevent>> + + <<addinlineevent "rescue" 1>> + <<link [[Everything fades to black...|Passout Hypothermia Rescue]]>><</link>> + <</addinlineevent>> + + <<case "moor">> + <<addinlineevent "birdRescue" 1.5>> + <<if $syndromebird gte 1>> + <<npc "Great Hawk">><<person1>> + You trudge through the moor, shivering uncontrollably<<if Weather.temperature lte 4>> as the biting cold seeps into your bones<</if>>. Each step feels like a struggle. Your body grows weaker, your movements more sluggish, with every passing moment. + <br><br> + + As you collapse to the <<= Weather.isSnow ? "snowy" : "cold">> ground, your limbs feel heavy and unresponsive. The world around you fades into darkness, the chill of the air enveloping you completely. + <br><br> + + You pass out from the cold. + <br><br> + + <<link [[Everything fades to black...|Passout Bird Hypothermia]]>><</link>> + <<else>> + <<npc "Great Hawk">><<person1>> + You stumble to the <<= Weather.isSnow ? "snowy ground" : "ground">> ground, too weak to go on. Your lips are cracked from <<= Weather.temperature lte 4 ? "the frigid air" : "your laboured breathing">>, but you manage to croak out a desperate plea for help. + <br><br> + + Your cry is answered. A <<hawkScreechDesc>> pierces the air. <<hawkRescueApproachSentence>> + <br><br> + + You tip your head back, and your mouth grows even drier as you gape at the enormous shadow flying towards you. + <br><br> + + <<link [[Next|Bird Rescue No Syndrome]]>><</link>> + <</if>> + <</addinlineevent>> + + <<addinlineevent "rescue" 1>> + You pass out from the cold. + <br><br> + <<link [[Everything fades to black...|Passout Hypothermia Rescue]]>><</link>> + <</addinlineevent>> <<case "prison">> <<addinlineevent "default" 1>> <<link [[Everything fades to black...|Passout Prison 2]]>><</link>> <</addinlineevent>> <<case "sea">> + The cold water robs you of the last of your body heat. Your limbs become too heavy to keep swimming, and you pass out as your body starts to sink. + <br><br> + + <<addinlineevent "pirates" 1>> + <<link [[Everything fades to black...|Passout Pirates Hot Cold]]>><<set $passoutReason to "hypothermia">><</link>> + <</addinlineevent>> + <<case "school">> <<addinlineevent "default" 1>> - <<link [[Everything fades to black...|Passout Sea]]>><</link>> + <<link [[Everything fades to black...|School Passout]]>><<set $passoutReason to "hypothermia">><</link>> <</addinlineevent>> <<case "lake">> - /* Lake events */ + /* Lake events needed - adding default ones now to prevent empty passages */ + <<addinlineevent "rescue" 1.1>> + <<link [[Everything fades to black...|Passout Hypothermia Rescue]]>><</link>> + <</addinlineevent>> + <<case "school">> + <<addinlineevent "default" 1>> + <<link [[Everything fades to black...|School Passout]]>><<set $passoutReason to "hypothermia">><</link>> + <</addinlineevent>> <<case "tentworld">> <<addinlineevent "default" 1>> <<link [[Everything fades to black...|Passout Tentacle World]]>><</link>> @@ -49,16 +156,49 @@ <<addinlineevent "ambulance" 0.1>> <<link [[Everything fades to black...|Ambulance rescue]]>><<set $passoutReason to "hypothermia">><</link>> <</addinlineevent>> + <<addinlineevent "molest" 1>> <<link [[Everything fades to black...|Passout Hypothermia Molest]]>><<set $molestationstart to 1>><</link>> <</addinlineevent>> - <</switch>> + + <<addinlineevent "rescue" 1.1>> + <<link [[Everything fades to black...|Passout Hypothermia Rescue]]>><</link>> + <</addinlineevent>> + + <<if $fame.good gte 400 or $fame.social gte 400>> + <<addinlineevent "fame" 0.2>> + <<link [[Everything fades to black...|Passout Hypothermia Fame]]>><</link>> + <</addinlineevent>> + <</if>> + <</switch>> /* HEATSTROKE */ <<elseif _passout is "heat">> <<set V.player.bodyTemperature to Weather.tempSettings.maxTemperature>> - You pass out from the heat. - <br><br> + <<if !["moor", "sea"].includes($location)>> + You pass out from the heat. + <br><br> + <</if>> <<switch $location>> + <<case "alley">> + <<if Weather.temperature gte 27 and _top and !Time.schoolDay and $bullytimer gte $rng and C.npc.Whitney.init is 1 and !["dungeon", "pillory"].includes(C.npc.Whitney.state) and $daily.whitney.park is undefined>> + <<addinlineevent "default" 1>> + <<link [[Everything fades to black...|Passout Alley Heatstroke Whitney]]>><</link>> + <</addinlineevent>> + <</if>> + + <<if !_fullyNaked>> + <<addinlineevent "strip" 1>> + <<link [[Everything fades to black...|Passout Heatstroke Strip]]>><<set $molestationstart to 1>><</link>> + <</addinlineevent>> + <</if>> + + <<addinlineevent "rescue" 1.1>> + <<link [[Everything fades to black...|Passout Heatstroke Rescue]]>><</link>> + <</addinlineevent>> + + <<addinlineevent "kiss" 1>> + <<link [[Everything fades to black...|Passout Heatstroke Kiss]]>><</link>> + <</addinlineevent>> <<case "asylum">> <<addinlineevent "default" 1>> <<link [[Everything fades to black...|Passout Asylum]]>><</link>> @@ -66,7 +206,7 @@ <<case "farm">> <<if $bus.includes("farm")>>/* If not the Underground Farm */ <<addinlineevent "generic" 1>> - <<link [[Everything fades to black...|Passout Heatstroke]]>><</link>> + <<link [[Everything fades to black...|Passout Heatstroke Rescue]]>><</link>> <</addinlineevent>> <<if !_fullyNaked>> <<addinlineevent "strip" 1>> @@ -75,19 +215,89 @@ <</if>> <<else>> <<addinlineevent "livestock" 1>> - <<link [[Everything fades to black...|Livestock Heatstroke]]>><</link>> + <<link [[Everything fades to black...|Passout Livestock Hot Cold]]>><<set $passoutReason to "hyperthermia">><</link>> + <</addinlineevent>> + <</if>> + <<case "forest">> + You trek through the dense forest, a throbbing headache piercing your skull with each step. <<if !Weather.overcast>>The relentless sunlight filters through the canopy above.<</if>> Sweat drips from your brow, and your heart races as you struggle to push forward through the thick underbrush + <br><br> + + The weight of exhaustion bears down on you, the world blurring as darkness creeps into your vision. Overwhelmed by the heat and fatigue, you collapse onto the forest floor. The ground rushes up to meet you as your consciousness slips away. + <br><br> + + You pass out from the heat. + <br><br> + + <<if $forest lte 20>> + <<addinlineevent "gwylan" .2>> + <<link [[Everything fades to black...|Passout Gwylan Hot Cold]]>><<set $passoutReason to "hyperthermia">><</link>> <</addinlineevent>> <</if>> + + <<addinlineevent "wolf" 1>> + <<link [[Everything fades to black...|Passout Wolves Hot Cold]]>><<set $passoutReason to "hyperthermia">><</link>> + <</addinlineevent>> + + <<addinlineevent "rescue" 1>> + <<link [[Everything fades to black...|Passout Heatstroke Rescue]]>><</link>> + <</addinlineevent>> + <<case "moor">> + <<addinlineevent "birdRescue" 1.5>> + <<if $syndromebird gte 1>> + <<npc "Great Hawk">><<person1>> + The relentless sun beats down on you as you trudge through the moor, a throbbing headache pounding in your skull. Waves of nausea churn in your stomach, your pulse racing uncontrollably as you succumb to the heat. + <br><br> + + In a desperate attempt to find relief, you sink to your knees, clutching at the parched earth. The ground feels distant, the world spinning as darkness closes in. + <br><br> + + You pass out from the heat. + <br><br> + + <<link [[Everything fades to black...|Passout Bird Heatstroke]]>><</link>> + <<else>> + <<npc "Great Hawk">><<person1>> + You stumble to the ground, too weak to go on. Your lips are parched from the heat, but you manage to croak out a desperate plea for help. + <br><br> + + Your cry is answered. A <<hawkScreechDesc>> pierces the air. <<hawkRescueApproachSentence>> + <br><br> + + You tip your head back, and your mouth grows even drier as you gape at the enormous shadow flying towards you. + <br><br> + <<link [[Next|Bird Rescue No Syndrome]]>><</link>> + <</if>> + <</addinlineevent>> + + <<addinlineevent "rescue" 1>> + You pass out from the heat. + <br><br> + <<link [[Everything fades to black...|Passout Heatstroke Rescue]]>><</link>> + <</addinlineevent>> <<case "prison">> <<addinlineevent "default" 1>> <<link [[Everything fades to black...|Passout Prison 2]]>><</link>> <</addinlineevent>> <<case "sea">> + Despite the water around you, the heat is too much. Your limbs become too heavy to keep swimming, and you pass out as your body starts to sink. + <br><br> + + <<addinlineevent "pirates" 1>> + <<link [[Everything fades to black...|Passout Pirates Hot Cold]]>><<set $passoutReason to "hyperthermia">><</link>> + <</addinlineevent>> + <<case "school">> <<addinlineevent "default" 1>> - <<link [[Everything fades to black...|Passout Sea]]>><</link>> + <<link [[Everything fades to black...|School Passout]]>><<set $passoutReason to "hyperthermia">><</link>> <</addinlineevent>> <<case "lake">> - /* Lake events */ + /* Lake events needed - adding default ones now to prevent empty passages */ + <<addinlineevent "rescue" 1.1>> + <<link [[Everything fades to black...|Passout Heatstroke Rescue]]>><</link>> + <</addinlineevent>> + <<case "school">> + <<addinlineevent "default" 1>> + <<link [[Everything fades to black...|School Passout]]>><<set $passoutReason to "hyperthermia">><</link>> + <</addinlineevent>> <<case "tentworld">> <<addinlineevent "default" 1>> <<link [[Everything fades to black...|Passout Tentacle World]]>><</link>> @@ -101,27 +311,104 @@ <<addinlineevent "ambulance" 0.1>> <<link [[Everything fades to black...|Ambulance rescue]]>><<set $passoutReason to "hyperthermia">><</link>> <</addinlineevent>> + <<if !_fullyNaked>> <<addinlineevent "strip" 1>> <<link [[Everything fades to black...|Passout Heatstroke Strip]]>><<set $molestationstart to 1>><</link>> <</addinlineevent>> <</if>> - <<addinlineevent "generic" 1>> - <<link [[Everything fades to black...|Passout Heatstroke]]>><</link>> + + <<addinlineevent "kiss" 1>> + <<link [[Everything fades to black...|Passout Heatstroke Kiss]]>><</link>> + <</addinlineevent>> + + <<addinlineevent "rescue" 1.1>> + <<link [[Everything fades to black...|Passout Heatstroke Rescue]]>><</link>> <</addinlineevent>> <</switch>> <</if>> <<runeventpool>> <</widget>> +/* Determines clothes player may be given after passing out of cold */ +<<widget "hypothermiaClothes">> + <<outfitChecks>><<set _wet to $upperwetstage gte 3 or $lowerwetstage gte 3 or $underupperwetstage gte 3 or $underlowerwetstage gte 3>> + <<set _gender to $player.gender_appearance>> + <<set _clothes to []>> + <<set _warmClothes to []>> + + <<if _fullyNaked>> + <<set _warmClothes to "clothes">> + <<elseif _wet>> + <<dry_full>><<upperstrip>><<lowerstrip>> + <<set _warmClothes to "dry clothes">> + <<elseif !_bottom>> + <<set _warmClothes to "bottoms">> + <<elseif $debug is 1 and $worn.over_upper.name is "naked" and $rng gte 45>> + <<set _warmClothes to "a jacket">> + <<elseif $worn.upper.warmth lt 6>> + <<set _warmClothes to _shirtless ? "a shirt" : "something warmer">> + <<elseif !$worn.neck.cursed>> + <<set _warmClothes to "a scarf">> + <<elseif $worn.head.warmth lt 3>> + <<set _warmClothes to "a hat">> + <</if>> + + <<if $debug is 1 and $worn.over_upper.name is "naked" and $rng gt 100>> + /* outerwearToDo: Give players a jacket that's suitably warm. Not the froggy coat. Rng to allow for the possibility that they'll get another article of clothing instead -- rng should normally be gte 45, I just wanted to make this impossible to get. */ + <<set _slot to "over_upper">> + <<set _index to 1>> + <<overupperwear _index>> + <<elseif $worn.upper.warmth lt 6>> + /* neutral: puffer jacket, winter jacket, turtleneck jumper, cable-knit turtleneck, ghost jumper */ + <<set _slot to "upper">> + <<set _upper to [71, 103, 45, 43, 133]>> + <<if $player.gender_appearance is "m" or $forcedcrossdressingdisable is "f">> + /* masc: punk leather, leather, letterman jackets, skull jumper */ + <<set _upper.push(40, 41, 62, 135)>> + <</if>> + <<if $player.gender_appearance is "f" or $forcedcrossdressingdisable is "f">> + /* femme: heart jumper, girl's sweater */ + <<set _upper.push(134, 28)>> + <</if>> + <<set _index to _upper.random()>> + <<upperstrip>> + <<switch _index>> + <<case 133>><<upperwear _index "white" "neon blue">> + <<case 134>><<upperwear _index "lilac" "pink">> + <<case 135>><<upperwear _index "black" "red">> + <<default>><<upperwear _index>> + <</switch>> + <<set _crossdress to ($worn.upper.gender is "f" and $player.gender_appearance is "m") or ($worn.upper.gender is "m" and $player.gender_appearance is "f")>> + <<elseif !$worn.neck.cursed>> + <<set _slot to "neck">> + <<set _index to 16>> + <<neckwear _index>> + <<elseif $worn.head.warmth lt 3>> + <<set _costume to $christmas is 1 or $halloween is 1>> + <<set _slot to "head">> + <<set _index to $christmas is 1 ? 8 : $halloween is 1 ? 53 : 2>> + <<headwear _index>> + <</if>> + <<set _text_output to setup.clothes[_slot][_index].word is "n" ? `a pair of ${$worn[_slot].name}` : setup.clothes[_slot][_index].word + " " + $worn[_slot].name >> + <<set _clothes.push(_text_output)>> + + <<outfitChecks>> + <<if _bottomExposed>> + <<set _slot to "lower">> + <<set _index to either(22, 23, 39, 67)>> + <<lowerwear _index>> + <<set _text_output to setup.clothes[_slot][_index].word is "n" ? `a pair of ${$worn[_slot].name}` : setup.clothes[_slot][_index].word + " " + $worn[_slot].name >> + <<set _clothes.push(_text_output)>> + <</if>> +<</widget>> + /* To get the previous major area passage, use: $safePassage (for links in the last passage, unless we want to link the player elsewhere) */ - /* Generic frostbite passout: dangerous */ +/* Generic passouts */ :: Passout Hypothermia Molest -<<generate1>><<person1>> - <<effects>> <<if $molestationstart is 1>> You awaken to find a <<generate1>><<person1>><<person>> on top of you. "Hey there, baby," <<he>> croons. "You were shivering something awful, so I figured I'd help you warm up. I know a good way to generate some body heat..." <<He>> leers down at you, rubbing lewdly against your body. @@ -133,6 +420,7 @@ To get the previous major area passage, use: $safePassage (for links in the last <<molested>> <<maninit>> <<set $enemyanger to 0>> + <<set $encounterDialogue to "cold">> <</if>> <<effects>> @@ -157,16 +445,17 @@ To get the previous major area passage, use: $safePassage (for links in the last <<endcombat>> <<clotheson>> <<elseif $enemyhealth lte 0>> - The <<person>> grunts as you manage to push <<him>> off of you with one last <<= $submissive lte 850 ? "vicious" : "desperate">> shove. "You fuckin' <<bitch>>!" <<he>> shouts after you as you scramble away. "If you didn't want someone to help you warm up, you shouldn't've been walking around like that!" <<tearful>> you sprint away from <<him>>. The exercise gets your blood pumping and distracts you from the cold, at least. + The <<person>> grunts as you manage to push <<him>> off of you with one last <<= $submissive lte 850 ? "vicious" : "desperate">> shove. "You fuckin' <<bitch>>!" <<he>> shouts after you as you scramble away. "If you didn't want someone to help you warm up, you shouldn't've been walking around like that!" <<tearful>> you sprint away from <<him>>. The exercise gets your blood pumping and distracts you from the cold, at least. <<athletics 1>> <br><br> <<clotheson>> <<endcombat>> <</if>> +<br><br> -<<link [[Next|$safePassage]]>><</link>> +<<link [[Next|$safePassage]]>><<endevent>><</link>> - /* Generic heatstroke passout: dangerous */ +/* Generic heatstroke passout: dangerous */ :: Passout Heatstroke Strip <<if $molestationstart is 1>> @@ -180,6 +469,7 @@ To get the previous major area passage, use: $safePassage (for links in the last <<maninit>> <<npcstripall>> <<npcidlegenitals>> + <<set $encounterDialogue to "hotStrip">> <</if>> <<effects>> @@ -206,14 +496,14 @@ To get the previous major area passage, use: $safePassage (for links in the last <<tearful>> you struggle to sit up, still weak and overheated. You give <<him>> a <<= $submissive lte 850 ? "dirty" : "pleading">> look. <br><br> - "What, no thank you?" The <<person>> clucks <<his>> tongue and shakes <<his>> head. "Well, I guess I'll just have to keep these as compensation for my good deed. Stay cool, <<girl>>." + "What, no thank you?" The <<person>> clicks <<his>> tongue and shakes <<his>> head. "Well, I guess I'll just have to keep these as compensation for my good deed. Stay cool, <<girl>>." <<if $beauty gte ($beautymax / 7) * 4>> <<He>> pauses. "If you can, anyway. That might be hard to do, you <i>are</i> pretty hot." <<He>> leaves, chuckling at <<his>> own pun. <<else>> <<He>> winks at you. "Cute <<girls>> like you shouldn't be walking around with clothes on, anyway." <</if>> <<set $stealtextskip to 1>> - <<stealclothes>> + <<stealclothes "strip">> <<elseif $enemyarousal gte $enemyarousalmax>> <<ejaculation>> @@ -225,12 +515,62 @@ To get the previous major area passage, use: $safePassage (for links in the last <<clotheson>> <<endcombat>> -<<link [[Next|$safePassage]]>><</link>> +<<link [[Next|$safePassage]]>><<endevent>><</link>> - /* Generic heatstroke passout */ -:: Passout Heatstroke -<<effects>> +/* Generic frostbite passout: safe */ +:: Passout Hypothermia Rescue +<<effects>><<generate1>><<person1>><<outfitChecks>><<rng>> +<<hypothermiaClothes>> + +You wake up, feeling a little better than you remember. <<if _clothes.length gte 1>>You're wearing <<= _clothes.join(" and ")>><</if>>. <<if _wet>>Your wet clothes are folded neatly beside you.<</if>> You sit up and get a look at your surroundings. It looks like you're in +<<if $location is "forest">> + a camping tent. +<<else>> + <<switch $bus>> + <<case "domus" "danube" "barb" "residential" "wolf">>a living room. + <<case "high" "commercial">>some sort of breakroom. + <<case "farm">>a barn. + <<default>> + <<if $bus.includes("lake")>> + near the lake. + <<else>> + the backseat of a stranger's car. + <</if>> + <</switch>> +<</if>> +<br><br> + +"Oh, thank god you're awake!" a <<person>> says with a sigh of relief. "Your body was so cold, you had me worried. +<<if _warmClothes>> + You know, you really shouldn't be walking around without _warmClothes." <<He>> gestures to your clothes. "All yours, by the way." +<</if>> +<<if _wet>> + <<He>> gives you an apologetic smile. "I hope you don't mind that I took your clothes off to dry. I had a change of clothes on me and figured you could use it." +<</if>> +<<if _crossdress or _costume>> + <<He>> looks sheepish. "Sorry, it's all I had. <<if _crossdress and ($worn.upper.gender is "m" and $pronoun is "f") or ($worn.upper.gender is "f" and $pronoun is "m")>> It belonged to my ex, so I'm happy to be rid of it.<</if>><<if _costume>> T'is the season, am I right?<</if>>" +<</if>> +<br><br> + +<<if $speech_attitude is "meek">> + "T-thank you," you stammer, still trembling from the cold. +<<elseif $speech_attitude is "bratty">> + "Thanks," you say. "I'd say I owe you one, but I'll probably never see you again." +<<else>> + "Thank you so much," you say, hugging your arms close to your body. +<</if>> +<br><br> + +The <<person>> smiles at you. "It's the least I can do. You go careful now, love." <<= _wet ? "You gather up your clothes" : "You bid <<him>> farewell">> and continue on your way. + +<br><br> +<<link [[Next|$safePassage]]>><<endevent>><</link>> + + +/* Generic heatstroke passout: safe */ +:: Passout Heatstroke Rescue +<<set $outside to 0>><<effects>> <<generate1>><<person1>> <<set _exposed to $exposed gte 2>> <<returnCarried>> @@ -295,16 +635,16 @@ The <<person>> backs away. "I'll give you some <<= _exposed ? "space" : "privacy <br><br> <<if $promiscuity gte 35>> - <<link [[`Offer to thank ${$NPCList[0].pronouns.him} with your body`|Heatstroke Rescue Thank]]>><</link>><<promiscuous3>> + <<link [[`Offer to thank ${$NPCList[0].pronouns.him} with your body`|Passout Heatstroke Rescue Thank]]>><</link>><<promiscuous3>> <br> <</if>> <<if !_exposed>> - <<link [[Get dressed|Heatstroke Rescue Dress]]>><<set $phase to 1>><</link>> + <<link [[Get dressed|Passout Heatstroke Rescue Dress]]>><<set $phase to 1>><</link>> <<else>> - <<link [[Wear the towel|Heatstroke Rescue End]]>><</link>> + <<link [[Wear the towel|Passout Heatstroke Rescue End]]>><</link>> <</if>> -:: Heatstroke Rescue Thank +:: Passout Heatstroke Rescue Thank <<effects>> You put a hand on the <<persons>> thigh. @@ -326,7 +666,7 @@ You put a hand on the <<persons>> thigh. <<if $seductionrating gte $seductionrequired>> The <<person>> is caught off-guard for a moment, but soon laughs and returns to your side. "Well, someone's got <<pher>> energy back! I wouldn't say no to a little appreciation..." <br><br> - <<link [[Next|Heatstroke Rescue Thank Sex]]>><<set $sexstart to 1>><</link>> + <<link [[Next|Passout Heatstroke Rescue Thank Sex]]>><<set $sexstart to 1>><</link>> <<else>> The <<person>> gives an awkward laugh. "I, uh, appreciate your offer. But I don't think that would be a good idea, especially while you're recovering." <br><br> @@ -335,12 +675,12 @@ You put a hand on the <<persons>> thigh. <br><br> <<if !_exposed>> - <<link [[Get dressed|Heatstroke Rescue Dress]]>><<set $phase to 1>><</link>> + <<link [[Get dressed|Passout Heatstroke Rescue Dress]]>><<set $phase to 1>><</link>> <<else>> - <<link [[Wear the towel|Heatstroke Rescue End]]>><</link>> + <<link [[Wear the towel|Passout Heatstroke Rescue End]]>><</link>> <</if>> <</if>> -:: Heatstroke Rescue Thank Sex +:: Passout Heatstroke Rescue Thank Sex <<if $sexstart is 1>> <<set $sexstart to 0>> @@ -349,6 +689,7 @@ You put a hand on the <<persons>> thigh. <<neutral 1>> <<maninit>> <<set $enemytrust += 100>> + <<set $encounterDialogue to "hot">> <</if>> <<effects>> @@ -359,12 +700,12 @@ You put a hand on the <<persons>> thigh. <<actionsman>> <<if _combatend>> -<span id="next"><<link [[Next|Heatstroke Rescue Thank Sex Finish]]>><</link>></span><<nexttext>> +<span id="next"><<link [[Next|Passout Heatstroke Rescue Thank Sex Finish]]>><</link>></span><<nexttext>> <<else>> -<span id="next"><<link [[Next|Heatstroke Rescue Thank Sex]]>><</link>></span><<nexttext>> +<span id="next"><<link [[Next|Passout Heatstroke Rescue Thank Sex]]>><</link>></span><<nexttext>> <</if>> -:: Heatstroke Rescue Thank Sex Finish +:: Passout Heatstroke Rescue Thank Sex Finish <<set $outside to 1>><<effects>> <<if $enemyarousal gte $enemyarousalmax>> <<ejaculation>> @@ -388,12 +729,12 @@ You put a hand on the <<persons>> thigh. <</if>> <<if !_exposed>> - <<link [[Get dressed|Heatstroke Rescue Dress]]>><<set $phase to 1>><</link>> + <<link [[Get dressed|Passout Heatstroke Rescue Dress]]>><<set $phase to 1>><</link>> <<else>> - <<link [[Wear the towel|Heatstroke Rescue End]]>><</link>> + <<link [[Wear the towel|Passout Heatstroke Rescue End]]>><</link>> <</if>> -:: Heatstroke Rescue Dress +:: Passout Heatstroke Rescue Dress <<effects>> It occurs to you that it might be best to put on fewer clothes for right now. Anything else can be sent to your wardrobe. @@ -401,20 +742,20 @@ It occurs to you that it might be best to put on fewer clothes for right now. An <<getDressedList>> -<<link [[Just wear the towel|Heatstroke Rescue End]]>><<strip>><<returnCarried>><<if $worn.upper.name isnot "large towel">><<upperwear 14 "white">><</if>><</link>> +<<link [[Just wear the towel|Passout Heatstroke Rescue End]]>><<strip>><<returnCarried>><<if $worn.upper.name isnot "large towel">><<upperwear 14 "white">><</if>><</link>> <br> -<<link [[Finish dressing|Heatstroke Rescue End]]>><</link>> +<<link [[Finish dressing|Passout Heatstroke Rescue End]]>><</link>> -:: Heatstroke Rescue End +:: Passout Heatstroke Rescue End <<effects>> You thank your rescuer, and <<he>> nods. "Try and be more mindful of the heat from now on," <<he>> replies with a wave. You wave back and resume your journey. <br><br> -<<link [[Next|$safePassage]]>><</link>> - +<<link [[Next|$safePassage]]>><<endevent>><</link>> -:: Livestock Heatstroke +/* Location passouts */ +:: Passout Livestock Hot Cold <<effects>> <<npc Remy>><<generate2>><<generate3>> <<set _cow to $player.gender_appearance is "m" ? "bull" : "cow">> @@ -425,13 +766,34 @@ You awaken in a dingy windowless room, the stone walls lit only by a flaming tor <<person1>>"Awake I see," says a voice. It's Remy. <<He>> walks down a set of stone steps leading into the room, and kneels beside you. <br><br> -"We found you passed out. You caused quite the worry, but my examination found no problems. You simply overheated." <<He>> strokes your hair. "<<= $farmGateCD is 0 ? "One of my men said you were acting up tonight. Maybe next time you'll be a good _cow and behave, hmm?" : "I'm proud you're being such a hard worker, but we can't have such a valuable member of our herd fainting, now can we?">> All that exercise must have gotten to you. Here, <<girl>>." -<br><br> +<<if $passoutReason is "hyperthermia">> + "We found you passed out. You caused quite the worry, but my examination found no problems. You simply overheated." <<He>> strokes your hair. "<<= $farmGateCD is 0 ? "One of my men said you were acting up tonight. Maybe next time you'll be a good _cow and behave, hmm?" : "I'm proud you're being such a hard worker, but we can't have such a valuable member of our herd fainting, now can we?">> All that exercise must have gotten to you. Here, <<girl>>." + <br><br> -Remy holds up a bowl of water, and you realise just how parched you are. He lifts the bowl to your lips, and you gulp down the cool water greedily. Your desperation to slake your thirst causes some to spill on your <<chest>> and <<he>> chuckles. When the last drop of water is gone, you sigh with relief. -<br><br> + Remy holds up a bowl of water, and you realise just how parched you are. He lifts the bowl to your lips, and you gulp down the cool water greedily. Your desperation to slake your thirst causes some to spill on your <<chest>> and <<he>> chuckles. When the last drop of water is gone, you sigh with relief. + <br><br> + + Remy sets down the bowl and <<= $cow gte 2 and $transformationParts.cow.horns isnot "hidden" ? "rubs the base of your horns" : "pets your head">>. "That's a good <<girl>>. You'll take care next time, won't you?" + <br><br> + + <<link [[Listen|Livestock Passout 2]]>><<set $phase to 0>><<livestock_obey 1>><<transform cow 1>><</link>><<gobey>> + <br> + <<link [[Push away|Livestock Passout 2]]>><<set $phase to 1>><<livestock_obey -1>><<trauma -6>><</link>><<lobey>><<ltrauma>> +<<else>> + "We found you passed out and shivering. You caused quite the worry, but my examination found no problems. You simply got too cold." <<He>> strokes your hair. + <br><br> + + <<if $speech_attitude is "meek">> + "Um... maybe if I had some clothes, that would help?" you whisper. + <<elseif $speech_attitude is "bratty">> + "Yeah, well, maybe I wouldn't freeze to death if you'd give me some clothes," you say. + <<else>> + "Can I get some clothes?" you ask. "It's too cold to go around naked like this." + <</if>> + <br><br> -Remy sets down the bowl and <<= $cow gte 2 and $transformationParts.cow.horns isnot "hidden" ? "rubs the base of your horns" : "pets your head">>. "That's a good <<girl>>. You'll take care next time, won't you?" + Remy purses <<his>> lips. "Now, now, <<girl>>, don't be silly. Cattle don't wear clothes." <<He>> strokes your hair. "You just need to get your blood pumping, that's all. I'm sure we can find a job that'll keep you plenty active. You'll warm right up, you'll see." +<</if>> <br><br> <<link [[Listen|Livestock Passout 2]]>><<set $phase to 0>><<livestock_obey 1>><<transform cow 1>><</link>><<gobey>> @@ -439,30 +801,946 @@ Remy sets down the bowl and <<= $cow gte 2 and $transformationParts.cow.horns is <<link [[Push away|Livestock Passout 2]]>><<set $phase to 1>><<livestock_obey -1>><<trauma -6>><</link>><<lobey>><<ltrauma>> -:: Livestock Hypothermia +:: Passout Pirates Hot Cold +<<set $location to "pirate_ship">><<effects>> +<<outfitChecks>> +<<if $pirate_rank gte 1>> + <<if $passoutReason is "hyperthermia">> + You wake up <<= _fullyNaked ? "cool and dry" : "naked and cool, but dry">>, save the water being poured on you. You <<= $speech_attitude is "meek" ? "whimper" : $speech_attitude is "bratty" ? "groan" : "gasp">> and wipe at your face to clear your airways, much to the <<= $pirate_status gte 70 ? "cheers" : $pirate_status gte 50 ? "pleased chatter" : "amusement">> of your mates. + <<else>> + You wake up dry and bundled in blankets, nestled between two large bodies. You <<= $speech_attitude is "meek" ? "whimper" : $speech_attitude is "bratty" ? "groan" : "gasp">> as a shiver runs through you, shaking off the last of your frostbite. The pirates on either side of you <<= $pirate_status gte 50 ? "rub your back and sides" : "roughly pat you on the back">> with a laugh at your recovery. + <</if>> + <br><br> + + Another pirate fetches Captain Zephyr when you awake. "Welcome back from the brink, mate. Tis good fortune we found ye. <<print either ("Nature is no kinder mistress out at sea", "Raw nor cooked makes no difference to the mer. You're asking' for trouble swimming alone like that")>>." + <br><br> + + <<= !_fullyNaked ? "<<dry_full>>Your dry clothes are returned to you and a towel" : "A towel">> is dropped onto your head.<<if $pirate_status gte 50>> A pirate ruffles your hair dry<<ruffleHair>><</if>>. + <br><br> + + Once you're dry and on your feet again, Captain Zephyr commands <<nnpc_his "Zephyr">> crew. "Alright, ye dogs! Back to work!" + <br><br> + + <<link [[Next|Pirate Cabin]]>><<endevent>><</link>> +<<else>> + <<ruined>> + <<if $passoutReason is "hyperthermia">> + You wake up naked and bound, wind whipping at you and sea mist spraying you. You've cooled down a lot, but that doesn't protect you much from the realisation that you're suspended off the ground! <<gstress>><<stress 6>> + <<else>> + <<towelup>> <!-- replace with a thin sheet if a spriter makes one --> + You wake up bound, bare of anything but what feels like a cocoon of sheets. The wind <<if ["rain", "snow"].includes(Weather.precipitation)>><<= Weather.precipitation>> whip<<else>>whips<</if>> at your face, and the sea mist sprays you. You feel a lot warmer, but that doesn't provide much relief from the realisation that you're suspended off the ground! <<gstress>><<stress 6>> + <</if>> + <br><br> + + "Captain! The <<lass>> is awake!" you hear someone call from below you. The bindings holding you upright loosen, sending you sliding down the mast. You <<= $feetskill gte 600 ? "manage to keep upright when your feet hit the ground, before the motion of the boat sends you to the floor" : "crumple to the ground on wobbly legs">>. <<gpain>><<pain 4>> The pirates surrounding you part as <<= $pirateintro is 1 ? "Captain Zephyr" : "someone you presume to be the captain">> approaches. + <br><br> + <<link [[Next|Pirate Intro]]>><</link>> +<</if>> + + +:: Passout Beach Heatstroke +<<effects>> +:: Passout Beach Hypothermia <<effects>> +<<generate1>> <<person1>> +<<outfitChecks>> +<<set $outside to 0>><<set $location to "arcade">> +<<hypothermiaClothes>> +You awake to a hand on your forehead. Your senses are flooded with the flashing lights and loud noises of arcade games. You quickly shut your eyes again and concentrate on your breathing. +<br><br> -You awaken in a dingy windowless room, the stone walls lit only by a flaming torch held by a <<person2>><<person>>. <<He>> and a <<person3>><<person>> stand, looking down at you. You're lying on a bed of straw. +<<if _wet>> + Hands tear at your clothes. Someone rubs a towel across your body before dressing you in something warm. Heavy blankets are piled on top of you. +<<elseif _clothes.length gte 1>> + Someone dresses you in something warm, and you feel heavy blankets being piled on top of you. +<<else>> + Someone piles heavy blankets on you. +<</if>> <br><br> -<<person1>>"Awake I see," says a voice. It's Remy. <<He>> walks down a set of stone steps leading into the room, and kneels beside you. +"Hey, <<girl>>, are you awake?" someone asks, nudging you until you open your eyes. A <<person>> stares down at you, nodding when you make eye contact. <<if _clothes.length gte 1>>You realise that you're wearing <<= _clothes.join(" and ")>><</if>>. <<if _wet>>Your wet clothes are folded neatly beside you.<</if>> +<br><br> + +"You looked like you could use _warmClothes," the <<person>> says by way of explanation. <<He>> props you up against an arcade machine, and brings a cup of what smells like hot chocolate to your lips. You automatically take a sip. It reminds you of Robin.<<if $robinmissing isnot 0>><<gtrauma>><<trauma 6>><<else>><<ltrauma>><<trauma -6>><</if>> +<br><br> + +You stay there for a while, listening as the <<person>> talks about <<his>> life. After some time, <<he>> stands up. "You should be good for now, but make sure you warm up," <<he>> says. <<He>> stands up, waves you goodbye, and walks out of the arcade. +<br><br> + +<<link [[Next|Arcade]]>><<endevent>><</link>> + +:: Passout Hypothermia Fame +<<effects>><<generate1>> <<person1>> +<<set $outside to 0>><<set $location to "hospital">> + +The last thing you hear is a <<personsimple>>'s voice. "Wait, I know that face... people call <<phim>> `<<overworld_nickname>>`, right? We should get <<phim>> to a hospital." <<He>> scoops you up and places you in the backseat of a car. The car is warm, and you drift off. +<br><br> +<<link [[Wake up|Hospital Bed]]>><<set $passoutReason to "hypothermia">><</link>> + +:: Passout Beach Hypothermia Molest +<<effects>> +<<if $molestationstart is 1>> + <<set $molestationstart to 0>> + You wake up to someone ripping your clothes from you. You open your eyes and see your assailant, a <<generate1>><<person1>><<person>>. "Sharing body heat is important when you're cold," <<he>> says. "I'll warm you right up." <<He>> flashes you a smirk before rubbing against your body. + <br><br> + <<controlloss>> + <<violence 1>> + <<neutral 1>> + <<molested>> + <<maninit>> + <<enable_rescue>> + <<set $enemyanger to 0>> + <<set $encounterDialogue to "cold">> +<</if>> +<<effects>> +<<effectsman>><<man>> +<<stateman>> +<br><br> +<<actionsman>> + +<<if _combatend>> + <span id="next"><<link [[Next|Passout Beach Hypothermia Molest Finish]]>><</link>></span><<nexttext>> +<<else>> + <span id="next"><<link [[Next|Passout Beach Hypothermia Molest]]>><</link>></span><<nexttext>> +<</if>> + +:: Passout Beach Hypothermia Molest Finish +<<effects>> + +<<if $enemyarousal gte $enemyarousalmax>> + <<ejaculation>> + The <<person1>><<person>> stands up, and tosses a beach towel at you. "There, you've gotta be good and warm now. In fact, I don't think you need these anymore." <<stealclothes "strip">> <<He>> leaves, taking your clothes with <<him>>. + <br><br> + You shiver, but at least you're warm enough to move now. + <<clotheson>> + <<endcombat>> + <<if $leftarm is "bound" and $rightarm is "bound">> + Unable to cover yourself, you sprint to the safety of a changing room as fast as you can. + <<garousal>><<gstress>><<gtrauma>><<stress 6>><<trauma 6>><<arousal 600>><<fameexhibitionism 30>> + <br><br> + <<link [[Changing room|Changing Room]]>><<endevent>><</link>> + <<else>> + <<if $exposed gte 2>> + You cover your body with your hands and sprint to the safety of a changing room. + <<fameexhibitionism 20>><<garousal>><<arousal 600>> + <br><br> + <<link [[Changing room|Changing Room]]>><<endevent>><</link>> + <<else>> + You sprint to the safety of a changing room as fast as you can. + <<garousal>><<arousal 300>><<fameexhibitionism 10>> + <br><br> + <<link [[Changing room|Changing Room]]>><<endevent>><</link>> + <</if>> + <</if>> +<<elseif $enemyhealth lte 0>> + The <<person1>><<person>> lets out a cry of pain and releases you. <<stealclothes "strip">> <<He>> stands up, bunching your clothes under <<his>> arm, and kicks you as <<he>> leaves. <<gpain>><<pain 3>> + <br><br> + You shiver, but you're warm enough to move now. + <<clotheson>> + <<endcombat>> + <<if $leftarm is "bound" and $rightarm is "bound">> + Unable to cover yourself, you sprint to the safety of a changing room as fast as you can. + <<garousal>><<gstress>><<gtrauma>><<stress 6>><<trauma 6>><<arousal 600>><<fameexhibitionism 30>> + <br><br> + <<link [[Changing room|Changing Room]]>><<endevent>><</link>> + <<else>> + <<if $exposed gte 2>> + You cover your body with your hands and sprint to the safety of a changing room. + <<fameexhibitionism 20>><<garousal>><<arousal 600>> + <br><br> + <<link [[Changing room|Changing Room]]>><<endevent>><</link>> + <<else>> + You sprint to the safety of a changing room as fast as you can. + <<garousal>><<arousal 300>><<fameexhibitionism 10>> + <br><br> + <<link [[Changing room|Changing Room]]>><<endevent>><</link>> + <</if>> + <</if>> +<<else>> + The lifeguard shouts at the <<person1>><<person>>, and <<he>> quickly flees. Thankfully, <<he>> leaves your clothes on you. + <<clotheson>> + <<endcombat>> + + <<link [[Next|$safePassage]]>><<endevent>><</link>> +<</if>> +<br><br> + + + + +:: Passout Beach Hypothermia Robin +<<effects>> +<<outfitChecks>> +<<npc Robin>><<person1>> +Someone is shaking you. You open your eyes, your vision swimming. Robin kneels over you, and <<his>> voice is panicked. "I saw you just keel over, and I thought you had been drugged or something!" <<he>> says. "But you're freezing..." +<br><br> + +You apologise, but your words come out slurred. <<He>> looks even more worried. <<He>> glances once at <<his>> lemonade stand, then sighs."I guess it'll be fine if I leave it for a few minutes. I'd rather make sure you're okay." <br><br> -"We found you passed out and shivering. You caused quite the worry, but my examination found no problems. You simply got too cold." <<He>> strokes your hair. +<<He>> helps you to your feet, then guides you to the changing rooms. <<He>> checks that it's empty before tugging you inside. <<He>> sets you down on the bench and grabs a towel from the stacks on the high shelves. +<<if _fullyNaked>> + "I don't know what you were thinking, running around naked like this..." <<He>> frowns as <<he>> wraps a towel around you. <<He>> grabs a few more to cover you with. + <br><br> + + <<link [[Next|Passout Beach Hypothermia Robin End]]>><</link>> + +<<elseif $upperwetstage gte 3 or $lowerwetstage gte 3 or $underlowerwetstage gte 3 or $underupperwetstage gte 3>> + <<He>> rubs the towel across your damp skin. You get the sense that <<hes>> working hard to keep <<his>> movements gentle despite <<his>> panic. + <br><br> + + <<if isLoveInterest("Robin")>> + "I need to get these clothes off you... I won't look if you don't want me to, okay? But this is necessary." <<He>> quickly undresses you. <<He>> averts <<his>> eyes and holds out a towel. + <br><br> + + <<link [[Take the towel|Passout Beach Hypothermia Robin Towel]]>><<towelup>><</link>> + <br> + <<link [[Ask for help|Passout Beach Hypothermia Robin Help]]>><</link>><<glust>> + + <<else>> + <<His>> fingers rest on your _top.name. "Your clothes are wet...I'll be outside. Can you put a towel on? Call for me when you're done." <<He>> puts a towel next to you and steps outside. + <br><br> + + <<link [[Take the towel|Passout Beach Hypothermia Robin Towel]]>><<towelup>><</link>> + <</if>> + +<<else>> + "Wrap this around yourself, it should help you warm up a bit." It's tough moving your frigid fingers, so <<he>> wraps it around your shoulders before grabbing a few more to cover you with. + <br><br> + + <<link [[Next|Passout Beach Hypothermia Robin End]]>><</link>> +<</if>> + +:: Passout Beach Hypothermia Robin Towel +<<effects>> + +You take the towel with some difficulty, your fingers still stiff and numb. You wrap it around your body and call for Robin. <br><br> +<<link [[Next|Passout Beach Hypothermia Robin End]]>><</link>> + +:: Passout Beach Hypothermia Robin Help +<<effects>> +<<towelup>> <<if $speech_attitude is "meek">> - "Um... maybe if I had some clothes, that would help?" you whisper. + You try to reach out and grab the towel, but you don't get very far. "Robin... could you wrap it around me?" <<elseif $speech_attitude is "bratty">> - "Yeah, well, maybe I wouldn't freeze to death if you'd give me some clothes," you say. + You try to grab the towel, but your arms feel heavy. You try again before giving up. "A little help here, Robin?" <<else>> - "Can I get some clothes?" you ask. "It's too cold to go around naked like this." + You reach out to grab the towel, but your arms fail to move. "I think I'm too cold to move." <</if>> <br><br> -Remy purses <<his>> lips. "Now, now, <<girl>>, don't be silly. Cattle don't wear clothes." <<He>> strokes your hair. "You just need to get your blood pumping, that's all. I'm sure we can find a job that'll keep you plenty active. You'll warm right up, you'll see." +<<He>> looks at you, staring at your nude body for a moment before returning to <<his>> senses. <<He>> carefully wraps the towel around you. <<His>> fingers on your skin send shivers down your body. <<He>> takes notice and gives you a worried look, but you assure <<him>> it's okay. <br><br> -<<link [[Listen|Livestock Passout 2]]>><<set $phase to 0>><<livestock_obey 1>><<transform cow 1>><</link>><<gobey>> -<br> -<<link [[Push away|Livestock Passout 2]]>><<set $phase to 1>><<livestock_obey -1>><<trauma -6>><</link>><<lobey>><<ltrauma>> +<<link [[Next|Passout Beach Hypothermia Robin End]]>><</link>> + +:: Passout Beach Hypothermia Robin End +<<effects>> + +<<if C.npc.Robin.trauma gte 40>> + <<He>> pulls you into a hug, and you can tell <<hes>> working hard to keep <<his>> breathing steady. +<<elseif C.npc.Robin.dom gte 50>> + "What were you thinking?" <<he>> says, shaking <<his>> head. "What if I wasn't here?" You don't have a satisfactory answer for <<him>>. <<He>> sighs and wraps one arm around you. +<<else>> + "You should be more careful. This kind of stuff is serious." <<He>> wraps an arm around your shoulders, rubbing your cold skin. +<</if>> +<br><br> + +You stay like this for some time, then <<he>> stands back up. +<<if C.npc.Robin.trauma gte 40>> + <<His>> mouth hangs open for a moment, as if <<he>> wants to say something else. <<He>> quickly wraps <<his>> arms around you, squeezing tight. "I... I need to get back to it. Stay dry and warm. I'll see you soon, right?" <<he>> asks. You give <<him>> a smile and nod. +<<else>> + "I need to get back to my stand now," <<he>> says, though <<he>> sounds like <<he>>'d rather stay with you. "I'm glad you're not hurt. Stay safe, okay? Go put something warm and dry on!" +<</if>> +<br><br> + +<<link [[Next|$safePassage]]>><<endevent>><</link>> + +:: Passout Bird Heatstroke +<<set $location to "tower">><<setTowerTemp>><<effects>> +<<npc "Great Hawk">><<person1>> +<<outfitChecks>> + +There's a slab of stone nearby that you could keep your clothes on. +<<if !_fullyNaked>> + <<if _bottom>><<set _bottom.integrity -= 5>><</if>> + <<if _top>><<set _top.integrity -=5>><</if>> + <br><br> + You realise you're half naked, and your clothes are being pulled off by <<your_bird_text>>. <<bHe>> uses <<bhis>> <<if $monster is 0>>beak and<</if>> talons to pull at the fabric of your clothes, attempting to undress you. + <br><br> + <<if $monster is 1>> + "<<Wife>>'s awake! Helping <<wife>> cool down." + <<else>> + <<your_bird_text "cap">> seems relieved when <<bhe>> notices you're awake. + <</if>> + Soon, <<bhe>> succeeds in taking the last garment off of your body. + <<if _top.integrity lte 0 or _bottom.integrity lte 0>> + <<integritycheck>><<exposure>> + You're too fatigued from the heat to even be mad at <<bhim>>. + <br><br> + <</if>> + <br><br> + <<bHe>> seems proud of <<bhimself>>, despite the damage <<bhes>> caused to your clothes. +<</if>> +<br><br> +<<if $monster is 1>> + "Come." <<your_bird_text "cap">> tilts <<bhis>> head towards the rainwater pool. "Bath helps." +<<else>> + <<your_bird_text "cap">> tilts <<bhis>> head towards the rainwater pool, beckoning you to join <<bhim>>. +<</if>> +<br><br> +As you both submerge in the cool water, <<if Weather.temperature gte 20>>finding relief from the warm air<<else>>and your body temperature starts to lower<</if>>, <<bhe>> dips <<bhis>> <<= $monster is 1 ? "mouth" : "beak">> into the pool, taking in refreshing sips of water. +<<if $monster is 1>> + "Drink water," <<bhe>> encourages, "you will feel better." +<<else>> + <<bHe>> pauses, glancing at you expectantly. +<</if>> +You're suddenly acutely aware of your dry mouth, and you cup your hands and bring the cool liquid to your lips. The refreshing taste water soothes your parched throat, providing much-needed hydration after the ordeal of the heatstroke. <<stress -3>><<lstress>> +<br><br> + +The Great Hawk opens <<bhis>> <<= $monster is 1 ? "mouth" : "beak">> slightly and takes quick, shallow breaths. +<<if understandsBirdBehaviour()>> + Understanding <<bhis>> cue, you follow suit. +<<else>> + You stare at <<bhim>> blankly, confused, until <<bhe>> gives a frustrated chirp, and it clicks. "Oh!" You try panting too. +<</if>> +You're not sure how effective panting is to cool off, but it seems to please <<bhim>>. +<br><br> + +<<link [[Next|Passout Bird Heatstroke Fluff]]>><<pass 5>><</link>> + +:: Passout Bird Heatstroke Fluff +<<effects>> + +Following <<your_bird_text>>'s lead, you mimic <<bhis>> panting technique, taking quick, shallow breaths to cool off. The rhythm of your panting matches <<bhis>> as you both continue to soak in the refreshing water of the rainwater pool, though you feel quite silly doing so. <<bHe>> flaps <<bhis>> wings conscientiously in an attempt to blow cool air on you. +<br><br> + +After the refreshing bath, <<bhe>> guides you out and to the perch. <<bHe>> shakes off the excess water from <<bhis>> sleek feathers, and they poof up. <<if $harpy gte 6>>Following <<bhis>> lead, you do the same.<</if>> In one fluid motion, <<bhe>> spreads <<bhis>> wings wide, catching a gentle breeze that rustles through the moor. +<br><br> + +<<if $monster is 1>> + "Feel the breeze," <<bhe>> says softly, turning to you. "Soothing after the heat." +<<else>> + <<bHe>> turns to you and trills softly. +<</if>> +<br><br> + +You spread your <<= $harpy gte 6 ? "wings" : "arms">> wide, feeling the cool wind against your skin. The rustling leaves and the distant sound of flowing water create a tranquil atmosphere, allowing you to relax fully in the embrace of nature. <<ltrauma>><<trauma -3>> +<br><br> + +<<link [[Next|Passout Bird Heatstroke End]]>><<pass 5>><</link>> + +:: Passout Bird Heatstroke End +<<effects>> + +<<if $harpy gte 6>> + <<your_bird_text "cap">> delicately preens your feathers with precision and care. With gentle strokes, <<bhe>> runs <<bhis>> talons over your skin, smoothing down each feather and removing any debris or tangles. <<bHis>> touch is soothing as <<bhe>> tends to your plumage. +<<else>> + <<your_bird_text "cap">> preens you despite your lack of feathers. With gentle strokes, <<bhe>> runs <<bhis>> talons over your skin, applying just the right amount of pressure to stimulate circulation. Though unconventional, <<bhis>> gesture is soothing, even without feathers to groom. +<</if>> +<br><br> + +<<if $monster is 1>> + <<bHe>> looks you over and nods. "Glad <<wife>> is well now," <<bhe>> proclaims. "Well is good! Sun can be very hot. <<Wife>> should be careful next time. Come to nest when tired." +<<else>> + <<bHe>> looks you over and chirps, eyes brightening with apparent relief as <<bhe>> sees you well again. +<</if>> +<br><br> + +<<bHe>> draws you closer, <<bhis>> wings tightening around you for a moment before releasing you, giving you space to recover at your own pace. <<if $monster is 1>>"Rest well, <<wife>>. I will return with a gift." <</if>><<bHe>> spreads <<bhis>> wings, and launches from the tower. +<br><br> +<<set $bird.timer to random(30, 60)>> +<<set $bird.state to "hunting">> + +<<link [[Next|Bird Tower Perch]]>><<endevent>><</link>> + +:: Passout Bird Hypothermia +<<set $location to "tower">><<setTowerTemp>> +<<npc "Great Hawk">><<person1>> +<<set _eggs to Object.values($children).find(child => (child.type is "hawk" and child.location is "tower" and child.eggTimer))>> +<<outfitChecks>> +<<if _bottom>><<set _bottom.integrity -=5>><<set _damagedClothes to _bottom.name>><</if>> +<<if _top>><<set _top.integrity -= 5>><<set _damagedClothes to _top.name>><</if>> +<<integritycheck "no_text">><<strip>><<exposure>> +<<if $harpy gte 6 and (($transformationParts.bird.wings isnot "hidden") or ($transformationParts.bird.plumage isnot "hidden"))>><<set _feathered to true>><</if>> + +You awaken in the Great Hawk's nest, naked but warm. You stir, <<= _eggs ? "careful not to disturb the actual eggs in the nest" : "letting <<bhim>> know you're awake">>. +<br><br> + +<<if $monster is 1>> + "<<Wife>>'s awake!" <<your_bird_text>> says, sounding relieved. "Helping <<wife>> get warm. Stay close to me. Must keep warm," <<bhe>> says firmly, pressing <<bhis>> body against yours. <<bHe>> wraps <<bhis>> arms and wings around you, holding you securely. <<bHis>> body and soft feathers radiate warmth. +<<else>> + <<your_bird_text "cap">> seems relieved when <<bhe>> notices you, but <<bhe>> doesn't move, save for wrapping <<bhis>> wings around you. Perhaps <<bhe>> wants to keep you warm. +<</if>> +You allow your breathing to still, relaxing into the comfort of <<bhis>> warm body. +<br><br> + +After a few minutes, <<bhe>> gets off of you. <<if $monster is 1>>"Wait here," <<bhe>> says.<</if>> +<<if $bird.materials.fabric gte 1>> + <<bHe>> quickly fetches some of the fabric you've collected so far and dumps it on your lap. +<<else>> + <<bHe>> quickly flies outside and returns with some fabric, dumping it on your lap. +<</if>> +<<if _damagedClothes>> + <span class="purple">You're pretty sure the scraps of fabric are from your _damagedClothes.</span> You spot the remainder of your clothes in a pile. You're still too numb from the cold to even get mad about it. +<<elseif !_fullyNaked>> + You allow the Great Hawk to pull the fabric over your body. You spot a pile of your clothes, which are looking worse for the wear. Fortunately, it looks like they're still intact. +<</if>> + + +<<if $monster is 1>> + <<if _feathered>> + <<your_bird_text "cap">> gives you a once-over. "<<Wife>> seems to have summer plumage, too thin and fragile for cold weather. Perhaps I should provide a substitute." + <br><br> + + <<if C.npc["Great Hawk"].dom gte 50>> + <<bHe>> suddenly pulls you into <<bhis>> arms, offering you <<bhis>> warmth. "Maybe <<wife>> should stay beneath my wings until shivering has passed," <<bhe>> suggests lightly, <<bhis>> voice playful. + <<else>> + "May I hug <<wife>>? <<Wife>> should stay close to me until shivering has passed." <<bHe>> gently takes you into <<bhis>> arms, offering you <<bhis>> warmth. + <</if>> + <<else>> + <<if C.npc["Great Hawk"].dom gte 50>> + "<<= either("Featherless", "Landbound", "Wingless")>> little thing like you is bound to get cold. Come, let me help you keep warm," <<bhe>> remarks. + <<else>> + "<<Wife>> doesn't have feathers to keep <<pher>> warm, now does <<pshe>>?" <<bhe>> remarks with an amused smile. "I'll simply hug <<pher>> until <<pshes>> all warmed up." <<bHe>> gently takes you into <<bhis>> arms, offering you <<bhis>> warmth. + <</if>> + <</if>> +<<else>> + <<your_bird_text "cap">> hops towards you and gives you a once-over. <<bHe>><<= _feathered ? "pecks at your plumage" : "pokes around you with <<bhis>> beak">> before <<= C.npc["Great Hawk"].dom gte 50 ? "suddenly" : "gently">> wrapping <<bhis>> wings around you and nuzzling close. +<</if>> +<br><br> + +<<bHe>> puffs out <<bhis>> plumage, allowing them to settle into a fluffier silhouette. +<<if understandsBirdBehaviour()>>You realise that <<bhe>> must be trapping air in the feathers. You smile when <<bhe>> confirms it by saying, "<</if>><<= _feathered ? "<<Wife>> should do the same. Keep air in feathers for warmth." : "Poor landbound <<wife>>, can't keep air in feathers for warmth.">>" +<<if _feathered>> + You follow suit, fluffing up your plumage. +<<elseif !understandsBirdBehaviour()>> + <<gscience>><<scienceskill>> +<</if>> +<br><br> +<<link [[Next|Passout Bird Hypothermia 2]]>><</link>> + +:: Passout Bird Hypothermia 2 +<<effects>> + +<<if $bird.upgrades.firepit gte 1>> + As <<bhe>> holds you close, <<bhe>> guides you closer to the firepit. + <<if !getBirdBurnTime()>> + <<bHe>> looks apologetically at you, then casts <<bhis>> gaze on the unlit firepit. <<if $monster is 1>>"Don't know how to make wood burn. Sorry, <<wife>>."<</if>> You crouch down in front of the firepit and start a fire. It warms you up. + <<else>> + The fire's lit, and it warms you. <<if $monster is 1>>"Still cold?" <<bhe>> asks, pulling you onto <<bhis>> lap.<</if>> + <br><br> + + <<= $monster is 1 ? "You reply by touching <<bhis>> bare skin" : "You snuggle close to <<your_bird_text>> and touch <<bhis>> face">> with your cold hands. It gets a "squawk" out of <<bhim>>, and you <<if $speech_attitude is "meek">>giggle<<elseif $speech_attitude is "bratty">>laugh<<else>>chuckle<</if>>. + <</if>> + <<if $monster is 1>> + <<if C.npc["Great Hawk"].dom gte 50>> + "<<Wife>> is a mischievous one." <<bHe>> chuckles, hugging you tighter. + <<else>> + "<<Wife>> sure likes to jest. I don't mind." <<bhe>> chuckles, hugging you tighter. + <</if>> + You card your fingers through <<bhis>> soft plumage to warm them up. + <<else>> + <<bHe>> stirs slightly and folds <<bhis>> wings around you. + <</if>> +<<else>> + As <<bhe>> holds you close, <<bhe>> guides you back to the nest. You wish there was a firepit to warm you up. +<</if>> + +<br><br> + +<<link [[Kiss|Passout Bird Hypothermia Thank]]>><<set $phase to 1>><</link>><<kissvirginitywarning>> +<br> +<<link [[Thank|Passout Bird Hypothermia Thank]]>><<set $phase to 0>><</link>> + +:: Passout Bird Hypothermia Thank +<<effects>> + +<<if $phase is 1>> + You lean in close to <<your_bird_text>>. <<bHe>> turns <<bhis>> head towards you and nuzzles against your cheek. <<He>> <<= $monster is 1 ? "presses <<bhis>> lips to yours" : "pecks <<bhis>> beak against your lips">>. You return the <<= $monster is 1 ? "kiss, twining your arms around <<bhis>> neck" : "peck, peppering <<bhis>> face with small kisses">>. <<takeKissVirginity "Great Hawk" "loveInterest">> +<<else>> + <<if $speech_attitude is "meek">> + "Th-thank you for saving me," you say, giving <<bhim>> a shy smile. + <<elseif $speech_attitude is "bratty">> + "Thanks for saving my ass, featherhead." You grin at <<bhim>>. + <<else>> + "Thank you," you say, smiling at <<bhim>>. + <</if>> +<</if>> + +The Great Hawk <<= $monster is 1 ? "beams" : "perks up">> at that, and <<bhe>> releases you. +<<if $monster is 1>> + "Glad <<wife>> is well now," <<bhe>> proclaims. "Well is good! <<Wife>> should be careful next time. Come to nest when cold." + <br><br> + <<bHe>> stands up, giving you space to recover at your own pace. "Rest well, <<wife>>. Will return soon with food. Food keeps belly full and warm!" <<bHe>> spreads <<bhis>> wings, and launches from the tower. +<<else>> + <<bHe>> looks you over and chirps, eyes bright and shiny. <<bHe>> hops away, then spreads <<bhis>> wings and launches from the tower. +<</if>> +<br><br> + +<<link [[Next (0:30)|Passout Bird Hypothermia End]]>><<pass 30>><</link>> + +:: Passout Bird Hypothermia End +<<effects>> + +You rest in the nest, conserving your strength while the Great Hawk hunts. By the time <<bhe>> returns, you're feeling better, and significantly warmer. <<your_bird_text "cap">> carries a <<if $bird.hunts.lurkers is true>>lurker<<else>>strange, leathery and many-limbed creature<</if>> in <<bhis>> <<if $monster is 1>>talons<<else>>mouth<</if>>. +<<if $monster is 1>> + <<if playerIsPregnant() and getPregnancyObject().fetus[0].type is "hawk" and playerBellyVisible() and talkedAboutPregnancy("pc","Great Hawk") and !$daily.birdPregFeed>> + <<set $daily.birdPregFeed to true>> + <<bHe>> doesn't take a bite for <<bhimself>>, instead offering the whole thing to you. + "<<print either( + "For you and children.", + "Children must be nourished too.", + "Keep your strength up.", + "They eat eggs, but now they nourish our children.", + "Food for you, food for growing hawks in belly.", + "Great Hawk hunts well.", + "Fresh kill. Should go down easy." + )>>" + <<else>> + <<bHe>> dumps it at your feet, then tears out a chunk of flesh. <<bHe>> hungrily rips into the meat with <<bhis>> teeth. + "<<print either( + "Common prey here. Their meat is soft.", + "It won't bite. Promise.", + "You can eat by yourself, yes? I don't need to feed you like baby bird?", + "Nasty creatures, but nourishing.", + "Keep your strength up.", + "They're egg eaters, don't feel bad for them.", + "Food for you.", + "Great Hawk hunts well.", + "Fresh kill. Should go down easy." + )>>" + <</if>> +<<else>> + <<bHe>> dumps it at your feet, then tears out a chunk of flesh. <<bHe>> holds <<bhis>> head back as <<bhe>> swallows the meat whole. +<</if>> +<<bHe>> looks at you, waiting for a response. +<<if $bird.hunts.lurkers is true and $bird.upgrades.rack gte 1>> + <span class="blue">Its hide is too damaged to use it for anything.</span> It looks the Great Hawk would rather you eat it to regain your strength, anyway. +<</if>> +<br><br> + +<<link [[Eat|Bird Tower Lurker]]>><<hunger -2000>><<bird_loot lurker 5>><<trauma -6>><<transform bird 1>><<npcincr "Great Hawk" love 1>><<bird_stockholm 1>><</link>><<gbirdstockholm>><<glove>><<ltrauma>> +<br> +<<link [[Scold|Bird Tower Lurker Scold]]>><<bird_loot lurker -20>><<transform bird 1>><<npcincr "Great Hawk" dom -1>><<def 1>><<bird_stockholm 1>><</link>><<gbirdstockholm>><<ldom>> +<br> +<<link [[Do nothing|Bird Tower Lurker Nothing]]>><<bird_loot lurker -10>><<npcincr "Great Hawk" love -1>><</link>><<llove>> +<br> + + +:: Passout Alley Heatstroke Whitney +<<effects>><<outfitChecks>> +<<npc Whitney>><<generatey2>><<person1>> + +You wake up to cold water drenching your face. Whitney stands above you, holding an empty water bottle. +<<if $whitneyrescued>> + You feel a strange sense of deja vu. You meet Whitney's eyes and see the sentiment reflected in them for the briefest of seconds. It dissipates at the sound of hushed snickers from <<his>> friends. +<<else>> + The friends surrounding <<him>> snicker quietly. +<</if>> +<br><br> + +"Hey, slut." <<He>> smirks, crouching down. <<His>> fringe clings to <<his>> temple with sweat, and <<his>> loose tank top leaves nothing to the imagination. "You look like shit. Did the heat get to you, or did you just pass out on my turf for fun?" +<br><br> + +<<if $whitneyromance is 1 or C.npc.Whitney.love gte 12>> + <<if _top.warmth gte 7>> + <<He>> pinches your _top.name. "What the hell are you wearing this for? Fucking idiot." <<He>> takes it off and tosses it in a pile of rubbish. <<if _top is $worn.over_upper>><<overupperstrip>><<else>><<upperstrip>><</if>> "Stick to the slut dress code, and maybe this wouldn't happen." + <br><br> + <</if>> + + Whitney drags you to your feet and snatches something from <<his>> friend. It's a full bottle of water. "Hey, that's mine!" the <<person2>><<personsimple>> protests. Whitney ignores <<him>>. + <br><br> + + <<if C.npc.Whitney.dom gte 15>> + <<person1>><<He>> tips the bottle against your lips, forcing you to down the whole thing in several desperate gulps. + <<else>> + "Here," <<person1>><<he>> says, thrusting it into your hands. "Drink it. All of it." You down it all in several desperate gulps. + <</if>> + Some of it dribbles down your neck and chest. It's ice cold. + <br><br> + + Whitney looks satisfied. "If I catch you overheating like that again, I'll make you drink it out of a fucking <<if $fame.bestiality gte 100>>dog bowl<<else>>toilet<</if>>. Now fuck off and stay out of this heat." <<He>> smacks your rear before sauntering off with <<his>> friends in tow. + +<<else>> + Whitney snatches something from <<his>> friend. It's a bright <<= either ("red","blue")>> slush drink. "Hey, that's mine!" the <<person2>><<personsimple>> protests, but Whitney ignores <<him>>. <span class="red"><<person1>><<He>> upends the entire cup over you, soaking your hair.<<if $ruffledisable is "t">> Your hairgel is no match for the sticky drink.<<set $ruffledisable to "f">><<ruffleHair>><</if>></span> It seeps down your torso, <<if waterproofCheck(_top)>> and runs off the slick surface of your _top.name<<else>>and soaks through your _top.name<</if>>. <<His>> friends whistle and jeer. <<npcincr Whitney dom 2>><<gdom>><<gstress>><<stress 3>> + <br><br> + + <<if C.npc.Whitney.lust gte 60>> + "Oops," Whitney says. "Let me help you with that." <<He>> removes your <<allTops>> and drops it on the ground. You're too dazed to stop <<him>>. <<overupperstrip>><<upperstrip>> + <<else>> + <<wet_upper>> + <</if>> + Whitney stands back to appreciate the view. "Feeling better? I know I am. Consider this your toll for passing through. Later, slut." <<He>> flicks your <<= $worn.under_upper.type.includes("naked") ? "nipple" : $worn.under_upper.name>> before sauntering off with <<his>> friends in tow. <<garousal>><<glust>><<arousal 100>><<npcincr Whitney lust 2>> + <br><br> + + You hastily <<= C.npc.Whitney.lust gte 60 ? "put your clothes back on" : "wipe off what you can of the drink">>. Maybe you should find something better to wear. +<</if>> +<<link [[Next|$safePassage]]>><<endevent>><</link>> + +:: Passout Gwylan Hot Cold +<<set $outside to 0>><<set $location to "forest_shop">><<effects>><<outfitChecks>> +<<npc Gwylan>><<person1>> + +As you slowly come to, you realise that you're in <<= $forest_shop_intro ? "the forest shop." : "a strange shop you've seen on the outskirts of the forest.">> + +<<if $forest_shop_intro is 1 or $gwylan_rescue gte 1>> + Gwylan beams at you. "Phew! Are you alright? +<<else>> + A <<personsimple>> beams at you. <<He>> looks about your age, with mousy hair and a hint of freckles. "I'm older than I look," <<he>> says, as if reading your mind. "I'm Gwylan." <<He>> reaches forward, lifts your hand, and shakes it in both <<his>> own. "Pleased to meet you. I sell-" <<he>> pauses. "My grand<<father>> sells-" another pause. "I sell knick-knacks here. Things you won't find in normal shops. Even I don't know what I have in stock!" <<He>> sounds proud. + <br><br> + + "But enough of that," <<he>> continues. "More importantly, are you alright? +<</if>> +I found you fainted outside while I was picking berries. You had me worried! <<= $forest_shop_intro is 1 ? "You're my best customer," : $gwylan_rescue gte 1 ? "We're friends," : "These woods can be dangerous,">> after all." +<br><br> + +<<He>> quickly gives you a once-over. +<<if $passoutReason is "hyperthermia">> + <<if Weather.BodyTemperature.getTotalWarmth() gte 20>> + "You might want to take some clothing items off," <<he>> observes, "if you want to avoid hyperthermia." + <<else>> + "You shouldn't exert yourself so much," <<he>> says. "Hyperthermia's serious!" + <</if>> +<<else>> + <<if Weather.BodyTemperature.getTotalWarmth() lt 20>> + "You might want to wear some more clothes," <<he>> observes, "if you want to avoid hypothermia." + <<else>> + "You shouldn't spend so much time out in the cold," <<he>> says. "Hypothermia's serious!" + <</if>> +<</if>> + +<<if $upperwetstage gte 3 or $lowerwetstage gte 3 or $underupperwetstage gte 3 or $underlowerwetstage gte 3>> + <<He>> suddenly seems to realise that your clothes are wet. <<He>> insists on drying them by the fire. Thankfully, they dry quickly. <<dry_full>> +<<elseif _shirtless or _bottomExposed>> + <<He>> suddenly seems to realise the implications of your state of dress. "Oh, clothes! You need clothes." <<He>> quickly rummages through an antique wardrobe nearby and hands you + <<if $gender_appearance is "f">> + a sundress. <<upperwear 5 "white">> + <<elseif _shirtless>> + <<upperwear 4 "tangerine">> + an orange shirt<<if _bottomExposed>> and blue shorts<<lowerwear 5 "blue">><</if>>. + <<else>> + a pair of blue shorts.<<lowerwear 5 "blue">> + <</if>> + It feels strangely nostalgic. You change into the provided clothes. + <<if $passoutReason is "hypothermia">> + "Sorry I don't have anything warmer," <<he>> says apologetically. There's a pause as you glance around the shop. "That I can give for free," <<he>> clarifies with a smile. + <</if>> +<</if>> +<br><br> + +<<if $passoutReason is "hyperthermia">> + Fetching a wooden chair, Gwylan guides you to sit down next to a running fan. "Rest here for a bit. I'll make you some tea. Cold tea, of course," <<he>> declares. <<He>> hesitates, then adds, "Unless you want hot tea instead." The thought of drinking something warm right now makes you queasy, so you agree to the iced beverage. +<<else>> + Fetching a big cushion, <<he>> guides you to sit down before the fireplace. <<He>> drapes a thick blanket over your shoulders. +<</if>> +<br><br> + +Once you're settled, <<he>> disappears into the back of the shop. You can still faintly hear some loud clinking sounds coming from that direction, which you assume is <<his>> way of brewing the tea. Perhaps <<hes>> simply a tad clumsy? +<br><br> + +<<link [[Next|Passout Gwylan Hot Cold Tea]]>><</link>> + +:: Passout Gwylan Hot Cold Tea +<<set $outside to 0>><<set $location to "forest_shop">><<effects>> + +<<He>> returns, balancing a tray laden with a variety of ingredients: several herbs, a basket of freshly washed berries and lemons, and a honey jar. Alongside them rest a knife, a ladle, a patterned tea set, and some biscuits. <<He>> carries a glass pot of hot water<<if $passoutReason is "hyperthermia">> and a container of ice cubes as well<</if>>, ready to prepare the tea. +<br><br> + +"I realised I didn't ask what kind of tea you wanted<<if $gwylanTea gte 1>> again<</if>>." <<He>> sets the tray down in front of you with an apologetic smile. "Sorry about that. Do you want berry herbal tea or lemon honey tea? <<if $passoutReason is "hyperthermia">>With or without ice?<</if>> Honey or no honey?<<if $gwylanTea gte 2>> Or Perhaps butterfly pea flower tea?<</if>>" <<He>> tilts <<his>> head to the side with each question asked. +<br><br> + +<<link [[Berry herbal tea|Passout Gwylan Hot Cold Order]]>><<set $phase to 0>><</link>> +<br> +<<link [[Lemon honey tea|Passout Gwylan Hot Cold Order]]>><<set $phase to 1>><</link>> +<br> +<<if $gwylanTea gte 1>><<link [[Butterfly pea flower tea|Passout Gwylan Hot Cold Order]]>><<set $phase to 2>><<set $gwylanTea++>><</link>><</if>> + + +:: Passout Gwylan Hot Cold Order +<<set $outside to 0>><<set $location to "forest_shop">><<effects>> +<<set $gwylanTea to $gwylanTea || 0>> + +Humming cheerfully, <<he>> begins preparing the tea to your specifications. +<<switch $phase>> + <<case 2>><<He>> steeps the delicate butterfly pea flowers in the hot water, turning it a rich shade of blue. + <<case 1>><<He>> slices the lemons, squeezing their juice into the pitcher before adding the honey. + <<default>><<He>> chops the herbs and adds them to the pot of hot water. <<He>> allows them to steep before adding a handful of fresh berries. +<</switch>> +<<if $passoutReason is "hyperthermia">><<He>> finishes by chilling the drink.<</if>> +"Here you go!" <<he>> exclaims with a smile, presenting you with your teacup and saucer. +<br><br> +<<if $phase is 2>> + <<He>> pours <<himself>> a cup of butterfly pea flower tea as well +.<<else>> + <<He>> pours <<himself>> a cup of bright blue tea. +<</if>> +<br><br> + +<<link [[Take a sip|Passout Gwylan Hot Cold Sip]]>><</link>> + +:: Passout Gwylan Hot Cold Sip +<<set $outside to 0>><<set $location to "forest_shop">><<effects>> + +You take a sip. +<<if $gwylanTea is 0>> + It's delicious. You ask about the flavour of <<his>> tea. "Oh, this? It's rather insipid. Honestly, it tastes like grass." <<He>> chuckles, sipping some more. "Unless I add other things to enhance it, like lemon or berries. It's called butterfly pea flower tea." <<He>> cocks <<his>> head at you. "You should try some next time!" + <<set $gwylanTea to 1>> +<<elseif $phase isnot 2>> + It's delicious. +<<elseif $gwylanTea is 2>> + It's different than any other kind of tea you've had before. Gwylan asks what you think of it. + <<if $speech_attitude is "meek">> + "It's a bit earthy," you mumble, timidly adding some berries to try to improve the flavour. + <<elseif $speech_attitude is "bratty">> + "It's like drinking lawn clippings," you say bluntly. You toss in a handful of berries, hoping to salvage the flavour. + <<else>> + "It tastes like grass," you remark with a shrug, adding some berries to balance the taste out. + <</if>> + <br><br> + "I'm aware it's an acquired taste," Gwylan acknowledges with a nod, sipping <<his>> tea. "I've just had enough time to get used to it, that's all. The berries should help." + + <br><br> + You give <<him>> a quizzical look, and <<he>> responds with an inscrutable smile. You shrug and take another sip. <<Hes>> right; the berries help. +<<elseif $gwylanTea is 3>> + <<if $speech_attitude is "meek">> + You take a tentative sip, trying to hide your distaste behind a forced smile. You quickly add some berries, hoping it will improve the taste. "Um, maybe this will help," you mumble softly, not wanting to offend. + <<elseif $speech_attitude is "bratty">> + "Just as bland as ever," you mutter, tossing in a handful of berries with an exaggerated sigh. + <<else>> + You nod knowingly as you take a sip. "Yep, just like I remembered," you say with a wry smile, adding some berries to temper the grassy flavour. + <</if>> + <br><br> + "I told you, didn't I? It's an acquired taste!" A chuckle escapes <<his>> lips, "The berries should help." <<Hes>> right; it tastes better this time around. + <br><br> + "How did you learn how to make this in the first place?" you ask. + <br><br> + Gwylan shrugs. "Oh, it was a long time ago. My grand<<father>> taught me how to grow and dry herbs for tea when I was young." +<<elseif $gwylanTea gte 4>> + <<if $speech_attitude is "meek">> + Even though you're well aware of its earthy flavour, you opt for the butterfly pea flower tea once again. "I-it's not exactly my favourite," you mumble. You add more berries, hoping to offset its distinct taste. + <<elseif $speech_attitude is "bratty">> + Despite knowing its taste well, you opt for the butterfly pea flower tea again, giving a dramatic roll of the eyes. "Ugh, I don't know how you can drink this stuff," you groan, begrudgingly adding some berries to temper the flavour. + <<else>> + Despite knowing its taste well, you opt for the butterfly pea flower tea again. "Yeah, it's still earthy," you say with a wry smile, adding some berries to temper the flavour. + <</if>> +<</if>> +You both enjoy the refreshing tea and biscuits. It's a peaceful moment, one that you find yourself pleasantly lost in. <<lstress>><<ltrauma>><<trauma -6>><<stress -6>> +<br><br> +"How are you feeling? Better?" <<he>> asks. +<br><br> + +<<if $speech_attitude is "meek">> + Your nod is accompanied by a shy smile. You take another sip, hiding your embarrassment behind the teacup. "Yes... T-thank you, Gwylan." +<<elseif $speech_attitude is "bratty">> + "Could be better. Thanks, I guess." You're somewhat mortified at needing to be rescued, and you feign nonchalance by taking another sip of tea. +<<else>> + "Yes, a bit. Thank you, Gwylan." You take another sip, hiding your embarrassment behind the teacup. +<</if>> +<br><br> + +"Aw, it's no big deal!" <<He>> waves <<his>> hand dismissively. "Of course I'd help you, and I'd do it again." +<br><br> + +<<link [[Next|Passout Gwylan Hot Cold End]]>><</link>> + +:: Passout Gwylan Hot Cold End +<<set $outside to 0>><<set $location to "forest_shop">><<effects>> + +You finish your tea, and Gwylan looks out the window. "Hopefully you'll fare a little better out there now. You know, <<= $passoutReason>> can be fatal, so don't die on me, alright?" +<br><br> + +You nod and wave goodbye to Gwylan before leaving the shop. +<br><br> + +<<link [[Next|Forest]]>><<set $forest to 0>><<unset $passoutReason>><</link>> + +:: Passout Wolves Hot Cold +<<set $outside to 1>><<set $location to "forest">><<effects>> +<<beastNEWinit 1 wolf>> + +Fur tickles your cheek as something warm and heavy settles on your chest. +<<if $passoutReason is "hyperthermia">> + It only takes a few moments for the heat to become unbearable, and you whimper for relief. You open your eyes. +<<else>> + Your body tingles, every nerve ending on fire as the warmth starts to return to your frozen extremities. You open your eyes. +<</if>> +<br><br> + +A <<beasttype>> looks down at you, <<bhis>> eyes <<= Time.dayState is "night" ? "glowing bright in the dark" : "sharp and alert">>. + +<<if $syndromewolves is 1 and $caveHumanPregnancyDiscovered is 1>> + <<if $wolfpackharmony gte 12>> + <<if $monster is 1>> + <<if $passoutReason is "hyperthermia">> + "No fur coat, yet <<ppackbrother>> still hot? Can't return with human cub, but stream will cool you off." + <<else>> + "<<pPackbrother>> needs fur coat. Woods cold and dark. Should come home, but can't return with human cub..." <<bHe>> gives your belly a reproachful look. "Will stay until warmer, though." + <</if>> + <<else>> + <<bHe>> looks at your belly and whimpers. You can't go back to the cave while carrying a human cub, but still, <<bhe>> seems sympathetic to your plight. + <</if>> + <<if $passoutReason is "hyperthermia">> + The <<beasttype>> climbs off you and you nudges you towards the nearby river. <<bHe>> circles you with worry, padding alongside you until you finally stumble into the running water. It's cool and refreshing. <<silently>><<water>><</silently>> <<bHe>> splashes in the water beside you until <<bhes>> sure you won't pass out again, then shakes <<bhimself>> dry. + <<else>> + <<bHe>> stays snuggled against you, sharing <<bhis>> body heat until you can finally move again. <<bHe>> climbs off you, giving your face a parting lick. + <</if>> + <<= $monster is 1 ? "\"Stay safe, <<ppackbrother>>. We miss you,\" <<bhe>> says, giving your belly one last look" : "<<bHe>> gives your face a parting lick">> before bounding off into the woods once more. + <<else>> + <<bHe>> looks at your belly and growls. + <<if $monster is 1>> + "Still with human cub? <<= $passoutReason is "hyperthermia" ? "Cool off in stream first" : "Will help warm up">>, then <<ppackbrother>> must leave." + <<else>> + You can't go back to the cave while carrying a human cub, but despite <<bhis>> clear displeasure, <<bhe>> seems sympathetic to your plight. + <</if>> + <<if $passoutReason is "hyperthermia">> + The <<beasttype>> climbs off you and you roughly nudges you towards the nearby river, until you finally stumble into the running water. It's cool and refreshing. <<silently>><<water>><</silently>> + <<else>> + The <<beasttype>> bears <<bhis>> weight down on you to the point of discomfort, but it succeeds in warming you up. When you can finally move again, <<bhe>> climbs off you and turns tail. + <</if>> + <<bHe>> bounds off into the woods without another word. + <</if>> + <br><br> + <<link [[Next|$safePassage]]>><<endevent>><</link>> + +<<elseif $syndromewolves is 1 and $wolfpacktrust gte 24 and ($monster is 1 or $bestialitydisable is "f")>> + <<if $monster is 1>> + <<if $passoutReason is "hyperthermia">> + "No fur coat, yet <<ppackbrother>> still hot? Come home, stream will cool you off." + <<else>> + "<<pPackbrother>> needs fur coat. Woods cold and dark. Come home, where cave is warm." <<bHe>> stays snuggled against you, sharing <<bhis>> body heat until you can finally move again. + <</if>> + <<else>> + <<bHe>> licks your face and whimpers with concern. + <<if $passoutReason is "hyperthermia">> + <<bHe>> bathes you with <<bhis>> tongue, diligently cleaning the sweat off your face. + <<else>> + <<bHe>> wiggles in close, enveloping you with soft fur as <<bhe>> shares <<bhis>> body heat with you. + <</if>> + <</if>> + <br><br> + <<bHe>> climbs off you and nudges you upright. Your <<= $passoutReason is "hyperthermia" ? "overheated" : "frozen">> body is weak with fatigue, and your <<= $passoutReason is "hyperthermia" ? "stomach churns with nausea" : "stiff joints ache">> as the <<beasttype>> circles you with worry. Slowly, but surely, <<bhe>> leads you through the woods to the safety of the wolf cave. + <<if $passoutReason is "hyperthermia">> + <<bHe>> urges you into the stream, where the water is cool and refreshing. <<bHe>> joins you in the water, splashing beside you, until you're done rinsing yourself. You collapse onto the bank. <<bHe>> shakes <<bhimself>> dry and lays down next to you. <<silently>><<wash>><<water>><</silently>> + <<else>> + <<bHe>> urges you into the warmth of the cave. <<bHe>> fusses over you until you sit down, and <<bhe>> shifts a pile of thatch over you in a makeshift blanket. <<bHe>> lays down next to you. + <</if>> + <br><br> + You murmur your thanks to the <<beasttype>>, and <<bhis>> tail wags at your acknowledgement. <<if $monster is 1>>"Wolf cave always open for <<ppackbrother>>," <<bhe>> replies. "Next time, come here."<</if>> + <br><br> + + <<if $passoutReason is "hyperthermia">> + <<link [[Next|Wolf Cave Clearing]]>><<endevent>><<set $eventskip to 1>><<set $wolfevent to 0>><</link>> + <<else>> + <<link [[Next|Wolf Cave]]>><<endevent>><<set $eventskip to 1>><<set $wolfevent to 0>><</link>> + <</if>> + +<<elseif $syndromewolves is 1 and ($monster is 1 or $bestialitydisable is "f")>> + <<if $monster is 1>> + "Runaway, no good," <<bhe>> says. "Should have stayed in cave. <<= $passoutReason is "hyperthermia" ? "Stream is cool there, helps with heat" : "Squishy human could use fur for warmth">>." <<bHe>> begins to drag you through the woods. + <<else>> + <<He>> growls with displeasure at you, grabs you by the scruff of the neck like you're an errant puppy, and begins to drag you through the woods. + <</if>> + <br><br> + + <<link [[Next|Wolf Cave Returned]]>><</link>> +<<elseif $monster is 1 or $bestialitydisable is "f">> + <<if $monster is 1>> + "Prey is helpless," <<bhe>> says. "Alpha will be pleased." <<bHe>> begins to drag you through the woods. + <<else>> + <<bHe>> growls lowly, grabs you by the scruff of the neck like you're an errant puppy, and begins to drag you through the woods. + <</if>> + <br><br> + + <<link [[Next|Forest Wolf Cave Intro]]>><</link>> +<<else>> + <<bHe>> climbs off you and tries to grab you by the scruff of the neck. Despite your state, you manage to twist out of its reach at the last second. You run away from <<bhim>> as fast as you can. + <<if $passoutReason is "hyperthermia">> + You splash through a stream in your haste, which cools you off, at least. <<silently>><<water>><</silently>> + <<else>> + The physical exertion warms you slightly, at least.<<athletics 1>> + <</if>> + <<beastescape>> + <br><br> + + <<link [[Next|Forest]]>><<endevent>><</link>> + <br> +<</if>> + +:: Passout Heatstroke Kiss +<<effects>><<generate1>><<generate2>><<person1>> + +You come to when you feel someone patting your cheek to rouse you. "Hey, wake up, <<girl>>," a <<person1>><<person>> says. You can only groan weakly, eyes fluttering but unable to remain open. +<br><br> + +"<<pShe>> looks flushed," a <<person2>><<person>> says. "Think the heat got to <<phim>>?" +<br><br> + +<<if Weather.BodyTemperature.getTotalWarmth() gte 25>> + "Maybe. Look how much <<pshes>> wearing." +<<else>> + "Maybe, yeah." +<</if>> +The <<person1>><<person>> takes out an informational pamphlet meant for tourists and begins fanning you with it. "Should I give <<phim>> mouth to mouth?" +<br><br> + +"You don't give mouth to mouth for heatstroke, idiot." +<br><br> + +"So? <<pShes>> cute as fuck. Besides, when in Rome..." <<He>> leans down to kiss you. +<br><br> + +<<link [[Stop <<him>>|Passout Heatstroke Kiss End]]>><<set $phase to 0>><</link>> +<br> +<<link [[Let it happen|Passout Heatstroke Kiss End]]>><<set $phase to 1>><<trauma 6>><<stress 6>><</link>><<kissvirginitywarning>><<gtrauma>><<gstress>> +<br> +<<if $promiscuity gte 15>> + <<link [[Make out|Passout Heatstroke Kiss End]]>><<set $phase to 2>><</link>><<promiscuous2>><<kissvirginitywarning>> +<</if>> +:: Passout Heatstroke Kiss End +<<effects>> + +<<if $phase is 0>> + <<if $speech_attitude is "meek">> + You find the strength to scramble out from underneath the <<person>>. "H-hey, wait, I-I'm awake!" The <<personsimple>> seems defeated, but backs off. + <<elseif $speech_attitude is "bratty">> + You find the strength to slap the <<person>> and scramble out from under <<him>>. "Get off of me, pervert!" The <<personsimple>> rubs <<his>> cheek, scowling. + <<else>> + "Whoa, hang on," you say, finding the strength to scramble out from under the <<person>>. "I'm not okay with that." The <<personsimple>> seems defeated, but backs off. + <</if>> + <br><br> + "<<= $NPCList[0].pronoun is "m" ? "Man" : "Girl">>, even in this town, you just can't catch a break, huh?" the <<person2>><<person>> laughs to <<his>> friend. + <br><br> + "<<= $NPCList[1].pronoun is "m" ? "Dude" : "Girl">>, shut up." <<person1>><<He>> gives you a scornful look before standing up. "Come on, let's go." They walk off together, leaving you be. + +<<elseif $phase is 1>> + You lie still, and the <<person1>><<person>> presses <<his>> lips to yours. <<= either("<<His>> tongue tries to worm its way unpleasantly into your mouth.", "They're chapped and rough, the sensation not unlike kissing sandpaper.")>><<takeKissVirginity $NPCList[0] rape>> <br><br> + <<He>> pulls away after a few moments. "Wow, the <<girls>> in this town are amazing. That was the best kiss I've ever had." + <br><br> + "<<pShes>> barely conscious, mate." + <br><br> + "I said what I said." <<He>> hesitates, but rejoins <<his>> friend. "Come on, let's go before <<pshe>> wakes up all the way." They walk off together, leaving you mostly unscathed. + +<<else>> + You wait until you feel <<his>> weight over you to throw your arms around <<his>> neck, drawing <<him>> into a deep kiss. Your enthusiasm startles the <<person>>, but <<he>> responds in kind. You moan softly and allow your hands to roam along <<his>> body.<<takeKissVirginity $NPCList[0] "consensual">> + <br><br> + "Woo, get it, mate!" the <<person2>><<person>> hoots. + <br><br> + <<person1>><<He>> pulls away after a few moments, breathless and bewildered. "Holy shit," <<he>> says. + <br><br> + <<if $speech_attitude is "meek">> + "Th-thank you for finding me," you say with a coy twirl of your hair. "I feel much better." + <<elseif $speech_attitude is "bratty">> + "Yeah? Not bad yourself, lover<<= $NPCList[0].pronoun is "m" ? "boy" : "girl">>," you tease. "I'm feeling much better now." + <<else>> + "That was nice," you say sweetly. "I feel a lot better. Thank you." + <</if>> + <br><br> + Now overcome with nerves, the <<person>> stumbles over <<his>> words. "O-of course! Yeah, uh, n-no problem." <<He>> scrambles over to <<his>> friend. "Did you see that? They weren't kidding about this town," <<he>> whispers as <<he>> drags <<his>> friend off, leaving you be. +<</if>> +<br><br> +Soaked in sweat and still somewhat weak, you climb to your feet. Maybe you should try finding a way to cool down. +<br><br> +<<link [[Next|$safePassage]]>><<endevent>><</link>> diff --git a/game/base-system/widgets.twee b/game/base-system/widgets.twee index 1d839d8520..2d41c2bd6a 100644 --- a/game/base-system/widgets.twee +++ b/game/base-system/widgets.twee @@ -2129,7 +2129,7 @@ <<if $worn.lower.exposed gte 2 and $worn.over_lower.exposed gte 2>> <<if $possessed>> - <<elseif $worn.under_lower.exposed gte 1 and !$worn.legs.type.includes("covered")>> + <<elseif $worn.under_lower.exposed gte 1>> <<set $exposed to 2>> <<elseif $libertine gte 1 or $worn.under_lower.type.includes("covered")>> <<else>> @@ -2151,7 +2151,7 @@ <<if $worn.over_upper.integrity lte 0>> <<set $worn.over_upper.type.push("broken")>> <<if _args[0] isnot "no_text">> - <span class="lewd">Your $worn.over_upper.name <<upperplural>> ripped into scraps<<if $worn.upper.exposed gte 2>>, exposing your <<undertop>><</if>>.</span> + <span class="lewd">Your $worn.over_upper.name <<overupperplural>> ripped into scraps<<if $worn.upper.exposed gte 2>>, exposing your <<undertop>><</if>>.</span> <br> <</if>> <<overupperruined>><<clothesruinstat>><<if $worn.upper.exposed gte 2>><<set $upperoff to 0>><</if>> @@ -2356,6 +2356,9 @@ <<widget "water">> <<set _inWater to true>> + <<if !waterproofCheck($worn.over_upper) and !$worn.over_upper.type.includes("naked") and _args[0] isnot "waist">> + <<set $upperwet to 200>> + <</if>> <<if !waterproofCheck($worn.upper) and !$worn.upper.type.includes("naked") and _args[0] isnot "waist">> <<set $upperwet to 200>> <</if>> diff --git a/game/overworld-forest/loc-bog/main.twee b/game/overworld-forest/loc-bog/main.twee index 891dcd1c26..6168012e45 100644 --- a/game/overworld-forest/loc-bog/main.twee +++ b/game/overworld-forest/loc-bog/main.twee @@ -476,7 +476,7 @@ You grab the vine with both hands and take a step back, ready to make a running <<water>> <<link [[Next|Bog]]>><<set $bogwater to 1>><</link>> - <br> + <br> <</if>> @@ -611,7 +611,7 @@ Naturally, I had to secure you to make sure you were safe." The vines around you <<tearful>> you gather yourself. <<clotheson>> <<endcombat>> - <<link [[Next|Bog]]>><<set $eventskip to 1>><</link>> + <<link [[Next|Bog]]>><<set $eventskip to 1>><</link>> <</if>> :: Bog Passout diff --git a/game/overworld-forest/loc-forest/events.twee b/game/overworld-forest/loc-forest/events.twee index 38284810bf..35f2a22f3d 100644 --- a/game/overworld-forest/loc-forest/events.twee +++ b/game/overworld-forest/loc-forest/events.twee @@ -157,11 +157,20 @@ You drop to your knees, and search beneath the decaying roots. :: Forest Wolf Cave Intro <<set $outside to 0>><<set $location to "wolf_cave">><<effects>> -<<npc "Black Wolf">> -<<if $monster is 1>> +<<if $passoutReason>> + <<npc "Black Wolf" 2>> + In the throes of <<= $passoutReason>>, you're helpless to resist as the <<beasttype 0>> drags you through the forest to a cave. <<bHe 0>> presents you to the alpha, a monstrous black <<beasttype 1>>. + <<if $monster is 1>> + Tufts of thick black hair cover a nude, towering body from head to toe. <<bHe 1>> growls as <<bhe 1>> addresses you. "My home. Your home, if pack accepts." <<bHe 1>> deposits you on a pile of thatch, before stepping back. + <<else>> + <<bHe 1>> sniffs around your body, still <<= $passoutReason is "hypothermia" ? "frozen from the cold" : "drenched with sweat from the heat">>, before stepping back. + <</if>> +<<elseif $monster is 1>> + <<npc "Black Wolf">> <<bHe>> effortlessly sprints through the forest, and before long arrives at a cave. "My home. Your home, if pack accepts." <<bHe>> enters the cave and lays you down on a pile of thatch, before stepping back. <<else>> + <<npc "Black Wolf">> The wolf effortlessly bounds through the forest, and before long arrives at a cave, which <<bhe>> enters without slowing. <<bHe>> dumps you on the cold stone. <</if>> Six pairs of eyes stare at you through the dim light. The pack advances on you. diff --git a/game/overworld-plains/loc-bird/main.twee b/game/overworld-plains/loc-bird/main.twee index 95688b9f22..f26fe44d5a 100644 --- a/game/overworld-plains/loc-bird/main.twee +++ b/game/overworld-plains/loc-bird/main.twee @@ -447,7 +447,7 @@ You remain still. The <<beasttype>> watches you a moment longer, then <<else>> The <<beasttype>> approaches. <</if>> -<<bHe>> <<if $phase is 0>>swoops<<else>>leaps<</if>> towards you, talons extended. <<bHis>> eyes pierce yours. <span class="red">Terror threatens to root you to the spot.</span> +<<bHe>> <<= $phase is 1 ? "leaps" : "swoops">> towards you, talons extended. <<bHis>> eyes pierce yours. <span class="red">Terror threatens to root you to the spot.</span> <br><br> <<if $stress gte $stressmax>> <span class="red">It's all too much.</span> You collapse, and the last thing you can feel is the <<beasttype>>'s talons closing around your shoulders. @@ -463,6 +463,10 @@ You remain still. The <<beasttype>> watches you a moment longer, then <span class="red">You can't bring yourself to move.</span><<ggstress>><<stress 24>> <<set $phase to 1>> <br> + <<elseif $passoutReason>> + <span class="red">You're too <<= $passoutReason is "hypothermia" ? "cold" : "weak">> to move.</span><<ggstress>><<stress 24>> + <<set $phase to 1>> + <br> <<else>> <<link [[Get out of the way|Bird Rescue No Syndrome Dodge]]>><<unset $phase>><</link>><<willpowerdifficulty `(1+(2*$pain))` `(300+(2*$pain))`>><<athleticsdifficulty `(200+(2*$pain))` `(400+(2*$pain))`>> <<set $phase to 2>> @@ -944,13 +948,13 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, <<if $bird.upgrades.decor gte 3>> With lots of light coming from the firepit, your trophies shine pleasingly. <<else>> - The bright light of the firepit reaches all around the tower. + The bright light of the firepit reaches all around the tower. <</if>> <<elseif getBirdBurnTime() gt 360>> <<if $bird.upgrades.decor gte 3>> The bright light of the firepit makes your trophies shine nicely. <<else>> - The flames of the firepit greatly illuminate the tower. + The flames of the firepit greatly illuminate the tower. <</if>> <<elseif getBirdBurnTime() gt 180>> The burning firepit illuminates the tower. @@ -988,7 +992,7 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, <<npc "Great Hawk">> <<if _movedToTower and _readyToHatch>> <<set _eggIcon to $eggsMoved.length>> - <span class="blue">You gently place your egg<<if $eggsMoved.length gte 2>>s<</if>> in your nest.</span> You feel a sense of relief at seeing <<if $eggsMoved.length gte 2>>them<<else>>it<</if>> safe. <<if $bird.upgrades.nest gte 2>>You bunch up the fabric to keep <<if $eggsMoved.length gte 2>>them<<else>>it<</if>> cozy.<</if>> <<Number $eggsMoved.length>> <<mooricon "eggs">> fertilised bird egg<<if $eggsMoved.length gte 2>>s have<<else>> has<</if>> been moved to the nest. + <span class="blue">You gently place your egg<<if $eggsMoved.length gte 2>>s<</if>> in your nest.</span> You feel a sense of relief at seeing <<if $eggsMoved.length gte 2>>them<<else>>it<</if>> safe. <<if $bird.upgrades.nest gte 2>>You bunch up the fabric to keep <<if $eggsMoved.length gte 2>>them<<else>>it<</if>> cozy.<</if>> <<Number $eggsMoved.length>> <<birdicon "eggs">> fertilised bird egg<<if $eggsMoved.length gte 2>>s have<<else>> has<</if>> been moved to the nest. <br><br> <<if $eggsMoved.includesAny($eggsHatched)>> @@ -1021,11 +1025,11 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, <</if>> <</if>> <br><br> - + <<link [[Next (0:30)|Bird Tower Hatching]]>><<bird_pass 30>><</link>> <<else>> <<set _eggIcon to $eggsMoved.length>> - <span class="blue">You gently place your egg<<if $eggsMoved.length gte 2>>s<</if>> in your nest.</span> You feel a sense of relief at seeing <<if $eggsMoved.length gte 2>>them<<else>>it<</if>> safe. <<if $bird.upgrades.nest gte 2>>You bunch up the fabric to keep them cozy.<</if>> <<Number $eggsMoved.length>> <<mooricon "eggs">> fertilised bird egg<<if $eggsMoved.length gte 2>>s have<<else>> has<</if>> been moved to the nest. <<bird_stockholm 3>><<ggbirdstockholm>> + <span class="blue">You gently place your egg<<if $eggsMoved.length gte 2>>s<</if>> in your nest.</span> You feel a sense of relief at seeing <<if $eggsMoved.length gte 2>>them<<else>>it<</if>> safe. <<if $bird.upgrades.nest gte 2>>You bunch up the fabric to keep them cozy.<</if>> <<Number $eggsMoved.length>> <<birdicon "eggs">> fertilised bird egg<<if $eggsMoved.length gte 2>>s have<<else>> has<</if>> been moved to the nest. <<bird_stockholm 3>><<ggbirdstockholm>> <br><br> <<if $bird.state is "home">> @@ -1064,7 +1068,7 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, <</if>> <<set $syndromebird to 1>> <<unset $birdescaped>> - <<run delete $bird.syndrome>> + <<run delete $bird.syndrome>> <br><br> <</if>> <<else>> @@ -1111,7 +1115,7 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, <</if>> <<set $syndromebird to 1>> <<unset $birdescaped>> - <<run delete $bird.syndrome>> + <<run delete $bird.syndrome>> <br><br> <</if>> <<run delete $bird.eggReact>> @@ -1202,7 +1206,7 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, <<bHe>> turns to look at you. "Did <<wife>> do something to the water? It's warm now," <<bhe>> says. You tell <<bhim>> you found a way to heat the water. <<bHe>> looks surprised. "<<Wife>> can do that? Incredible." <<bHe>> marvels at your feat of ingenuity. <<else>> <<bHe>> looks at you and tilts his head. You tell <<bhim>> you found a way to heat the water. The <<beasttype>> stares at you in awe, likely wondering how it's possible. - <</if>> + <</if>> <br><br> <<bHe>> steps into the water and shudders, likely feeling hot water for the first time. <<bHe>> seems a bit tense at first, but quickly warms up to the idea of a warm bath. @@ -1214,7 +1218,7 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, You leave <<bhim>> to enjoy the water. <<npcincr "Great Hawk" love 1>><<glove>> <br><br> - <<link [[Next|Bird Tower]]>><<endevent>><</link>> + <<link [[Next|Bird Tower]]>><<endevent>><</link>> <br> <<elseif $bird.state is "home" and $bird.activity is "bathe" and $bird.upgrades.pot gte 3 and getBirdBurnTime() is 0 and !$bird.heat_unknown and !$daily.birdHeatRequest and Weather.temperature lte 15 and !$possessed>> <<set $daily.birdHeatRequest to true>> @@ -1227,7 +1231,7 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, <</if>> <br><br> - <<mooricon "wood">> + <<birdicon "wood">> <<if $bird.materials.wood is 0>> <span class="red">No wood to add.</span> <<else>> @@ -1242,7 +1246,7 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, <</link>><<glove>><<note `"+ " + getTimeString(240)` `"green"`>> <</if>> <br> - <<mooricon "sticks">> + <<birdicon "sticks">> <<if $bird.materials.sticks is 0>> <span class="red">No sticks to add.</span> <<else>> @@ -1404,7 +1408,7 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, <</if>> <br> <<if $syndromebird and $lurkers_held gte 1 and $bird.state is "home" and $bird.activity is "build">> - <<mooricon "lurkers_netted">><<link "Give <<bhim>> your captured lurker" "Bird Tower Give Captured Lurker">><</link>><<glove>> + <<birdicon "lurkers_netted">><<link "Give <<bhim>> your captured lurker" "Bird Tower Give Captured Lurker">><</link>><<glove>> <br> <</if>> <<if $estate_fence is "quest" and $syndromebird is 1 and $bird.state is "home" and $bird.activity isnot "sleep">> @@ -1441,7 +1445,7 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, <</if>> <</if>> - <<mooricon "perch">><<link [[Approach the perch|Bird Tower Perch]]>><</link>> + <<birdicon "perch">><<link [[Approach the perch|Bird Tower Perch]]>><</link>> <br> <<if $syndromebird isnot 1>> <<crimeicon "mark">><<link [[Look out the tower (0:05)|Bird Tower Look]]>><<bird_pass 5>><</link>> @@ -1449,11 +1453,11 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, <<investigateicon>><<link [[Search for materials (1:00)|Bird Tower Search]]>><<bird_pass 60>><</link>> <br> <</if>> - <<mooricon "rainwater">><<link [[Sit by the rainwater pool|Bird Tower Rainwater Pool]]>><</link>> + <<birdicon "rainwater">><<link [[Sit by the rainwater pool|Bird Tower Rainwater Pool]]>><</link>> <br> <<if $syndromebird is 1 and !($leftarm is "bound" or $rightarm is "bound" or $feetuse is "bound")>> <<if $bird.upgrades.firepit gte 1>> - <<mooricon "firepit">><<link [[Examine the firepit|Bird Tower Firepit]]>><</link>><<if getBirdBurnTime()>> | <span class="orange"><<firepitTime>></span><</if>> + <<birdicon "firepit">><<link [[Examine the firepit|Bird Tower Firepit]]>><</link>><<if getBirdBurnTime()>> | <span class="orange"><<firepitTime>></span><</if>> <br> <</if>> <</if>> @@ -1500,24 +1504,24 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, <</if>> <br> - <<mooricon "nest">><<link [[Sleep in the nest|Bird Tower Bed]]>><</link>> + <<birdicon "nest">><<link [[Sleep in the nest|Bird Tower Bed]]>><</link>> <br> <<if Object.values($children).find(child => (child.type is "hawk" and child.location is "tower" and child.eggTimer))>> <<set _eggIcon to Object.values($children).filter(child => child.location is "tower" and child.eggTimer).length>> <<if _eggIcon gte 2>> - <<mooricon "eggs">><<link [[Brood on your eggs (0:30)|Bird Tower Brood]]>><<set $phase to 1>><<transform bird 1>><<trauma -3>><</link>><<ltrauma>> + <<birdicon "eggs">><<link [[Brood on your eggs (0:30)|Bird Tower Brood]]>><<set $phase to 1>><<transform bird 1>><<trauma -3>><</link>><<ltrauma>> <br> <<else>> - <<mooricon "eggs">><<link [[Brood on your egg (0:30)|Bird Tower Brood]]>><<set $phase to 1>><<transform bird 1>><<trauma -3>><</link>><<ltrauma>> + <<birdicon "eggs">><<link [[Brood on your egg (0:30)|Bird Tower Brood]]>><<set $phase to 1>><<transform bird 1>><<trauma -3>><</link>><<ltrauma>> <br> <</if>> <</if>> <<if Object.values($children).find(child => (child.type is "hawk" and child.location is "tower" and child.eggTimer is undefined))>> <<set _childrenTotal to Object.values($children).filter(child => child.location is "tower" and child.eggTimer is undefined).length>> <<if _childrenTotal gte 2>> - <<mooricon "children">><<link [[Check on your children|Childrens Home]]>><<set $exitPassage to $passage>><</link>> + <<birdicon "children">><<link [[Check on your children|Childrens Home]]>><<set $exitPassage to $passage>><</link>> <<else>> - <<mooricon "children">><<link [[Check on your child|Childrens Home]]>><<set $exitPassage to $passage>><</link>> + <<birdicon "children">><<link [[Check on your child|Childrens Home]]>><<set $exitPassage to $passage>><</link>> <</if>> <br> <</if>> @@ -1526,7 +1530,7 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, <br> <</if>> <<if $bird.upgrades.wardrobe is 1>> - <<mooricon "wardrobe">><<link [[Wardrobe|Bird Tower Wardrobe]]>><</link>> + <<birdicon "wardrobe">><<link [[Wardrobe|Bird Tower Wardrobe]]>><</link>> <br> <<else>> <<if $bird.duster is true>> @@ -1542,18 +1546,18 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, <</if>> <<if $bird.upgrades.mirror is 1>> <<if $nextPassageCheck is "Bird Tower Mirror">> - <span class="nextLink"><<mooricon "mirror">><<link [[Mirror|Bird Tower Mirror]]>><<preMirror>><</link>></span> + <span class="nextLink"><<birdicon "mirror">><<link [[Mirror|Bird Tower Mirror]]>><<preMirror>><</link>></span> <<else>> - <<mooricon "mirror">><<link [[Mirror|Bird Tower Mirror]]>><<preMirror>><</link>> + <<birdicon "mirror">><<link [[Mirror|Bird Tower Mirror]]>><<preMirror>><</link>> <</if>> <br> <</if>> <br> <<if $bird.lock is 1>> - <<mooricon "trapdoor">><<link [[Examine the trap door (0:05)|Bird Tower Door]]>><<bird_pass 5>><</link>> + <<birdicon "trapdoor">><<link [[Examine the trap door (0:05)|Bird Tower Door]]>><<bird_pass 5>><</link>> <br> <<else>> - <<mooricon "trapdoor">><<link [[Enter the trap door (0:05)|Bird Tower Base Descend]]>><<bird_pass 5>><</link>> + <<birdicon "trapdoor">><<link [[Enter the trap door (0:05)|Bird Tower Base Descend]]>><<bird_pass 5>><</link>> <br> <</if>> <<if $syndromebird is 1>> @@ -1625,7 +1629,7 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, "Is <<wife>> feeling hurt? Did something happen?" <<bhe>> asks. <<else>> <<bHe>> chirps <<if understandsBirdBehaviour()>>softly <</if>>at you. - <</if>> + <</if>> <br><br> The <<beasttype>> starts approaching you <<if understandsBirdBehaviour()>>cautiously<<else>>slowly<</if>>. @@ -1682,7 +1686,7 @@ You are inside <<if $syndromebird is 1>>your tower<<else>>a ruined tower<</if>>, You stand up and try to get out of the nest. The <<beasttype>> does not stop you. <</if>> <<else>> - You back up to the other side of the nest. + You back up to the other side of the nest. <<if $speech_attitude is "meek">> "P-Please don't hurt me," you whimper. <<elseif $speech_attitude is "bratty">> @@ -1750,10 +1754,10 @@ You're still unable to move, which allows the <<beasttype>> to keep comforting y <<else>> You have conflicting feelings about the forced affection being given to you. When you finally regain control of yourself, you push the <<beasttype>> away from you. <<bHe>> stumbles to the other side of the nest. <<if $monster is 1>> - "<<Wife>> wants to be alone now, I understand," <<bhe>> says. + "<<Wife>> wants to be alone now, I understand," <<bhe>> says. <<else>> <<bHe>> chirps softly. - <</if>> + <</if>> You stand up and try to get out of the nest. The <<beasttype>> does not stop you. <</if>> <br><br> @@ -1769,7 +1773,7 @@ You're still unable to move, which allows the <<beasttype>> to keep comforting y :: Bird Tower Passout Syndrome <<setTowerTemp>><<effects>> <<if $phase is 0>> - You get up and hug him. + You get up and hug him. <<if $speech_attitude is "meek">>"Thank you for caring about me so much. But I'm alright," you say. <<elseif $speech_attitude is "bratty">> "You don't have to be so worried, silly," you say. <<else>>"I really am fine. Thanks for making sure though," you say. @@ -1792,7 +1796,7 @@ You're still unable to move, which allows the <<beasttype>> to keep comforting y <<bHe>> chirps one more time. <</if>> You smile at <<bhim>>, then step out of the nest. -<<else>> +<<else>> <<if $speech_attitude is "meek">>"I-I'm fine, really," you say as you stand up. <<elseif $speech_attitude is "bratty">>"I already told you, I'm fine," you say as you stand up. <<else>>"I'm alright," you say as you stand up. @@ -1891,7 +1895,7 @@ You are in the base of the ruined tower, deep in the moor. There's a slit in the <<if $bird.mirror_unknown is 1>> A mirror stands in the middle of the room, covered by a dusty sheet. <br><br> - <<mooricon "mirror">><<link [[Carry the mirror upstairs (0:15)|Bird Tower Base Carry]]>><<set $bird.upgrades.mirror to 1>><<bird_pass 15>><<tiredness 3>><</link>> + <<birdicon "mirror">><<link [[Carry the mirror upstairs (0:15)|Bird Tower Base Carry]]>><<set $bird.upgrades.mirror to 1>><<bird_pass 15>><<tiredness 3>><</link>> <br> <<else>> A tall piece of furniture stands in the middle of the room, covered by a dusty sheet. @@ -2918,10 +2922,10 @@ You sit by the rainwater pool. <br> <<if $daily.birdWash is undefined>> <<if $syndromebird gte 1>> - <<mooricon "preen">><<link [[Preen your spouse (0:15)|Bird Tower Bathe Preen]]>><<npcincr "Great Hawk" love 1>><<bird_pass 15>><</link>><<glove>><<deviant1>> + <<birdicon "preen">><<link [[Preen your spouse (0:15)|Bird Tower Bathe Preen]]>><<npcincr "Great Hawk" love 1>><<bird_pass 15>><</link>><<glove>><<deviant1>> <br> <<else>> - <<mooricon "preen">><<link [[Help the Great Hawk preen (0:15)|Bird Tower Bathe Preen]]>><<npcincr "Great Hawk" love 1>><<bird_stockholm 1>><<bird_pass 15>><</link>><<glove>><<gbirdstockholm>><<deviant1>> + <<birdicon "preen">><<link [[Help the Great Hawk preen (0:15)|Bird Tower Bathe Preen]]>><<npcincr "Great Hawk" love 1>><<bird_stockholm 1>><<bird_pass 15>><</link>><<glove>><<gbirdstockholm>><<deviant1>> <br> <</if>> <</if>> @@ -3006,15 +3010,15 @@ You sit by the rainwater pool. <br> <<elseif $bird.syndrome gte 15 and $syndromebird isnot 1>> <<npc "Great Hawk">> - You awaken, warm and comfy. The <<beasttype>> lays beside you, eyes closed, shielding you from the elements with <<bhis>> wing. <<bHis>> presence makes you feel safe and comfortable. + You awaken, warm and comfy. The <<beasttype>> lays beside you, eyes closed, shielding you from the elements with <<bhis>> wing. <<bHis>> presence makes you feel safe and comfortable. <br><br> You keep looking at <<bhim>>. You can't help but think to yourself how cute <<bhe>> looks when sleeping. You press your body against <<bhim>>. <<bHis>> feathery plumage feels very soft. <<bHe>> keeps <<bhis>> eyes closed while gently pushing back into you. You cuddle with <<bhim>> for some time. - <<if $monster is 1>> + <<if $monster is 1>> "<<Wife>>... So nice..." <<bhe>> mumbles. <<else>> <<bHe>> makes soft, happy sounds. - <</if>> + <</if>> <br><br> Eventually, you pull away from <<bhim>>. The idea of staying with the <<beasttype>> no longer seems so bad to you, despite the rough start. @@ -3745,7 +3749,7 @@ You bring your attentive touch down towards <<bhis>> groin. <<if $daily.birdSelfPreen is undefined>> <<set $daily.birdSelfPreen to 1>> - You preen your wings. It's harder doing this alone. + You preen your wings. It's harder doing this alone. <<set _featherNum to random(1,2)>> <<switch _featherNum>> <<case 1>>One of your loose feathers has fallen out. <span class="teal">You take it.</span> @@ -4110,7 +4114,7 @@ You bring your attentive touch down towards <<bhis>> groin. <br><br> <<if $bird.activity is "sing" or $bird.activity is "groom">> - <<mooricon "kiss">><<link [[Kiss|Bird Perch Monster Kiss]]>><<npcincr "Great Hawk" love 1>><</link>><<glove>><<kissvirginitywarning>><<NPCvirginitywarning "Great Hawk" "kiss">><br> + <<birdicon "kiss">><<link [[Kiss|Bird Perch Monster Kiss]]>><<npcincr "Great Hawk" love 1>><</link>><<glove>><<kissvirginitywarning>><<NPCvirginitywarning "Great Hawk" "kiss">><br> <</if>> <<bird_perch_options>> <</addinlineevent>> @@ -4159,7 +4163,7 @@ You bring your attentive touch down towards <<bhis>> groin. <<if _bodywriting_exposed gte 1 and _bodypart>> <<addinlineevent "bird_bask_bodywriting">> <<set $daily.birdBodyWriting to true>> - The <<beasttype>> lets <<bhis>> song come to a stop. You feel a persistent but careful prodding against the <<tattoo _bodypart>> on your <<bodypart _bodypart>>. + The <<beasttype>> lets <<bhis>> song come to a stop. You feel a persistent but careful prodding against the <<tattoo _bodypart>> on your <<bodypart _bodypart>>. <br><br> <<if $monster is 1>> @@ -4189,7 +4193,7 @@ You bring your attentive touch down towards <<bhis>> groin. <<if $weekly.birdRescued>> <<addinlineevent "bird_bask_rescued">> <<run delete $weekly.birdRescued>> - As you bask, your thoughts turn to your recent ordeal with + As you bask, your thoughts turn to your recent ordeal with <<if $remy_seen is "farm" or $remy_seen is "livestock" or $livestock_intro isnot undefined>> Remy's thugs out in the moor. <<else>> @@ -4226,7 +4230,7 @@ You bring your attentive touch down towards <<bhis>> groin. <</addinlineevent>> <</if>> <</if>> - + <<runeventpool>> <</if>> @@ -4254,7 +4258,7 @@ You bring your attentive touch down towards <<bhis>> groin. "It's called a tattoo, and it's permanent," you say. <</if>> <br><br> - + "Really?" the <<beasttype>> asks as <<bhe>> stops preening you to inspect your <<tattoo _bodypart>>. "<<Wife>> should be more careful. Don't let more... tat twos get on you." <<if $skin[_bodypart].special is "Great Hawk">> @@ -4264,7 +4268,7 @@ You bring your attentive touch down towards <<bhis>> groin. <<if $speech_attitude is "meek">> "It's sort of special," you say. "It means I'm yours." <<elseif $speech_attitude is "bratty">> - "Can you even read it?" you ask. "It says something about you." + "Can you even read it?" you ask. "It says something about you." <<else>> "This tattoo is special. I got it because of you," you explain. <</if>> @@ -4283,7 +4287,7 @@ You bring your attentive touch down towards <<bhis>> groin. <<if $speech_attitude is "meek">> "Sorry, but this one's special. It means I'm yours," you say. <<elseif $speech_attitude is "bratty">> - "Can you even read it?" you ask. "It says something about you." + "Can you even read it?" you ask. "It says something about you." <<else>> "This one is special. It's about you," you explain. <</if>> @@ -4969,7 +4973,7 @@ You hesitate, feeling a pang of uncertainty. Despite the <<beasttypes>> gentle e For a moment, a flicker of sadness crosses <<bhis>> eyes, <<bhis>> wings drooping slightly in disappointment. Without a word, <<bhe>> curls up in the nest. <br><br> - + <<link [[Next|Bird Tower]]>><<endevent>><</link>> <br> @@ -5002,7 +5006,7 @@ Materials: <<for _material range Object.keys($bird.materials)>> <<if _material isnot "valuables" and _material isnot "junk" and $bird.materials[_material] gte 1>> <<set _materialsMessage to true>> - <<mooricon _material>> $bird.materials[_material] + <<birdicon _material>> $bird.materials[_material] <<switch _material>> <<case "sticks">>stick<<if $bird.materials[_material] gte 2>>s<</if>> <<case "leaves">>large <<if $bird.materials[_material] gte 2>>leaves<<else>>leaf<</if>> @@ -5018,10 +5022,10 @@ Materials: <br> <</if>> <<if $lurkers_held gte 1>> - <<mooricon "lurkers_netted">><<link [[Add your netted lurker to the pile|Bird Tower Build]]>><<set $lurkers_held-->><<set $bird.materials.lurkers++>><</link>> + <<birdicon "lurkers_netted">><<link [[Add your netted lurker to the pile|Bird Tower Build]]>><<set $lurkers_held-->><<set $bird.materials.lurkers++>><</link>> <br> <<elseif $farm_stage gte 10 and $bird.materials.lurkers gte 1>> - <<mooricon "lurkers_netted">><<link [[Put a lurker in your net|Bird Tower Build]]>><<set $lurkers_held++>><<set $bird.materials.lurkers-->><</link>> + <<birdicon "lurkers_netted">><<link [[Put a lurker in your net|Bird Tower Build]]>><<set $lurkers_held++>><<set $bird.materials.lurkers-->><</link>> <br> <</if>> <br> @@ -5304,11 +5308,11 @@ You crouch down in front of the <<run delete $bird.cook_unknown>> <<npc "Great Hawk">> Your <<if $monster is 1>><<nnpc_wife "Great Hawk">><<else>>partner<</if>> walks over to your newly set up cooking pot. - + <<if $monster is 1>> "What has <<wife>> made?" <<bhe>> asks, looking over the pot. <br><br> - + You explain you'll be able to cook lurkers with the pot. "Cook? Heat makes meat unpleasant, but if <<wife>> wants to, then <<wife>> can." <<else>> <<bHe>> pokes the pot with his beak, trying to figure out what it does. You explain you'll be able to cook lurkers with the pot. <<bHe>> peeks inside the pot, then squawks dismissively. <<bHe>> does not seem to want <<bhis>> lurkers cooked. @@ -5316,7 +5320,7 @@ You crouch down in front of the Content with your explanation, <<bhe>> returns to <<bhis>> perch. <br><br> - <<link [[Next|Bird Tower Firepit]]>><<endevent>><</link>> + <<link [[Next|Bird Tower Firepit]]>><<endevent>><</link>> <br> <<elseif $bird.state is "home" and $bird.activity isnot "sleep" and $bird.upgrades.firepit gte 1 and getBirdBurnTime() gte 1 and $bird.fire_1>> <br><br> @@ -5345,7 +5349,7 @@ You crouch down in front of the "<<Wife>> has really made the fire big," <<bhe>> says. You ask if <<bhes>> still worried about it. "Not anymore, <<wife>> is keeping the fire safe." <<else>> <<bHe>> marvels at the big fire you've managed to create. Thankfully, <<bhe>> does not seem worried anymore. - <</if>> + <</if>> <br><br> <<bHe>> gets even closer to the fire and spreads his wings, taking in the warmth. <br><br> @@ -5387,7 +5391,7 @@ You crouch down in front of the :: Bird Tower Firepit Cuddle <<setTowerTemp>><<effects>> <<if $phase is 1>> - You join your <<if $monster is 1>><<nnpc_wife "Great Hawk">><<else>>partner<</if>> around the fire. <<bHe>> wraps a wing around you. You spend some time basking near the fire together. + You join your <<if $monster is 1>><<nnpc_wife "Great Hawk">><<else>>partner<</if>> around the fire. <<bHe>> wraps a wing around you. You spend some time basking near the fire together. <br><br> Many minutes pass until the Great Hawk backs away from the fire. The wing wrapped around you feels warmer now. @@ -5552,7 +5556,7 @@ You weave together salvaged clothing into a large curtain. <<if ["rest","sleep"].includes($bird.activity)>> <<your_bird_text "cap">> stirs awake. <<bHe>> watches you curiously, and ocassionally looks over your shoulder. <<else>> - The Great Hawk occasionally looks over your shoulder. + The Great Hawk occasionally looks over your shoulder. <</if>> It takes a long time, but when you're done, it's large enough to cover the entire broken wall. You use a long stick and some wood to fashion a simple opening mechanism. You show your spouse how to open it. <br><br> @@ -5802,14 +5806,14 @@ You ask your <<if $monster is 1>><<nnpc_wife "Great Hawk">><<else>>spouse<</if>> <<bHe>> considers it for a moment, then speaks. "We go." <<else>> <<bHe>> retracts <<bhis>> talons and tilts <<bhis>> head to the side, before hopping over to the perch. - <</if>> + <</if>> <<elseif $dateCount.GreatHawkCasual lte 7>> <<if $monster is 1>> "You want to fly... but not hunt?" <<bhe>> asks. <<else>> <<bHe>> turns <<bhis>> head and looks at you inquisitively. <</if>> - You tell <<bhim>> you just want to go on a relaxing flight with <<bhim>>. <<bHe>> looks delighted by your idea. <<bHe>> gets up and <<if $monster is 1>>walks<<else>>hops<</if>> over to the edge of the perch. + You tell <<bhim>> you just want to go on a relaxing flight with <<bhim>>. <<bHe>> looks delighted by your idea. <<bHe>> gets up and <<if $monster is 1>>walks<<else>>hops<</if>> over to the edge of the perch. <<else>> <<if $monster is 1>> <<bHe>> stands up. "Flying with you is always nice. I will gladly go flying with <<wife>> again," <<bhe>> says. @@ -5960,14 +5964,14 @@ Where will you fly? <<if $monster is 1>> You ask what <<bhe>> thinks of the place. <br><br> - + "It is big, lots of open space. Pleasing to look at. A lot better than the other one," <<bhe>> responds. <<else>> You wait for <<bhim>> to show some kind of reaction. <<bHe>> looks over the fields, buildings, and everything else. <<bHe>> looks intrigued. <</if>> You look over the farm for a little longer, making sure everything is in order. <br><br> - + After deciding you've seen enough, you and the <<beasttype>> fly back into the moor. <br><br> @@ -5990,7 +5994,7 @@ Where will you fly? <<if $monster is 1>> After looking around for a bit, <<bhe>> speaks. "This is a dangerous place. You should never go here, <<wife>>." <<bHe>> sounds very serious. <<else>> - <<bHe>> keeps looking over the estate while making small, aggressive chirps. <<bHe>> must really not like this place. + <<bHe>> keeps looking over the estate while making small, aggressive chirps. <<bHe>> must really not like this place. <</if>> <br><br> @@ -5998,7 +6002,7 @@ Where will you fly? <br><br> <<link [[Next|Bird Tower Casual Flight 4]]>><<bird_pass 20>><</link>> - <br> + <br> <</addinlineevent>> <</if>> @@ -6046,7 +6050,7 @@ Where will you fly? <<else>> <<bHe>> seems to like how shiny they are. <</if>> - You spend some time admiring the cars with <<bhim>>. + You spend some time admiring the cars with <<bhim>>. <br><br> Eventually, the traffic dies down. You and the <<beasttype>> fly away, and keep flying around the moor for a while. @@ -6152,7 +6156,7 @@ Where will you fly? <<your_bird_text "cap">> looks at it with interest. <<if $monster is 1>> - "Such a big place. It could work well as a nest, if there were not so many landbounds," <<bhe>> says. + "Such a big place. It could work well as a nest, if there were not so many landbounds," <<bhe>> says. <<else>> <<bHe>> seems especially interested in the upper parts of the building. Looks like <<bhe>> thinks this would be a good location for a nest, if there weren't so many people. <</if>> @@ -6170,7 +6174,7 @@ Where will you fly? <<if $monster is 1>> <<your_bird_text "cap">> speaks up. "I don't like how loud the landbound nest is. I won't go any closer to it," <<bhe>> says. <<else>> - <<your_bird_text "cap">> hears the loud sounds coming from the town and looks annoyed. <<bHe>> refuses to fly any closer to it. + <<your_bird_text "cap">> hears the loud sounds coming from the town and looks annoyed. <<bHe>> refuses to fly any closer to it. <</if>> <br><br> @@ -6254,7 +6258,7 @@ Where will you fly? <br> <<link [[Just fly|Bird Tower Casual Flight 3]]>><<set $phase2 to 2>><<npcincr "Great Hawk" dom -1>><</link>><<ldom>> <br> - <</addinlineevent>> + <</addinlineevent>> <</if>> <<runeventpool>> @@ -6272,13 +6276,13 @@ You can see the castle on the horizon. You decide to take it easy and let the wind carry you. You feel like you're floating. <<stress -3>><<lstress>> <<else>> <<if $phase2 is 1>> - The winds pick up again, - <<else>> + The winds pick up again, + <<else>> The winds are strong, <</if>> allowing you greater mobility. You take advantage of the strong current and fly around in extravagant patterns. It's hard to stay in control, but you manage. <<if $monster is 1>> - "You move gracefully," <<your_bird_text>> says. + "You move gracefully," <<your_bird_text>> says. <<else>> <<your_bird_text "cap">> watches you and squawks approvingly. <</if>> @@ -6297,7 +6301,7 @@ After flying around a little longer, you tell the <<beasttype>> you want to retu You both land back on the perch. <<if $dateCount.GreatHawkCasual lte 3>> - <<if $monster is 1>> + <<if $monster is 1>> "This was... enjoyable, though everything done with <<wife>> is. I would like to go flying with you again," <<bhe>> says. <<else>> <<bHe>> looks at you and lets out a happy screech. @@ -6448,14 +6452,14 @@ The Great Hawk dives directly towards you, talons extended. <<case "meek">>"You had me really scared back there. But it was also... exciting. How about you show me what a big, fearsome <<beasttype>> like you can really do?" you chirp. <<case "bratty">>"You really took me by surprise earlier. And it wasn't a pleasant one. You're going to properly apologise for what happened, right?" you coo, licking your lips. <<default>>"I had a lot of fun flying with you, despite how it ended. And now all that flying around really got me in the mood. How about we start the 'mating' part of this ritual now?" you say seductively. - <</switch>> + <</switch>> <<deviancy1>> <<bHe>> wastes no time, perching up on the edge of the nest. <<if $monster is 1>> "You are already my mate and <<wife>>. There's no need to court again. But it is nice," <<bhe>> says bashfully. <<else>> - The <<beasttype>> looks at you adoringly and chirps. + The <<beasttype>> looks at you adoringly and chirps. <</if>> <<bHe>> joins you in the nest. <<elseif $phase is 1>> @@ -6466,14 +6470,14 @@ The Great Hawk dives directly towards you, talons extended. <<case "meek">>"The way you and I were holding on to each other felt so... intimate. I want to feel even more of you now. Please." <<case "bratty">>"Holding on to you mid-air was really exciting. You got me really aroused. I can't wait any longer to have you." <<default>>"The way we were linked up together in the air was so intimate. It made me want to feel the rest of your body against mine." - <</switch>> + <</switch>> <br><br> <<bHe>> pulls away from you and looks you in the eyes. <<if $monster is 1>> "You do not need to say all of that now. But it does make me happy." You take <<bhim>> by the hand <<else>> - <<bHe>> looks at you with great adoration and caresses your face with <<bhis>> beak. You carefully grasp <<bhis>> wing + <<bHe>> looks at you with great adoration and caresses your face with <<bhis>> beak. You carefully grasp <<bhis>> wing <</if>> and pull <<bhim>> to the nest. <<else>> @@ -6483,16 +6487,16 @@ The Great Hawk dives directly towards you, talons extended. <<switch $speech_attitude>> <<case "meek">>"I really liked seeing you fly. And I want to see more of you." Your words are quiet, yet seductive. <<case "bratty">>"I'm feeling tired after all that flying. I think a good mating session would bring back some energy," you say in a sultry tone. - <<default>>"All that flying around really got me in the mood. You're not going to leave me all hot and bothered, right?" you ask, voice filled with arousal. + <<default>>"All that flying around really got me in the mood. You're not going to leave me all hot and bothered, right?" you ask, voice filled with arousal. <</switch>> <br><br> You can tell your words had an effect on <<bhim>>. <<if $monster is 1>> - "Anything for you," <<bhe>> responds. + "Anything for you," <<bhe>> responds. <<else>> <<bHe>> looks at you happily. - <</if>> + <</if>> <<bHe>> climbs into the nest. <</if>> <br><br> @@ -6576,7 +6580,7 @@ The Great Hawk dives directly towards you, talons extended. <<elseif $enemyhealth lte 0>> You shove the <<beasttype>> away. <<bHe>> walks out of the nest, feeling hurt. <<npcincr "Great Hawk" love -3>><<lllove>> <br><br> - + <<tearful>> you climb out of the nest. <<clotheson>> <<endcombat>> @@ -6754,7 +6758,7 @@ You look through your telescope. <<if $bogProgress gte 1>> <<addinlineevent "telescope_bog_person" 0.5>> You spot a figure in black robes far to the west. You watch them for some time, until they disappear into the bog. - <</addinlineevent>> + <</addinlineevent>> <<else>> <<addinlineevent "telescope_bog_discover" 3>> <<set $bogProgress to 1>> @@ -6769,7 +6773,7 @@ You look through your telescope. <</if>> <<if Weather.isSnow>> <<addinlineevent "telescope_snowblind" 1>> - The sun's reflection on the snow is blinding, making it difficult to see much of anything. + The sun's reflection on the snow is blinding, making it difficult to see much of anything. <</addinlineevent>> <</if>> <<addinlineevent "telescope_nothing" 1>> @@ -6856,7 +6860,7 @@ You look up to the sky. You think of its name. You suddenly feel ill. <</if>> <br><br> - + <<if $world_corruption_soft gte 50>> The antlers on the head of the charioteer begin to split as you watch. Phantasmal lines connect them to other stars, adding them to a profane whole. Antlers sprout antlers. <<else>> @@ -6869,7 +6873,7 @@ You look up to the sky. A particular constellation catches your eye. It's bright and vibrant. <<else>> A particular constellation catches your eye. It's a bit dim, but you make out the shape regardless. - <</if>> + <</if>> It roughly matches one of the more well-known ones. A figure standing tall, holding something in each hand. But there's something off about it. <br><br> @@ -6890,7 +6894,7 @@ You look up to the sky. <<if $rng gte 50>> You're easily able to recognise many of the constellations thanks to your science and history lessons. You wish you had some paper to sketch on. <<else>> - You spot and recognise some planets and other celestial bodies. It makes you feel tiny, but smart. + You spot and recognise some planets and other celestial bodies. It makes you feel tiny, but smart. <</if>> <<trauma -12>><<llltrauma>> <</if>> @@ -6986,7 +6990,7 @@ You look up to the sky. fabric of the nest, leaving small holes. <<else>> nest, crushing twigs and sticks. - <</if>> + <</if>> <<if $monster is 1>> <<bHe>> grips your arm hard. "<<if $player.gender_appearance is "m">>H...husband...<<else>>W...wife...<</if>>" <<bHe>> can't finish <<bhis>> words. <<bHe>> arches <<bhis>> back and coats your fingers with <<bhis>> juices, reaching a peak of both pleasure and pain. <</if>> @@ -7067,7 +7071,7 @@ You look up to the sky. <<bHe>> continues blustering, before flopping over in the nest. <<bHe>> must be exhausted. <</if>> <<set _eggIcon to $eggLayNumber>> - <<Number $eggLayNumber>> <<mooricon "eggs">> fertilised bird egg<<if $eggLayNumber gte 2>>s have<<else>> has<</if>> been added to the nest. + <<Number $eggLayNumber>> <<birdicon "eggs">> fertilised bird egg<<if $eggLayNumber gte 2>>s have<<else>> has<</if>> been added to the nest. <br><br> <<if $phase gte 2>> @@ -7086,12 +7090,12 @@ You look up to the sky. <</if>> <<set $syndromebird to 1>> <<unset $birdescaped>> - <<run delete $bird.syndrome>> + <<run delete $bird.syndrome>> <</if>> <br><br> <</if>> <<pregnancyFeats "Great Hawk">> - + <<if $birdEggContext is "huntReturn">> <<link [[Next|Bird Tower Great Hawk Egg Laying Hunt Finish]]>><<endNpcPregnancy "Great Hawk" "tower" "tower">><<endBirdEggLaying>><</link>> <<else>> @@ -7113,7 +7117,7 @@ You look up to the sky. <<elseif $phase gte 2 and $bird.syndrome gte 15 and $syndromebird isnot 1>> You open your mouth to speak, but the words catch in your throat. You just continue to hold <<bhim>>. <br><br> - + Would children of your own be so bad? You wonder if <<bhe>> only started producing eggs after finding what <<bhe>> considers to be a mate. You. You rest your head on the <<beasttypes>> shoulder. <i>Your <<beasttype>>,</i> you think. <<bHis>> plumage is so soft. <span class="red">It's not <<bhis>> fault. <<bHe>> only wants a mate. <br> @@ -7233,7 +7237,7 @@ You let out a short gasp as you feel <<if $eggLayNumber gte 2>><span class="lewd <<bHe>> continues blustering, before repeatedly headbutting you. <<bHe>> seems excited. <</if>> <<set _eggIcon to $eggLayNumber>> - <<Number $eggLayNumber>> <<mooricon "eggs">> fertilised bird egg<<if $eggLayNumber gte 2>>s have<<else>> has<</if>> been added to the nest. + <<Number $eggLayNumber>> <<birdicon "eggs">> fertilised bird egg<<if $eggLayNumber gte 2>>s have<<else>> has<</if>> been added to the nest. <<if $eggLayNumber gte 2>>They're quite large, and you're left wondering how they all fit inside of you to begin with.<<else>>It's quite large, and you're left wondering why passing it didn't hurt more.<</if>> <<if $syndromebird gte 1>> You're flooded with emotion. <<trauma -12>><<lltrauma>> @@ -7254,7 +7258,7 @@ You let out a short gasp as you feel <<if $eggLayNumber gte 2>><span class="lewd <</if>> <<set $syndromebird to 1>> <<unset $birdescaped>> - <<run delete $bird.syndrome>> + <<run delete $bird.syndrome>> <br><br> <</if>> <<pregnancyFeats "pc">> @@ -7313,7 +7317,7 @@ You let out a short gasp as you feel <<if $eggLayNumber gte 2>><span class="lewd <<elseif $phase is 0 and $bird.syndrome gte 15 and $syndromebird isnot 1>> You open your mouth to speak, but the words catch in your throat. You just continue to let <<bhim>> hold you. <br><br> - + Would children of your own be so bad? You wonder if you only started producing eggs after finding a mate. <<bHim>>. You rest your head on the <<beasttypes>> shoulder. <i>Your <<beasttype>>,</i> you think. <<bHis>> plumage is so soft. <span class="red">It's not <<bhis>> fault. <<bHe>> only wants a mate. <br> @@ -7357,7 +7361,7 @@ You let out a short gasp as you feel <<if $eggLayNumber gte 2>><span class="lewd <<if $monster is 1>> "<<Wife>> will do well," <<bhe>> chirps happily. <<else>> - <<bHe>> caws at you happily. + <<bHe>> caws at you happily. <</if>> <<else>> You turn away from the stone, and the Great Hawk rolls it in front of you again to demonstrate warming it. <<bHe>> tries a few more times to get your attention before giving up, visibly disappointed. @@ -7586,15 +7590,12 @@ begins to poke at the shell, but stops <<bhimself>>. <<elseif $eggsHatched.length gte 3>> <<childHis>> siblings' eggs soon breach as well, revealing very similar sights. <</if>> -<<<<<<< HEAD -======= <<bHe>> wraps a wing around you, and you snuggle into <<bhis>> plumage. <br><br> <<if $bodysize lte 1 and $monster is 1>> <<bHe>> leans over slightly and rests <<bhis>> head atop yours. <<elseif $monster isnot 1 and $bodysize gte 3>> <<bHe>> nuzzles <<bhis>> head under your chin, resting it on the front of your shoulder. <</if>>The two of you spend a minute or two like that, just enjoying being with each other. <<lstress>> <<bird_pass 15>> ->>>>>>> dev <br><br> <<if $monster is 1>> diff --git a/game/overworld-plains/loc-bird/widgets.twee b/game/overworld-plains/loc-bird/widgets.twee index e36ee3ad75..124c47acbc 100644 --- a/game/overworld-plains/loc-bird/widgets.twee +++ b/game/overworld-plains/loc-bird/widgets.twee @@ -265,7 +265,7 @@ <<else>> <<link [[Do not|Bird Tower]]>><<npcincr "Great Hawk" love -1>><<npcincr "Great Hawk" dom 1>><<endevent>><</link>><<llove>><<gdom>> <</if>> - <br> + <br> <<elseif $bird.injured is 1>> <<set $bird.injured to 0>> The <<beasttype>> rises from @@ -406,7 +406,7 @@ "Food for you, food for growing hawks in belly.", "Great Hawk hunts well.", "Fresh kill. Should go down easy." - )>>" + )>>" <<else>> <<bHe>> dumps it at your feet, then tears out a chunk of flesh. <<bHe>> hungrily rips into the meat with <<bhis>> teeth. "<<print either( @@ -618,7 +618,7 @@ <<if _noLurker>> <<link [[Next|Bird Tower]]>><<endevent>><</link>> - <br> + <br> <<else>> <<if $syndromebird is 1>> <<link [[Eat|Bird Tower Lurker]]>><<hunger -2000>><<bird_loot lurker 5>><<trauma -6>><<transform bird 1>><<npcincr "Great Hawk" love 1>><<bird_stockholm 1>><</link>><<gbirdstockholm>><<glove>><<ltrauma>> @@ -925,9 +925,9 @@ <<endevent>> <<npc "Great Hawk">> <<baskicon>><<link [[Bask (0:30)|Bird Tower Bask]]>><<bird_pass 30>><<stress -12>><<endevent>><</link>><<llstress>><br> - <<mooricon "sing">><<link [[Sing (0:30)|Bird Tower Sing]]>><<transform bird 1>><<bird_pass 30>><<trauma -3>><<endevent>><</link>><<ltrauma>><br> + <<birdicon "sing">><<link [[Sing (0:30)|Bird Tower Sing]]>><<transform bird 1>><<bird_pass 30>><<trauma -3>><<endevent>><</link>><<ltrauma>><br> <<if $daily.birdGroom is undefined and $bird.activity is "groom">> - <<mooricon "preen">><<link [[Groom (0:15)|Bird Tower Groom]]>><<bird_pass 15>><<trauma -6>><<transform bird 1>><<npcincr "Great Hawk" love 1>><<endevent>><</link>><<ltrauma>><<glove>><br> + <<birdicon "preen">><<link [[Groom (0:15)|Bird Tower Groom]]>><<bird_pass 15>><<trauma -6>><<transform bird 1>><<npcincr "Great Hawk" love 1>><<endevent>><</link>><<ltrauma>><<glove>><br> <</if>> <<if $birdFly is 1 and $bird.injured is 0 and $bird.upgrades.decor gte 1 and !$daily.birdCasualFlight>> <<if Weather.precipitation is "rain">> @@ -935,15 +935,15 @@ <<elseif $tiredness gte (C.tiredness.max / 5) * 4>> <span class="red">You're too exhausted to go on a casual flight.</span> <<else>> - <<mooricon "ask">><<link [[Ask to go flying together (1:00)|Bird Tower Casual Flight]]>><<set $daily.birdCasualFlight to true>><<tiredness 3>><<transform bird 1>><<npcincr "Great Hawk" love 1>><<endevent>><</link>><<gtiredness>><<glove>> + <<birdicon "ask">><<link [[Ask to go flying together (1:00)|Bird Tower Casual Flight]]>><<set $daily.birdCasualFlight to true>><<tiredness 3>><<transform bird 1>><<npcincr "Great Hawk" love 1>><<endevent>><</link>><<gtiredness>><<glove>> <</if>> <br> <</if>> <<if $syndromebird and $lurkers_held gte 1 and $bird.state is "home" and ["sing", "groom"].includes($bird.activity)>> - <<mooricon "lurkers_netted">><<link "Give <<bhim>> the netted lurker" "Bird Tower Give Captured Lurker">><</link>><<glove>><br> + <<birdicon "lurkers_netted">><<link "Give <<bhim>> the netted lurker" "Bird Tower Give Captured Lurker">><</link>><<glove>><br> <</if>> <<if $bird.upgrades.telescope is 1>> - <<mooricon "telescope">><<link [[Use your telescope|Bird Tower Telescope]]>><<endevent>><</link>><br> + <<birdicon "telescope">><<link [[Use your telescope|Bird Tower Telescope]]>><<endevent>><</link>><br> <</if>> <<getouticon>><<link [[Go back inside|Bird Tower]]>><<unset $birdPerch>><<endevent>><</link>> <br><br> @@ -952,7 +952,7 @@ <<endevent>> <<npc "Great Hawk">> <<baskicon>><<link [[Continue to bask (0:30)|Bird Tower Bask]]>><<bird_pass 30>><<stress -12>><<endevent>><</link>><<llstress>><br> - <<mooricon "sing">><<link [[Sing (0:30)|Bird Tower Sing]]>><<transform bird 1>><<bird_pass 30>><<trauma -3>><<endevent>><</link>><<ltrauma>><br> + <<birdicon "sing">><<link [[Sing (0:30)|Bird Tower Sing]]>><<transform bird 1>><<bird_pass 30>><<trauma -3>><<endevent>><</link>><<ltrauma>><br> <<if npcIsPregnant("Great Hawk") and talkedAboutPregnancy("Great Hawk","pc")>> <<ind>><<link "Rub <<bhis>> pregnant belly (0:30)" "Bird Tower Pregnant Belly Rub">><<transform bird 1>><<bird_pass 30>><<stress -6>><<trauma -6>><<endevent>><</link>><<llstress>><<lltrauma>><br> <</if>> @@ -962,21 +962,21 @@ <<elseif $tiredness gte (C.tiredness.max / 5) * 4>> <span class="red">You're too exhausted to go on a casual flight.</span> <<else>> - <<mooricon "ask">><<link [[Ask to go flying together (1:00)|Bird Tower Casual Flight]]>><<set $daily.birdCasualFlight to true>><<tiredness 3>><<transform bird 1>><<npcincr "Great Hawk" love 1>><<endevent>><</link>><<gtiredness>><<glove>> + <<birdicon "ask">><<link [[Ask to go flying together (1:00)|Bird Tower Casual Flight]]>><<set $daily.birdCasualFlight to true>><<tiredness 3>><<transform bird 1>><<npcincr "Great Hawk" love 1>><<endevent>><</link>><<gtiredness>><<glove>> <</if>> <br> <</if>> - <<mooricon "perch_up">><<link [[Get up|Bird Tower Perch]]>><<unset $birdBask>><<endevent>><</link>><br> + <<birdicon "perch_up">><<link [[Get up|Bird Tower Perch]]>><<unset $birdBask>><<endevent>><</link>><br> <<getouticon>><<link [[Leave|Bird Tower Bask Leave]]>><<unset $birdBask>><<unset $birdPerch>><<endevent>><</link>><br> <<else>> <<if $birdSingIntro is 1>> - <<mooricon "sing">><<link [[Sing (0:30)|Bird Tower Sing]]>><<set $birdSingAbsent to 1>><<bird_pass 30>><<trauma -2>><<endevent>><</link>><<ltrauma>><br> + <<birdicon "sing">><<link [[Sing (0:30)|Bird Tower Sing]]>><<set $birdSingAbsent to 1>><<bird_pass 30>><<trauma -2>><<endevent>><</link>><<ltrauma>><br> <</if>> <<if $harpy gte 6>> - <<mooricon "preen_self">><<link [[Preen your wings (0:30)|Bird Tower Preen Self]]>><<bird_pass 30>><<stress -2>><<endevent>><</link>><<lstress>><br> + <<birdicon "preen_self">><<link [[Preen your wings (0:30)|Bird Tower Preen Self]]>><<bird_pass 30>><<stress -2>><<endevent>><</link>><<lstress>><br> <</if>> <<if $bird.upgrades.telescope is 1>> - <<mooricon "telescope">><<link [[Use your telescope|Bird Tower Telescope]]>><<endevent>><</link>><br> + <<birdicon "telescope">><<link [[Use your telescope|Bird Tower Telescope]]>><<endevent>><</link>><br> <</if>> <<getouticon>><<link [[Go back inside|Bird Tower]]>><<unset $birdPerch>><<endevent>><</link>> <br><br> @@ -1021,7 +1021,7 @@ <br><br> <<else>> <br> - <<mooricon "fly_down">><<link [[Glide to the base of the tower (0:01)|Bird Tower Glide 2]]>><<unset $birdPerch>><<bird_pass 1>><<endevent>><</link>><<flight_text>><br> + <<birdicon "fly_down">><<link [[Glide to the base of the tower (0:01)|Bird Tower Glide 2]]>><<unset $birdPerch>><<bird_pass 1>><<endevent>><</link>><<flight_text>><br> <</if>> <<if $birdFly isnot 1 and ($bird.activity is "sing" or $bird.activity is "groom") and $bird.state is "home">> <<askicon>><<link [[Ask the Great Hawk to teach you to fly|Bird Tower Fly Intro]]>><<endevent>><</link>><<flight_text>><br> @@ -1029,7 +1029,7 @@ <br> <<flight_time_check 60>> <<if $bird.hunts.unlocked is true and ($bird.hunts.lurkers is true or $bird.hunts.materials is true or $bird.hunts.valuables is true)>> - <<mooricon "hunt">><<link [[Prepare for a hunt|Bird Hunt Start]]>><<endevent>><</link>><<flight_text>><br> + <<birdicon "hunt">><<link [[Prepare for a hunt|Bird Hunt Start]]>><<endevent>><</link>><<flight_text>><br> <br> <</if>> Fly to the... @@ -1355,7 +1355,7 @@ <br><br> <<flight_distance_check>> - <<flight_time_check _returnTime "silent">> + <<flight_time_check _returnTime "silent">> <<link [[Next (?:??)|Bird Hunt Passout]]>><<bird_pass _returnTime>><</link>> <br> <</if>> @@ -1392,7 +1392,7 @@ <<flight_distance_check>> <<flight_time_check _returnTime "silent">> <<print '<<link [[Return to the castle ('+_hoursPassed+':'+ (_minutesPassed lt 10 ? "0" : "") + _minutesPassed + ')|Bird Hunt Return]]>><<set $fatigueMod to _fatigueMod>><<set $flightTime to _flightTime>><<bird_pass _flightTime>><<endevent>><</link>>'>><<print _fatigueText>> - <br> + <br> <<else>> You return to the higher skies. <<if $bird.hunts.duo is true and $bird.hunts.timer gte 300>> @@ -1481,7 +1481,7 @@ <</if>> <<set $bird.hunts.loot.valuables[$_info] += $_amount>> <<set $bird.hunts.lootAmount += $_amount>> - <<mooricon $_info>><span class="green">$_amount $_info<<if $_amount gte 2>><<if $_info is "watch">>es<<else>>s<</if>><</if>> added.</span> + <<birdicon $_info>><span class="green">$_amount $_info<<if $_amount gte 2>><<if $_info is "watch">>es<<else>>s<</if>><</if>> added.</span> <<else>> <<run Errors.report("Invalid special loot of type; " + $_looted + " " + _args[2])>> <<exit>> @@ -1564,7 +1564,7 @@ <</if>> <<set $bird.hunts.loot[$_looted] += $_amount>> <<set $bird.hunts.lootAmount += $_amount>> - <span class="green"><<mooricon $_looted>> $_amount + <span class="green"><<birdicon $_looted>> $_amount <<switch $_looted>> <<case "tools">> toolbox @@ -1577,7 +1577,7 @@ <<case "feathers">> feather<<if $_amount gte 2>>s<</if>> <<default>> - $_looted + $_looted <</switch>> added.</span> <</if>> @@ -1693,7 +1693,7 @@ <<elseif $_lootType is "clothing">> <<shopicon "clothing">> <<else>> - <<mooricon $_lootType>> + <<birdicon $_lootType>> <</if>> <span class="green">$_tempNum</span> <<switch $_lootType>> @@ -1748,7 +1748,7 @@ <<set $_wardrobe[$_tempObjClothing.slot].push(clone($_tempObjClothing.full))>> <</if>> <</if>> - <</for>> + <</for>> <<case "valuables">> <<set $_hordeLoot += $_tempNum>> valuable item<<if $_tempNum gte 2>>s<</if>>: @@ -1758,7 +1758,7 @@ <</if>> <<set $bird.materials.valuables[$_lootValType] += $_tempNumVal>> <br> - <<mooricon $_lootValType>><span class="teal">$_tempNumVal</span> $_lootValType<<if $_lootValType is "watch" and $_tempNumVal gte 2>>es<<elseif $_tempNumVal gte 2>>s<</if>>. + <<birdicon $_lootValType>><span class="teal">$_tempNumVal</span> $_lootValType<<if $_lootValType is "watch" and $_tempNumVal gte 2>>es<<elseif $_tempNumVal gte 2>>s<</if>>. <</for>> <<default>> <</switch>> @@ -1800,6 +1800,9 @@ <<elseif npcIsPregnant("Great Hawk") and talkedAboutPregnancy("Great Hawk","pc")>> <<link [[Feed the Great Hawk a lurker|Bird Tower Hunt End Preggy Eat]]>><<set $bird.materials.lurkers -=1>><<endevent>><</link>> <br> + <<else>> + <<link [[Eat a lurker|Bird Tower Hunt End Eat]]>><<hunger -2000>><<set $bird.materials.lurkers -=1>><<endevent>><</link>> + <br> <</if>> <<if Object.values($children).find(child => (child.type is "hawk" and child.location is "tower" and child.eggTimer is undefined)) and !$daily.birdBabyFeed>> <<getChildrenIds `{location:"tower", eggTimer:undefined}`>> @@ -1834,7 +1837,7 @@ <<for _valuable, _amount range $bird.materials.valuables>> <<if _amount lt 1>><<continue>><</if>> <<set $_valuablesMessage to true>> - <<mooricon _valuable>> _amount _valuable<<if _amount gte 2>><<if _valuable is "watch">>es<<else>>s<</if>><</if>> + <<birdicon _valuable>> _amount _valuable<<if _amount gte 2>><<if _valuable is "watch">>es<<else>>s<</if>><</if>> <<capture _valuable _amount>> <<link "Take one">> <<if _valuable is "antique bullet">> @@ -1865,7 +1868,7 @@ <</for>> <<if $bird.materials.junk gt 0>> <<set $_valuablesMessage to true>> - <<mooricon "junk">> $bird.materials.junk piece<<if $bird.materials.junk gte 2>>s<</if>> of shiny junk + <<birdicon "junk">> $bird.materials.junk piece<<if $bird.materials.junk gte 2>>s<</if>> of shiny junk <br> <</if>> <<if !$_valuablesMessage>> @@ -1904,7 +1907,7 @@ <br><br> <<set $_maxTime to Math.floor($bird.firepit.maxBurnTime / 60)>> - <<mooricon "firepit">>Your firepit can burn for up to around <<print Math.floor($_maxTime / 60)>> hours. + <<birdicon "firepit">>Your firepit can burn for up to around <<print Math.floor($_maxTime / 60)>> hours. <br> <<set _maxTimeAllowed to Math.clamp($_maxTime - getBirdBurnTime(), 0, $_maxTime)>> @@ -1915,7 +1918,7 @@ <</if>> <<if $bird.materials.wood is 0>> - <<mooricon "wood">><span class="red">No wood to add.</span> + <<birdicon "wood">><span class="red">No wood to add.</span> <br> <<elseif _maxTimeAllowed gt 0>> <<set _timeWood to 240>> @@ -1926,7 +1929,7 @@ You have $bird.materials.wood piece<<if $bird.materials.wood gte 2>>s<</if>> of wood. <br> - <<mooricon "wood">><<link "Add 1 wood">> + <<birdicon "wood">><<link "Add 1 wood">> <<set $bird.materials.wood-->> <<run Cooker.addBurnTime($bird.firepit, _timeWood * 60)>> <<replace #firepitActions>><<firepitActions>><</replace>> @@ -1935,7 +1938,7 @@ <br> <<if $bird.materials.wood gte 2 and _timeWood lt _maxTimeAllowed>> <<set _timeLteMax to _timeWood * 2 lte _maxTimeAllowed>> - <<mooricon "wood">><<link "Add 2 wood">> + <<birdicon "wood">><<link "Add 2 wood">> <<set $bird.materials.wood -= 2>> <<run Cooker.addBurnTime($bird.firepit, _timeWood * 120)>> <<replace #firepitActions>><<firepitActions>><</replace>> @@ -1945,7 +1948,7 @@ <</if>> <<if $bird.materials.wood gte 3 and _timeWood * 2 lt _maxTimeAllowed>> <<set _timeLteMax to _timeWood * 3 lte _maxTimeAllowed>> - <<mooricon "wood">><<link "Add 3 wood">> + <<birdicon "wood">><<link "Add 3 wood">> <<set $bird.materials.wood -= 3>> <<run Cooker.addBurnTime($bird.firepit, _timeWood * 180)>> <<replace #firepitActions>><<firepitActions>><</replace>> @@ -1957,7 +1960,7 @@ <br> <<if $bird.materials.sticks is 0>> - <<mooricon "sticks">><span class="red">No sticks to add.</span> + <<birdicon "sticks">><span class="red">No sticks to add.</span> <br> <<elseif _maxTimeAllowed gt 0>> <<set _timeSticks to 60>> @@ -1968,7 +1971,7 @@ You have $bird.materials.sticks stick<<if $bird.materials.sticks gte 2>>s<</if>>. <br> - <<mooricon "sticks">><<link "Add 1 stick">> + <<birdicon "sticks">><<link "Add 1 stick">> <<set $bird.materials.sticks-->> <<run Cooker.addBurnTime($bird.firepit, _timeSticks * 60)>> <<replace #firepitActions>><<firepitActions>><</replace>> @@ -1977,7 +1980,7 @@ <br> <<if $bird.materials.sticks gte 3 and _timeSticks lt _maxTimeAllowed>> <<set _timeLteMax to _timeSticks * 3 lte _maxTimeAllowed>> - <<mooricon "sticks">><<link "Add 3 sticks">> + <<birdicon "sticks">><<link "Add 3 sticks">> <<set $bird.materials.sticks -= 3>> <<run Cooker.addBurnTime($bird.firepit, _timeSticks * 180)>> <<replace #firepitActions>><<firepitActions>><</replace>> @@ -1987,7 +1990,7 @@ <</if>> <<if $bird.materials.sticks gte 5 and _timeSticks * 3 lt _maxTimeAllowed>> <<set _timeLteMax to _timeSticks * 5 lte _maxTimeAllowed>> - <<mooricon "sticks">><<link "Add 5 sticks">> + <<birdicon "sticks">><<link "Add 5 sticks">> <<set $bird.materials.sticks -= 5>> <<run Cooker.addBurnTime($bird.firepit, _timeSticks * 300)>> <<replace #firepitActions>><<firepitActions>><</replace>> @@ -2011,10 +2014,10 @@ <<set $_nLurkersDrying to _lurkersDrying.length>> <<set _nLurkersReady to $bird.firepit.items.length - $_nLurkersDrying>> - <<mooricon "rack">>Your drying rack can hold up to $_rackMax lurkers. + <<birdicon "rack">>Your drying rack can hold up to $_rackMax lurkers. <br> <<if $_nLurkersDrying gte 1>> - <<mooricon "lurkers">> + <<birdicon "lurkers">> <<if $bird.firepit.items.length is $_rackMax>> <i class="blue">It is currently full,</i> drying $_nLurkersDrying lurker<<if $_nLurkersDrying gte 2>>s<</if>>. <<else>> @@ -2043,12 +2046,12 @@ <</for>> <</if>> <<else>> - <<mooricon "lurkers">>No lurkers are drying. + <<birdicon "lurkers">>No lurkers are drying. <br> <</if>> <<if $bird.firepit.items.length is $_rackMax or $_noLurkers>> <<else>> - <<mooricon "rack">><<link [[Add a lurker to the rack (0:02)|Bird Tower Firepit]]>> + <<birdicon "rack">><<link [[Add a lurker to the rack (0:02)|Bird Tower Firepit]]>> <<set $bird.materials.lurkers-->> <<run Cooker.cookItem($bird.firepit, Cooker.createItem($bird.firepit, 'lurker', true))>> <<bird_pass 2>> @@ -2056,7 +2059,7 @@ <br> <</if>> <<if $_nLurkersDrying gte 1>> - <<mooricon "rack">> + <<birdicon "rack">> <<link "Take one lurker out">> /* assumes last item is the most recently added lurker */ <<run $bird.firepit.items.pop()>> @@ -2073,22 +2076,22 @@ <br> <</if>> <<if _nLurkersReady gte 1>> - <<mooricon "lurkers">><span class="green">_nLurkersReady lurker<<if _nLurkersReady gte 2>>s are<<else>> is<</if>> ready.</span> + <<birdicon "lurkers">><span class="green">_nLurkersReady lurker<<if _nLurkersReady gte 2>>s are<<else>> is<</if>> ready.</span> <br> - <<mooricon "leather">><<link `"Take " + _nLurkersReady + " leather"`>> + <<birdicon "leather">><<link `"Take " + _nLurkersReady + " leather"`>> <<set $bird.materials.leather += _nLurkersReady>> <<set $bird.firepit.items to _lurkersDrying>> <<replace #firepitActions>><<firepitActions>><</replace>> <</link>> <<else>> - <<mooricon "lurkers">>No lurkers are ready. + <<birdicon "lurkers">>No lurkers are ready. <</if>> <br> <</if>> <br> <<if $bird.upgrades.pot gte 2 and !$_noLurkers and getBirdBurnTime() gt 0>> - <<mooricon "pot_cook">><<link [[Cook a lurker (0:15)|Bird Tower Lurker Cook]]>><<set $bird.materials.lurkers -= 1>><<bird_pass 15>><</link>> + <<birdicon "pot_cook">><<link [[Cook a lurker (0:15)|Bird Tower Lurker Cook]]>><<set $bird.materials.lurkers -= 1>><<bird_pass 15>><</link>> <br> <</if>> <br> @@ -2561,7 +2564,7 @@ <<set $_spColour to "green">> <</if>> <br> - <<mooricon $_uReq>> + <<birdicon $_uReq>> <span @class="$_spColour"> <<if ["tools", "telescope", "tarp", "pot", "mirror", "wardrobe"].includes($_uReq)>> <<print $_uReq.toUpperFirst()>> required @@ -2581,7 +2584,7 @@ <<set $_spColour to "green">> <</if>> <br> - <<mooricon $_material>> + <<birdicon $_material>> <span @class="$_spColour"> <<print $_material.toUpperFirst()>> required (<<print $bird.materials[$_material]>>/$_amtReq) @@ -2600,7 +2603,7 @@ <<set $_disableBuild to true>> <<elseif $_upgrade.clothingIndex is 12 and $bird.duster is true>> <br> - <span class="purple">You already have one of these hanging up.</span> + <span class="purple">You already have one of these hanging up.</span> <<set $_disableBuild to true>> <<elseif $bird.upgrades.wardrobe is 1 and getOwnedClothingCount($_upgrade.clothingIndex, $_upgrade.clothingSlot) gte 1>> <br> @@ -2729,7 +2732,7 @@ You awaken feeling disoriented, and feel a building pressure in your abdomen. A bestial instinct washes over you. You <<if V.transformationParts.bird.plumage isnot "hidden">>ruffle your feathers and <</if>>get on your hands and knees. You gasp lightly as <<if $_eggnant.fetus.length gte 2>><span class="lewd">$_eggnant.fetus.length fertilised bird eggs</span> pass through your $_eggnantGenital and land in your nest<<else>><span class="lewd">a fertilised bird egg</span> passes through your $_eggnantGenital and lands in your nest<</if>>. <br><br> - You're filled with a sense of maternal bliss. Your spouse will be excited. <<Number $eggLayNumber>> <<mooricon "eggs">> fertilised bird egg<<if $eggLayNumber gte 2>>s have<<else>> has<</if>> been added to the nest. + You're filled with a sense of maternal bliss. Your spouse will be excited. <<Number $eggLayNumber>> <<birdicon "eggs">> fertilised bird egg<<if $eggLayNumber gte 2>>s have<<else>> has<</if>> been added to the nest. <<if $eggLayNumber gte 2>>They're quite large, and you're left wondering how they all fit inside of you to begin with.<<else>>It's quite large, and you're left wondering why passing it didn't hurt more.<</if>> <<set $bird.eggReact to $eggLayNumber>> <<pregnancyFeats "pc">> @@ -2740,7 +2743,7 @@ You awaken feeling disoriented, and feel a building pressure in your abdomen. A bestial instinct washes over you. You <<if V.transformationParts.bird.plumage isnot "hidden">>ruffle your feathers and <</if>>get on your hands and knees. You gasp lightly as <<if $_eggnant.fetus.length gte 2>><span class="lewd">$_eggnant.fetus.length fertilised bird eggs</span> pass through your $_eggnantGenital and land on your bed<<else>><span class="lewd">a fertilised bird egg</span> passes through your $_eggnantGenital and lands on your bed<</if>>. <br><br> - You're filled with a sense of maternal bliss, as well as a nagging sense of urgency. <span class="blue">You need to bring <<if $_eggnant.fetus.length gte 2>>them<<else>>it<</if>> to your nest.</span> You pick up <<number $eggLayNumber>> <<mooricon "eggs">> fertilised bird egg<<if $eggLayNumber gte 2>>s<</if>>. + You're filled with a sense of maternal bliss, as well as a nagging sense of urgency. <span class="blue">You need to bring <<if $_eggnant.fetus.length gte 2>>them<<else>>it<</if>> to your nest.</span> You pick up <<number $eggLayNumber>> <<birdicon "eggs">> fertilised bird egg<<if $eggLayNumber gte 2>>s<</if>>. <<if $eggLayNumber gte 2>>They're quite large, and you're left wondering how they all fit inside of you to begin with.<<else>>It's quite large, and you're left wondering why passing it didn't hurt more.<</if>> /* Might be best changing the location variable here */ <<pregnancyFeats "pc">> @@ -2871,7 +2874,7 @@ <<set _child1 to _childrenIds.pluck()>> <<set _child2 to _childrenIds.pluck()>> gently lowering it into the nest. <<childname _child1>> and <<childname _child2>> both grab for it, but the Great Hawk quickly breaks off another piece, giving it to <<childname _child2>>. - + <<if _childrenTotal is 3>> <<set _child3 to _childrenIds.pluck()>> <<childselect _child3>> diff --git a/game/overworld-plains/loc-farm/main.twee b/game/overworld-plains/loc-farm/main.twee index 29fa8bc844..df273aac1d 100644 --- a/game/overworld-plains/loc-farm/main.twee +++ b/game/overworld-plains/loc-farm/main.twee @@ -362,8 +362,8 @@ Alex hauls <<himself>> over a fence with one arm, onto a field beyond. It's line "Fan of the old tales around here?" Alex smirks. "Tell the ol' bird up there to stop eating the livestock for me then?" <<He>> smiles. "I can imagine you still live in town." <<elseif $phase is 5>> "Looks like you haven't gotten your hands that dirty though," <<he>> teases. "You got townie written all over you." -<<elseif $phase is 6>> - "Didn't think a clergy member would be willing to get <<pher>> hands dirty." Alex smiles. "Guessing you are from town then." +<<elseif $phase is 6>> + "Didn't think a clergy member would be willing to get <<pher>> hands dirty." Alex smiles. "Guessing you are from town then." <<else>> "That's okay," Alex smiles. "I can tell you're from town though." <</if>> diff --git a/game/overworld-plains/loc-farm/widgets.twee b/game/overworld-plains/loc-farm/widgets.twee index dd6c914de7..9c4cf0415b 100644 --- a/game/overworld-plains/loc-farm/widgets.twee +++ b/game/overworld-plains/loc-farm/widgets.twee @@ -1971,7 +1971,7 @@ <<widget "barn_img">> <<machine_init>> - <<if _args[2]>> + <<if _args[2] and _args[2] isnot "no_pump">> <<set $_prop to _args[2]>> <<else>> <<set $_prop to "haybale">> @@ -2002,7 +2002,11 @@ <<else>> <<set _semen_img to "semen_1">> <</if>> - <<prop $_prop semen penis_pump>> + <<if _args[2] is "no_pump">> + <<prop $_prop semen>> + <<else>> + <<prop $_prop semen penis_pump>> + <</if>> <<elseif _args[0] is "breasts">> <<if _args[1] is "livestock">> <<set _barn_milk to $livestock_milk>> @@ -2028,7 +2032,11 @@ <<else>> <<set _milk_img to "milk_1">> <</if>> - <<prop $_prop milk breast_pump>> + <<if _args[2] is "no_pump">> + <<prop $_prop milk>> + <<else>> + <<prop $_prop milk breast_pump>> + <</if>> <<else>> <<if _args[1] is "livestock">> <<set _barn_semen to $livestock_semen>> @@ -2073,7 +2081,11 @@ <<else>> <<set _milk_img to "milk_1">> <</if>> + <<if _args[2] is "no_pump">> + <<prop $_prop semen milk>> + <<else>> <<prop $_prop semen penis_pump milk breast_pump>> + <</if>> <</if>> <<if $options.images is 1 and $options.combatImages is 1>> <<timed 100ms>> diff --git a/game/overworld-plains/loc-livestock/main.twee b/game/overworld-plains/loc-livestock/main.twee index c7c427931c..12e0197a71 100644 --- a/game/overworld-plains/loc-livestock/main.twee +++ b/game/overworld-plains/loc-livestock/main.twee @@ -56,18 +56,16 @@ You are in your cell in the barn. There's a bucket of what looks like clean wate <<link [[Ignore it|Eden Shout Ignore]]>><<npcincr Remy dom 1>><<set $daily.eden.farmRescue to 1>><<livestock_obey 5>><</link>><<ggobey>> <br> --> <!-- <</if>> Added the closing if here due to sugarcube being stupid, is not part of the above commented out code itself. confirmed the commented code is still not running <<set _errorCheck to "failed">>--> - <<if $livestock_obey lte 30>> - <<npc Remy>><<person1>>Remy marches over, looking you right in the eyes. "You're a problem specimen," <<he>> says, entering your cell. "So I'll handle you myself. Come here." - <br><br> + <<npc Remy>><<person1>> + Remy <<= $livestock_obey lte 30 ? "marches" : "walks">> over, looking you right in the eyes. "<<= $livestock_obey lte 30 ? "You're a problem specimen" : "I'll handle this one myself">>," <<he>> says, entering your cell. "<<if $livestock_obey lte 30>>So I'll handle you myself. <</if>>Come here." + <br><br> - <<link [[Obey|Livestock Milking Obey]]>><<npcincr Remy dom 1>><<livestock_obey 5>><</link>><<ggobey>> + <<if $livestock_obey gte 80 and C.npc.Remy.love gte 50 and random(1,100) gte 60 and !playerChastity()>> + <<link [[Obey|Livestock Milking Obey]]>><<npcincr Remy dom 1>><<livestock_obey 5>><<set $phase to 1>><</link>><<ggobey>> <br> <<link [[Refuse|Livestock Milking Refuse]]>><<npcincr Remy dom -1>><<livestock_obey -5>><</link>><<lobey>> <br> <<else>> - <<npc Remy>><<person1>>Remy walks over, looking you right in the eyes. "I'll handle this one myself," <<he>> says, entering your cell. "Come here." - <br><br> - <<link [[Obey|Livestock Milking Obey]]>><<npcincr Remy dom 1>><<livestock_obey 5>><</link>><<ggobey>> <br> <<link [[Refuse|Livestock Milking Refuse]]>><<npcincr Remy dom -1>><<livestock_obey -5>><</link>><<lobey>> @@ -301,75 +299,102 @@ It isn't long before the door to the barn opens, and the lights flicker on. Remy "Keep your arms at your side," <<he>> commands. You feel a thrill as <<his>> eyes flicker over your body. <</if>> <br><br> -You flinch as <<his>> cold hands touch your <<breasts>>. <<He>> kneads and caresses them, wearing a thoughtful expression. +<<if $phase is 1>> + <<He>> moves his hands to touch your <<= $player.perceived_breastsize lte 1 ? "chest" : "<<breasts>>">>, and you remain still at <<his>> touch. -<<if $player.breastsize gte 12>> - "These udders are the pride of the farm," <<he>> says with a satisfied squeeze. "If only the other cattle could compete." <<He>> pulls a pot of pink gel from <<his>> pocket, and pours it between <<his>> hands. Once good and wet, <<he>> presses the tips of <<his>> fingers against your chest, and rubs. A lewd warmth spreads wherever the gel touches, leaving your skin sensitive to further touching. - <<garousal>><<arousal 600 "breasts">><<ginsecurity "breasts_big">><<insecurity "breasts_big" 2>> - <br><br> - <<if playerBellyVisible() and $pregnancyspeechdisable is "f">> - Taking a look and rubbing your belly, <<he>> continues, "Maybe I should put more effort in getting my other cattle pregnant like yourself." - <br><br> + <<if $lactating is 1>> + "You're the pride of the farm," <<he>> says, massaging you. <<He>> tweaks your nipples, and you let out a surprised moo as milk leaks from your tips. "That's my <<girl>>," <<he>> laughs. + <<else>> + <<He>> kneads and massages, but nothing happens. <<He>> tweaks your nipples, and you moo in surprise, but it doesn't seem like the outcome <<he>> was hoping for. "Still nothing? I would've figured you'd start producing by now," <<he>> says with a disappointed shake of <<his>> head. <</if>> -<<elseif $player.breastsize gte 8>><<set $breastgrowthtimer to -100>> - "Not bad," <<he>> says with a squeeze. "But there's room for improvement." <<He>> pulls a pot of pink gel from <<his>> pocket, and pours it between <<his>> hands. Once good and wet, <<he>> presses the tips of <<his>> fingers against your chest, and rubs. A lewd warmth spreads wherever the gel touches, leaving your skin sensitive to further touching. - <<ggarousal>><<arousal 1800 "breasts">><<ginsecurity "breasts_big">><<insecurity "breasts_big" 1>> + + <<He>> pulls the familiar pink gel from <<his>> pocket, and begins to rub it across your body.<<garousal>><<arousal 600 "breasts">> <br><br> - <<if playerBellyVisible()>> - Taking a look and rubbing your belly, <<he>> continues, "At this rate, it shouldn't take much longer till you'll be the pride of the farm." - <br><br> - <</if>> - <<if $arousal gte $arousalmax>> - <<orgasm>> Remy seems to ignore your spasms, but there's no way <<he>> didn't notice. Your face flushes with shame as much as arousal. + + <<if $player.penisExist>> + Remy's eyes turn to your penis. <<His>> hand reaches out, giving it a quick squeeze. The touch sends a jolt through your body. <<He>> nods once in approval, then pulls the pot of purple gel from another pocket. <<He>> generously rubs it over your length, leaving it slick and tingling. + <<garousal>><<arousal 1800 "genitals">> <br><br> <</if>> -<<elseif $player.breastsize gte 6>><<set $breastgrowthtimer to -100>> - "You've got some growing to do," <<he>> says with a squeeze. "I have just the thing." <<He>> pulls a pot of pink gel from <<his>> pocket, and pours it between <<his>> hands. Once good and wet, <<he>> presses the tips of <<his>> fingers against your chest, and rubs. A lewd warmth spreads wherever the gel touches, leaving your skin sensitive to further touching. - <<ggarousal>><<arousal 1800 "breasts">> + + <<He>> reaches for your collar, then pauses. "Maybe I should do this the old fashioned way. It'll take more time, but more milk from our prized <<if $player.gender_appearance is "m">>bull<<else>>cow<</if>> would be worth it," <<he>> mutters. <br><br> - <<if playerBellyVisible()>> - Taking a look and rubbing your belly, <<he>> continues, "It's clearly helping your growth, I should do more tests on other cattle." - <br><br> - <</if>> - <<if $arousal gte $arousalmax>> - <<orgasm>> Remy seems to ignore your spasms, but there's no way <<he>> didn't notice. Your face flushes with shame as much as arousal. + + <<link [[Encourage|Livestock Handmilking]]>><</link>> + <br> + <<link [[Shake your head|Livestock Handmilking Refuse]]>><</link>> + +<<else>> + You flinch as <<his>> cold hands touch your <<breasts>>. <<He>> kneads and caresses them, wearing a thoughtful expression. + + <<if $player.breastsize gte 12>> + "These udders are the pride of the farm," <<he>> says with a satisfied squeeze. "If only the other cattle could compete." <<He>> pulls a pot of pink gel from <<his>> pocket, and pours it between <<his>> hands. Once good and wet, <<he>> presses the tips of <<his>> fingers against your chest, and rubs. A lewd warmth spreads wherever the gel touches, leaving your skin sensitive to further touching. + <<garousal>><<arousal 600 "breasts">><<ginsecurity "breasts_big">><<insecurity "breasts_big" 2>> <br><br> - <</if>> -<<elseif $player.breastsize gte 1>><<set $breastgrowthtimer to -100>> - "These won't do at all," <<he>> says with a disappointed sigh. "Fortunately I have just the thing." <<He>> pulls a pot of pink gel from <<his>> pocket, and pours it between <<his>> hands. Once good and wet, <<he>> presses the tips of <<his>> fingers against your chest, and rubs. A lewd warmth spreads wherever the gel touches, leaving your skin sensitive to further touching. - <<ggarousal>><<arousal 1800 "breasts">><<ginsecurity "breasts_small">><<insecurity "breasts_small" 1>> - <br><br> - <<if playerBellyVisible()>> - Taking a look at your belly, <<he>> questions, "Well it seems to be working? Maybe you need more assistance in other areas." + <<if playerBellyVisible() and $pregnancyspeechdisable is "f">> + Taking a look and rubbing your belly, <<he>> continues, "Maybe I should put more effort in getting my other cattle pregnant like yourself." + <br><br> + <</if>> + <<elseif $player.breastsize gte 8>><<set $breastgrowthtimer to -100>> + "Not bad," <<he>> says with a squeeze. "But there's room for improvement." <<He>> pulls a pot of pink gel from <<his>> pocket, and pours it between <<his>> hands. Once good and wet, <<he>> presses the tips of <<his>> fingers against your chest, and rubs. A lewd warmth spreads wherever the gel touches, leaving your skin sensitive to further touching. + <<ggarousal>><<arousal 1800 "breasts">><<ginsecurity "breasts_big">><<insecurity "breasts_big" 1>> <br><br> - <</if>> - <<if $arousal gte $arousalmax>> - <<orgasm>> Remy seems to ignore your spasms, but there's no way <<he>> didn't notice. Your face flushes with shame as much as arousal. + <<if playerBellyVisible()>> + Taking a look and rubbing your belly, <<he>> continues, "At this rate, it shouldn't take much longer till you'll be the pride of the farm." + <br><br> + <</if>> + <<if $arousal gte $arousalmax>> + <<orgasm>> Remy seems to ignore your spasms, but there's no way <<he>> didn't notice. Your face flushes with shame as much as arousal. + <br><br> + <</if>> + <<elseif $player.breastsize gte 6>><<set $breastgrowthtimer to -100>> + "You've got some growing to do," <<he>> says with a squeeze. "I have just the thing." <<He>> pulls a pot of pink gel from <<his>> pocket, and pours it between <<his>> hands. Once good and wet, <<he>> presses the tips of <<his>> fingers against your chest, and rubs. A lewd warmth spreads wherever the gel touches, leaving your skin sensitive to further touching. + <<ggarousal>><<arousal 1800 "breasts">> <br><br> - <</if>> -<<else>> - "There's barely anything here at all," <<he>> says with a disappointed sigh. "Fortunately I have just the thing." <<He>> pulls a pot of pink gel from <<his>> pocket, and pours it between <<his>> hands. Once good and wet, <<he>> presses the tips of <<his>> fingers against your chest, and rubs. A lewd warmth spreads wherever the gel touches, leaving your skin sensitive to further touching. - <<ggarousal>><<arousal 1800 "breasts">><<ginsecurity "breasts_tiny">><<insecurity "breasts_tiny" 1>> - <br><br> - <<if playerBellyVisible()>> - Taking a look at your belly, <<he>> questions, "This is really unusual, your breasts should at least have grown a little at this point." + <<if playerBellyVisible()>> + Taking a look and rubbing your belly, <<he>> continues, "It's clearly helping your growth, I should do more tests on other cattle." + <br><br> + <</if>> + <<if $arousal gte $arousalmax>> + <<orgasm>> Remy seems to ignore your spasms, but there's no way <<he>> didn't notice. Your face flushes with shame as much as arousal. + <br><br> + <</if>> + <<elseif $player.breastsize gte 1>><<set $breastgrowthtimer to -100>> + "These won't do at all," <<he>> says with a disappointed sigh. "Fortunately I have just the thing." <<He>> pulls a pot of pink gel from <<his>> pocket, and pours it between <<his>> hands. Once good and wet, <<he>> presses the tips of <<his>> fingers against your chest, and rubs. A lewd warmth spreads wherever the gel touches, leaving your skin sensitive to further touching. + <<ggarousal>><<arousal 1800 "breasts">><<ginsecurity "breasts_small">><<insecurity "breasts_small" 1>> <br><br> - <</if>> - <<if $arousal gte $arousalmax>> - <<orgasm>> Remy seems to ignore your spasms, but there's no way <<he>> didn't notice. Your face flushes with shame as much as arousal. + <<if playerBellyVisible()>> + Taking a look at your belly, <<he>> questions, "Well it seems to be working? Maybe you need more assistance in other areas." + <br><br> + <</if>> + <<if $arousal gte $arousalmax>> + <<orgasm>> Remy seems to ignore your spasms, but there's no way <<he>> didn't notice. Your face flushes with shame as much as arousal. + <br><br> + <</if>> + <<else>> + "There's barely anything here at all," <<he>> says with a disappointed sigh. "Fortunately I have just the thing." <<He>> pulls a pot of pink gel from <<his>> pocket, and pours it between <<his>> hands. Once good and wet, <<he>> presses the tips of <<his>> fingers against your chest, and rubs. A lewd warmth spreads wherever the gel touches, leaving your skin sensitive to further touching. + <<ggarousal>><<arousal 1800 "breasts">><<ginsecurity "breasts_tiny">><<insecurity "breasts_tiny" 1>> <br><br> + <<if playerBellyVisible()>> + Taking a look at your belly, <<he>> questions, "This is really unusual, your breasts should at least have grown a little at this point." + <br><br> + <</if>> + <<if $arousal gte $arousalmax>> + <<orgasm>> Remy seems to ignore your spasms, but there's no way <<he>> didn't notice. Your face flushes with shame as much as arousal. + <br><br> + <</if>> <</if>> -<</if>> -<<He>> withdraws <<his>> hands, leaving your chest tingling. -<br><br> + <<He>> withdraws <<his>> hands, leaving your chest tingling. + <br><br> -<<if $player.penisExist and (!playerChastity("hidden") or $genderknown.includes("Remy"))>> - <<link [[Next|Livestock Penis]]>><</link>> - <br> -<<else>> - <<link [[Next|Livestock Lactate]]>><</link>> - <br> + <<if $player.penisExist and (!playerChastity("hidden") or $genderknown.includes("Remy"))>> + <<link [[Next|Livestock Penis]]>><</link>> + <br> + <<else>> + <<link [[Next|Livestock Lactate]]>><</link>> + <br> + <</if>> <</if>> :: Livestock Penis @@ -560,6 +585,129 @@ Remy kneels, <<his>> eyes level with your <<penis>>. <<link [[Next|Livestock Lactate]]>><</link>> <br> +:: Livestock Handmilking +<<effects>> + +You nuzzle up to Remy, and <<he>> smiles. "I think you know I've got a soft spot for you," <<he>> chuckles. +"Alright, get down, <<girl>>," <<he>> commands. You drop to your hands and knees, and <<he>> brings a large bucket over to you, placing it beneath you. +<br><br> + +<<He>> pulls up a stool and brings <<his>> hands to your nipple. <<He>> presses your breasts inward, before lightly squeezing. + +<<if $milk_amount gte 1 and $lactating gte 1>> + <<set $livestock_milk to $milk_amount>><<set $milk_produced_stat += Math.trunc($milk_amount)>> + Milk leaks from your tips, slowly draining into the bucket underneath you. <<garousal>><<arousal 300 "breasts">> + <br><br> + + The pleasure builds as Remy continues to fondle your breasts, until you can no longer bear it. You give a low moo as you reach your peak. <<orgasm>><<silently>><<orgasm>><</silently>> + + Remy gives a pleased hum and continues <<his>> ministrations, forcing your body toward another <<if _deniedOrgasm>>ruined <</if>>orgasm, then another. <<orgasm>><<orgasm>> +<<else>> + <<set $livestock_milk to 0>> + <<He>> plays with your nipples, hoping to coax out milk, but nothing leaks out. <<He>> clicks his tongue, but continues trying. The pleasure builds as Remy persistently fondles your <<breasts>>, and the warm, tingling sensation of the gel tips you over the edge. You give a low moo as you reach your peak. <<orgasm>><<silently>><<orgasm>><</silently>> + <br><br> + + Remy gives a neutral hum. You can't tell if <<hes>> pleased with your orgasm, or disappointed at the lack of milk produced. <<He>> continues <<his>> ministrations nonetheless, forcing your body toward another <<if _deniedOrgasm>>ruined <</if>>orgasm, then another. <<orgasm>><<silently>><<orgasm>><</silently>> +<</if>> + +<<if $player.penisExist>> + <<set $livestock_semen to $semen_amount>> + <<= $lactating is 1 ? ($livestock_milk gt 0 ? "Once <<hes>> coaxed out the last bit of milk, <<he>> moves the bucket over" : "\"That's disappointing,\" <<he>> mutters. \"Let's hope we have better luck here.\" <<He>> moves the bucket over") : "<<He>> adjusts the bucket so it's beneath your groin">>. <<He>> takes you into both hands, <<= $player.penissize lt 1 ? "fondling" : "pumping">> your shaft while massaging the base of your cock. <<orgasm>> + + <<His>> firm, steady strokes and the warm, tingling sensation of the gel brings you to climax again, and again. <<orgasm>><<orgasm>> + + <<if $femaleclimax or _deniedOrgasm>> + <<unset $livestock_semen>> + Despite Remy's best efforts, no semen is collected as you have multiple <<if _deniedOrgasm>>ruined <</if>>orgasms. Remy frowns. <<if $livestock_milk gte 100>>"Well, no matter," <<he>> mutters. "At least we got something."<</if>> <<He>> gives your cock another <<= $player.penissize lt 0 ? "squeeze" : "stroke">> in one last attempt to coax some cum out. + <<else>> + You ejaculate into the bucket with a low moo as the repeated orgasms wrack your body. You catch a glimpse of Remy's face. <<He>> looks pleased with <<his>> handiwork. + <</if>> + <br><br> + + <<barn_img penis no_livestock no_pump>> +<<else>> + <<barn_img breasts no_livestock no_pump>> +<</if>> +<br><br> + +<<link [[Next|Livestock Handmilking End]]>><</link>> + +:: Livestock Handmilking End +<<effects>> +<<if $livestock_milk is undefined>><<set $livestock_milk to 0>><</if>> +<<if $livestock_semen is undefined>><<set $livestock_semen to 0>><</if>> +<<set $fluid_forced_stat += ($livestock_milk + $livestock_semen)>> + +<<pass 180>> +<<endevent>> +<<npc Remy>><<person1>> +You stay on all fours for what feels like forever, until Remy finally stands up. You slump forward, exhausted from holding the same position. Remy picks up the bucket + +<<if $livestock_milk + $livestock_semen gte 5000>><<earnFeat "Pride of the Farm">> + <<npcincr Remy love 3>> + and smiles at the <span class="green">vast</span> quantity of white fluid. "You truly are the pride of our farm." <<He>> pets <<= $cow gte 2 and $transformationParts.cow.horns isnot "hidden" ? "the base of your horns" : "your head">> fondly. "There's no other <<if $player.gender_appearance is "m">>bull<<else>>cow<</if>> like you. Good <<girl>>." + <<gglove>> + +<<elseif $livestock_milk + $livestock_semen gte 3000>> + <<npcincr Remy love 2>> + and smiles at the <span class="teal">great</span> quantity of white fluid. "You're a very good <<girl>>," <<he>> says. <<He>> rubs <<= $cow gte 2 and $transformationParts.cow.horns isnot "hidden" ? "the base of your horns" : "your head">>. "We're lucky to have you in our herd." + <<glove>> + +<<elseif $livestock_milk + $livestock_semen gte 1000>> + <<npcincr Remy love 1>> + and smiles at the <span class="lblue">large</span> quantity of white fluid. "Excellent." <<He>> pats your head. "Our herd wouldn't be the same without you in it." + <<glove>> + +<<elseif $livestock_milk + $livestock_semen gte 500>> + and nods at the <span class="blue">decent</span> amount of white fluid. "Very good. I suppose that was worth the time spent milking you myself." + +<<elseif $livestock_milk + $livestock_semen gte 300>> + and nods at the <span class="purple">small</span> amount of white fluid. "Good, though I know you can do better." <<He>> looks tired from the time spent tending to you. "Otherwise, it's not worth all that time spent taking care of you myself." + +<<elseif $livestock_milk + $livestock_semen gte 100>> + and sighs at the <span class="pink">tiny</span> amount of white fluid in front of <<him>>. "I expected better than that, with all thet time spent taking care of you myself." + +<<elseif $livestock_milk + $livestock_semen gte 1>> + and frowns at the <span class="red">dribble</span> of white fluid in front of <<him>>. "Pitiable. All that time, and barely anything to show for it." + +<<else>> + and frowns down at it. "All that for nothing." <<He>> gives a weary sigh. "What a waste of time. But don't worry, <<girl>>. <<if $fluid_forced_stat gte 1000>>I'm confident we can get your productivity back up there.<<else>>I'm not sure why you have such a hard time producing milk, but I'm confident we'll get there<</if>>. You'll be a valuable member of our herd, if I have anything to say about it." +<</if>> +<br><br> +<<He>> calls over one of the workers tending to the cattle and hands over the bucket, <<= $livestock_milk + $livestock_semen gte 1000 ? "careful not to slosh any onto the floor" : "giving the farmhand a curt nod">>. +<br><br> + +<<if $livestock_semen and $livestock_milk gte 300>> + Remy rests a hand on your shoulder. You shiver, still aroused from <<his>> rough treatment. "<<= $fluid_forced_stat gte 1000 ? "You used to produce so much. What happened?" : "I would've figured that would work. Still nothing?">> When you don't respond, <<he>> shakes <<his>> head. "Don't know why I'm asking a <<if $player.gender_appearance is "m">>bull<<else>>cow<</if>>. Maybe you'll be ready to give tomorrow." + <br><br> + + <<He>> stands and walks to the gate after scratching you behind the ears. "You're a good <<girl>>. You know that, right?" Despite <<his>> disappointment, <<he>> still gives you a smile as <<he>> shuts the cage. "It's time for bed now." +<<else>> + "You're such a good <<girl>>," <<he>> says, scratching you behind the ears. You lean into <<his>> touch, and <<he>> chuckles. "Time for bed." <<He>> stands and walks to the gate. <<He>> smiles at you as <<he>> shuts the cage. +<</if>> +<br><br> + +Remy joins the farmhands in freeing the other cattle from the machines. They turn off the lights as they leave, plunging the barn into darkness. +<br><br> + +<<endevent>> + +<<unset $livestock_semen>> +<<unset $livestock_milk>> +<<unset $deniedOrgasm>> +<<unbind>> + +<<link [[Next|Livestock Cell]]>><</link>> +<br> + +:: Livestock Handmilking Refuse +<<effects>> + +You shake your head and remain still. <<He>> purses <<his>> lips, then steps away to set up the milking machine. +<br><br> + +<<link [[Next|Livestock Lactate]]>><</link>> + :: Livestock Lactate <<effects>> @@ -664,24 +812,24 @@ They tie your arms to an iron bar several feet above the ground, and your collar <<if $breastfeedingdisable is "f">> <<if $player.penisExist and !playerChastity()>> <<if $player.penissize gte 4>> - Remy leans beneath your body, the glass pump still in hand. You feel the tube press against the tip of your <<penis>>, cold and hard. Remy reappears, a frown on <<his>> face. "Hey," <<he>> calls to a passing farmhand. "Pass me a larger one." - <br><br> + Remy leans beneath your body, the glass pump still in hand. You feel the tube press against the tip of your <<penis>>, cold and hard. Remy reappears, a frown on <<his>> face. "Hey," <<he>> calls to a passing farmhand. "Pass me a larger one." + <br><br> - This time, the tube fits. You feel a similar cold press against your <<breasts>> next. Remy leaves your cage, clanking the door shut after <<him>>. <<He>> approaches the milking machine, and pulls a lever. An incredible suction feeling assaults you. - <br><br> + This time, the tube fits. You feel a similar cold press against your <<breasts>> next. Remy leaves your cage, clanking the door shut after <<him>>. <<He>> approaches the milking machine, and pulls a lever. An incredible suction feeling assaults you. + <br><br> <<elseif $player.penissize gte 1>> - Remy leans beneath your body, the glass pump still in hand. You feel the tube brush against your <<penis>> and press against your pelvis. - <br><br> + Remy leans beneath your body, the glass pump still in hand. You feel the tube brush against your <<penis>> and press against your pelvis. + <br><br> - You feel a similar cold press against your <<breasts>> next. Remy leaves your cage, clanking the door shut after <<him>>. <<He>> approaches the milking machine, and pulls a lever. An incredible suction feeling assaults you. - <br><br> + You feel a similar cold press against your <<breasts>> next. Remy leaves your cage, clanking the door shut after <<him>>. <<He>> approaches the milking machine, and pulls a lever. An incredible suction feeling assaults you. + <br><br> <<else>> - Remy leans beneath your body, the glass pump still in hand. You feel the tube press against your pelvis, cold and hard. Remy reappears, a frown on <<his>> face. "Hey," <<he>> calls to a passing farmhand. "Pass me a smaller one." - <br><br> + Remy leans beneath your body, the glass pump still in hand. You feel the tube press against your pelvis, cold and hard. Remy reappears, a frown on <<his>> face. "Hey," <<he>> calls to a passing farmhand. "Pass me a smaller one." + <br><br> - This time, the tube fits. You feel a similar cold press against your <<breasts>> next. Remy leaves your cage, clanking the door shut after <<him>>. <<He>> approaches the milking machine, and pulls a lever. An incredible suction feeling assaults your <<penis>> and chest. - <br><br> + This time, the tube fits. You feel a similar cold press against your <<breasts>> next. Remy leaves your cage, clanking the door shut after <<him>>. <<He>> approaches the milking machine, and pulls a lever. An incredible suction feeling assaults your <<penis>> and chest. + <br><br> <</if>> <<if $lactating is 1 and $milk_amount gte 1>> @@ -895,7 +1043,7 @@ Perhaps the farmers will treat you better if you play along. You allow the sucki <<orgasm>> <<orgasm>> - You remember the gel Remy rubbed into you, and how unnatural that warmth felt. You feel it again now, as the gel works its devilry on your cock, it also failing to do it's job. + You remember the gel Remy rubbed into you, and how unnatural that warmth felt. You feel it again now, as the gel works its devilry on your cock, but failing to do its job. <br><br> <<orgasm>> @@ -1298,17 +1446,17 @@ You're slumped, panting, above the straw-strewn floor. Next thing you know, Remy <<if $livestock_semen is undefined>><<set $livestock_semen to 0>><</if>> <<set $fluid_forced_stat += ($livestock_milk + $livestock_semen)>> <<if $livestock_milk + $livestock_semen gte 5000>><<earnFeat "Pride of the Farm">> -<<npcincr Remy love 3>>"Phenomenal productivity," <<he>> says, gazing in awe at the <span class="green">vast</span> quantity of white fluid in front of <<him>>. "I know of no other <<if $player.gender_appearance is "m">>bull<<else>>cow<</if>> that could produce so much." -<<gglove>> -<br><br> + <<npcincr Remy love 3>>"Phenomenal productivity," <<he>> says, gazing in awe at the <span class="green">vast</span> quantity of white fluid in front of <<him>>. "I know of no other <<if $player.gender_appearance is "m">>bull<<else>>cow<</if>> that could produce so much." + <<gglove>> + <br><br> <<elseif $livestock_milk + $livestock_semen gte 3000>> -<<npcincr Remy love 2>>"You're a very good <<girl>>," <<he>> says, staring at the <span class="teal">great</span> quantity of white fluid in front of <<him>>. "Only trouble is," <<he>> smiles. "It might be a bit heavy." -<<glove>> -<br><br> + <<npcincr Remy love 2>>"You're a very good <<girl>>," <<he>> says, staring at the <span class="teal">great</span> quantity of white fluid in front of <<him>>. "Only trouble is," <<he>> smiles. "It might be a bit heavy." + <<glove>> + <br><br> <<elseif $livestock_milk + $livestock_semen gte 1000>> -<<npcincr Remy love 1>>"With produce like this," <<he>> says, looking at the <span class="lblue">large</span> quantity of white fluid in front of <<him>>. "You're one of the most valuable members of our herd." -<<glove>> -<br><br> + <<npcincr Remy love 1>>"With produce like this," <<he>> says, looking at the <span class="lblue">large</span> quantity of white fluid in front of <<him>>. "You're one of the most valuable members of our herd." + <<glove>> + <br><br> <<elseif $livestock_milk + $livestock_semen gte 500>> "Very good," <<he>> says, looking at the <span class="blue">decent</span> amount of white fluid in front of <<him>>. "You're a valuable member of our herd." <<elseif $livestock_milk + $livestock_semen gte 300>> diff --git a/game/overworld-plains/loc-moor/main.twee b/game/overworld-plains/loc-moor/main.twee index 5664a32654..b00bbbf4e3 100644 --- a/game/overworld-plains/loc-moor/main.twee +++ b/game/overworld-plains/loc-moor/main.twee @@ -118,7 +118,7 @@ <<orgasmLocation "moor">> <</if>> <<if $moor gte 100>> - <<mooricon "tower">><<link [[Enter the castle (0:10)|Castle]]>><<pass 10>><</link>> + <<birdicon "tower">><<link [[Enter the castle (0:10)|Castle]]>><<pass 10>><</link>> <br><br> <</if>> <<if $moor gte 80 and $moor lte 90 and $bogProgress gte 1>> @@ -238,20 +238,20 @@ You are in the courtyard of a ruined castle. Even derelict and half-sunk, the ru <<if $bird.lurkerSnareState is "captured">> <span class="green">A lurker struggles in the rope.</span> <br> - <<mooricon "snare_lurker">><<link [[Take|Castle]]>><<set $bird.materials.lurkers++>><<set $bird.lurkerSnareState to "empty">><</link>> + <<birdicon "snare_lurker">><<link [[Take|Castle]]>><<set $bird.materials.lurkers++>><<set $bird.lurkerSnareState to "empty">><</link>> <br> <<elseif $bird.lurkerSnareState is "empty">> - <span class="purple">It's empty.</span> <<mooricon "snare">> + <span class="purple">It's empty.</span> <<birdicon "snare">> <br> <<if $bird.materials.junk gte 1>> - <<mooricon "junk">><<link [[Use shiny junk as bait (0:02)|Castle]]>><<pass 2>><<set $bird.materials.junk-->><<set $bird.lurkerSnareState to "ready">><</link>> + <<birdicon "junk">><<link [[Use shiny junk as bait (0:02)|Castle]]>><<pass 2>><<set $bird.materials.junk-->><<set $bird.lurkerSnareState to "ready">><</link>> <br> <</if>> <<for _valuable, _amount range $bird.materials.valuables>> <<if _amount lt 1 or _valuable is "wallet">><<continue>><</if>> <<set _shiny to true>> <<capture _valuable>> - <<mooricon _valuable>><<link [["Use " + _valuable + " as bait (0:02)"|Castle]]>><<pass 2>><<set $bird.materials.valuables[_valuable]-->><<set $bird.lurkerSnareState to "ready">><</link>> + <<birdicon _valuable>><<link [["Use " + _valuable + " as bait (0:02)"|Castle]]>><<pass 2>><<set $bird.materials.valuables[_valuable]-->><<set $bird.lurkerSnareState to "ready">><</link>> <br> <</capture>> <</for>> @@ -260,7 +260,7 @@ You are in the courtyard of a ruined castle. Even derelict and half-sunk, the ru <br> <</if>> <<else>> - <span class="blue">It's baited.</span> <<mooricon "snare_bait">> + <span class="blue">It's baited.</span> <<birdicon "snare_bait">> <br> <</if>> <br> diff --git a/game/overworld-town/loc-danube-homes/skulduggery.twee b/game/overworld-town/loc-danube-homes/skulduggery.twee index c3711b32de..01d2933ad9 100644 --- a/game/overworld-town/loc-danube-homes/skulduggery.twee +++ b/game/overworld-town/loc-danube-homes/skulduggery.twee @@ -27,7 +27,10 @@ You successfully pick the lock and enter the abode. <</if>> <br><br> You sneak around the mansion and look for anything of value. -<<if $rng gte 91>> + +<<cleareventpool>> + +<<addinlineevent "Danube Wine Cellar" 1>> You find little of value that could be easily carried away. While searching the basement, you come across an ancient-looking door. It is locked. <br><br> <<set $skulduggerydifficulty to 700>> @@ -35,38 +38,35 @@ You sneak around the mansion and look for anything of value. <br> <<link [[Leave|Danube Street]]>><</link>> <br> -<<elseif $rng gte 81>> - <!-- Modified for Monster People --> - <<beastNEWinit 1 cat>> - A pair of yellow eyes pierce the darkness, and a large <<beasttype>> emerges. It prepares to pounce. - <<if $monster is 1>> - "Intruder! Masters won't be pleased." <<bHe>> flicks <<bhis>> tail. +<</addinlineevent>> + +<<addinlineevent "Danube Meow" 1>> + <<beastNEWinit 1 cat>> + A pair of yellow eyes pierce the darkness, and a large <<beasttype>> emerges. It prepares to pounce. + <<if $monster is 1>> + "Intruder! Masters won't be pleased." <<bHe>> flicks <<bhis>> tail. + <</if>> + <br><br> + <<if $monster is 1 or $bestialitydisable is "f">> + <<if $cat gte 6>> + <<link [[Meow|Danube House Meow]]>><</link>><<cat>> + <br> <</if>> - <br><br> - <<if $monster is 1 or $bestialitydisable is "f">> - <<if $cat gte 6>> - <<link [[Meow|Danube House Meow]]>><</link>><<cat>> - <br> - <</if>> - <<if $deviancy gte 15>> - <<link [[Try to calm it|Danube House Cat]]>><<set $sexstart to 1>><<generate2>><</link>><<deviant2>> - <br> - <</if>> - <<link [[Fight|Danube House Cat]]>><<set $molestationstart to 1>><<generate2>><<set $phase to 0>><</link>> + <<if $deviancy gte 15>> + <<link [[Try to calm it|Danube House Cat]]>><<set $sexstart to 1>><<generate2>><</link>><<deviant2>> <br> - <<runicon>><<link [[Run|Danube House Run]]>><</link>><<athleticsdifficulty>> - <br><br> - <<else>> - <<runicon>><<link [[Run|Danube House Run]]>><<set $athleticsSuccess to true>><</link>> - <br><br> <</if>> - <!-- A pair of yellow eyes pierce the darkness, and a large cat emerges. It prepares to pounce. + <<link [[Fight|Danube House Cat]]>><<set $molestationstart to 1>><<generate2>><<set $phase to 0>><</link>> + <br> + <<link [[Run|Danube House Run]]>><</link>><<athleticsdifficulty>> <br><br> - You flee out the house, the cat following. It doesn't chase you beyond the front door, content to watch you from the door.<<beastescape>> + <<else>> + <<link [[Run|Danube House Run]]>><<set $athleticsSuccess to true>><</link>> <br><br> - <<link [[Next|Danube Street]]>><</link>> - <br> --> -<<elseif $rng gte 71>> + <</if>> +<</addinlineevent>> + +<<addinlineevent "Danube Rob" 1>> <<generate1>><<person1>>You find a <<person>> dozing on a large sofa. <<He>> <<if $rng % 2>>is wearing expensive jewellery.<<else>>has fallen asleep holding some kind of tablet computer.<</if>> <br><br> <<set $skulduggerydifficulty to 400>> @@ -74,14 +74,18 @@ You sneak around the mansion and look for anything of value. <br> <<link [[Leave|Danube Street]]>><<endevent>><</link>> <br> -<<elseif $rng gte 61>> +<</addinlineevent>> + +<<addinlineevent "Danube Safe" 1>> /* gte 61 */ You find a safe with a combination lock. <br><br> <<link [[Try to open it|Danube House Safe]]>><</link>> <br> <<link [[Leave|Danube Street]]>><</link>> <br> -<<elseif $rng gte 51>> +<</addinlineevent>> + +<<addinlineevent "Danube Party" 1>> <<if Time.dayState is "night">> <<if Time.hour gte 21>> /* at midnight hour wraps to zero, so after midnight should no longer be true*/ <<generate1>><<person1>> @@ -150,7 +154,9 @@ You sneak around the mansion and look for anything of value. <<link [[Leave it|Danube Street]]>><<endevent>><</link>> <br> <</if>> -<<elseif $rng gte 41>> +<</addinlineevent>> + +<<addinlineevent "Danube Fountain" 1>> <<generate1>><<person1>>You search an ornate fountain in the middle of a hall. You peer into the water looking for any valuables inside, but there's a large drain at the bottom that would've sucked any small items away. You're about to move on when you hear footsteps approaching. There's not much time to hide. <br><br> <<set $skulduggerydifficulty to 600>> @@ -158,7 +164,9 @@ You sneak around the mansion and look for anything of value. <br> <<link [[Try to bluff your way out|Danube House Bluff]]>><</link>><<skulduggerydifficulty>> <br> -<<elseif $rng gte 31>> +<</addinlineevent>> + +<<addinlineevent "Danube S&M" 1>> <<generate1>><<person1>> The mansion is silent, empty. No one appears to be home. Many doors are closed and locked. One door is wide open and brightly lit. Approaching carefully, you peek in to see a bedroom. In the centre of the room is a bed. On that lies a <<person>>, completely naked, fully spread-eagled, dildo-gagged and bound to the bed. @@ -182,80 +190,106 @@ You sneak around the mansion and look for anything of value. <<link [[Leave|Danube Street]]>><<endevent>><</link>> <br> <</if>> -<<else>> - <<rng>> - <<if $rng gte 91>> +<</addinlineevent>> + +<<addinlineevent "Danube Oranges" .5>> + The mansion interior is minimalist and sterile, the picture of artificial perfection. No one appears to be home. You don't find anything worth stealing inside, but floor-to-ceiling windows in the living room reveal a row of pristine citrus trees. You carefully test the sliding door that leads into the garden. It opens easily, and you catch a whiff of fragrant fruit. + <br><br> + <<icon "tending/orange.png">> <<link [[Pick oranges (0:20)|Danube House Oranges]]>><<pass 20>><</link>><<tendingdifficulty 1 300>> + <br> + <<danubeicon>><<link [[Leave|Danube Street]]>><<endevent>><</link>> + <br> +<</addinlineevent>> + +<<addinlineevent "Danube Petty" 3>> + <<danubePettyTheft>> +<</addinlineevent>> + +<<runeventpool>> + +:: Danube House Petty Theft [widget] + +<<widget "danubePettyTheft">> + <<cleareventpool>> + <<set _black_money to false>> + <<set _it to "it">> + + <<addinlineevent "Danube Change" 1>> You don't find much, just some loose change worth <<moneyGainDisplay 2 true true>>. - <br><br> - <<link [[Take it|Danube Street]]>><<set $money += _money_gain>><<crimeUp `_money_gain / 100` "petty">><</link>><<crime "petty">> - <br> - <<link [[Leave|Danube Street]]>><</link>> - <br> - <<elseif $rng gte 81>> + <</addinlineevent>> + + <<addinlineevent "Danube Better Change" 1>> You don't find much, just some loose change worth <<moneyGainDisplay 4 true true>>. - <br><br> - <<link [[Take it|Danube Street]]>><<set $money += _money_gain>><<crimeUp `_money_gain / 100` "petty">><</link>><<crime "petty">> - <br> - <<link [[Leave|Danube Street]]>><</link>> - <br> - <<elseif $rng gte 71>> + <</addinlineevent>> + + <<addinlineevent "Danube Money" 1>> You find <<moneyGainDisplay 10 true true>> hidden in a drawer. - <br><br> - <<link [[Take it|Danube Street]]>><<set $money += _money_gain>><<crimeUp `_money_gain / 100` "petty">><</link>><<crime "petty">> - <br> - <<link [[Leave|Danube Street]]>><</link>> - <br> - <<elseif $rng gte 61>> - You find a nice-looking brooch in a drawer. - <br><br> - <<link [[Take it|Danube Street]]>><<set $blackmoney += 10>><<crimeUp 10 "thievery">><</link>><<crime "thievery">> - <br> - <<link [[Leave|Danube Street]]>><</link>> - <br> - <<elseif $rng gte 51>> + <</addinlineevent>> + + <<addinlineevent "Danube Cushion" 1>> You find <<moneyGainDisplay 20 true true>> beneath a cushion. - <br><br> - <<link [[Take it|Danube Street]]>><<set $money += _money_gain>><<crimeUp `_money_gain / 100` "petty">><</link>><<crime "petty">> - <br> - <<link [[Leave|Danube Street]]>><</link>> - <br> - <<elseif $rng gte 41>> - You find a necklace on a stool beside the coat stand. - <br><br> - <<link [[Take it|Danube Street]]>><<set $blackmoney += 20>><<crimeUp 20 "thievery">><</link>><<crime "thievery">> - <br> - <<link [[Leave|Danube Street]]>><</link>> - <br> - <<elseif $rng gte 31>> + <</addinlineevent>> + + <<addinlineevent "Danube Kitchen" 1>> You find <<moneyGainDisplay 30 true true>> lying on the kitchen worktop. - <br><br> - <<link [[Take it|Danube Street]]>><<set $money += _money_gain>><<crimeUp `_money_gain / 100` "petty">><</link>><<crime "petty">> - <br> - <<link [[Leave|Danube Street]]>><</link>> - <br> - <<elseif $rng gte 21>> + <</addinlineevent>> + + <<addinlineevent "Danube Pot" 1>> + You find <<moneyGainDisplay 60 true true>> in a pot beside the front door. + <</addinlineevent>> + + <<addinlineevent "Danube Brooch" 1>> + You find a nice-looking brooch in a drawer. + <<set _black_money to true>> + <<set _money_gain to 10>> + <</addinlineevent>> + + <<addinlineevent "Danube Necklace" 1>> + You find a necklace on a stool beside the coat stand. + <<set _black_money to true>> + <<set _money_gain to 20>> + <</addinlineevent>> + + <<addinlineevent "Danube Silverware" 1>> You find a set of silverware. - <br> - <<link [[Take it|Danube Street]]>><<set $blackmoney += 30>><<crimeUp 30 "thievery">><</link>><<crime "thievery">> - <br> - <<link [[Leave|Danube Street]]>><</link>> - <br> - <<elseif $rng gte 11>> + <<set _black_money to true>> + <<set _money_gain to 30>> + <</addinlineevent>> + + <<addinlineevent "Danube Cufflinks" 1>> You find a pair of gold cufflinks in a coat pocket. - <br><br> - <<link [[Take them|Danube Street]]>><<set $blackmoney += 40>><<crimeUp 40 "thievery">><</link>><<crime "thievery">> - <br> - <<link [[Leave|Danube Street]]>><</link>> - <br> + <<set _black_money to true>> + <<set _money_gain to 40>> + <<set _it to "them">> + <</addinlineevent>> + + <<runeventpool>> + <br><br> + <<if _black_money>> + <<link [["Take " + _it|Danube Street]]>><<set $blackmoney += _money_gain>><<crimeUp `_money_gain` "thievery">><</link>><<crime "thievery">> <<else>> - You find <<moneyGainDisplay 60 true true>> in a pot beside the front door. - <br><br> - <<link [[Take it|Danube Street]]>><<set $money += _money_gain>><<crimeUp `_money_gain / 100` "petty">><</link>><<crime "petty">> - <br> - <<link [[Leave|Danube Street]]>><</link>> - <br> + <<link [["Take " + _it|Danube Street]]>><<set $money += _money_gain>><<crimeUp `_money_gain / 100` "petty">><</link>><<crime "petty">> <</if>> + <br> + <<link [[Leave|Danube Street]]>><</link>> + <br> +<</widget>> + +:: Danube House Oranges +<<set $outside to 1>><<set $location to "town">><<effects>><<set $bus to "danube">> + +You comb through the row of citrus trees for saleable oranges. + +<<if $tendingSuccess>> + <span class="green">You find a bunch, firm and juicy.</span> + <<tending_pick orange 4 14>> +<<else>> + <span class="red">They're all bruised and spongy.</span><<gtending>><<tending 2>> <</if>> +<br><br> + +<<link [[Next|Danube Street]]>><</link>> + :: Danube House Wine Cellar diff --git a/game/overworld-town/loc-home/main.twee b/game/overworld-town/loc-home/main.twee index e1c030f6ba..b02665279e 100644 --- a/game/overworld-town/loc-home/main.twee +++ b/game/overworld-town/loc-home/main.twee @@ -4138,7 +4138,7 @@ Robin's mouth hangs similarly open. "Th-that..." <<He>> blinks and shakes <<his> <br><br> <<if $eggLayNumber gte 2>> - You aren't finished, though. Robin lapses back into silence as you grunt, toes digging into the bedsheets. More fluids gush from your hole as the second egg shifts into place, passing through your <<if _eggnantGenital is "vagina">>cervix and sliding down your slick vaginal canal<<else>>rectum and sliding down your anal passage<</if>>. + You aren't finished, though. Robin lapses back into silence as you grunt, toes digging into the bedsheets. More fluids gush from your hole as the second egg shifts into place, passing through your <<if _eggnantGenital is "vagina">>cervix and sliding down your slick vaginal canal<<else>>rectum and sliding down your anal passage<</if>>. You groan openly as the egg slides out, landing beside its sibling with a wet plop. Robin watches, unblinking, waiting to see if you're done. <br><br> @@ -4156,7 +4156,7 @@ You shake your head and <<if $transformationParts.bird.plumage isnot "hidden">>p <<if playerIsPregnant() and _eggnant.type is "hawk">> <<set _eggIcon to $eggLayNumber>> - <span class="lewd">You're certain the <<if $eggLayNumber gte 2>>eggs are<<else>>egg is<</if>> fertilised.</span> You should bring <<if $eggLayNumber gte 2>>them<<else>>it<</if>> back to your nest. You pick up <<number $eggLayNumber>> <<mooricon "eggs">> fertilised bird egg<<if $eggLayNumber gte 2>>s<</if>>. + <span class="lewd">You're certain the <<if $eggLayNumber gte 2>>eggs are<<else>>egg is<</if>> fertilised.</span> You should bring <<if $eggLayNumber gte 2>>them<<else>>it<</if>> back to your nest. You pick up <<number $eggLayNumber>> <<birdicon "eggs">> fertilised bird egg<<if $eggLayNumber gte 2>>s<</if>>. <<if $eggLayNumber gte 2>>They're quite large, and you're left wondering how they all fit inside of you to begin with.<<else>>It's quite large, and you're left wondering why passing it didn't hurt more.<</if>> <<pregnancyFeats "pc">> <<endPlayerPregnancy $location "inventory">> @@ -4180,7 +4180,7 @@ You shake your head and <<if $transformationParts.bird.plumage isnot "hidden">>p meek <<else>> confused - <</if>> + <</if>> tone betrays <<him>>. "I can help you clean up?" <<He>> very obviously doesn't want to. You tell <<him>> that it's okay, and <<he>> leaves your room. <<set $wardrobe_location to "wardrobe">> diff --git a/game/overworld-town/loc-hospital/main.twee b/game/overworld-town/loc-hospital/main.twee index aa5bf100cd..82387df98a 100644 --- a/game/overworld-town/loc-hospital/main.twee +++ b/game/overworld-town/loc-hospital/main.twee @@ -398,7 +398,7 @@ You've pushed yourself too much. <</if>> <<if $passoutReason>> - <<He>> gently interrogates you on the reason for your $passoutReason, lecturing you on the dangers of <<= $passoutReason is "cold" ? "severe frostbite" : "heatstroke">>. <<He>> informs you that everything is okay as far as <<he>> can tell, but you should be more careful about how you dress in the future. + <<He>> gently interrogates you on the reason for your $passoutReason, lecturing you on the dangers of <<= $passoutReason is "hypothermia" ? "severe frostbite" : "heatstroke">>. <<He>> informs you that everything is okay as far as <<he>> can tell, but you should be more careful about how you dress in the future. <<unset $passoutReason>> <<wash>> A nurse helps you to your feet, and you soon find yourself being discharged. diff --git a/game/overworld-town/loc-island/main.twee b/game/overworld-town/loc-island/main.twee index 5f2579a605..d11e745d25 100644 --- a/game/overworld-town/loc-island/main.twee +++ b/game/overworld-town/loc-island/main.twee @@ -493,7 +493,7 @@ Where do you want to explore? <br> <<if $island.explore_locations.includes("castle")>> - <<mooricon "tower">><<link [[Walk to castle (0:20)|Island Castle]]>><<island_pass 20>><</link>> + <<birdicon "tower">><<link [[Walk to castle (0:20)|Island Castle]]>><<island_pass 20>><</link>> <br> <</if>> <<if $worn.face.name is "islander mask">> diff --git a/game/overworld-town/loc-park/robin.twee b/game/overworld-town/loc-park/robin.twee index 735a6e7302..cf31095aee 100644 --- a/game/overworld-town/loc-park/robin.twee +++ b/game/overworld-town/loc-park/robin.twee @@ -77,7 +77,7 @@ You take your time with the mug, letting it warm your hands as you sip away at t "It's getting nippy out," Robin says. "Could you help me carry my stuff home?" <<endevent>> <br><br> - <<link [[Accept (0:30)|Orphanage]]>><<npcincr Robin love 1>><<pass 30>><</link>><<clotheson>><<glove>> + <<link [[Accept (0:30)|Orphanage]]>><<npcincr Robin love 1>><<pass 30>><<clotheson>><</link>><<glove>> <br> <<link [[Refuse|Park]]>><<clotheson>><</link>> <br> diff --git a/game/overworld-town/loc-pirates/main.twee b/game/overworld-town/loc-pirates/main.twee index 545071e985..6b6485093e 100644 --- a/game/overworld-town/loc-pirates/main.twee +++ b/game/overworld-town/loc-pirates/main.twee @@ -5,24 +5,34 @@ <<generateRole 1 0 "pirate">><<generateRole 2 0 "pirate">> <<if $pirateintro is 1>> - Hands grasp your shoulders, and haul you from the sea. You thud onto a familiar deck, and cough up water. - <br><br> - <<if $pirate_rank gte 1>> - "What are you doing swimming alone out here?" asks Captain Zephyr. "You'll be mer bait if you carry on like that." <<He>> helps you to your feet. "Nothing to see here. Get back to work!" - <br><br> - - <<link [[Next|Pirate Deck]]>><<endevent>><</link>> - <br> - <<else>> + <<if $passoutReason>> + <<unset $passoutReason>> "Well if it isn't our minnow," announces Captain Zephyr. "Welcome back to me vessel." <br><br> <<link [[Next|Pirate Intro 2 Repeat]]>><</link>> <br> + <<else>> + Hands grasp your shoulders, and haul you from the sea. You thud onto a familiar deck, and cough up water. + <br><br> + <<if $pirate_rank gte 1>> + "What are you doing swimming alone out here?" asks Captain Zephyr. "You'll be mer bait if you carry on like that." <<He>> helps you to your feet. "Nothing to see here. Get back to work!" + <br><br> + + <<link [[Next|Pirate Deck]]>><<endevent>><</link>> + <br> + <<else>> + "Well if it isn't our minnow," announces Captain Zephyr. "Welcome back to me vessel." + <br><br> + <<link [[Next|Pirate Intro 2 Repeat]]>><</link>> + <br> + <</if>> <</if>> <<else>> - You feel hands clutch your arms, hauling you from the water. You thud onto something hard, and cough. - <br><br> - Several people stand around your body, laughing. A boot flips you onto your back. + <<if !$passoutReason>> + You feel hands clutch your arms, hauling you from the water. You thud onto something hard, and cough. + <br><br> + Several people stand around your body, laughing. A boot flips you onto your back. + <</if>> <<if $pronoun is "m">> Green eyes peer down at you, above a full black beard and framed by long braided hair. <<else>> @@ -32,13 +42,14 @@ It's Zephyr. <br><br> <<if $pirate_rank gte 1>> + <<unset $passoutReason>> "What are you doing swimming alone out here?" asks Captain Zephyr. "You'll be mer bait if you carry on like that." <<He>> helps you to your feet. "Nothing to see here. Get back to work!" <br><br> <<link [[Next|Pirate Deck]]>><<endevent>><</link>> <br> <<else>> - "We caught ourselves a live one!" <<he>> announces, hands on hips. A cheer erupts as <<he>> leans close to you. "So ye found your way aboard as a vagrant." + "We caught ourselves a live one!" <<he>> announces, hands on hips. A cheer erupts as <<he>> leans close to you. "<<if $passoutReason>><<unset $passoutReason>>Barely livin', the state we found ye in. <</if>>So ye found your way aboard as a vagrant." <br><br> <<link [[Next|Pirate Intro 2]]>><<set $pirate_rank to 0>><<set $pirate_intro to 1>><</link>> <br> @@ -46,8 +57,7 @@ <<else>> <br><br> - - "We caught ourselves a live one!" announces the green-eyed figure, hands on hips. A cheer erupts as <<he>> leans close to you. "I'm Captain Zephyr, and ye, <<lass>>, have the dubious honour of being a guest aboard me vessel." + "We caught ourselves a live one!" announces the green-eyed figure, hands on hips. A cheer erupts as <<he>> leans close to you. "<<if $passoutReason>><<unset $passoutReason>>Barely livin', the state we found ye in. <</if>>I'm Captain Zephyr, and ye, <<lass>>, have the dubious honour of being a guest aboard me vessel." <br><br> <<link [[Next|Pirate Intro 2]]>><<set $pirate_rank to 0>><<set $pirate_intro to 1>><</link>> diff --git a/game/overworld-town/loc-prison/work.twee b/game/overworld-town/loc-prison/work.twee index 6cbbaf51d4..308ceb2115 100644 --- a/game/overworld-town/loc-prison/work.twee +++ b/game/overworld-town/loc-prison/work.twee @@ -1324,7 +1324,7 @@ You administer a single tooth as instructed. The <<person2>><<person>> sighs, bu <<daydreamicon>><<link [[Daydream|Prison Spire Work Daydream]]>><<stress -6>><</link>><<lstress>> <br> <<if $harpy gte 6>> - <<mooricon "sing">><<link [[Sing|Prison Spire Work Sing]]>><<transform bird 1>><<prison_rep anxious 1>><<prison_birds 1>><</link>><<prison_birds_text>><<if $prisonSingIntro>><<glove>><</if>><<harpy>> + <<birdicon "sing">><<link [[Sing|Prison Spire Work Sing]]>><<transform bird 1>><<prison_rep anxious 1>><<prison_birds 1>><</link>><<prison_birds_text>><<if $prisonSingIntro>><<glove>><</if>><<harpy>> <br> <</if>> <</switch>> diff --git a/game/overworld-town/loc-pub/main.twee b/game/overworld-town/loc-pub/main.twee index 53b8d7f612..ea1c76be6d 100644 --- a/game/overworld-town/loc-pub/main.twee +++ b/game/overworld-town/loc-pub/main.twee @@ -153,7 +153,7 @@ <<generate2>><<person2>><<saveNPC 1 pubMusic>> <</if>> You see a <<loadNPC 1 pubMusic>><<person2>><<person>> playing music in the corner.<br> - <<mooricon "sing">><<link [[Approach|Pub Music]]>><<handheldon>><<set $pubdrink to 0>><</link>> + <<birdicon "sing">><<link [[Approach|Pub Music]]>><<handheldon>><<set $pubdrink to 0>><</link>> <br><br> <</if>> <<generate1>><<person1>>You see a <<person>> sitting alone. diff --git a/game/overworld-town/loc-school/main.twee b/game/overworld-town/loc-school/main.twee index 540fa3fe71..67928629ac 100644 --- a/game/overworld-town/loc-school/main.twee +++ b/game/overworld-town/loc-school/main.twee @@ -887,6 +887,7 @@ You haul yourself over the fence and drop down on the other side. <<trauma 6>><<set $stress -= 2000>> <<link [[Next|Sydney Library Rescue]]>><</link>> <<else>> + <<unset $passoutReason>> <<pass 1 hour>> You remain unconscious for a time. <br><br> diff --git a/game/overworld-town/special-kylar/kylar-functions.js b/game/overworld-town/special-kylar/kylar-functions.js index 82f9355dce..b61294d4b5 100644 --- a/game/overworld-town/special-kylar/kylar-functions.js +++ b/game/overworld-town/special-kylar/kylar-functions.js @@ -1,3 +1,5 @@ +// @ts-check + /** * @typedef {object} DolLocation * @property {string} area The place they are at. @@ -11,7 +13,7 @@ const UnknownLocation = { area: "unknown", state: "unknown" }; const InactiveLocation = { area: "inactive", state: "inactive" }; /** @returns {boolean} */ -const isRaining = () => Weather.precipitation !== "none"; +const isRaining = () => Weather.precipitation !== "none"; // eslint-disable-line no-unused-vars const importantStates = ["rehearsal", "dual_rehearsal"]; diff --git a/game/overworld-town/special-robin/crossdressing.twee b/game/overworld-town/special-robin/crossdressing.twee index ccf1cfff1b..25f401803b 100644 --- a/game/overworld-town/special-robin/crossdressing.twee +++ b/game/overworld-town/special-robin/crossdressing.twee @@ -368,11 +368,11 @@ you're left to stew in your curiosity. <<if $backgroundTraits.includes("crossdresser") or $player.gender isnot $player.gender_appearance>> <<if $speech_attitude is "meek">> - You move closer to Robin, "I-I was just trying to help <<person1>><<him>> be <<himself>>." + You move closer to Robin, "I-I was just trying to help <<person1>><<him>> be more confident," <<elseif $speech_attitude is "bratty">> You raise an eyebrow at the <<person2>><<person>>, "Does that make me a pervert too?" <<else>> - "I just helped <<person1>><<him>> get out of <<his>> shell," you say. "Nothing perverted about it." + "There's nothing perverted about it," you say. "<<person1>><<He>> likes what <<he>> likes." <</if>> <<else>> <<if $speech_attitude is "meek">> diff --git a/game/overworld-town/special-robin/widgets.twee b/game/overworld-town/special-robin/widgets.twee index f50acc97a0..2cf6b557af 100644 --- a/game/overworld-town/special-robin/widgets.twee +++ b/game/overworld-town/special-robin/widgets.twee @@ -618,10 +618,10 @@ <</if>> <<if _robin.trauma lt 80 and $harpy gte 6>> <<if $halloween is 1>> - <<mooricon "sing">><<link [[Sing with Robin (0:20)|Robin Harpy]]>><<pass 20>><<trauma -2>><<stress -2>><<npcincr Robin love 1>><<npcincr Robin dom -2>><<handheldon 1>><</link>><<harpy>><<ldom>><<glove>><<ltrauma>><<lstress>> + <<birdicon "sing">><<link [[Sing with Robin (0:20)|Robin Harpy]]>><<pass 20>><<trauma -2>><<stress -2>><<npcincr Robin love 1>><<npcincr Robin dom -2>><<handheldon 1>><</link>><<harpy>><<ldom>><<glove>><<ltrauma>><<lstress>> <br> <<else>> - <<mooricon "sing">><<link [[Sing with Robin (0:20)|Robin Harpy]]>><<pass 20>><<trauma -2>><<stress -2>><<npcincr Robin love 1>><<npcincr Robin dom 1>><<handheldon 1>><</link>><<harpy>><<gdom>><<glove>><<ltrauma>><<lstress>> + <<birdicon "sing">><<link [[Sing with Robin (0:20)|Robin Harpy]]>><<pass 20>><<trauma -2>><<stress -2>><<npcincr Robin love 1>><<npcincr Robin dom 1>><<handheldon 1>><</link>><<harpy>><<gdom>><<glove>><<ltrauma>><<lstress>> <br> <</if>> <</if>> diff --git a/game/overworld-town/special-sydney/main.twee b/game/overworld-town/special-sydney/main.twee index 3fcb25de9b..31774f82d1 100644 --- a/game/overworld-town/special-sydney/main.twee +++ b/game/overworld-town/special-sydney/main.twee @@ -2468,9 +2468,13 @@ Sydney leaves first, peeking to make sure no one will see you both leave. Once t When you regain consciousness, you find yourself lying on a bench in a small booth. You recognise the ceiling of the library above you. There's a curtain covering the entrance. <<if $exposed gte 1>> - A towel has been wrapped around you. + A towel has been wrapped around you. <<if $passoutReason>>A small <<= $passoutReason is "hypothermia" ? "heater" : "fan">> is blowing <<= $passoutReason is "hypothermia" ? "hot" : "cool">> air onto you.<</if>> <<towelup>> <<set $exposedTemp to 1>> + <<elseif $passoutReason and $worn.over_upper.name isnot "naked" and $passoutReason is "hyperthermia">> + A small fan is blowing cool air on you. Your $worn.over_upper.name has been removed and neatly folded beside you. <<overupperstrip>><<overlowerstrip>> + <<elseif $passoutReason>> + A small <<= $passoutReason is "hypothermia" ? "heater" : "fan">> is placed next to you, and <<= $passoutReason is "hypothermia" ? "you're covered with a warm blanket" : "there's an ice pack on your forehead">>. <</if>> <<if $leftarm is "bound" or $rightarm is "bound" or $feetuse is "bound">> Your bindings have been removed. @@ -2494,11 +2498,15 @@ Sydney leaves first, peeking to make sure no one will see you both leave. Once t <<if $exposedTemp is 1>> and you were exposed, <</if>> + <<if $passoutReason>> + and your body was <<= $passoutReason is "hypothermia" ? "freezing cold" : "burning up">>, + <</if>> <<if _boundTemp is 1>> and you were tied up, <</if>> and, and..." <<he>> pauses to catch <<his>> breath. "I brought you in here, I didn't know what else to do. Are you alright?" <br><br> + <<unset $passoutReason>> <<link [[Thank|Sydney Library Rescue Intro 2]]>><<set $phase to 1>><<npcincr Sydney love 1>><</link>><<glove>> <br> <<link [[Flirt|Sydney Library Rescue Intro 2]]>><<set $phase to 2>><<npcincr Sydney purity -2>><</link>><<lspurity>><<promiscuous1>> @@ -2523,9 +2531,15 @@ Sydney leaves first, peeking to make sure no one will see you both leave. Once t "You really know how to scare the shit out of me." There's a crack in <<his>> voice as <<he>> looks down to you. "What would I do with myself if you got hurt?" <<else>> <<if $exposed gte 1>> - A towel has been wrapped around you. + A towel has been wrapped around you. <<if $passoutReason>>A small <<= $passoutReason is "hypothermia" ? "heater" : "fan">> is blowing <<= $passoutReason is "hypothermia" ? "hot" : "cool">> air onto you.<</if>> <<towelup>> <<set $exposedTemp to 1>> + <<elseif $passoutReason>> + <<if $worn.over_upper.name isnot "naked" and $passoutReason is "hyperthermia">> + A small fan is blowing cool air on you. Your $worn.over_upper.name has been removed and neatly folded beside you. <<overupperstrip>><<overlowerstrip>> + <<else>> + A small <<= $passoutReason is "hypothermia" ? "heater" : "fan">> is placed next to you, and <<= $passoutReason is "hypothermia" ? "you're covered with a warm blanket" : "there's an ice pack on your forehead">>. + <</if>> <</if>> You feel something on your shoulder. You look down, and see <<npcHairColour "Sydney">> hair. Sydney rests against you. <<stress -12>><<llstress>> <br><br> @@ -2536,9 +2550,15 @@ Sydney leaves first, peeking to make sure no one will see you both leave. Once t <br><br> <<else>> <<if $exposed gte 1>> - A towel has been wrapped around you. + A towel has been wrapped around you. <<if $passoutReason>>A small <<= $passoutReason is "hypothermia" ? "heater" : "fan">> is blowing <<= $passoutReason is "hypothermia" ? "hot" : "cool">> air onto you.<</if>> <<towelup>> <<set $exposedTemp to 1>> + <<elseif $passoutReason>> + <<if $worn.over_upper.name isnot "naked" and $passoutReason is "hyperthermia">> + A small fan is blowing cool air on you. Your $worn.over_upper.name has been removed and neatly folded beside you. <<overupperstrip>><<overlowerstrip>> + <<else>> + A small <<= $passoutReason is "hypothermia" ? "heater" : "fan">> is placed next to you, and <<= $passoutReason is "hypothermia" ? "you're covered with a warm blanket" : "there's an ice pack on your forehead">>. + <</if>> <</if>> You hear Sydney's voice outside. "N...no, the changing room is occupied at the moment. No, you can't check! Because it's occupied!" After a moment, the curtain shifts aside as <<he>> backs into the booth. <<He>> turns around, and jumps when <<he>> realises you're awake. @@ -2547,12 +2567,16 @@ Sydney leaves first, peeking to make sure no one will see you both leave. Once t <<if $exposedTemp is 1>> and you were exposed, <</if>> + <<if $passoutReason>> + and your body was <<= $passoutReason is "hypothermia" ? "freezing cold" : "burning up">>, + <</if>> <<if _boundTemp is 1>> and you were tied up, <</if>> and, and..." <<he>> pauses to catch <<his>> breath. "I brought you in here, I didn't know what else to do. Are you alright?" <br><br> <</if>> + <<unset $passoutReason>> <<link [[Thank Sydney|Sydney Library Rescue 2]]>><<set $phase to 1>><<npcincr Sydney love 1>><</link>><<glove>> <br> <<if $sydneyromance is 1>> @@ -3217,7 +3241,12 @@ Sydney stretches and yawns. <br> <</if>> <<else>> - Sydney finishes <<his>> food. You chat with <<him>>, and <<hes>> happy to stay and listen for a while. "I need to get back to the library now. Thank you for keeping me company." <<He>> gathers <<his>> books and speedwalks out of the canteen<<if $sydneyromance is 1>>, blowing you a kiss on the way out<</if>>. + <<if random(1,6) is 1>> + Sydney looks more tired than usual, and <<he>> nearly nods off into <<his>> food. It occurs to you that <<he>> could likely use some caffeine. After finishing <<his>> lunch, <<he>> stifles another yawn as <<he>> listens to you chat. "I'm not bored, just tired," <<he>> assures you. "I should get back to the library now, though. Thank you for keeping me company." <<set $daily.sydney.coffee to true>> + <<else>> + Sydney finishes <<his>> food. You chat with <<him>>, and <<hes>> happy to stay and listen for a while. "I need to get back to the library now. Thank you for keeping me company." + <</if>> + <<He>> gathers <<his>> books and <<= !$daily.sydney.coffee ? "speedwalks" : "walks">> out of the canteen<<if $sydneyromance is 1>>, blowing you a kiss on the way out<</if>>. <br><br> <<if C.npc.Kylar.state is "active">> Kylar watches from across the canteen. @@ -3225,6 +3254,14 @@ Sydney stretches and yawns. <br><br> <</if>> <<endevent>> + <<if $daily.sydney.coffee>> + <<if $money gte 200>> + <<foodicon "coffee">><<link [[Buy Sydney a coffee (0:25 £2)|Sydney Coffee Purchase]]>><<pass 25>><<set $money -200>><</link>> + <<else>> + <span class="blue">You can't afford a coffee for Sydney.</span> + <</if>> + <br> + <</if>> <<historyicon>><<link [[Go to your history lesson (0:01)|History Classroom]]>><<set $justEntered to true>><<pass 1>><</link>><br> <<schoolicon "library">><<link [[Follow Sydney to the library (0:02)|School Library]]>><<pass 2>><</link>><br> <<foodicon "eat">><<link [[Stay in the canteen|Canteen]]>><</link>> @@ -4217,3 +4254,24 @@ You help Sydney <<print either("manage customers","replenish merchandise","with <br><br> <<link [[Next|Temple]]>><<endevent>><</link>> <</if>> + +:: Sydney Coffee Purchase +<<set $outside to 0>><<set $location to "school">><<schooleffects>><<effects>> +<<npc "Sydney">><<person1>> + +You spend <<= $schoolstate is "lunch" ? "a portion" : "the remainder">> of your lunch break on a jaunt down to the cafe. You purchase a large coffee and bring it back to the library. Sydney's sleepily organising a stack of returned books. +<br><br> + +<<if $speech_attitude is "meek">> + You place the coffee cup on the counter and push it over to <<him>>. "You always look so tired. I thought you might like some coffee." +<<elseif $speech_attitude is "bratty">> + You slide the coffee across <<his>> desk. "I bought you some coffee. You need more sleep." +<<else>> + You offer the coffee cup to <<him>>. "I bought some coffee for you. You should get some rest after school." +<</if>> +<br><br> + +Sydney looks momentarily startled, then smiles. <<He>> brings the cup to <<his>> face, enjoying the warm aroma before taking a sip. <<He>> is quiet for a moment, then lets out a content sigh. "I really should get more sleep. Thanks so much, I needed that," he says, <<= $sydneyromance gte 1 ? "leaning over to kiss your cheek" : "reaching over to squeeze your hand">>. <<glove>><<npcincr Sydney love 2>> + +<br><br> +<<link [[Next|School Library]]>><<endevent>><<set $eventskip to 1>><</link>> diff --git a/game/overworld-town/special-sydney/sydney-functions.js b/game/overworld-town/special-sydney/sydney-functions.js index b400aef744..1a8e7c0d10 100644 --- a/game/overworld-town/special-sydney/sydney-functions.js +++ b/game/overworld-town/special-sydney/sydney-functions.js @@ -1,7 +1,9 @@ +// @ts-check + /** * Normalises Sydney's love stat, if 150 love, and max is 150, * will output 1.0. - * + * * @returns {number} Between 0.0 and 1.0 */ function getSydneyLoveNorm() { diff --git a/game/overworld-town/special-sydney/widgets.twee b/game/overworld-town/special-sydney/widgets.twee index 4a258d38e0..c3c436c5a5 100644 --- a/game/overworld-town/special-sydney/widgets.twee +++ b/game/overworld-town/special-sydney/widgets.twee @@ -672,21 +672,23 @@ <br> <</if>> <<set _tf to checkTFparts()>> - <<if C.npc.Sydney.love gte 10 and $fox gte 6 and _tf.foxTail>> - <<ind>><<link [[Swish tail (0:10)|Sydney Library Transformation]]>><<pass 10>><<trauma -2>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 0>><</link>><<fox>><<ltrauma>><<glove>> - <br> - <<elseif C.npc.Sydney.love gte 10 and $wolfgirl gte 6>> - <<ind>><<link [[Nudge (0:10)|Sydney Library Transformation]]>><<pass 10>><<stress -2>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 1>><</link>><<wolfgirl>><<lstress>><<glove>> - <br> - <<elseif C.npc.Sydney.love gte 10 and $cat gte 6>> - <<ind>><<link [[Nuzzle (0:10)|Sydney Library Transformation]]>><<pass 10>><<tiredness -2>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 2>><</link>><<cat>><<ltiredness>><<glove>> - <br> - <<elseif C.npc.Sydney.love gte 10 and $harpy gte 6>> - <<mooricon "sing">><<link [[Sing (0:10)|Sydney Library Transformation]]>><<pass 10>><<tiredness -2>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 3>><</link>><<harpy>><<ltiredness>><<glove>> - <br> - <<elseif C.npc.Sydney.love gte 10 and $cow gte 6>> - <<ind>><<link [[Gently headbutt (0:10)|Sydney Library Transformation]]>><<pass 10>><<trauma -2>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 4>><</link>><<cow>><<ltrauma>><<glove>> - <br> + <<if !($daily.sydney.tf gte 3)>> + <<if C.npc.Sydney.love gte 10 and $fox gte 6 and _tf.foxTail>> + <<ind>><<link [[Swish tail (0:10)|Sydney Library Transformation]]>><<pass 10>><<trauma -2>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 0>><</link>><<fox>><<ltrauma>><<glove>> + <br> + <<elseif C.npc.Sydney.love gte 10 and $wolfgirl gte 6>> + <<ind>><<link [[Nudge (0:10)|Sydney Library Transformation]]>><<pass 10>><<stress -2>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 1>><</link>><<wolfgirl>><<lstress>><<glove>> + <br> + <<elseif C.npc.Sydney.love gte 10 and $cat gte 6>> + <<ind>><<link [[Nuzzle (0:10)|Sydney Library Transformation]]>><<pass 10>><<tiredness -2>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 2>><</link>><<cat>><<ltiredness>><<glove>> + <br> + <<elseif C.npc.Sydney.love gte 10 and $harpy gte 6>> + <<mooricon "sing">><<link [[Sing (0:10)|Sydney Library Transformation]]>><<pass 10>><<tiredness -1>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 3>><</link>><<harpy>><<ltiredness>><<glove>> + <br> + <<elseif C.npc.Sydney.love gte 10 and $cow gte 6>> + <<ind>><<link [[Gently headbutt (0:10)|Sydney Library Transformation]]>><<pass 10>><<trauma -2>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 4>><</link>><<cow>><<ltrauma>><<glove>> + <br> + <</if>> <</if>> <</if>> <<if ($sydney.glasses is "broken" or $sydney.glasses is "playerbroken") and $money gte 1500 and ($sydneyChatState gte 3 or $sydneyromance is 1)>> diff --git a/img/clothes/upper/cableknitcardigan/left_cover_gray.png b/img/clothes/upper/cableknitcardigan/left_cover_gray.png index a75f598ca6ee473d85309c7c89b6900285c7410d..682810ee7427a52ee215680bf1c9fb698c88c5f0 100644 GIT binary patch literal 1256 zcmeAS@N?(olHy`uVBq!ia0y~yU;;83893O0)X@p&(t(_oOlRi+PiJR^f};Gi%$!sP z291fe6Ky>XJIEZ3zw8yNC99+KXu?9Po37m!)3n46I%R5ad6iJ~QrsldBPd3O^?FmY ze0M0jczUdC46EY@<|8)`dR}z(`V$|NA^7@Wq5ZwP)pzzXx1>#7xlEsJ#jMmN!i9#@ z<3<0j|Df2x=whg380?=Ww)utSzIP8FzK(54|7!RBxkM0`8nca3Vb9Ap*FBClyE9+T z`QGWgMo06=^CQ7*u@inwe7)&({v2;UZX4s2l*^xwC?;*Za<oW%^QMJD?wyCbRt4^x zP#pPi&(X-W*CKz<`_tOkv~AKutFwhF8(LI?1QZwdajn`QurO5lsLQNxk8S@X_u0GZ z&5RK>DAHNLCOYXc`~T+qcV``)nQ5*m!2T;P=XWyGhxbft+j8sWZ<oDh`C!K!9(6oE zo2hvI5_7Al9~>Nc%;MK&eeW^rl{Z{ek2O+p|8z;D%k{zEo_(79JolNJv-9%b*3PkG zh<ugxlg+|{Ma_H4-g}Sl{=K{RZ}qaf_xblsC^|Cztp+zRTG*1j-CY>|gW!U_%O?Xx zI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf3s!b<W<}YXMel$@k|nMYCC>S|xv6<249-QV zi6yBi3gww484B*6z5(HleB!|PKj7)&7*cWT?JeuP76$>A3!9#5D-@{|ojY*QlKHxW zipr5PlS@rye^2s!jyu+sv88pFH^>P?6db7k_>7~%r0?<b$Dd7n|0yf{zjI-?GDE|! z8jB_?^*`a0Ywv&eoRk___tmaoZtuV4XXE~vGB7l-HCX2|q#pABRAQ_#x&HPx&q?cE z^S!^#@}SD=-SyJH+axE{^D;0jV0_Rg?O@1r_+jO|=bxYO$Hbhhy=>w+Dfjjhd7yL# z!-_oS8{hwC1{eI3-LY=ccjKSefx$SnaPjA7ad*G{)!tse@ZS5zKiNYxYzM^I4bA$3 WYZ4aDiuAn=vftCy&t;ucLK6TLZ%<<Y literal 2604 zcmeAS@N?(olHy`uVBq!ia0y~yU;;83893O0)X@p&(is>yKYO}3hEy=Vz2n%`Y#_pL z;haIZz<1W~^A0vwv#k%jv!l?Kxv`<^($$oGGq3mh`kX!gn|DUYuZjvm1&0O(MkW>x zfl<b2AdIF2@^V3k(g#6Rfx;sK5^WEwrB7P)?Ng2xc+VN4lkhKm&Yj5%Yv)~AsRYSr zTH-%e)ztj2t2l1`i>GMoruVz_Oe^=sy_{iRf7LGj{6vPv3Z}|`a>~1BoqzT}aMim_ zvJJaFXP1D}=7W#}d<QhWYp4D^S2ypu$&S@i9pip(&z*hCcK-REiSu}OL|Hy@>to?K zB5d&g@lzEimof&W6h|Jg-US;PWE&1WsJ|K;_tV^WvQxw~RoUPB?zfuw25aSq{oDPS zi-qHk|A9aI<Ij1y<ghPj*<=SU6C4Z}tr-pqeTshgMD+j1U$1w)TlFcw_4uz?WmYDZ zJk^AM_qAe=Hf?1N=!tR%Tcps}P+!?Sxm#&sjP2k5>x%vV?-wqb=TO7=*}ksN%PoU_ x!IEwJMvI%#GIzA%8O;Twxq!@Eu)wHMzHwI)v;OkViNIDMgQu&X%Q~loCID!msJ;LI diff --git a/img/clothes/upper/cableknitcardigan/right_cover_gray.png b/img/clothes/upper/cableknitcardigan/right_cover_gray.png index 6e834c0f87570a43517b170f6eb9d86b9584c9f0..423f1d1a91276e4d6feeb303df4baa7e759783db 100644 GIT binary patch literal 1362 zcmeAS@N?(olHy`uVBq!ia0y~yU;;83893O0)X@p&(t(_oOlRi+PiJR^f};Gi%$!sP z291fe6Ky>XJIEZ3zw8yNC99+KXu?9Po37m!)3n46I%R5ad6iJ~QrsldBPd3O^?FmY ze0M0jczUdC46EY@<|8)`dR}z(`V$|NA^7@Wq5ZwP)pzzXx1>#7xlEsJ#jMmN!i9#@ z<3<0j|Df2x=whg380?=Ww)utSzIP8FzK(54|7!RBxkM0`8nca3Vb9Ap*FBClyE9+T z`QGWgMo06=^CQ7*u@inwe7)&({v2;UZX4s2l*^xwC?;*Za<oW%^QMJD?wyCbRt4^x zP#pPi&(X-W*CKz<`_tOkv~AKutFwhF8(LI?1QZwdajn`QurO5lsLQNxk8S@X_u0GZ z&5RK>DAHNLCOYXc`~T+qcV``)nQ5*m!2T;P=XWyGhxbft+j8sWZ<oDh`C!K!9(6oE zo2hvI5_7Al9~>Nc%;MK&eeW^rl{Z{ek2O+p|8z;D%k{zEo_(79JolNJv-9%b*3PkG zh<ugxlg+|{Ma_H4-g}Sl{=K{RZ}qaf_xblsC^|Cztp+zRTG*1j-CY>|gW!U_%O?Xx zI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf3s!b<7OsCPvY9|3$r9Iy66gHf+|;}h2Ir#G z#FEq$h4Rdj3<Y;j-+=H&K5+&HW-U(_$B>F!Z|`o*Jrp3qdck{2UmM#^?isU0Kcw|M zOx@F=zTr-U&V!IJrEt&b|1Fm{eOsu0w_I0&5op2C0u54gdKU2XA5Zq4bo=czmCV~_ zo}X&$YTFY2KRj>O!@zLw{BprR`L*}+Juj8UPD+{gT;=4?8Z(&<{}%xLYQk{!=H&Xz zCT)!0<V_eD8rT*@RevhyZ1}tVe+DoZcpc96ovfdw=FIq;Uy6ajfjMCAV`GN{|C)gr z>jJ}`!>S*u_VO^lu?MLInkE3DSQr={-2EZukobq+;zs=ipdc_iD!{1*Ad3TN7ld+n z_(v#V;k)m@{}p*pDwOeG#sqUo$z>B&&t2=hKmDEkK#y_5|8MfV3=AK%FC{7d+IPQh z-+leYzeYP^^gJh(#y%Ee_?@2xadGbS1M~i@zn(oQB~olU!;Sji{b0w2R13=JHzrEd wY)km>$jrbH@Km*+#*PExKA=-ZC}{n~^yqf8{7b=?Yd|63>FVdQ&MBb@0By^91^@s6 literal 2776 zcmeAS@N?(olHy`uVBq!ia0y~yU;;83893O0)X@p&(is@I=6kw0hEy=Vy%U>t$U%VN z!L~2H0`W(Lf4q|{^3H$ASu}BuLye&Rg`@;;j-~b`zUAfnoIIo6rahaj^QQ0Ga`ku? z4gm#+1_nl^QO0N>jHU!4bHNFP3#E5&|Fu3G(5B$9z=-kl{!LAxV(+|DKXOfnB%>1w zALb<TINJm$y#06m_1B82mtQVP<Nso2(m09b%>PNNF2?CtF}%GR;s&<yL3HEw{P_<# zT{+&A?N)juz{1FMntR6o)3e=oEaG!$(K<a5Z0Z@7J@agsHQyfpnca}7ZoqR`BJ2M5 ztca+KN1PQVH~gH>dC6ct*9(T4Q;(*Dja`t-_?~gal6{%a>+R-icSg)$;dmls@W0qo zDqU*<v%%E@KXA@(;&{Oj682(?@Q%BAQ(g69m{|U4CH(szdf~o5YYD?LsdJp5GQvTC zk-I^mb($KuteC+S!Qf*$M;Mf38Wott7#z8DeZhr@f#?Q?8Ce$U;8Mkr<&U^SYHQru zu&J&(K!b}oXZ+u((pxNkfw4dyT=FzF05vmq>!pG<Con#cgQP-6RviW=vDi~!j~rk+ zU<)awn1J@O=<J#Tc2WatLp7xAViDQEz!6cR33d-7H^X;GEO2N%n9QK9`|DwW$He`2 z{eSJN_uF5f;s6Yn&->s0(wjP$??BL{b<SWjxP&e+YOIimZ#CjM{NqF2e);~F#s}ZB z><juV(P##YGqYC_QDRmMOG903z-~%lWLz(;-!SK~Q0(>I^<S573{qEk%VReC?2ijy zt7QA{2~Sue!+AwN;otT6!$QVDvo~rbDS<t~FLr^k!l2;Y!{^qGTRz{<+x~c|-t^NI zS2$1T=G!p+2Wt6W&l}a{z`kH<)~QyoPyPfrus>)ISZb&HmgCvnhQ}XQY+EYk8^dA* z49}Sg&3ucQ1-5*+qy`BiDS;jDSuW)*Xe?Rc&~QK>==S)8%2(|Td<WQDg+~ke(b{gb k${)=IbjSq@d>YGHWXhhLzcVEf*kWbyboFyt=akR{04cN$mjD0& diff --git a/img/clothes/upper/winterjacket/0_alt_gray.png b/img/clothes/upper/winterjacket/0_alt_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..255b297ec0b4927753b841072ec0360fbe1e42fe GIT binary patch literal 778 zcmeAS@N?(olHy`uVBq!ia0y~yU;;8388}#gRQ^o1H$aLd-O<;Pfnj4m_n$;opn`** zE{-7;jBgJbGBy}6FmG6wHL)dn!p6m(=fo32na^Z3MDiM}W=u0Zu!e2MRff${31P!e u@UZB4&Y0^3M}M=f%N_~-9ZoU$mHAKv%l~F!Uk6~~X7F_Nb6Mw<&;$T7Y8{sV literal 0 HcmV?d00001 diff --git a/img/clothes/upper/winterjacket/1_alt_gray.png b/img/clothes/upper/winterjacket/1_alt_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..255b297ec0b4927753b841072ec0360fbe1e42fe GIT binary patch literal 778 zcmeAS@N?(olHy`uVBq!ia0y~yU;;8388}#gRQ^o1H$aLd-O<;Pfnj4m_n$;opn`** zE{-7;jBgJbGBy}6FmG6wHL)dn!p6m(=fo32na^Z3MDiM}W=u0Zu!e2MRff${31P!e u@UZB4&Y0^3M}M=f%N_~-9ZoU$mHAKv%l~F!Uk6~~X7F_Nb6Mw<&;$T7Y8{sV literal 0 HcmV?d00001 diff --git a/img/clothes/upper/winterjacket/2_alt_gray.png b/img/clothes/upper/winterjacket/2_alt_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..255b297ec0b4927753b841072ec0360fbe1e42fe GIT binary patch literal 778 zcmeAS@N?(olHy`uVBq!ia0y~yU;;8388}#gRQ^o1H$aLd-O<;Pfnj4m_n$;opn`** zE{-7;jBgJbGBy}6FmG6wHL)dn!p6m(=fo32na^Z3MDiM}W=u0Zu!e2MRff${31P!e u@UZB4&Y0^3M}M=f%N_~-9ZoU$mHAKv%l~F!Uk6~~X7F_Nb6Mw<&;$T7Y8{sV literal 0 HcmV?d00001 diff --git a/img/clothes/upper/winterjacket/3_alt_gray.png b/img/clothes/upper/winterjacket/3_alt_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..b03945b68f30054b7565826cc03e56998b63d919 GIT binary patch literal 1212 zcmeAS@N?(olHy`uVBq!ia0y~yU;;83893O0)X@p&(t(_oOlRi+PiJR^f};Gi%$!sP z291fe6Ky>XJIEZ34|bg>#?I|kcp_l#n<Q5mZ_)0Ag<C|UN)2{?;htrpqN&%{lzs4E z|It;=-J93(t!q;F!T9LSgC#GNRR8H~Zt3{=V2Awsced~DF*>b27P48NZ^f+Clu4Y1 z@e!izaf%8(3P}=EXRKVlsoS!mZ+-QTA64Q{Bkw)`C*!y@!{~sz(D9jh5l5ttY@R*s zT;+U=BU+Q3YW!?cFR*sX@6_A<=h)6S8x9ydyXhJG%P5JRw$=G=uv$XvBTu1Apy?^` zPkP#Owp*;;%J%xs<oyN#SHd>MEVt}anKr>mN-4!8z?D~Q(Uz<wGfrHnJ9JpS>`!LV z$tSCtCMGkMu9zTW|3m)IyK6c}m)%|B!1SVi<J*4Dgaq*n^W5LRZ*04*-tb>?$E98W zs<>zTR@r;=s*?MG4`v00cdtINeNe<MQGH3(xk$y{cVP(Az4I?-a~(LLYp~_nw`(_# zzhs`Uc-^%8hGyr4O+GhY%e|L-^Y-n1<GKIp818BoUF_GhwgN^AXMsm#F#`j)FbFd; z%$g$s6l5>)^mS!_!6d_HD#o?_(o>+2WQl7;iF1B#Zfaf$gL6@8Vo7R>LV0FMhJw4N zZ$Nk>pExkKmwCE4hE&{od)ra4*+7KlLhf=Q0}<5@2X>`^CT5+b)1Ms@e4+SZUW>i3 z+U`FpKvRb_uwObQ%4?<C!KwG$7#Q>zJQy0@^XM@!9FVQ;X{crLm{b}Yzl`y`fp4(y zq}<y)&ddx984ME`7%l)kEycj_Z^hduJ&z+Mr$kQkE-!gjx$W~}Mh1p?2iEd0FkZ`< z(Uxd2<;nNm_Hq9+7#JF6Z)Pr-tfIhppm>XHLs{MVe}~K8nF7Vx8subr{|NyZU~?}t mZ$3N!`+uP6qX1V3EYOa>*X6onqFa<ENQtMbpUXO@geCy_t1=t_ literal 0 HcmV?d00001 diff --git a/img/clothes/upper/winterjacket/4_alt_gray.png b/img/clothes/upper/winterjacket/4_alt_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..17586ef813f830766e48023df1734637b2019d66 GIT binary patch literal 2703 zcmeAS@N?(olHy`uVBq!ia0y~yU;;83893O0)X@p&(is@I!aQ9ZLn;{G-Z`Cn$U%VN zg376hOe+}Pl^mFBr_sP9z#70%Td<sY*8?_li|3n9$>p46>NNa#OFyV(!x@9$YB_tF z-)=XzXW<Y~aA;s)WEy3R2Eu4cpmHu~v~T=b^Y80#?iPn72i#K(HbQb+qY;bUX^-G( zKVSSWu-J1M80-$xOx;J7N+t8QM|0)x%XHppZCJ{%E0}vGICnNq=X}Air)O7>`6ecf z#eSPq1T;59t<`!iF4KSf#D}EP5C`@Ji(4m(fpc+2Fp%eaw<#%_Q6xlXrI3Pyf`bFQ z0z)7NIFAR+YT$Fo6rHTk$kZ%);`s}o<(E@7+|6@d&t*0LeDhY>M+Zt7+9FDm)qtf! z<3a8h3?kpu6IcTx4leNqniStZ|2=!r-nif^U#sSxyLUgw%)gYWXwT`VLKD^sEaiB? zFeON{5@;n*uS4VVJ}KtU0<Rn!_b|=yQF|%+_@jlb-EO7`z3G{%g;sNeY|5FcHz<@T zf8b~OTKOQ3YxiBfvtNG}$KAKDfA{_O-v6AXbL8x=GrlM+<n0A#P7_WG_645H7T^9{ z-e~_a^xd7SB`NdU6Imyy+6ZaHE1YNEd~=Nv{~hU@878aV2-S)@s_syqD}I6TMNOxQ z2e^=X#9DJ-IRDqBj<41~O!rpWU0VNs{&w@d=gL4~^I|zLXzX8Sg-|&aj25n=HOy!= jJDLjye=fL?-I$*cStQ~9{d+2~p~>Ls>gTe~DWM4fRd>)h literal 0 HcmV?d00001 diff --git a/img/clothes/upper/winterjacket/5_alt_gray.png b/img/clothes/upper/winterjacket/5_alt_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..4e67753ebb6ea125b50c909d642f2268ebe0d395 GIT binary patch literal 2749 zcmeAS@N?(olHy`uVBq!ia0y~yU;;83893O0)X@p&(is@IT0C7GLn;{G-Z9L3<siUt z;fc0vNdfyg$MdolEbI<44Yw~8Ggn1rX{`J_b*dYe2aEcewXwflyAGV&G_RJquYAMb zZ_nBp7@1f&1QZ+^Mj4}lFq#r5$^{oZ671&J*ZnoiS|ixl#`Irm+vOgJfiEUDFgJKj z%47@hT-4&ZAc^t!%&y7b+b_s6{9!!n4bFcKZ<*w`@;m&gWPMb9>~G!wdE3+X3MvHb zI*?)FrFe^f%Dj~}A6GIwDZIiB&ao@J99S2uD%mQ(M$+N;v26|uOd79dl@_-id|05N z>+*4n!UCoXOsn)bL0Q}3C6gAz()1OJf1F{kYT70V%<&>h3zz~tlv*6Y`F@v30OO0G z+uMK+`OtKrXs6HptNzO`UpZa2yL9V0?s?AjE4dC_xX*aZAEde&sCb3W+cbu$sy;hd zj5v<eT8eca^<_=i8@K%F*|f<^g$nHE8@sITj$#R6$T~U20^$a@MjiKF$;TJ33OCMR zJd?KhN|BA+^5fy@427Z&XBhmJ2fs2;lk-3HDV>SMN}$8~%hA79N%kLdE*GwIs5$rk zwtWBbEm_-d|D0dYfBA8$XoH;k^$Xx|JD|+?oWW+2X35{LRlXCC3Ra(CkdwW6+~5p@ z(;?-?D%M3x;!_)L@cXDuc5Ck9iZ|I8qxUlNO?cAY<B1$A7<iP=yLp1cAP?x;Jd0ED z2Fx1v?n){bwmH0E-<SV9QuM>>wZGYG#6QQd9;k+tk~{$iB<I_D{qi?%_+8A9wA1~t zxd^Bf{n6UMbwGcEiRx%+I$EWS)~lnrV7TW3Q;t9E4>-EwmwM_a0Gp)@p00i_>zopr E0NM!b6#xJL literal 0 HcmV?d00001 diff --git a/img/clothes/upper/winterjacket/6_alt_gray.png b/img/clothes/upper/winterjacket/6_alt_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..e76f838ce9ad99e4bed41e8233264322bffefcfa GIT binary patch literal 2827 zcmeAS@N?(olHy`uVBq!ia0y~yU;;83893O0)X@p&(is@IE_u2*hEy=Vy<?mA$U%hR zLCRD<s~ybGANa^H6f)#FpXYt?Qoyt%Absk@d1a1<J`DeT_jycAt={mwR#~l1f7|_g ze*_d98W<RvSU5%*qk%A*5-7_Bn^=}ze);@*epqrZM+(=UlR3*JAz3S6!hveXjUuvM zF@M)z&rS~e;=$c_z`pUvJ$|<4Ermuimpm=nxh7Sv<FhOO8FR(JXF;qB&J>D@f;I2Z z{7_iDe(qZCBchcl44ZH2{FM)2yYTD63x>vHEN+Vf*FNv6d|F_!<g-lw@hv?+-BlNa z{kz7uj_HEbUSVNS?r!|X62fq6^Z$!8QyJ_ZU7Eqr$j)-?@yDaf&prQqbl22PK-p7L z{ujYsZ`5HFZO~bE|FQ?$hw5WdOIV(LuH3c!MTu2x!V#Md_uuPpi`MjZU|q20qX;k9 zbti-Z7*8Z=ZJ)@q;Lb+TNK2-|@Vb;|h1dUW_Gi`=>;7WbxT<o2jN`-_^#x2H=62<R z3z`K5jZyd1LU%+iet5Ka$49w_3gL*7M>lyC`hur2=9taCa-{fxVyfqYN}%Qh3z=o- zT-5$&oL{&9|LwPCvRPZBeoBAT$l|wK&UB&K@scYz-+stq3@=|Vw)SO(QNyeR*=Y{_ zEUTV1Rx7$JHFzhxBd`81+kuLI@lW4Jty)tm+OX+ZunE{D3f>2T86th&ns;e`Ji+j& zzNFCK;p)`dFMs0LHr#$2ba}^Z3!{b~dsG>j?h1EQDtz}{IPs;s%E#LNuRrb`uMxhj zds-xbQKLA<)fJp~^0-zo+<EfypP!_|_v0S?oO`?;#HH1(7m|1{_~Vs-2y6UR^W!h) zH*h)pKjzcV2@3H8mzm}<Rm|ED&A#Fk!=tSK|Nm}W8!h+(9JnTm3z#mnY$~QKQI3}E pqt)AJ9Y2~227fMSWMlou^uXqV_s5-8yMT>c22WQ%mvv4FO#nUzCqe)K literal 0 HcmV?d00001 diff --git a/img/clothes/upper/winterjacket/frayed_alt_gray.png b/img/clothes/upper/winterjacket/frayed_alt_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..8a23f75e3c8e0a6581d9458700f1e555b581ca59 GIT binary patch literal 3284 zcmeH~dr(q&6vr=DQmiDThplF!>H2D{U7fa)fD)hUsA*+xA~fc6D@)dE-~-5+GTSE1 zbuA^xDHkg%-(`x~Y)?rrAC+NZt4NyoL=0c-_4@Drv;X_o{hhhz+&TAqKIi;?zY8Hj zzGf>eR{{WF=I=)h1pp9Uq5zCB{CLin#R0(TB7f@M17}d0PkTcZ#Er(iI+0t~Q`BJ< z_Vem)+w;A^YTwt^kGy1nE0zKcD>%eS8KWj>*d86hdR*!fQCZ^qY)i)JmdiE^I0A(W zpg=Tcd9f_QG6}eNdT-pUm&ZOBhH8iMNH-2=^V`^}YrkzH*Uqbdot;i!u~3xseoC;^ zGdmA3+U|_EUW`v=^P<DYUe=Q5vjw>TF9TGmp^C%W!m{^Y_fKm(6Fa?eQFMBmM(l%U zUy6x!B!JuNo!gHh$en6vD((Ddyx{b?Fw+kxK|mV|^TzkaTsNIgPra@@`H)uV*QC*$ zDB!T!Giu5F_;`gv|3o55nZl!-<c|2(aSuZQhB6s;oQrgEZxWBrv2eb<pAm1uU!M*E z5uY!ALLDpXLiO*4fZSYssV_m)u65FPn}jxwlK3+TBB)J@$DtmT>395sWYlV!4ZImP zDUPgg6s^xV7j1$wb>`{N6LoTT;I*2>_XwU<b4>c{4cWJ7vb^NM7)&-0`GRQWfDDo^ zaI|*kK%R5>$m=+jr~}I&G4F`cI@5k;CX-q9ATgCV%_A!E(uLo-$hY9P=hR#aumf5G zOL)i(;*EoLK;OMPr3oe>&pp1Nc`oQ?>-34y(NUTq`N=DpVPxcfPUcstHSCu1CM#+w zsA^?4AjqH9T1a!qaX~#;f?X)6Srtj6O&LcFtVKCV$s`h6bIk2$3c9y)KoM`c7)F8X z(E4i4zPie7lMrwzu=*(O8=YX@*f2|WVj0Ev7+skt_L#mPNGcUh>{vksJ_^Eb+9C7O z6Skm<j<oHrkSCX|_LE}-M;OC0L-%~LWH<b7NMIpZ@}#>Ez_F4BHM!2ZN#8=tg~4I2 z!=bMBl?}Qha_tO-Q}Uy<z!{CvKs{%URme#sw`C@JPAPCWRDAU2OJ@<<0^u56eRhzp zD(lq%Lq%45?8Xj)tiCuISx4eeqlrY~T+oq06)Z&LNVnCl#g9jpb1_YUj!G=!ueD+Y z`g_dQ0_jPyP&pL7BZI|qzUZTpLSAZ{lpphBU11~@x7$xIA^8Z7`wYb;B$%Aq5Nlx@ zQbVcpl4BdU+E_k=>NVJVhwgGRr$v2Un*4{(u!aK-mg|w9`2btxd17IfDnN<7A*_45 z78GyzV4=5q9Hl=VGNgLQ`}5_br*~*l#o>Mt?G~e|Yc7yiy$5B^)eUrHBb!iD6l_VT z%CM){-n4F7KE({|Vkwo%>BcH~>QoH1yu0hNwO5y$+C~v2VXcBmO<T|k5rsC{6TnkA z#rvNsjlQv?!wDgGDR$f%UGS5S{~=^bV>1M(s~`uEY4NIkPL(<{`ywBTkx&WJWPL3f zu6AMYO<SbeH(|@?hfcb)E6bBRqYhYOy2*tvHk=o}vvHA6O)T*Hr5@^Fbg2D}b&0Oq zz}9!^mS%_?8y#R(b8ZU*B8u1C)1Gg32R*rdex@C+{OhSbMtpe+$>8sPc8dK;Qjw&r zUl7+y^(80Z0#@&O;Ny)<V+gi}`}K`k5TJ}3ZAK@WpUKP|kz6DzTg05YV0%&Of}=<q zCg~|!!6a%(ol@I`zv0F(3%*}$zPPpXY<WFH$)#5&*l3*wXzm+i9nz`BD~bB*Jp5t@ z6v56XWOw%?&PdM72ZH6p(9-U<Ou{k=|Cfa8O*W)W;y-@J8xO&^6~Ny+h<bk?<Ltks C@;;0J literal 0 HcmV?d00001 diff --git a/img/clothes/upper/winterjacket/full_alt_gray.png b/img/clothes/upper/winterjacket/full_alt_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..db3967251de6d0c88069d6ee5d803d1cc4cd1993 GIT binary patch literal 3202 zcmeH~SyU5O7{~8S5=sywh*IHDr6`My2RvXE6`HZEsh9xTfJG9jfCxb>DwQRh9*d|z zT!=^@pq>_J6-?1Yp+PuqNZ34LHKY-!hF~;OECf<R=rFwXvCny$dmq00egEJ6mODk! zw1|avu66)`h1AH<SO8#j2?1Lh^mAX>vljq+Dm8S=jw6skLyuJlE&FK5DE3vgL-AVD zu)o{!VV_DbG6|4LNX}a|S7Pd3m%ezG>YC8`B&?YINF>=X9_i<0GImp7ysd*f!UvFb zVTEAL1lX{kAd7b*JdzItGW_pvCVMFnH&pC!jgp=@tGhX~tFetYnUmN{#83(9;VY@d z+x;$UOaxk0d-Z_DyfQl+#{YxwoHC@}9N72%{d@mWiDi2Fd5Xh}!NKnbO1oFRUB{@S zAvQJ5!q;oDstZg^>SK>jC<E`_#$N?Jp09)OdPkqZDY;ypsFSNR<=ec5ES6R>g+duq z$SJ|Whsm?0rKJr_f1oub!<!@{v*)0+FYei(L8Av+oTta9eDg&<2hs>amjVX3IJ_tk zO1`=idbNoG&PYA4y9s`yKe=-L;EE1Q>jy+%%NbBHFYxW#4&PU&VZsn^cU-h;!KF%R zZKVt6hdl%bVghU+zT#Bx1+hIGcXg1V`VOgM%(C)q&PKXX%`BX=zNhlRtlLV^9VsIC zc=m`SJJq842I_a(9_-oYEu1oGG>NRI?~c5~<;uLZK><4?5nf3S83AR<pn~|LU>@o) z><{i<bB=jpm*n_u9}zy~;1l=PY95!HGozgGAkP*S7KTkEc#A%D$6Y@iI7+}E-l{{L zhTZPvNxP;Gj-0;+Ja%ub;RwWHan%-)HW_rzuvo0kh9wPK5u2grKQnJ&eXqtz2&KI` z9^La+`Rh_-rC_~1e1~v$Sh;tW9`=aip%dpVH|UoLp}K(mdD}3$w8cUwuqdnb!9{5T z)b%kg&I{oq-Dt$0N6-i7<%dE}{GtODj&p5QP(g?S=_Qg@Cu~;)OQ3SwS{F3r5$BG< zaos+PbcXstYUs}jK~thQ&~;wTGEaBh+LIZ%WdX<Ja6FSeaiZ<c;tp@_h<VQ#uD;qR zd$!sgccALK4e4`j`&KsO!vBf|7@*9CCMTYDh;MvGnQfG0O_If}3Po8<i3k-xwVZOu zq9`-4!%<Hcqg`z=Zp(a8Pk*F~Dj1;YdW(-BjCh_ran-DxDcq#c>~9Gv)a#}%8I5w( zUtj93;*;2*a9fH(=xnMyrtQ+$C2f>Gc7k=zqe}B9%}f(JTCY_j%9keEnf`=p43jk9 znAD^y=q0I*_+&6}s@`!P3=@r+c{%s9c&O{;yPxr*HNwHC7hKx2Qz(b*Q(7u{Y59|S zXO#SAZXO*Y??vnYQM<*BF{z^r@b~?;GL&}TQNBI0AZDEnHoexyA~s2@%JnFc_zFZa z;>W8UeAav8%`dtmV)TYGA3UwYhFx0>>ibI2q+3_i3%eRg`RmmJDV%Hc?uE+?iwtx{ z0XMQ!D;qPXaJ0>YWS}ppeldT2RP>Z{&qp%)H-yOHa=-NrQ9~@WDypV<vXI6&*@^+0 zLWUX)lr%n`7pXuE@^^~lO_l8l&>Fw+ywIUtu*u$1;E~oN{(yAuk(+4z)|}g1R`A0& z|4}>rQ!SN!A!A1a@I9PD=5M98kml0HQ3#bk)O?MlnssVhpDxz-o3#r5e-#K$*_vT< XPuz^)(ZYK4-vUs>XrT>XCLR43f`k}@ literal 0 HcmV?d00001 diff --git a/img/clothes/upper/winterjacket/tattered_alt_gray.png b/img/clothes/upper/winterjacket/tattered_alt_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..33d04eef98160921e9d8e57254e59085c07490c3 GIT binary patch literal 3337 zcmeHKe>{_U9Dnv$vuWhlrKLN&6;YBFiOv}jUftpRNDZ6oCAvyF3M2c$mDKsso!GQY zueuWXwR&;77QJ#Alew4t%GRb;ep_g4jNQ|t|L))W(_hc`pU>y}dEUQ1&yy1r;A?2G z(EtDdLw`T-U;qH2BLYC9pvT_@opAtw?eh2b3{6E$N}v9q@H0orIaRKSS-{?_dMzX) zqfEdS#G@1O`bU{&2)X5a)PXQYPkH>0w25mGRS8C$$-xJu)QAeYn7^dRW+2hVcoGvp zfUAd95LT6dd}W~?pj)U4ATh*aBB@l}Vq89jLYaG1Y(>_IlNQsTfVz%`QF6eFXS7w# zln2k7+;h@eE%u&8F^(@O=7lC0<9_QPN<(;fxL{jgVBoE((aN3*5&p42pc+$N_a6y6 z#J<7AHcwpqE(`O?e$7MRt=KEsyyqr))_8Dl(QSn>JD)_8@_4+ITxw09l*nO<M51c# zhYz)?*K`I$=CiC+Dy8%`ps@9K%t&g9E)Z3w`MTE=wsEc9hm%RyoShA@J^<(GR#1p# zoI(~nu>plNZ{TX(mY{r6b@xNtcM^R*y)Og5c$YqQ#Ni+b6@5fe)d1%}nOOmXJ+SsB zx9%<%m+@#bc<C2w)*LcXI*el$CRquIfs4c42%6G^aIaVqBX~zd#sEdTI@A1NRMJ2q z;GU;3Z|9`9b2M>wAY05nVaJLB8#{M8I3!QLiWg_##dEj0aTnVaLgcSU<72ntn6Vdw zec>=_PDS9D(}%()?7;G)8=NvpUx3GuyqVTk-@Yf3ou(R@L=yVX>D==DBve`6&s_%a zJ3HQk0KF|~^*9o%bxmw1FfSc8Jx-NROxz!j(JWbMoPvnJz)k{$sHQuS1r4}%)7dB+ zIQfV`?qd}3fd#^eSoX+MZpn&K&q#Ies&lj=)iKxk+)Xu-YDqm4OBz&Eroiw-S3;K^ zDq0ASeeM93GwweuXub(*;`3_6%9N(}E@vOtUDX9;j2Bzu^=j`=_eQ`Ic434-$J+~d zkljZ5$%chN&PbOD%a~frZ!cg;&$22{uC(@pc<{S3qarZd_5Ehi+I3*#RMN=#JdeQH zxTP+>wy;YojZ$(lV>V`wMaYVvu_6@rTvloep|Nc5q$QgoUhZB`_KM!d(w0yOABl-F z7qg&VUWHX>NHJ6prMT(5QeX-p?ayB4k%N|>+3$;YbYVr#Yr>j(PV@-kbZWJFHiddR zAt7Bkls_pOA3vGUH#|H%l`6Pq@M5hHaPnwz^MeWBv!-KV&-WGNkOM#ta>l;79~~{A zq%5_kUpnS)LJE6Uy$k8aiquhMK)+d=io58UpeXX98`gdkko;nr-;qHW+%afgfH<BM zsk#iO@cHd>95aD7HgLG}quJBq@oX}elks}L{k&+J&qJ4)2irK_AQ5ztvNrV}YZ@sb zoilIV5EyeskRJwTuM-AbahWya9+mc%>!GfxXU^rqU9k`Y*fwse04;CPlYc}8*cM<T zaie#+9i$Sr@LQhIh6OI8(Os3ujR8XHPenlbnw;+0x8kWVh?ni6(eTSafCq|9l81tA zz<Vt%dHAqN8V4h!+5eaA&;>7JM5vo%iBB}hBI>aN5pQu!K89Ap7!l|oRh6c>mMZmf zT8KqNK(rxFumzT*JH*LXzU~(~`gbcVAR_m`L=p+&ZXIoXnWS{l=T-P=s|7<QpE4Fv zzXPw=HK!i?5?<i_+vE*EJ^$rj{PP?C<PH_@*3=D#)JU2rm>rvIBUuvt-*A%fH(d*h zrQ+pt214Mas{`5R^YZUESG#A4?deJ5Q_k7FvJ6!Er(`0%fUM%2pI2|Px*K52d`4>( mja4*OzZd@(7wlWJtT*Jg{Qk-VN;LF~1Ni#{cvpKxXZ{Nt6kN#w literal 0 HcmV?d00001 diff --git a/img/clothes/upper/winterjacket/torn_alt_gray.png b/img/clothes/upper/winterjacket/torn_alt_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..f5e9a87895c800169b679bfd2653256e3bae8b19 GIT binary patch literal 3330 zcmeHKe>l^59RGgT7|P6?N|_ebki#97pKD!<mY8sUluRd~OB~u0W-~qKlqh9+dX$Y5 z^2kbehvrw^(<x$Qi7--F*EX^Z8`<vLxBKt@ynp@m`Fx(|{eFMG-}meFdcWVF^ML`r z#zq^A001zi>?a2S00P>AfPp@=Jigo;2LNlHQpkHk&Vq8W@X$u@^{6)!rIyX(2)7rj zUXn~4a}etfl%q0|jgu<?#=EjhvS&&9+qE{GC+={#me!RV`YqqHz8Mk2yP0a=Yyd<c z4KR4p%4Q`AD@@?A*xY547Y2qH{PU8Io}Qi=zRh8WwVC2>lSJLz5VNelgC&wbC^P#a z7@hsyf!bM`Q-yd|4}J9ErXj7`CdCJVq#G9Vhow>}XB(AD{eD5EVGzlfC>kwnXl5fN zJi)=m9W>2;>VF*#$6^1eR~wrD3+*q9!mZJ$WCx05vonsZIKxU$cTZzBN1_v~!LYEf zz1rE?pX9B}<KxE$HSMjf#&cNER!G1)e@xSH4M+>Yr?O!sze!@#SnKQ(4n>R5`0Z*L z(C~;a29MXh1}8k|Kv5Ak-WSgoscbbPsGv3}@$zB<m)@tuVn8>(X6Ip;1I`9{z(Lu% z^2mDxu6b5&3<_gt$JQbh4}>njQwj01D|JaC1~tPha-XAw(ya1Al7ZfsvVtpcHK~KV z>yi%=g6l`F3cGgS#&x7kg-{J;*e6oP&Qf`;hovwJFPz`Pjmzy)<{?Aw(Ss>SUg>RD z419T@6CM$m)KB*J%-&YDhhX5kIdJ;TRThi2X|ZH!A6?tn*yyi1LKwne!1x#|RStaT zMSDEL*?wWx>6$sK_eKkjM6N_Gu4`&)3b#0Zor>f+=+x@)1VU;Q!Wxk581wOi>zzIX zLjcpXi<5P|an<|d6~^Z}s!7%ijZDXzFe545@pfayQ^X==Vr_K`6|yBt`fK1~*%1nz z?s&<qo?Q^5d1CiI7evhJm(!m*r%R;2+u;$<r&`{d!<AM2*)nMor<<Sy?@9&M?0b5O z*V?F=nC^u$-lo}YQ=)h{B8ii2Kr#=`<j8=bQZsMsk4F*tkKanTsVru$ZiYYbWJ#@b z)eXc*nY{vJicG6zPBNMU3jLPWV!-#A%!0x%sW-=f;oW^v$3my*fV`)`%2a)t%_ybS z2TzYI6d;S`siTpEh0<cbrLQ2j)Tn|Bu-hrfZLmw!`>^hr=+_jzBoxNNj?MgxcjF?* zCNn+VF27b0E09Pe;}+*4`5(5}`$v(G(Td=B0H$0t3;N0B9-qV_^JZK}jm*)9XUA5| zadC`@w%ela$rLwNt}v`@k-97p2+F<Yf*j>XNJ!p{W`_q1`Q1<`+Sh)WKTjSQL-ShQ z`)m-MSX&#GX5`Y1-JbIkS9?#~|I~D4YM9jhP7_cRqGgmEVp>`wMvXCr#NhwpQtcU! zO7_SM+m?KiEo<q%$yCIW?~c44m~THNvB*B$O#E;jP<?aBXAjJRd5HUi`9HRFK?p?% zu<TbzEO@Y8p=!frkSjYOnz`jxq{7{Secmt+aP>Gw2MPi%o;HmS#8Z_eEYVnh|8Lu+ zTM-f0x)-)W;14i17{lP#K#^;HIN2T)s(|1Sa;&g5=1<~O&^LH3bK}4iuNm}yO_frj z+`AJe)a=5Ajg~+xpeYkv;k5D&KuNmrcN(YRQR6B%v1QY@5PQ1XAI8PeMos$o{*!`2 ziJ5*Xi$auFX06TxRNn1AUpo3Lqcvk->wMm$Dx_jpTgok3{ows8PM+M1$=L=kO+%{} zh>)+I5bupemdnx;TN`dNXpk_nda7Ui+XW@IALC-V{mXyM4!jzsqdPxyH2MK#Bf9D7 rO<0*0Rz{|kxp74W|5F8YqfaKI%(oe-E>$_u+XkTQ3n15j7oGDD+bdcT literal 0 HcmV?d00001 diff --git a/img/misc/icon/icon.twee-config.yml b/img/misc/icon/icon.twee-config.yml index 05b38b3774..f234b8ca00 100644 --- a/img/misc/icon/icon.twee-config.yml +++ b/img/misc/icon/icon.twee-config.yml @@ -189,6 +189,17 @@ sugarcube-2:   tags: ["img"] + birdicon: + description: |- + Prints an icon relative to birdTower directory + +  + + `<<birdIcon iconFileName>>` + - **iconFileName**: `string` - filename relative to birdTower directory (including extension) + parameters: + - text + tags: ["img"] brothelicon: description: |- Prints a brothel icon @@ -814,19 +825,12 @@ sugarcube-2: description: |- Prints a moor icon -  -  -  -  -    -   - `<<mooricon iconName?>>` - - **iconName** _optional_: `string` - interest point - - `"nest"` | `"perch"` | `"sing"` | `"rainwater"` | `"remy"` | `"remy cottage"` | `"tower"` | `"firepit"` | `default` + `<<mooricon iconName>>` + - **iconName**: `"remy"` | `"remy cottage"` |`default` parameters: - '|+ "nest"|"perch"|"sing"|"rainwater"|"remy"|"remy cottage"|"tower"|"firepit"' tags: ["img"] @@ -1166,29 +1170,12 @@ sugarcube-2: Prints a composite icon modified by pc's skin colour  -  / -  -  / -  -  / -  -  / -  -  / -  -  / -  -  / -  -  / -  -  / +  `<<skinicon type>>` - **type**: `string` - type of icon to compose - - `"waiter"` | `"chef"` | `"hitchhike"` | `"strip"` | `"pray"` | `"breastEnlarge"` | `"breastReduce"` | `"penisEnlarge"` | `"penisReduce"` parameters: - - '"waiter"|"chef"|"hitchhike"|"strip"|"pray"|"breastEnlarge"|"breastReduce"|"penisEnlarge"|"penisReduce"' + - text smokeicon: description: "" tags: ["img"] diff --git a/img/misc/icon/tending/banana.png b/img/misc/icon/tending/banana.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac492bdbcf19fc312eba6da92ea68f5cce03f34 GIT binary patch literal 484 zcmV<A0UQ2_P)<h;3K|Lk000e1NJLTq0015U0015c1^@s6J20-I00001b5ch_0Itp) z=>Px$gh@m}R7i>K)v-&0K^VvJZ`P_<1}`+pI|PjtBoZ|=1=Y|fG&M9hM+8Dc5QtMQ zjV=+`E+M$N=+-DXh!6ycL4SeQVE5v^_r9-}yatiK&F8)IbC2HL3$x7fmy)w0B4<TJ z(3pj3pl8>o!w**_0dVs^m~)TQ3Sq!&>nlpF_57ycp~DhSCKF1n+x<}R$TVPp-JPfd z{#u$Dgy?0(%egIjcN?A?E%c6?8APg>RccW?ri}{~_Coy<%5iFD5CEx%r(vOAp<Sr5 zXve1mJ76&j%ZERjI}xmaprY<>6Bf`J56d0sKJXG#KzBUQ(rtsw#;0~)D6qWl>g5_a zUd7Sgz<Cz9Y5Em_vHz<t3{WrEIC(rUnmif}4d_;bqjrp~&3W2|Dgdh&`$iyO+^Hw* z_oeOy$ht2$rd#lMN#xUUalE}0xZ1$(3{aThIQgOp3&02kpVwkO9Tx!Z&NcKKlOSM( zf=|aIlby5cUPS4>!|26e3d$G{mcPQJ&@BHiUuR01JDz>V7ytkO4rN$LW=%~1DgXcg a2mk;800000(o>TF0000<MNUMnLSTY(w9q^N literal 0 HcmV?d00001 diff --git a/img/misc/icon/tending/orange.png b/img/misc/icon/tending/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..f9b127a506a59aef2f9d4385c9c9e12c8971ec24 GIT binary patch literal 684 zcmV;d0#p5oP)<h;3K|Lk000e1NJLTq0015U0015c1^@s6J20-I00001b5ch_0Itp) z=>Px%Oi4sRR7i>Cma%IZQ5?rVN(oAbK*G^MvIN0w2|8q|Q>QMHv5+BCmt-^{dshE~ zOj=68sapoOC>=UPDp_i|MM4EJx&#}^(Cc7+=ey^7cV}8CrQgN#`Mdl4zQ5n^y%YXb zrS}WoUx9v_9(zxLKU)SO*Z1$Q66yVdcX+hQ$1hjQGUI^-czCo5z}`-QSKt9uJ1&!! z!`bCE<v$4)R{|{6>Qp-}_b={94>tX{-K}*hj68ty%|jv%*cv3zy`2I8rCObX?JU)f z%k8(jdE8)=US<qHw>{<a*Aa0NF#f1QOSL*c0IIqL`0-|qVbk@$O9EkVYpDf#u$=|w z{Y>M~81w<i<x`K*YdFPO+_33BuFuMEgIgUxe>r5*asum(L7!Yc6@WO!EI(hr1t58G z?ypBVPny7Im)A^MGiQxKpI&B6FEjR`!=~#)RiH@L=M{<JxU#Y0!E93Xn+2*nR;9Wh zHeIW0qhk|P1xYDwP`P%BS*z;+xU#Y0*`TU)piPqC?$)|rNh4TSw>@2eNq<dJd!4*E z5AAj6$)(<4gN4EM)&$~g59qe10mm?RZF`t1>9J`5L&0DkF8NeTZ-S0aPXh6=!MS{D z!Li7+oz#bqPER5SFaR#!JS60h4}<F4$+XSXq~3k_zOauY-^bnd)Hr0SL%ru=B^DXa zYIQ&B(oZr0*aptz79xgAhna@W<}Rwo*7v2&wF=kUps(B9hJwT3dJ<{^aiEc4fy4a8 z5vAYy>+_TZ;sTcj>j~(J3;cie3y?f&1GK*^4gdfE4rN$LW=%~1DgXcg2mk;800000 S(o>TF0000<MNUMnLSTY$Wjzi6 literal 0 HcmV?d00001 diff --git a/jsconfig.json b/jsconfig.json index 54f0cba5dd..a275e21537 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -6,7 +6,8 @@ "jsx": "react", "allowImportingTsExtensions": true, "strictNullChecks": true, - "strictFunctionTypes": true + "strictFunctionTypes": true, + "allowJs": true }, "exclude": ["node_modules", "**/node_modules/*"] } diff --git a/modules/css/base.css b/modules/css/base.css index cfcb3570f8..74823d9c0a 100644 --- a/modules/css/base.css +++ b/modules/css/base.css @@ -1661,12 +1661,27 @@ body.has-images #storyCaptionContent { .outfitContainer { display: grid; + grid-gap: 4px; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); } +.outfitContainer button { + border: 1px solid var(--300); + background-color: var(--900); + color: var(--link); + font-size: 100%; + word-wrap: break-word; +} + +.outfitContainer button:hover { + border: 1px solid var(--150); + background-color: var(--750); + color: var(--gold); +} + .wardrobeOutfit { text-overflow: ellipsis; - overflow: hidden; + overflow: hidden; text-align: center; padding: 2px; border: solid 1px var(--300); diff --git a/package-lock.json b/package-lock.json index 69f8baf158..73e27942e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,75 +1,70 @@ { "name": "dol", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "dol", "version": "1.0.0", "devDependencies": { - "@types/jquery": "^3.5.14", - "eslint": "^8.52.0", + "@types/jquery": "^3.5.30", + "@types/twine-sugarcube": "^2.36.11", + "eslint": "^8.57.0", "eslint-config-prettier": "^8.10.0", "eslint-config-prettier-standard": "^4.0.1", "eslint-config-standard": "^17.1.0", - "eslint-plugin-es-x": "^7.2.0", - "eslint-plugin-import": "^2.29.0", + "eslint-plugin-es-x": "^7.6.0", + "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsdoc": "^39.9.1", "eslint-plugin-n": "^15.7.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", - "husky": "^8.0.1", - "lint-staged": "^13.0.3", - "prettier": "^2.7.1", + "husky": "^8.0.3", + "lint-staged": "^13.3.0", + "prettier": "^2.8.8", "prettier-config-standard": "^5.0.0", - "stylelint": "^14.9.1", - "stylelint-config-prettier": "^9.0.3", - "stylelint-config-property-sort-order-smacss": "^9.0.0", + "stylelint": "^14.16.1", + "stylelint-config-prettier": "^9.0.5", + "stylelint-config-property-sort-order-smacss": "^9.1.0", "stylelint-config-standard": "^26.0.0", - "stylelint-no-unsupported-browser-features": "^5.0.3", - "stylelint-prettier": "^2.0.0" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "stylelint-no-unsupported-browser-features": "^5.0.4", + "stylelint-prettier": "^2.0.0", + "typescript": "^5.4.5" } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", + "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "^7.24.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -147,19 +142,18 @@ } }, "node_modules/@csstools/selector-specificity": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.1.tgz", - "integrity": "sha512-aG20vknL4/YjQF9BSV7ts4EWm/yrjagAN7OWBNmlbEOUiu0llj4OGrFoOKK3g2vey4/p2omKCoHrWtPxSwV3HA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", "dev": true, "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.3", "postcss-selector-parser": "^6.0.10" } }, @@ -193,18 +187,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -225,22 +219,22 @@ } }, "node_modules/@eslint/js": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", - "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -261,9 +255,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "node_modules/@nodelib/fs.scandir": { @@ -302,9 +296,9 @@ } }, "node_modules/@types/jquery": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.14.tgz", - "integrity": "sha512-X1gtMRMbziVQkErhTQmSe2jFwwENA/Zr+PprCkF63vFq+Yt5PZ4AlKqgmeNlwgn7dhsXEK888eIW2520EpC+xg==", + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz", + "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==", "dev": true, "dependencies": { "@types/sizzle": "*" @@ -323,29 +317,38 @@ "dev": true }, "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true }, "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true }, "node_modules/@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", "dev": true }, + "node_modules/@types/twine-sugarcube": { + "version": "2.36.11", + "resolved": "https://registry.npmjs.org/@types/twine-sugarcube/-/twine-sugarcube-2.36.11.tgz", + "integrity": "sha512-0EGEsgCP7Rgw5E3gc8xXujwEzg/NHgZl3TmC3TbFMUQctSm7MaXHTVYCv99BKednbhQJQxGgcpRNNYcu6cCEMg==", + "dev": true, + "dependencies": { + "@types/jquery": "*" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -353,9 +356,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -373,19 +376,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -403,24 +393,24 @@ } }, "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, "dependencies": { - "type-fest": "^0.21.3" + "type-fest": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "engines": { "node": ">=10" @@ -460,13 +450,16 @@ "dev": true }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -482,15 +475,16 @@ } }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -510,16 +504,17 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -565,17 +560,18 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "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" }, "engines": { @@ -604,10 +600,13 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -644,9 +643,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", - "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -656,13 +655,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001359", - "electron-to-chromium": "^1.4.172", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.4" + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -672,23 +675,28 @@ } }, "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", "dev": true, "dependencies": { "semver": "^7.0.0" } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -730,9 +738,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001574", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001574.tgz", - "integrity": "sha512-BtYEK4r/iHt/txm81KBudCUcTy7t+s9emrIaHqjYurQ10x71zJ5VQ9x1dYPcz/b+pKSp4y/v1xSI67A+LzpNyg==", + "version": "1.0.30001617", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz", + "integrity": "sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA==", "dev": true, "funding": [ { @@ -765,25 +773,19 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, "dependencies": { - "restore-cursor": "^3.1.0" + "restore-cursor": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-truncate": { @@ -842,16 +844,21 @@ "node": ">=8" } }, - "node_modules/clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { - "is-regexp": "^2.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/color-convert": { @@ -873,24 +880,24 @@ "dev": true }, "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, "node_modules/commander": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", - "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", "dev": true, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=16" } }, "node_modules/comment-parser": { @@ -915,9 +922,9 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "dependencies": { "@types/parse-json": "^4.0.0", @@ -954,12 +961,12 @@ } }, "node_modules/css-functions-list": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", - "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", + "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", "dev": true, "engines": { - "node": ">=12.22" + "node": ">=12 || >=16" } }, "node_modules/css-property-sort-order-smacss": { @@ -983,6 +990,12 @@ "css-rule-stream": "index.js" } }, + "node_modules/css-rule-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, "node_modules/css-rule-stream/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", @@ -1027,6 +1040,57 @@ "node": ">=4" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -1054,9 +1118,9 @@ } }, "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "dependencies": { "decamelize": "^1.1.0", @@ -1064,6 +1128,9 @@ }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/decamelize-keys/node_modules/map-obj": { @@ -1082,17 +1149,20 @@ "dev": true }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -1176,9 +1246,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.176", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.176.tgz", - "integrity": "sha512-92JdgyRlcNDwuy75MjuFSb3clt6DGJ2IXSpg0MCjKd3JV9eSmuUAIyWiGAp/EtT0z2D4rqbYqThQLV90maH3Zw==", + "version": "1.4.763", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.763.tgz", + "integrity": "sha512-k4J8NrtJ9QrvHLRo8Q18OncqBCB7tIUyqxRcJnlonQ0ioHKYB988GcDFF3ZePmnb8eHEopDs/wPHR/iGAFgoUQ==", "dev": true }, "node_modules/emoji-regex": { @@ -1197,50 +1267,57 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "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.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "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.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "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.13" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -1249,15 +1326,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -1290,9 +1400,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -1311,16 +1421,16 @@ } }, "node_modules/eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", - "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.52.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -1365,6 +1475,21 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-compat-utils": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz", + "integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==", + "dev": true, + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, "node_modules/eslint-config-prettier": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", @@ -1439,9 +1564,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -1484,13 +1609,14 @@ } }, "node_modules/eslint-plugin-es-x": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.2.0.tgz", - "integrity": "sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.6.0.tgz", + "integrity": "sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.6.0" + "@eslint-community/regexpp": "^4.6.0", + "eslint-compat-utils": "^0.5.0" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -1527,9 +1653,9 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", - "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "dependencies": { "array-includes": "^3.1.7", @@ -1548,7 +1674,7 @@ "object.groupby": "^1.0.1", "object.values": "^1.1.7", "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -1721,76 +1847,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -1850,15 +1906,21 @@ "node": ">=0.10.0" } }, - "node_modules/execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", - "human-signals": "^3.0.1", + "human-signals": "^4.3.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", @@ -1867,24 +1929,12 @@ "strip-final-newline": "^3.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", - "dev": true, - "dependencies": { - "clone-regexp": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1892,15 +1942,15 @@ "dev": true }, "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -1938,15 +1988,18 @@ "dev": true }, "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -1976,13 +2029,30 @@ "node": ">=8" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { @@ -1990,9 +2060,9 @@ } }, "node_modules/flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/for-each": { @@ -2056,30 +2126,22 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "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" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-stream": { @@ -2095,13 +2157,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -2181,9 +2244,9 @@ } }, "node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2196,12 +2259,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -2282,21 +2346,21 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { "node": ">= 0.4" @@ -2318,12 +2382,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -2333,9 +2397,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -2357,9 +2421,9 @@ } }, "node_modules/html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, "engines": { "node": ">=8" @@ -2369,18 +2433,18 @@ } }, "node_modules/human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true, "engines": { - "node": ">=12.20.0" + "node": ">=14.18.0" } }, "node_modules/husky": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", - "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true, "bin": { "husky": "lib/bin.js" @@ -2393,9 +2457,9 @@ } }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -2467,12 +2531,12 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -2481,14 +2545,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2552,6 +2618,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -2601,9 +2682,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -2679,22 +2760,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2743,12 +2818,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -2770,9 +2845,9 @@ } }, "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "node_modules/isexe": { @@ -2808,6 +2883,12 @@ "node": ">=12.0.0" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -2838,6 +2919,15 @@ "json5": "lib/cli.js" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -2848,9 +2938,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz", - "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", + "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", "dev": true }, "node_modules/ldjson-stream": { @@ -2863,6 +2953,12 @@ "through2": "^0.6.1" } }, + "node_modules/ldjson-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, "node_modules/ldjson-stream/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", @@ -2899,9 +2995,9 @@ } }, "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, "engines": { "node": ">=10" @@ -2914,52 +3010,59 @@ "dev": true }, "node_modules/lint-staged": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", - "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", - "dev": true, - "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.17", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.1.1" + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.3.0.tgz", + "integrity": "sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==", + "dev": true, + "dependencies": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" }, "bin": { "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": "^16.14.0 || >=18.0.0" }, "funding": { "url": "https://opencollective.com/lint-staged" } }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/listr2": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", "dev": true, "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" + "wrap-ansi": "^8.1.0" }, "engines": { - "node": ">=12" + "node": ">=16.0.0" }, "peerDependencies": { "enquirer": ">= 2.3.0 < 3" @@ -2970,65 +3073,21 @@ } } }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/listr2/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -3048,81 +3107,49 @@ "dev": true }, "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", "dev": true, "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/log-update/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "node": ">=12" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/lru-cache": { @@ -3316,10 +3343,16 @@ } }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "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" }, @@ -3334,9 +3367,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/normalize-package-data": { @@ -3364,9 +3397,9 @@ } }, "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { "path-key": "^4.0.0" @@ -3409,13 +3442,13 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -3427,14 +3460,15 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3444,26 +3478,28 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3497,29 +3533,44 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "aggregate-error": "^3.0.0" + "p-limit": "^3.0.2" }, "engines": { "node": ">=10" @@ -3528,6 +3579,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3558,6 +3618,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3621,10 +3690,19 @@ "node": ">=0.10" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -3634,12 +3712,16 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -3674,9 +3756,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "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", @@ -3687,12 +3769,12 @@ } }, "node_modules/postcss-sorting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz", - "integrity": "sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz", + "integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==", "dev": true, "peerDependencies": { - "postcss": "^8.3.9" + "postcss": "^8.4.20" } }, "node_modules/postcss-value-parser": { @@ -3711,9 +3793,9 @@ } }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -3747,9 +3829,9 @@ } }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" @@ -3868,24 +3950,6 @@ "node": ">=8" } }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -3914,9 +3978,9 @@ } }, "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -3943,6 +4007,12 @@ "string_decoder": "~0.10.x" } }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -3957,14 +4027,15 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -4030,16 +4101,19 @@ } }, "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/restore-cursor/node_modules/mimic-fn": { @@ -4077,9 +4151,9 @@ } }, "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", "dev": true }, "node_modules/rimraf": { @@ -4120,23 +4194,14 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -4147,12 +4212,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -4174,27 +4233,27 @@ ] }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -4203,29 +4262,32 @@ } }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "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.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4253,14 +4315,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4298,9 +4364,9 @@ } }, "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "engines": { "node": ">=12" @@ -4319,18 +4385,18 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "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/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", @@ -4338,9 +4404,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -4354,9 +4420,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", "dev": true }, "node_modules/split2": { @@ -4368,6 +4434,12 @@ "through2": "~0.6.1" } }, + "node_modules/split2/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, "node_modules/split2/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", @@ -4397,9 +4469,9 @@ "dev": true }, "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "engines": { "node": ">=0.6.19" @@ -4435,9 +4507,9 @@ } }, "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { "ansi-regex": "^6.0.1" @@ -4450,14 +4522,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4467,28 +4540,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4558,51 +4634,49 @@ "dev": true }, "node_modules/stylelint": { - "version": "14.9.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.9.1.tgz", - "integrity": "sha512-RdAkJdPiLqHawCSnu21nE27MjNXaVd4WcOHA4vK5GtIGjScfhNnaOuWR2wWdfKFAvcWQPOYe311iveiVKSmwsA==", + "version": "14.16.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz", + "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==", "dev": true, "dependencies": { - "@csstools/selector-specificity": "^2.0.1", + "@csstools/selector-specificity": "^2.0.2", "balanced-match": "^2.0.0", - "colord": "^2.9.2", - "cosmiconfig": "^7.0.1", + "colord": "^2.9.3", + "cosmiconfig": "^7.1.0", "css-functions-list": "^3.1.0", "debug": "^4.3.4", - "execall": "^2.0.0", - "fast-glob": "^3.2.11", - "fastest-levenshtein": "^1.0.12", + "fast-glob": "^3.2.12", + "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.2.0", - "ignore": "^5.2.0", + "ignore": "^5.2.1", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.25.0", + "known-css-properties": "^0.26.0", "mathml-tag-names": "^2.1.3", "meow": "^9.0.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.14", + "postcss": "^8.4.19", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.10", + "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "style-search": "^0.1.0", - "supports-hyperlinks": "^2.2.0", + "supports-hyperlinks": "^2.3.0", "svg-tags": "^1.0.0", - "table": "^6.8.0", + "table": "^6.8.1", "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.1" + "write-file-atomic": "^4.0.2" }, "bin": { "stylelint": "bin/stylelint.js" @@ -4616,9 +4690,9 @@ } }, "node_modules/stylelint-config-prettier": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-9.0.3.tgz", - "integrity": "sha512-5n9gUDp/n5tTMCq1GLqSpA30w2sqWITSSEiAWQlpxkKGAUbjcemQ0nbkRvRUa0B1LgD3+hCvdL7B1eTxy1QHJg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-9.0.5.tgz", + "integrity": "sha512-U44lELgLZhbAD/xy/vncZ2Pq8sh2TnpiPvo38Ifg9+zeioR+LAkHu0i6YORIOxFafZoVg0xqQwex6e6F25S5XA==", "dev": true, "bin": { "stylelint-config-prettier": "bin/check.js", @@ -4628,20 +4702,20 @@ "node": ">= 12" }, "peerDependencies": { - "stylelint": ">=11.0.0" + "stylelint": ">= 11.x < 15" } }, "node_modules/stylelint-config-property-sort-order-smacss": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-property-sort-order-smacss/-/stylelint-config-property-sort-order-smacss-9.0.0.tgz", - "integrity": "sha512-jQ1miJ6uQA+n6UkunhdhBmjFd5XCe/X7l9/yBI2KGdU+8+nYt1/7slHeLvsT7SCYByYqaLt9fUUCCOjyXH6PCw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-property-sort-order-smacss/-/stylelint-config-property-sort-order-smacss-9.1.0.tgz", + "integrity": "sha512-TijYeDoDgHAFjpn9NnziQrmUCGrm2AM4e1HzsdI2mCWBRkQRuewc343YqDwdFgQ5eHoMZ3JRL02i72W3vktuDA==", "dev": true, "dependencies": { "css-property-sort-order-smacss": "~2.2.0", - "stylelint-order": "^5.0.0" + "stylelint-order": "^6.0.2" }, "peerDependencies": { - "stylelint": "^14.0.0" + "stylelint": "^14.0.0 || ^15.0.0" } }, "node_modules/stylelint-config-recommended": { @@ -4666,14 +4740,14 @@ } }, "node_modules/stylelint-no-unsupported-browser-features": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.3.tgz", - "integrity": "sha512-FqfbOTk5UEkHsAKOkPH6SvajsfO9YuoWvKxd34tCRBZug9ZNeaPn141nyWkd+ncc8S1gVmO2+O6qVAMj9bvWww==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.4.tgz", + "integrity": "sha512-05DeIsWv262DXTSWhbQURDOxno9Tsu81sNnOpG1gD39WT+NNsEjhR2BQvwvNpZ/J/lS8vHxjhHULU2OGKSswvA==", "dev": true, "dependencies": { "doiuse": "^4.4.1", "lodash": "^4.17.15", - "postcss": "^8.3.6" + "postcss": "^8.4.16" }, "engines": { "node": ">=12" @@ -4683,16 +4757,16 @@ } }, "node_modules/stylelint-order": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz", - "integrity": "sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz", + "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==", "dev": true, "dependencies": { - "postcss": "^8.3.11", - "postcss-sorting": "^7.0.1" + "postcss": "^8.4.32", + "postcss-sorting": "^8.0.2" }, "peerDependencies": { - "stylelint": "^14.0.0" + "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1" } }, "node_modules/stylelint-prettier": { @@ -4768,9 +4842,9 @@ } }, "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, "dependencies": { "has-flag": "^4.0.0", @@ -4799,9 +4873,9 @@ "dev": true }, "node_modules/table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -4815,15 +4889,15 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" }, "funding": { "type": "github", @@ -4888,12 +4962,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, "node_modules/through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", @@ -4904,9 +4972,9 @@ } }, "node_modules/through2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", @@ -4948,9 +5016,9 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", @@ -4959,12 +5027,6 @@ "strip-bom": "^3.0.0" } }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -4990,29 +5052,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -5022,16 +5085,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -5041,19 +5105,38 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -5070,9 +5153,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", - "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", + "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", "dev": true, "funding": [ { @@ -5082,14 +5165,18 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "escalade": "^3.1.1", + "escalade": "^3.1.2", "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -5111,9 +5198,9 @@ "dev": true }, "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", "dev": true }, "node_modules/validate-npm-package-license": { @@ -5158,16 +5245,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5176,50 +5263,69 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/wrappy": { @@ -5229,16 +5335,16 @@ "dev": true }, "node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/xtend": { @@ -5266,9 +5372,9 @@ "dev": true }, "node_modules/yaml": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", - "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", "dev": true, "engines": { "node": ">= 14" @@ -5342,3878 +5448,5 @@ "url": "https://github.com/sponsors/sindresorhus" } } - }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@csstools/selector-specificity": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.1.tgz", - "integrity": "sha512-aG20vknL4/YjQF9BSV7ts4EWm/yrjagAN7OWBNmlbEOUiu0llj4OGrFoOKK3g2vey4/p2omKCoHrWtPxSwV3HA==", - "dev": true, - "requires": {} - }, - "@es-joy/jsdoccomment": { - "version": "0.36.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.1.tgz", - "integrity": "sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg==", - "dev": true, - "requires": { - "comment-parser": "1.3.1", - "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~3.1.0" - } - }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@eslint/js": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", - "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@types/jquery": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.14.tgz", - "integrity": "sha512-X1gtMRMbziVQkErhTQmSe2jFwwENA/Zr+PprCkF63vFq+Yt5PZ4AlKqgmeNlwgn7dhsXEK888eIW2520EpC+xg==", - "dev": true, - "requires": { - "@types/sizzle": "*" - } - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, - "@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - } - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true - }, - "array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - } - }, - "array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "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 - }, - "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, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", - "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001359", - "electron-to-chromium": "^1.4.172", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.4" - } - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "dev": true, - "requires": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caniuse-lite": { - "version": "1.0.30001574", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001574.tgz", - "integrity": "sha512-BtYEK4r/iHt/txm81KBudCUcTy7t+s9emrIaHqjYurQ10x71zJ5VQ9x1dYPcz/b+pKSp4y/v1xSI67A+LzpNyg==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", - "dev": true, - "requires": { - "is-regexp": "^2.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "commander": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", - "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", - "dev": true - }, - "comment-parser": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", - "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "dependencies": { - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - } - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "css-functions-list": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", - "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", - "dev": true - }, - "css-property-sort-order-smacss": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/css-property-sort-order-smacss/-/css-property-sort-order-smacss-2.2.0.tgz", - "integrity": "sha512-nXutswsivIEBOrPo/OZw2KQjFPLvtg68aovJf6Kqrm3L6FmTvvFPaeDrk83hh0+pRJGuP3PeKJwMS0E6DFipdQ==", - "dev": true - }, - "css-rule-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz", - "integrity": "sha512-qiio/Zkr8I19jh/XuzEkK8OKDQRTrEYaRyIHy4Bwh/tPUe0w8GcQs7r6x24Yc9lT+FbnZFYULxEIXCmaymguUQ==", - "dev": true, - "requires": { - "css-tokenize": "^1.0.1", - "duplexer2": "0.0.2", - "ldjson-stream": "^1.2.1", - "through2": "^0.6.3" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "css-tokenize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz", - "integrity": "sha512-gLmmbJdwH9HLY4bcA17lnZ8GgPwEXRbvxBJGHnkiB6gLhRpTzjkjtMIvz7YORGW/Ptv2oMk8b5g+u7mRD6Dd7A==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^1.0.33" - } - }, - "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 - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - } - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - } - }, - "define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "requires": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "doiuse": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-4.4.1.tgz", - "integrity": "sha512-TUpr1/YNg20IB09tZmwGCTsTQoxj8jUld/hUZprZMj8vj0VpAJySXEWCr8WMvqvgzk0/kG/FxeSMGKode4UjPg==", - "dev": true, - "requires": { - "browserslist": "^4.16.1", - "caniuse-lite": "^1.0.30001179", - "css-rule-stream": "^1.1.0", - "duplexer2": "0.0.2", - "ldjson-stream": "^1.2.1", - "multimatch": "^5.0.0", - "postcss": "^8.2.4", - "source-map": "^0.7.3", - "through2": "^4.0.2", - "yargs": "^16.2.0" - } - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", - "dev": true, - "requires": { - "readable-stream": "~1.1.9" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.176", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.176.tgz", - "integrity": "sha512-92JdgyRlcNDwuy75MjuFSb3clt6DGJ2IXSpg0MCjKd3JV9eSmuUAIyWiGAp/EtT0z2D4rqbYqThQLV90maH3Zw==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" - } - }, - "es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" - } - }, - "es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "requires": { - "hasown": "^2.0.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", - "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.52.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", - "dev": true, - "requires": {} - }, - "eslint-config-prettier-standard": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-prettier-standard/-/eslint-config-prettier-standard-4.0.1.tgz", - "integrity": "sha512-l5IsZo387QArxPcRl6qcsQnc0hf66rrV5p3RvMDcHL9FGXRJ/s3/ZCES343gMGgyYN+XTJpBnwJHCnZegAMmfw==", - "dev": true, - "requires": {} - }, - "eslint-config-standard": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", - "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", - "dev": true, - "requires": {} - }, - "eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "dev": true, - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", - "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "eslint-plugin-es-x": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.2.0.tgz", - "integrity": "sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.6.0" - } - }, - "eslint-plugin-import": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", - "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", - "dev": true, - "requires": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "eslint-plugin-jsdoc": { - "version": "39.9.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.9.1.tgz", - "integrity": "sha512-Rq2QY6BZP2meNIs48aZ3GlIlJgBqFCmR55+UBvaDkA3ZNQ0SvQXOs2QKkubakEijV8UbIVbVZKsOVN8G3MuqZw==", - "dev": true, - "requires": { - "@es-joy/jsdoccomment": "~0.36.1", - "comment-parser": "1.3.1", - "debug": "^4.3.4", - "escape-string-regexp": "^4.0.0", - "esquery": "^1.4.0", - "semver": "^7.3.8", - "spdx-expression-parse": "^3.0.1" - } - }, - "eslint-plugin-n": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", - "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", - "dev": true, - "requires": { - "builtins": "^5.0.1", - "eslint-plugin-es": "^4.1.0", - "eslint-utils": "^3.0.0", - "ignore": "^5.1.1", - "is-core-module": "^2.11.0", - "minimatch": "^3.1.2", - "resolve": "^1.22.1", - "semver": "^7.3.8" - } - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", - "dev": true, - "requires": {} - }, - "eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true - }, - "espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - } - }, - "execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", - "dev": true, - "requires": { - "clone-regexp": "^2.1.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "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, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "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, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "dev": true, - "requires": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - } - }, - "get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "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" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.2" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dev": true, - "requires": { - "function-bind": "^1.1.2" - } - }, - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", - "dev": true - }, - "human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", - "dev": true - }, - "husky": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", - "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - } - }, - "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "requires": { - "hasown": "^2.0.0" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true - }, - "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, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "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 - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "requires": { - "which-typed-array": "^1.1.11" - } - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsdoc-type-pratt-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", - "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "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", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "known-css-properties": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz", - "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==", - "dev": true - }, - "ldjson-stream": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz", - "integrity": "sha512-xw/nNEXafuPSLu8NjjG3+atVVw+8U1APZAQylmwQn19Hgw6rC7QjHvP6MupnHWCrzSm9m0xs5QWkCLuRvBPjgQ==", - "dev": true, - "requires": { - "split2": "^0.2.1", - "through2": "^0.6.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "lint-staged": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", - "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", - "dev": true, - "requires": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.17", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.1.1" - } - }, - "listr2": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, - "mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true - }, - "meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - } - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - } - } - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", - "dev": true - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "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 - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true - } - } - }, - "object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "requires": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "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 - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true - }, - "postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "dev": true, - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true - }, - "postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", - "dev": true - }, - "postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true, - "requires": {} - }, - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-sorting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz", - "integrity": "sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==", - "dev": true, - "requires": {} - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "prettier-config-standard": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/prettier-config-standard/-/prettier-config-standard-5.0.0.tgz", - "integrity": "sha512-QK252QwCxlsak8Zx+rPKZU31UdbRcu9iUk9X1ONYtLSO221OgvV9TlKoTf6iPDZtvF3vE2mkgzFIEgSUcGELSQ==", - "dev": true, - "requires": {} - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "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 - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - } - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dev": true, - "requires": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - } - }, - "set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "dev": true, - "requires": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", - "dev": true - } - } - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "split2": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz", - "integrity": "sha512-D/oTExYAkC9nWleOCTOyNmAuzfAT/6rHGBA9LIK7FVnGo13CSvrKCUzKenwH6U1s2znY9MqH6v0UQTEDa3vJmg==", - "dev": true, - "requires": { - "through2": "~0.6.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "style-search": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", - "dev": true - }, - "stylelint": { - "version": "14.9.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.9.1.tgz", - "integrity": "sha512-RdAkJdPiLqHawCSnu21nE27MjNXaVd4WcOHA4vK5GtIGjScfhNnaOuWR2wWdfKFAvcWQPOYe311iveiVKSmwsA==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "^2.0.1", - "balanced-match": "^2.0.0", - "colord": "^2.9.2", - "cosmiconfig": "^7.0.1", - "css-functions-list": "^3.1.0", - "debug": "^4.3.4", - "execall": "^2.0.0", - "fast-glob": "^3.2.11", - "fastest-levenshtein": "^1.0.12", - "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.2.0", - "ignore": "^5.2.0", - "import-lazy": "^4.0.0", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.25.0", - "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.14", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^2.2.0", - "svg-tags": "^1.0.0", - "table": "^6.8.0", - "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.1" - }, - "dependencies": { - "balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "stylelint-config-prettier": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-9.0.3.tgz", - "integrity": "sha512-5n9gUDp/n5tTMCq1GLqSpA30w2sqWITSSEiAWQlpxkKGAUbjcemQ0nbkRvRUa0B1LgD3+hCvdL7B1eTxy1QHJg==", - "dev": true, - "requires": {} - }, - "stylelint-config-property-sort-order-smacss": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-property-sort-order-smacss/-/stylelint-config-property-sort-order-smacss-9.0.0.tgz", - "integrity": "sha512-jQ1miJ6uQA+n6UkunhdhBmjFd5XCe/X7l9/yBI2KGdU+8+nYt1/7slHeLvsT7SCYByYqaLt9fUUCCOjyXH6PCw==", - "dev": true, - "requires": { - "css-property-sort-order-smacss": "~2.2.0", - "stylelint-order": "^5.0.0" - } - }, - "stylelint-config-recommended": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-8.0.0.tgz", - "integrity": "sha512-IK6dWvE000+xBv9jbnHOnBq01gt6HGVB2ZTsot+QsMpe82doDQ9hvplxfv4YnpEuUwVGGd9y6nbaAnhrjcxhZQ==", - "dev": true, - "requires": {} - }, - "stylelint-config-standard": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-26.0.0.tgz", - "integrity": "sha512-hUuB7LaaqM8abvkOO84wh5oYSkpXgTzHu2Zza6e7mY+aOmpNTjoFBRxSLlzY0uAOMWEFx0OMKzr+reG1BUtcqQ==", - "dev": true, - "requires": { - "stylelint-config-recommended": "^8.0.0" - } - }, - "stylelint-no-unsupported-browser-features": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.3.tgz", - "integrity": "sha512-FqfbOTk5UEkHsAKOkPH6SvajsfO9YuoWvKxd34tCRBZug9ZNeaPn141nyWkd+ncc8S1gVmO2+O6qVAMj9bvWww==", - "dev": true, - "requires": { - "doiuse": "^4.4.1", - "lodash": "^4.17.15", - "postcss": "^8.3.6" - } - }, - "stylelint-order": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz", - "integrity": "sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==", - "dev": true, - "requires": { - "postcss": "^8.3.11", - "postcss-sorting": "^7.0.1" - } - }, - "stylelint-prettier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stylelint-prettier/-/stylelint-prettier-2.0.0.tgz", - "integrity": "sha512-jvT3G+9lopkeB0ARmDPszyfaOnvnIF+30QCjZxyt7E6fynI1T9mOKgYDNb9bXX17M7PXMZaX3j/26wqakjp1tw==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true - }, - "table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "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, - "requires": { - "is-number": "^7.0.0" - } - }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true - }, - "tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - } - }, - "typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - } - }, - "typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - } - }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - } - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "update-browserslist-db": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", - "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "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" - } - }, - "which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", - "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } } } diff --git a/package.json b/package.json index 07d444cd24..728c2d05d0 100644 --- a/package.json +++ b/package.json @@ -9,26 +9,28 @@ "lint": "eslint --fix --ext .js,.jsx ." }, "devDependencies": { - "@types/jquery": "^3.5.14", - "eslint": "^8.52.0", + "@types/jquery": "^3.5.30", + "@types/twine-sugarcube": "^2.36.11", + "eslint": "^8.57.0", "eslint-config-prettier": "^8.10.0", "eslint-config-prettier-standard": "^4.0.1", "eslint-config-standard": "^17.1.0", - "eslint-plugin-es-x": "^7.2.0", - "eslint-plugin-import": "^2.29.0", + "eslint-plugin-es-x": "^7.6.0", + "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsdoc": "^39.9.1", "eslint-plugin-n": "^15.7.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", - "husky": "^8.0.1", - "lint-staged": "^13.0.3", - "prettier": "^2.7.1", + "husky": "^8.0.3", + "lint-staged": "^13.3.0", + "prettier": "^2.8.8", "prettier-config-standard": "^5.0.0", - "stylelint": "^14.9.1", - "stylelint-config-prettier": "^9.0.3", - "stylelint-config-property-sort-order-smacss": "^9.0.0", + "stylelint": "^14.16.1", + "stylelint-config-prettier": "^9.0.5", + "stylelint-config-property-sort-order-smacss": "^9.1.0", "stylelint-config-standard": "^26.0.0", - "stylelint-no-unsupported-browser-features": "^5.0.3", - "stylelint-prettier": "^2.0.0" + "stylelint-no-unsupported-browser-features": "^5.0.4", + "stylelint-prettier": "^2.0.0", + "typescript": "^5.4.5" } } diff --git a/t3lt.twee-config.yml b/t3lt.twee-config.yml index f8e594ac23..dfb01ce3a4 100644 --- a/t3lt.twee-config.yml +++ b/t3lt.twee-config.yml @@ -882,7 +882,9 @@ sugarcube-2: barbquick: name: barbquick barn_img: - name: barn_img + description: |- + Displays combat img of player inside barn, including a haybale prop and optionally a milk pump. + tags: ["text"] baseClothingImg: name: baseClothingImg baseClothingStrings: @@ -997,6 +999,17 @@ sugarcube-2: tags: ["unused"] beastNOGENinit: name: beastNOGENinit + beastPARTNERinit: + description: |- + Forces a beast to generate as a partner for another NPC, whether it be a human or beast. Should not be used in combat + + Example: + `<<beastNEWinit 1 fox>><<beastPARTNERinit 1 fox 0>>` + + `<<beastPARTNERinit npcSlot type partnerSlot>>` + - **npcSlot**: `number` - slot number of selected npc + - **type**: `string` - type of partner to generate + - **partnerSlot**: `number` - slot number for partner npc beastSettings: name: beastSettings beastspeech: @@ -1230,27 +1243,58 @@ sugarcube-2: bindtemp: name: bindtemp bird_fly_options: - name: bird_fly_options + description: |- + Prints partial passage regarding player's ability to fly based on their current wings, as well as links for them to prepare for a hunt, learn to fly, or fly to town, the farm, or the base of the tower as relevant + tags: ["text", "links"] bird_greeting: - name: bird_greeting + description: |- + Prints daily greeting from the Great Hawk + tags: ["text"] + bird_hunt_children_event: + description: |- + Events for feeding hawk children + tags: ["text", "links"] bird_hunt_return: - name: bird_hunt_return + description: |- + Gives the player lurkers, trash, valuables, food, rocks, or clothes when the Great Hawk returns from a solo hunt, as assigned by `<<bird_loot_select>>`. Prints links for the player to thank, scold, or do nothing. + tags: ["text", "links"] + bird_hunt_start: + name: bird_hunt_start bird_init: name: bird_init bird_loot: name: bird_loot bird_loot_random: - name: bird_loot_random + description: |- + Randomises the options of loot given to the player when the Great Hawk returns from a solo hunt + tags: ["text", "links"] bird_loot_select: - name: bird_loot_select + description: |- + - Selects what loot to give the player when Great Hawk returns from hunting solo, modified by player responses + = Defaults to `<<bird_loot_random>>` bird_pass: - name: bird_pass + description: |- + Advances time by an amount, used in place of `<<pass>>` while at the Great Hawk's tower. Increases hunger, if the player is not stockholmed, and advances several other timers, including hunts and upgrades. + + `<<bird_pass timeToPass>>` + - **timeToPass**: `number` - number of units bird_perch_options: - name: bird_perch_options + description: |- + Prints events and links for players on the perch in the Great Hawk's tower + tags: ["text", "links"] bird_schedule: - name: bird_schedule + description: |- + - Sets $bird.activity to "sleep", "sing", "bathe", "rest", "brood", "build", "groom", or `$bird.override` - Checks for and updates daily/weekly flight triggers, as well as the number of eggs present at the tower bird_stockholm: - name: bird_stockholm + description: |- + Increases `$bird.syndrome` by a given amount + + `<<bird_stockholm amountToIncrease>>` + - **amountToIncrease**: `number` - number of units + bird_telescope_options: + name: bird_telescope_options + birdEggLayEvent: + name: birdEggLayEvent birthChildElement: name: birthChildElement birthUi: @@ -2200,12 +2244,24 @@ sugarcube-2: - Defaults to all if no location is provided parameters: - string + childsibling: + name: childsibling + childsiblings: + name: childsiblings childtoy: name: childtoy childTransform: name: childTransform childtype: name: childtype + childTypeDisplay: + description: |- + Prints the type of a selected child, for use within `<<childViewerElement>>` and `<<birthChildElement>>` + + `<<childTypeDisplay childObject>>` + - **childObject**: `object` - selected child + parameters: + - string childViewerDisplay: name: childViewerDisplay childViewerDisplayElements: @@ -3215,6 +3271,10 @@ sugarcube-2: tags: ["unused"] danubemeal: name: danubemeal + danubePettyTheft: + description: |- + Pool of events for short, one-liner inlineevents when robbing Danube Street houses. The most common events you'll get while breaking in. + tags: ["text"] danubequick: name: danubequick daughter: @@ -3602,6 +3662,8 @@ sugarcube-2: name: edenCagedCoopSave edenCagedSave: name: edenCagedSave + edenFluidsCheck: + name: edenFluidsCheck edenlust: name: edenlust edenpreystart: @@ -3884,6 +3946,8 @@ sugarcube-2: name: end_moor_captive end_npc_pillory: name: end_npc_pillory + endBirdEggLaying: + name: endBirdEggLaying endcombat: description: |- Ends combat by applying pc effects, displaying necessary descriptions of them, and resetting combat variables back to defaults @@ -4926,6 +4990,10 @@ sugarcube-2: name: fields_init filterreveal: name: filterreveal + firepitActions: + name: firepitActions + firepitTime: + name: firepitTime flashbackbeach: name: flashbackbeach flashbackhome: @@ -4972,14 +5040,42 @@ sugarcube-2: <<flaunting>> you make an example of yourself. ``` tags: ["text"] + flight_distance_check: + name: flight_time_check flight_effects: name: flight_effects + flight_hunt_chance: + name: flight_hunt_chance + flight_hunt_end: + name: flight_hunt_end + flight_hunt_get: + name: flight_hunt_get + flight_hunt_get_ambush: + name: flight_hunt_get_ambush + flight_hunt_get_random: + name: flight_hunt_get_random + flight_hunt_loot: + name: flight_hunt_loot + flight_hunt_options: + name: flight_hunt_options + flight_hunt_remove: + name: flight_hunt_remove + flight_hunt_return: + name: flight_hunt_return flight_text: description: |- Prints `| Wings` or `| Strong wings` depending on pc's wing strength tags: ["text"] flight_time_check: - name: flight_time_check + description: |- + Sets the amount of time the player can fly with the harpy transformation, modified by weather and the player's Athletics skill. Optionally prints a line of text describing how the modifiers are affecting flight time + + `<<flight_time_check returnTime silent?>>` + - **returnTime**: `number` + - **silent** _optional_: `string` - does not print modifier description + parameters: + - '|+ number |+ "silent"' + tags: ["text"] foldout: container: true name: foldout @@ -5158,7 +5254,8 @@ sugarcube-2: Prints `| + Beauty` tags: ["unused", "text"] gbirdstockholm: - name: gbirdstockholm + description: |- + Prints `| + + Stockholm Syndrome` if `$syndromebird` is not 1 tags: ["text"] gbodywriting: description: |- @@ -6086,6 +6183,10 @@ sugarcube-2: description: |- Prints `| + + Beauty` tags: ["unused", "text"] + ggbirdstockholm: + description: |- + Prints `| + + Stockholm Syndrome` if `$syndromebird` is not 1 + tags: ["text"] ggbodywriting: description: |- Prints `| + + Bodywriting` @@ -6214,6 +6315,10 @@ sugarcube-2: description: |- Prints `| + + + Beauty` tags: ["unused", "text"] + gggbirdstockholm: + description: |- + Prints `| + + Stockholm Syndrome` if `$syndromebird` is not 1 + tags: ["text"] gggbodywriting: description: |- Prints `| + + + Bodywriting` @@ -6317,12 +6422,13 @@ sugarcube-2: tags: ["text"] ggghousekeeping: description: |- - Prints `| + + + housekeeping` if below limit + Prints `| + + + Housekeeping` if below limit, and `You're too skilled for this to improve your housekeeping` if above limit - `<<ggghousekeeping limit?>>` + `<<ggghousekeeping limit? silent?>>` - **limit** _optional_: `number` - maximum housekeeping this task can raise to + - **silent** _optional_: `string` - does not print `You're too skilled for this to improve your housekeeping` parameters: - - "|+ number" + - '|+ number |+ "silent"' tags: ["unused", "text"] ggghunger: description: |- @@ -6515,12 +6621,13 @@ sugarcube-2: tags: ["text"] gghousekeeping: description: |- - Prints `| + + + housekeeping` if below limit + Prints `| + + Housekeeping` if below limit, and `You're too skilled for this to improve your housekeeping` if above limit - `<<gghousekeeping limit?>>` + `<<gghousekeeping limit? silent?>>` - **limit** _optional_: `number` - maximum housekeeping this task can raise to + - **silent** _optional_: `string` - does not print `You're too skilled for this to improve your housekeeping` parameters: - - "|+ number" + - '|+ number |+ "silent"' tags: ["unused", "text"] gghunger: description: |- @@ -6727,12 +6834,13 @@ sugarcube-2: tags: ["text"] ghousekeeping: description: |- - Prints `| + housekeeping` or `You're too skilled for this to improve your housekeeping.` if below limit + Prints `| + Housekeeping` if below limit, and `You're too skilled for this to improve your housekeeping` if above limit - `<<ghousekeeping limit?>>` + `<<ghousekeeping limit? silent?>>` - **limit** _optional_: `number` - maximum housekeeping this task can raise to + - **silent** _optional_: `string` - does not print `You're too skilled for this to improve your housekeeping` parameters: - - "|+ number" + - '|+ number |+ "silent"' tags: ["text"] ghunger: description: |- @@ -6766,6 +6874,9 @@ sugarcube-2: name: girls gisland_tide: name: gisland_tide + giveHarpyEggs: + description: |- + Sets the amount of eggs a harpy player will produce as part of their menstrual cycle and, if unfertilised, the number of days until they will be laid giveNNPCnewstrapon: name: giveNNPCnewstrapon giveNPCCondom: @@ -7096,6 +7207,8 @@ sugarcube-2: parameters: - "text" tags: ["temp"] + hairToFeatherColour: + name: hairToFeatherColour halloweenkylar: name: halloweenkylar halloweenwhitney: @@ -7230,8 +7343,33 @@ sugarcube-2: - %clothesTypesDesc% parameters: - "%clothesTypes%" + hatchUi: + name: hatchUi + hawkCaughtYouSpeech: + description: |- + Prints a variation on "Caught you." To be used when running from, and getting captured by, the Great Hawk` + tags: ["text"] + hawkChildActivity: + name: hawkChildActivity + hawkRescueApproachSentence: + description: |- + Prints a variation on "Salvation/terror descends," depending on `$syndromebird` + tags: ["text"] + hawkRescueSetup: + description: |- + Enables chance of rescue from the Great Hawk + hawkScreechDesc: + description: |- + Prints `A welcome/familiar, terrifying/terrifying screech`, dependent on `$syndromebird` and `C.npc["Great Hawk"].init` status + tags: ["text"] + hawkspeech: + description: |- + Prints unique combat lines for the Great Hawk + tags: ["text"] hawkText: - name: hawkText + description: |- + Prints `harpy` or `hawk`, depending on the player's beast settings + tags: ["text"] he: description: |- Prints singular pronoun of current npc (he/she/they) @@ -7563,6 +7701,13 @@ sugarcube-2: tags: ["unused"] hypnotised: name: hypnotised + hypothermiaClothes: + description: |- + Gives players up to two pieces of warm clothing after passing out of hypothermia: a top and bottom if exposed, potentially a hat or scarf otherwise. Sets temporary variables that can be referenced in the text. + - `_warmClothes`: prints a description (`any clothes`, `dry clothes`, `any bottoms`, `a jacket`, `a shirt`, `a scarf`, `a hat`, `something warmer`) of what the player's attire is lacking. Intended to be used in dialogue such as `You shouldn't be walking around without _warmClothes.` + - `_clothes`: array of clothes the player is given. Print `_clothes.join(" and ")` to print what the player is given. + - **Example:** `You're wearing <<= _clothes.join(" and ")` may print `You're wearing a winter jacket and jeans` or `You're wearing a scarf` + - `_wet`: if the player had wet clothes at the time of rescue icon: description: |- Prints icon image from icon folder @@ -7708,7 +7853,15 @@ sugarcube-2: integrity: name: integrity integritycheck: - name: integritycheck + description: |- + To be used after damaging an item. Checks the current integrity level of all clothes and destroys the item if integrity is lte 0. Optionally prints `Your [clothing item has] ripped into scraps.` + + `<<integritycheck text?>>` + - **text** _optional_: `string` - if text displays or not + - `"no_text"`: Doesn't print `Your [clothing item has] ripped into scraps.` + parameters: + - "|+ text" + tags: ["text"] integrityWord: description: |- Use `integrityWord()` instead @@ -7923,6 +8076,10 @@ sugarcube-2: description: |- Prints `| - Awareness` or `| + Innocence` tags: ["text"] + lbirdstockholm: + description: |- + Prints `| - Stockholm Syndrome` if `$syndromebird` is not 1 + tags: ["text"] lcamp_concealment: name: lcamp_concealment lchaos: @@ -8293,6 +8450,10 @@ sugarcube-2: description: |- Prints `| - - Awareness` or `| + + Innocence` tags: ["text"] + llbirdstockholm: + description: |- + Prints `| - - Stockholm Syndrome` if `$syndromebird` is not 1 + tags: ["text"] llchaos: description: |- Prints `| - - Chaos` @@ -8402,6 +8563,10 @@ sugarcube-2: description: |- Prints `| - - - Awareness` or `| + + + Innocence` tags: ["text"] + lllbirdstockholm: + description: |- + Prints `| - - - Stockholm Syndrome` if `$syndromebird` is not 1 + tags: ["text"] lllchaos: description: |- Prints `| - - - Chaos` @@ -11219,6 +11384,8 @@ sugarcube-2: name: pregnancyGendersText pregnancyMorningAfterPill: name: pregnancyMorningAfterPill + pregnancyPassout: + name: pregnancyPassout pregnancySettings: name: pregnancySettings pregnancyTest: @@ -11227,8 +11394,6 @@ sugarcube-2: name: pregnancyType pregnancyVar: name: pregnancyVar - pregnancyPassout: - name: pregnancyPassout preMirror: name: preMirror prenancyObjectRepair: @@ -12228,6 +12393,8 @@ sugarcube-2: tags: ["unused", "text"] select_random_clothes: name: select_random_clothes + select_random_clothes_limited: + name: select_random_clothes_limited selectmodel: description: |- Select model and prepare for rendering @@ -12333,6 +12500,8 @@ sugarcube-2: name: settingsStart settingsTabButton: name: settingsTabButton + setTowerTemp: + name: setupTowerTemp setup_pillory: name: setup_pillory setupDefaults: @@ -12572,6 +12741,9 @@ sugarcube-2: name: skulduggeryuse skulshopevents: name: skulshopevents + skybox: + name: skybox + tags: ["dom"] sleep: description: |- Process and apply sleep effects, with appropriate interruptions @@ -13412,6 +13584,10 @@ sugarcube-2: name: takeVirginity tanned: name: tanned + tanningGainOutput: + name: tanningGainsOutput + tanningPenaltiesOutput: + name: tanningPenaltiesOutput targetListBox: name: targetListBox targetrepeatcontroller: @@ -13643,6 +13819,10 @@ sugarcube-2: description: |- Prints `the owner` or active NPC pronoun based on number of enemies tags: ["text"] + thermometer: + description: |- + Prints a thermometer representing the player's body temperature + tags: ["dom"] thighactionDifficulty: name: thighactionDifficulty thighActionInit: @@ -13817,7 +13997,7 @@ sugarcube-2: name: toggleLeash toggleLowerTuck: description: |- - Outputs a link that toggles lower tucked state + Outputs a link that toggles lower tucked state (tucks lowerwear into footwear) `<<toggleLowerTuck untuckText? tuckText?>>` - **untuckText** _optional_: `string` - text to be printed if already tucked @@ -13833,7 +14013,7 @@ sugarcube-2: name: toggleTab toggleUpperTuck: description: |- - Outputs a link that toggles upper tucked state + Outputs a link that toggles upper tucked state (tucks upperwear into lowerwear) `<<toggleUpperTuck untuckText? tuckText?>>` - **untuckText** _optional_: `string` - text to be printed if already tucked @@ -13869,6 +14049,10 @@ sugarcube-2: To be used for the tower creature tags: ["text"] + towerBuildOption: + name: towerBuildOption + towerValuables: + name: towerValuables toy: name: toy toyName: @@ -14610,10 +14794,9 @@ sugarcube-2: Props can be cleared earlier in a scene via `<<handheldon>>` or `<<clotheson>>` and are removed in `<<endevent>>` `<<wearProp prop>>` - - **prop**: `string` - prop to equip, should be the variable of the handheld item - - `"milkshake"` | `"cigarette"` | `"popcorn"` | `"gingerbread"` | `"lemonade"` | `"cocoa"` | `"mug"` | `"beerbottle"` | `"beermug"` | `"shotglass"` | `"wine"` | `"torch"` | `"salad"` | `"pancake"` | `"fork"` | `"tea"`| `"pasta"` | `"coffee"` | `"creambun"` | `"spoon"` + - **prop**: `string` - prop to equip, using the variable of the handheld item parameters: - - '"milkshake"|"cigarette"|"popcorn"|"gingerbread"|"lemonade"|"cocoa"|"mug"|"beerbottle"|"beermug"|"shotglass"|"wine"|"torch"|"salad"|"pancake"|"fork"|"tea"|"pasta"|"coffee"|"creambun"|"spoon"' + - text weather_select: name: weather_select weatherdisplay: @@ -14812,3 +14995,13 @@ sugarcube-2: name: yogalessons yogalewd: name: yogalewd + your_bird_text: + description: |- + Prints either `your spouse`, `your hawk/harpy`, or `the hawk/harpy` depending on player's stockholm status + + `<<your_bird_text formatting?>>` + - **formatting** _optional_: `string` - formatting to apply + - `"cap"`: capitalise output + parameters: + - '|+ "cap"' + tags: ["text"] diff --git a/types/clothing.d.ts b/types/clothing.d.ts new file mode 100644 index 0000000000..df6122cf43 --- /dev/null +++ b/types/clothing.d.ts @@ -0,0 +1,221 @@ +type ClothesSlots = "all" | ClothedSlots; + +type ClothedSlots = + | "over_upper" + | "over_lower" + | "upper" + | "lower" + | "under_upper" + | "under_lower" + | "over_head" + | "head" + | "face" + | "neck" + | "hands" + | "handheld" + | "legs" + | "feet" + | "genitals"; + +declare module "twine-sugarcube" { + export interface SugarCubeStoryVariables { + worn: { + [x in ClothedSlots]: ClothesItem; + }; + store: { + [x in ClothedSlots]: ClothesItem[]; + }; + tryOn: { + autoReset: boolean; + ownedStored: { + [x in ClothedSlots]: ClothesItem?; + }; + tryingOn: { + [x in ClothedSlots]: ClothesItem?; + }; + showEquip: { + [x: string]: any; + }; + showUnderEquip: { + [x: string]: any; + }; + type: any; + value: number; + }; + carried: { + [x in ClothedSlots]: ClothesItem; + }; + wardrobe: { + [x in ClothedSlots]: ClothesItem; + }; + wardrobes: { + shopReturn: string; + wardrobe: { + NOTE: string; + unlocked: boolean; + shopSend: boolean; + name: string; + }; + changingRoom: Wardrobe; + edensCabin: Wardrobe; + asylum: Wardrobe; + alexFarm: Wardrobe; + stripClub: Wardrobe; + brothel: Wardrobe; + schoolBoys: Wardrobe; + schoolGirls: Wardrobe; + prison: Wardrobe; + }; + outfit: { + [x in ClothedSlots]: string; + }[]; + } + + export interface SugarCubeSetupObject { + clothes: { + [x in ClothesSlots]: ClothesItem[]; + }; + clothes_all_slots: ClothedSlots; + } +} + +declare global { + export interface ClothesItem { + index: number; + name: string; + name_cap: string; + name_simple: string; + /** + * Folder name + */ + variable: string; + integrity: number; + integrity_max: number; + fabric_strength: number; + reveal: number; + bustresize: number; + one_piece: number; + strap: number; + open: number; + word: "a"; + state: string; + state_base: string; + state_top: string; + state_top_base: string; + plural: number; + /** + * key in setup.colours.prefilters identifying preprocessing required for canvas renderer. + * default is "clothes" + */ + prefilter?: string; + colour: string | 0; + colour_options: string[]; + colour_sidebar: 0 | 1; + exposed: number; + exposed_base: number; + vagina_exposed: number; + vagina_exposed_base: number; + anus_exposed: number; + anus_exposed_base: number; + type: string[]; + set: string; + gender: string; + femininity: number; + warmth: number; + cost: number; + description: string; + shop: string[]; + accessory: number; + accessory_colour: string | 0; + accessory_colour_options: string[]; + accessory_colour_sidebar: number; + /** + * if 1, then accessory files are integrity-dependent "acc_(tattered|torn|frayed|full).png" + */ + accessory_integrity_img?: 0 | 1; + /** + * if 1, then accessory files layer under breast sprites + */ + accessory_layer_under?: 0 | 1; + high_img: 0 | 1; + back_img: 0 | 1; + /** + * Recolouring of back image + * * "" (default) - depending on colour_sidebar + * * "no" - do not recolour image + * * "primary" - use primary/main colour + * * "secondary" - use secondary/accessory colour + */ + back_img_colour?: "" | "no" | "primary" | "secondary"; + /** + * (For upper, over_upper, under_upper slots) + * 1 if has sleeve images, named (left|right)[_cover].png". + * Colouring depends on sleeve_colour property. + */ + sleeve_img: number; + /** + * (For upper, over_upper, under_upper slots) + * 1 if has sleeve accessory images, named (left|right)[_cover]_acc.png". + * These images are not colored. + * Requires sleeve_img: 1. + */ + sleeve_acc_img: number; + /** + * (For upper, over_upper, under_upper slots) + * Recolouring of sleeves images: + * * "" (default) - depending on colour_sidebar + * * "no" - do not recolour image + * * "primary" - use primary/main colour + * * "secondary" - use secondary/accessory colour + */ + sleeve_colour?: "" | "no" | "primary" | "secondary"; + /** + * * 1 if has breast sprites and a unique image for every breast sprite + * * 0 if no breast sprites + * * Key represents breast size tier 0..6. + * * Value represents the image used: + * - null if no clothed breast image exists for that breast size. + * - 0..6 for clothed breast image used for that breast size. + */ + breast_img: object | 1 | 0; + cursed: number; + location: number; + iconFile: string; + accIcon: number; + outfitPrimary: object; + outfitSecondary: string[]; + notuck: number; + /** + * (For head slots) + * if 1, this item has mask.png image to cut out hair & animal ears layers + */ + mask_img?: number; + // TODO list and document other options + } + + export interface Wardrobe { + over_upper: ClothesItem[]; + over_lower: ClothesItem[]; + upper: ClothesItem[]; + lower: ClothesItem[]; + under_upper: ClothesItem[]; + under_lower: ClothesItem[]; + over_head: ClothesItem[]; + head: ClothesItem[]; + face: ClothesItem[]; + neck: ClothesItem[]; + hands: ClothesItem[]; + handheld: ClothesItem[]; + legs: ClothesItem[]; + feet: ClothesItem[]; + genitals: ClothesItem[]; + space: number; + isolated: boolean; + locationRequirement: any[]; + shopSend: boolean; + transfer: boolean; + unlocked: boolean; + } +} + +export {}; diff --git a/types/combat.d.ts b/types/combat.d.ts new file mode 100644 index 0000000000..9674353c4f --- /dev/null +++ b/types/combat.d.ts @@ -0,0 +1,79 @@ +declare module "twine-sugarcube" { + export interface SugarCubeStoryVariables { + combat: boolean; + + arousalmax: number; + + vaginause: number | string; + anususe: number | string; + mouth: number | string; + head: number | string; + front: number | string; + back: number | string; + chest: number | string; + leftarm: number | string; + rightarm: number | string; + + anustarget: number; + anususe: number; + anusstate: string | 0; + bottomtarget: number; + bottomuse: number; + bottomstate: string | 0; + chesttarget: number; + chestuse: number; + cheststate: string | 0; + feettarget: number; + feetuse: number; + feetstate: string | 0; + handtarget: number; + handuse: number; + handstate: string | 0; + lefttarget: number; + leftuse: number; + leftstate: string | 0; + mouthtarget: number; + mouthuse: number; + mouthstate: string | 0; + penistarget: number; + penisuse: number; + penisstate: string | 0; + righttarget: number; + rightuse: number; + rightstate: string | 0; + stealtarget: number; + stealuse: number; + stealstate: string | 0; + thightarget: number; + thighuse: number; + thighstate: string | 0; + tooltarget: number; + tooluse: number; + toolstate: string | 0; + vaginatarget: number; + vaginause: number; + vaginastate: string | 0; + + fingersInVagina: number; + vaginaFingerLimit: number; + selfsuckDepth: number; + penisHeight: number; + corruptionMasturbation: boolean; + corruptionMasturbationCount: number; + masturbationorgasmstat: number; + masturbationOrgasmTimeStat: TimeStamp; + masturbationorgasm: number; + masturbationorgasmsemen: number; + secondsSpentMasturbating: number; + femaleclimax: number; + + currentToyLeft: any; + currentToyRight: any; + currentToyVagina: any; + currentToyAnus: any; + } +} + +declare global {} + +export {}; diff --git a/types/daily.d.ts b/types/daily.d.ts new file mode 100644 index 0000000000..c62907a3b4 --- /dev/null +++ b/types/daily.d.ts @@ -0,0 +1,13 @@ +declare module "twine-sugarcube" { + export interface SugarCubeStoryVariables { + daily: { + school: { + lunchEaten: boolean; + }; + milkFullPainMessage: boolean; + graceUp: boolean; + }; + } +} + +export {}; diff --git a/types/debug.d.ts b/types/debug.d.ts new file mode 100644 index 0000000000..77ca14ea02 --- /dev/null +++ b/types/debug.d.ts @@ -0,0 +1,27 @@ +declare module "twine-sugarcube" { + export interface SugarCubeStoryVariables { + debug: 0 | 1; + event?: { + buffer: EventNpc[]; + schema: number; + }; + /** @deprecated */ + eventslot?: number; + /** @deprecated */ + eventtime?: number; + } +} + +declare global { + export interface Window { + EventSystem: EventData; + } + + export interface EventNpc { + slot: number; + time: number; + area: string[]; + } +} + +export {}; diff --git a/types/game.d.ts b/types/game.d.ts new file mode 100644 index 0000000000..ab1a1d1478 --- /dev/null +++ b/types/game.d.ts @@ -0,0 +1,162 @@ +declare module "twine-sugarcube" { + export interface SugarCubeStoryVariables { + /** + * Freezes all stat changes if set to true. + * This is not guaranteed to be set. + */ + statFreeze?: boolean; + gamemode?: "normal" | "hard" | "soft"; + passage: string; + location: string; + phase: number | string; + rng: number; + danger: number; + index: number; + + /* Time */ + + timeStamp: number; + /** + * Normally a number, although in some situations was assigned as potentially undefined. + */ + startDate: number | undefined; + + effectsmessage: number; + loveInterest_message: number; + loveInterestAwareMessage: 0 | 1; + speech_attitude: "bratty" | "neutral" | "meek"; + speech_attitude_bratty_message?: 1; + speech_attitude_meek_message?: 1; + prof_spray_message?: 1; + + nightmareTimer?: number; + physiquechange: 1; + home_event_timer: number; + + renttime: number; + babyRent: number; + rentmoney: number; + baileyRefusedToPayTotal: number; + baileyRefusedToPayTotalStat: number; + + loveInterest: { + primary: string; + secondary: string; + }; + + robin: { + timer: { + customer: number; + hurt: number; + }; + hurtReason: "nothing"; + stayup: 0 | 1 | 2; + moneyModifier: number; + }; + robinpaid: undefined | 1; + robinPayout?: 0 | 1; + robinmoney: number; + robindebt: number; + robindebtlimit: number; + robindebtevent: number; + robineventnote?: 0 | 1; + + loft_kylar: number; + loft_spray: number; + + whitneyromance: 0 | 1; + bullytimer: number; + bullytimeroutside: number; + + edenfreedom: number; + edenshopping: number; + + sydney: { + glasses: "broken" | "glasses" | "playerbroken"; + }; + sydneyGlassesNotice: undefined | 1; + + compoundcentre: number; + park_fame: number; + + syndromewolves: 1; + wolfcavepatrol: 1; + + brothelVending: { + products: number; + condoms: number; + lube: number; + weeksRent: number; + weeksEmpty: number; + status: "sold"; + }; + brothelshowdata: { + type: "none"; + missed: boolean; + done: boolean; + intro: boolean; + }; + brothel_escortjob: { + date: number; + missed: boolean; + }; + + museuminterest: number; + museumhorseintro?: 1 | 0; + museumhorse?: 1; + museumduckintro?: 1 | 0; + museumduck?: 1; + + pound: { + compete: number; + tasks: any[]; + }; + + farm: { + tower_guard: boolean; + tower_guard_unpaid: number; + tower_guard_patience: number; + }; + + photo: { + silly: "paid" | 0; + shoot: 0; + }; + + prof: { + spray: number; + net: number; + baton: number; + whip: number; + pickaxe: number; + }; + + world_corruption_hard: number; + world_corruption_soft: number; + world_corruption_reduced: number; + } + + export interface SugarCubeSetupObject { + feats: FeatsSetupVariables; + } +} + +declare global { + export interface FeatsSetupVariables { + [x: string]: FeatObject; + } + + export interface FeatObject { + title: string; + desc: string; + difficulty: number; + series: string; + filter: string[]; + hint?: string; + pregnancyLockable?: boolean; + pregnancySillyLockable?: boolean; + softLockable?: boolean; + } +} + +export {}; diff --git a/types/globals.d.ts b/types/globals.d.ts new file mode 100644 index 0000000000..b83e5c3073 --- /dev/null +++ b/types/globals.d.ts @@ -0,0 +1,62 @@ +import { SugarCubeStoryVariables, SugarCubeTemporaryVariables } from "twine-sugarcube"; + +type NpcNames = + | "Avery" + | "Bailey" + | "Briar" + | "Charlie" + | "Darryl" + | "Doren" + | "Eden" + | "Gwylan" + | "Harper" + | "Jordan" + | "Kylar" + | "Landry" + | "Leighton" + | "Mason" + | "Morgan" + | "River" + | "Robin" + | "Sam" + | "Sirris" + | "Whitney" + | "Winter" + | "Black Wolf" + | "Niki" + | "Quinn" + | "Remy" + | "Alex" + | "Great Hawk" + | "Wren" + | "Sydney" + | "Ivory Wraith" + | "Zephyr"; + +declare global { + const V: SugarCubeStoryVariables; + const T: SugarCubeTemporaryVariables; + const C: { + npc: { + [key in NpcNames]: Npc; + }; + }; + const DOL: { + Stack: string[]; + }; + const EventSystem: EventData; + + const Browser: { + isMobile: { + any(): boolean; + }; + }; + + const L10n: any; + + let throwError: Function; + + let DefineMacro: Function; +} + +export {}; diff --git a/types/npc.d.ts b/types/npc.d.ts new file mode 100644 index 0000000000..36cf0e3822 --- /dev/null +++ b/types/npc.d.ts @@ -0,0 +1,96 @@ +declare module "twine-sugarcube" { + export interface SugarCubeStoryVariables { + NPCList: [Npc, Npc, Npc, Npc, Npc, Npc]; + + enemytype: string; + + kylarwatched: boolean; + kylar: { + fountain: 0 | 1; + }; + } +} + +declare global { + export interface Npc { + /** + * The name... NaM + */ + nam: string; + init: 0 | 1; + intro: 0 | 1; + state: "active" | "prison" | ""; + type: "human"; + description: string; + title: string; + + /** + * The sex of the NPC. Not gender. + */ + gender: "m" | "f"; + /** + * The gender of the NPC. + * + * - m: male + * - f: female + * - i: Ivory Wraith + */ + pronoun: "m" | "f" | "i"; + pronouns: { + boy: string; + he: string; + hers: string; + him: string; + himself: string; + his: string; + man: string; + men: string; + }; + + pregnancy: {}; + pregnancyAvoidance: number; + + adult: 0 | 1; + teen: 0 | 1; + + insecurity: string; + skincolour: string; + eyeColour: string; + hairColour: string; + + ballssize: number; + bottomsize: number; + breastdesc: string; + breastsdesc: string; + breastsize: number; + penis: "clothed" | "none" | 0; + penisdesc: string; + penissize: number; + vagina: "clothed" | "none"; + + chastity: { + penis: string; + vagina: string; + anus: string; + }; + + love: number; + lust: number; + trauma: number; + dom: number; + rage: number; + trust: number; + purity: number; + corruption: number; + + /* These options were not found immediately on game start */ + active?: boolean; + index?: number; + + mouth?: string | 0; + lefthand?: string | 0; + righthand?: string | 0; + } +} + +export {}; diff --git a/types/player.d.ts b/types/player.d.ts new file mode 100644 index 0000000000..bb9ce591c8 --- /dev/null +++ b/types/player.d.ts @@ -0,0 +1,191 @@ +declare module "twine-sugarcube" { + export interface SugarCubeStoryVariables { + player: Player; + + pain: number; + arousal: number; + tiredness: number; + stress: number; + trauma: number; + control: number; + + arousalmax: number; + tirednessmax: number; + stressmax: number; + traumamax: number; + controlmax: number; + + oxygen: number; + oxygenmax: number; + + purity: number; + willpower: number; + willpowermax: number; + submissive: number; + beauty: number; + delinquency: number; + detention: number; + cool: number; + coolmax: number; + masochism: number; + drugged: number; + hallucinogen: number; + drunk: number; + awareness: number; + suspicion: number; + shame: number; + + exhibitionism: number; + promiscuity: number; + deviancy: number; + + innocencestate: 0 | 1; + innocencetrauma: number; + + controlstart: number; + + arousalmasochism: number; + trackedArousal: int[]; + timeSinceArousal: number; + + /** + * Wtf is this + */ + masturbation_bowl: string; + + /* Player states */ + + lactating: boolean; + possessed: boolean; + virginityProtected: boolean; + + anxiety: 0 | 1 | 2; + nightmares: 0 | 1; + sleeptrouble: 0 | 1; + flashbacks: 0 | 1; + hallucinations: 0 | 1 | 2; + panicattacks: 0 | 1 | 2; + dissociation: 0 | 1 | 2; + controlled: 0 | 1; + + /* Institution modifiers - Only vaguely related to player (grace), others can be moved to game.d.ts? */ + + orphan_hope: number; + orphan_reb: number; + + locker_suspicion: number; + + grace: number; + temple_rank: "prospective" | "initiate" | "monk" | "priest" | "bishop"; + + livestock_obey: number; + farm_yield: number; + + asylumstatus: number; + + wolfpacktrust: number; + wolfpackfear: number; + wolfpackferocity: number; + wolfpackharmony: number; + + /* Player weapons */ + + spray: number; + spraymax: number; + infinitespray: boolean; + + /* Other things */ + + orgasmtrait: number; + choketrait: number; + rapetrait: number; + bestialitytrait: number; + tentacletrait: number; + + /* Personal school traits */ + + mathstrait: number; + sciencetrait: number; + englishtrait: number; + historytrait: number; + + backgroundTraits: string[]; + + /* Volumes, lactation and similar things */ + + semen_volume: number; + semen_amount: number; + semen_max: number; + + milk_volume: number; + milk_amount: number; + milk_max: number; + + milkFullPain: number; + milkFullPainMessage: 0 | 1; + lactation_pressure: number; + + body_temperature: "cold" | "chilly" | "comfy" | "hot" | "warm"; + + /* Player sensitivities */ + + mouthsensitivity: number; + breastsensitivity: number; + bottomsensitivity: number; + genitalsensitivity: number; + + /* Transformations */ + + cow: number; + + /* Gay ear slime stuff */ + + earSlime: EarSlimeState; + + parasite: { + penis: ParasiteState; + clit: ParasiteState; + parasite: ParasiteState; + tummy: ParasiteState; + left_ear: ParasiteState; + right_ear: ParasiteState; + left_thigh: ParasiteState; + right_thigh: ParasiteState; + left_arm: ParasiteState; + right_arm: ParasiteState; + }; + } +} + +declare global { + export interface Player { + penisExist: boolean; + vaginaExist: boolean; + penissize: number; + penis: string; + vagina: string; + gender: "m" | "f"; + + virginity: { + penile: boolean; + vaginal: boolean; + anal: boolean; + temple: boolean; + handholding: boolean; + kiss: boolean; + }; + } + + export interface EarSlimeState { + corruption: number; + growth: number; + startedThreats: boolean; + defyCooldown: boolean; + } + + export interface ParasiteState { + name: "parasite"; + } +} + +export {}; diff --git a/types/school.d.ts b/types/school.d.ts new file mode 100644 index 0000000000..6abcf312c8 --- /dev/null +++ b/types/school.d.ts @@ -0,0 +1,55 @@ +type EnglishPlayNames = "Cass" | "Taylor" | "Sterling" | "none"; + +declare module "twine-sugarcube" { + export interface SugarCubeStoryVariables { + schoolstate: + | "lunch" + | "afternoon" + | "early" + | "morning" + | "first" + | "second" + | "third" + | "fourth" + | "fifth" + | "late" + | "earlynoschool" + | "daynoschool" + | "latenoschool"; + + science_exam: number; + science_up_message: 0 | 1; + science_down_message: 0 | 1; + + maths_exam: number; + maths_up_message: 0 | 1; + maths_down_message: 0 | 1; + + english_exam: number; + english_up_message: 0 | 1; + english_down_message: 0 | 1; + + history_exam: number; + history_up_message: 0 | 1; + history_down_message: 0 | 1; + + scienceproject: "none"; + mathsproject: "none"; + englishPlay: "ongoing" | "none" | "missed" | "done"; + + englishPlayReadiness: number; + englishPlayDoubleRehearsal: boolean; + + englishPlayRoles: { + Player: EnglishPlayNames; + Kylar: EnglishPlayNames; + Sydney: EnglishPlayNames; + KylarKnown: boolean; + KylarCount: number; + SydneyKnown: boolean; + SydneyCount: number; + }; + } +} + +export {}; diff --git a/types/settings.d.ts b/types/settings.d.ts new file mode 100644 index 0000000000..a08686e842 --- /dev/null +++ b/types/settings.d.ts @@ -0,0 +1,82 @@ +declare module "twine-sugarcube" { + export interface SugarCubeStoryVariables { + options: DolSettingsOptions; + + cheatdisable: "f" | "t"; + analdisable: "f" | "t"; + analingusdisablegiving: "f" | "t"; + analingusdisablereceiving: "f" | "t"; + vaginaldoubledisable: "f" | "t"; + analdoubledisable: "f" | "t"; + pbdisable: "f" | "t"; + transformdisable: "f" | "t"; + transformdisabledivine: "f" | "t"; + breastfeedingdisable: "f" | "t"; + watersportsdisable: "f" | "t"; + footdisable: "f" | "t"; + facesitdisable: "f" | "t"; + hypnosisdisable: "f" | "t"; + forcedcrossdressingdisable: "f" | "t"; + ruinedorgasmdisable: "f" | "t"; + toydildodisable: "f" | "t"; + toywhipdisable: "f" | "t"; + toymultiplepenetration: "f" | "t"; + bodywritingLvl: 0 | 1 | 2 | 3; + asphyxiaLvl: 0 | 1 | 2 | 3 | 4; + NudeGenderDC: -1 | 0 | 1 | 2; + + bestialitydisable: "f" | "t"; + swarmdisable: "f" | "t"; + parasitedisable: "f" | "t"; + tentacledisable: "f" | "t"; + slimedisable: "f" | "t"; + voredisable: "f" | "t"; + spiderdisable: "f" | "t"; + slugdisable: "f" | "t"; + waspdisable: "f" | "t"; + beedisable: "f" | "t"; + lurkerdisable: "f" | "t"; + horsedisable: "f" | "t"; + plantdisable: "f" | "t"; + + rentmod: number; + clothesPrice: number; + clothesPriceUnderwear: number; + clothesPriceSchool: number; + clothesPriceLewd: number; + furniturePriceFactor: number; + tending_yield_factor: number; + + incompletePregnancyDisable: "f" | "t"; + cycledisable: "f" | "t"; + pregnancytype: "realistic" | "fetish" | "silly"; + basePlayerPregnancyChance: number; + baseNpcPregnancyChance: number; + humanPregnancyMonths: number; + + condomLvl: number; + condomChance: number; + condomUseChanceRape: number; + condomUseChanceCon: number; + playerPregnancyHumanDisable: "f" | "t"; + playerPregnancyBeastDisable: "f" | "t"; + npcPregnancyDisable: "f" | "t"; + parasitepregdisable: "f" | "t"; + pregnancyspeechdisable: "f" | "t"; + + breastsizemin: "Flat" | "Budding" | "Tiny" | "Small" | "Pert"; + breastsizemax: "Flat" | "Budding" | "Tiny" | "Small" | "Pert" | "Modest" | "Full" | "Large" | "Ample" | "Massive" | "Huge" | "Gigantic" | "Enormous"; + bottomsizemin: "Slender" | "Slim" | "Modest" | "Cushioned"; + bottomsizemax: "Slender" | "Slim" | "Modest" | "Cushioned" | "Soft" | "Round" | "Plump" | "Large" | "Huge"; + penissizemin: "Micro" | "Mini" | "Tiny"; + penissizemax: "Micro" | "Mini" | "Tiny" | "Small" | "Normal" | "Large" | "Enormous"; + } +} + +declare global { + export interface DolSettingsOptions { + debugdisable: "f" | "t"; + } +} + +export {}; diff --git a/types/weather.d.ts b/types/weather.d.ts new file mode 100644 index 0000000000..8ac7443b7f --- /dev/null +++ b/types/weather.d.ts @@ -0,0 +1,7 @@ +declare module "twine-sugarcube" { + export interface SugarCubeStoryVariables { + weather: "rain" | "snow" | "clear" | "overcast"; + } +} + +export {}; diff --git a/types/weekly.d.ts b/types/weekly.d.ts new file mode 100644 index 0000000000..6031156721 --- /dev/null +++ b/types/weekly.d.ts @@ -0,0 +1,58 @@ +declare module "twine-sugarcube" { + export interface SugarCubeStoryVariables { + weekly: WeeklyVariables; + } + + export interface SugarCubeSetupObject { + weeklyObject: WeeklySetupVariables; + } +} + +declare global { + export interface WeeklySetupVariables { + theft: object; + sewers: object; + } + + export interface WeeklyVariables extends WeeklySetupVariables { + kylarCreep?: number; + edenPrey?: boolean; + winterLakeTalk?: number; + slimeWakeMasturbation?: boolean; + alexNightTimeNursery?: 1; + whitneyPub?: number; + streetPolice?: number; + adultShopWhitney?: boolean; + danceJob?: boolean; + policeHigh?: boolean; + brothelVMLube?: boolean; + + /* There are a lot more weekly variables */ + + theft: { + danceStudio?: boolean; + oceanBreeze?: boolean; + stripClub?: boolean; + clothingShop?: boolean; + furnitureShop?: boolean; + hairDressers?: boolean; + tailor?: boolean; + petShop?: boolean; + toyShop?: boolean; + tattooParlour?: boolean; + ridingSchool?: boolean; + spa?: boolean; + schoolLibraryMoney?: boolean; + }; + + sewers: { + antiqueCrystal?: boolean; + antiqueWatch?: boolean; + antiqueDildo?: boolean; + antiqueCandlestick?: boolean; + antiqueHorn?: boolean; + }; + } +} + +export {}; -- GitLab