diff --git a/package.json b/package.json index dac4c6bf..63000169 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "private": true, "name": "dungeonslayers4", "description": "An implementation of the Dungeonslayers 4 game system for Foundry Virtual Tabletop.", - "version": "1.1.3", + "version": "1.2.1", "license": "https://git.f3l.de/dungeonslayers/ds4#licensing", "homepage": "https://git.f3l.de/dungeonslayers/ds4", "repository": { @@ -52,33 +52,32 @@ "postinstall": "husky install" }, "devDependencies": { - "@league-of-foundry-developers/foundry-vtt-types": "^0.8.8-5", - "@rollup/plugin-node-resolve": "^13.0.0", - "@types/fs-extra": "^9.0.12", - "@types/jest": "^26.0.24", - "@typescript-eslint/eslint-plugin": "^4.28.2", - "@typescript-eslint/parser": "^4.28.2", - "chalk": "^4.1.1", - "eslint": "^7.30.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-jest": "^24.3.6", - "eslint-plugin-prettier": "^3.4.0", - "fs-extra": "^10.0.0", - "gulp": "^4.0.2", - "gulp-sass": "^5.0.0", - "husky": "^7.0.1", - "jest": "^27.0.6", - "jest-junit": "^12.2.0", - "lint-staged": "^11.0.0", - "prettier": "^2.3.2", - "rollup": "^2.53.1", - "rollup-plugin-typescript2": "^0.30.0", - "sass": "1.35.2", - "semver": "^7.3.5", - "ts-jest": "^27.0.3", - "tslib": "^2.3.0", - "typescript": "^4.3.5", - "yargs": "^17.0.1" + "@league-of-foundry-developers/foundry-vtt-types": "0.8.8-8", + "@types/fs-extra": "9.0.12", + "@types/jest": "27.0.1", + "@typescript-eslint/eslint-plugin": "4.29.2", + "@typescript-eslint/parser": "4.29.2", + "chalk": "4.1.2", + "eslint": "7.32.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-jest": "24.4.0", + "eslint-plugin-prettier": "3.4.0", + "fs-extra": "10.0.0", + "gulp": "4.0.2", + "gulp-sass": "5.0.0", + "husky": "7.0.1", + "jest": "27.0.6", + "jest-junit": "12.2.0", + "lint-staged": "11.1.2", + "prettier": "2.3.2", + "rollup": "2.56.2", + "rollup-plugin-typescript2": "0.30.0", + "sass": "1.38.0", + "semver": "7.3.5", + "ts-jest": "27.0.5", + "tslib": "2.3.1", + "typescript": "4.3.5", + "yargs": "17.1.1" }, "lint-staged": { "*.ts": "eslint --cache --fix", diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..f9ff6db6 --- /dev/null +++ b/renovate.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": ["config:base", ":automergeAll", ":automergeBranch", ":prHourlyLimitNone", ":prConcurrentLimitNone"] +} diff --git a/renovate.json.license b/renovate.json.license new file mode 100644 index 00000000..31803f36 --- /dev/null +++ b/renovate.json.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2021 Johannes Loher + +SPDX-License-Identifier: MIT \ No newline at end of file diff --git a/rollup.config.js b/rollup.config.js index f57de335..3594effa 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -3,7 +3,6 @@ // SPDX-License-Identifier: MIT const typescript = require("rollup-plugin-typescript2"); -const { nodeResolve } = require("@rollup/plugin-node-resolve"); module.exports = { input: "src/module/ds4.ts", @@ -12,5 +11,5 @@ module.exports = { format: "es", sourcemap: true, }, - plugins: [nodeResolve(), typescript({})], + plugins: [typescript({})], }; diff --git a/src/lang/de.json b/src/lang/de.json index 2d37befb..e1dde04a 100644 --- a/src/lang/de.json +++ b/src/lang/de.json @@ -1,10 +1,11 @@ { - "DS4.UserInteractionAddItem": "Neu", - "DS4.UserInteractionEditItem": "Bearbeiten", - "DS4.UserInteractionDeleteItem": "Löschen", - "DS4.UserInteractionAddEffect": "Neuer Effekt", - "DS4.UserInteractionEditEffect": "Effekt bearbeiten", - "DS4.UserInteractionDeleteEffect": "Effekt löschen", + "DS4.UserInteractionAdd": "Neu", + "DS4.UserInteractionAddItemTitle": "Item Erstellen", + "DS4.UserInteractionEditItemTitle": "Item Bearbeiten", + "DS4.UserInteractionDeleteItemTitle": "Item Löschen", + "DS4.UserInteractionAddEffectTitle": "Effekt Erstellen", + "DS4.UserInteractionEditEffectTitle": "Effekt Bearbeiten", + "DS4.UserInteractionDeleteEffectTitle": "Effekt Löschen", "DS4.DocumentImageAltText": "Bild von {name}", "DS4.RollableImageRollableTitle": "Für {name} würfeln", "DS4.DiceOverlayImageAltText": "Bild eines W20", @@ -18,7 +19,6 @@ "DS4.HeadingAbilities": "Fähigkeiten", "DS4.HeadingSpells": "Zaubersprüche", "DS4.HeadingDescription": "Beschreibung", - "DS4.HeadingSpecialCreatureAbilities": "Besondere Fähigkeiten", "DS4.AttackType": "Angriffsart", "DS4.AttackTypeAbbr": "AA", "DS4.DialogAttackTypeSelection": "Welche Angriffsart?", @@ -121,6 +121,10 @@ "DS4.SpellMinimumLevelsSorcerer": "Zugangsstufe für Schwarzmagier", "DS4.SpellMinimumLevelsSorcererAbbr": "Zugangsstufe Sch", "DS4.SpellPrice": "Preis (Gold)", + "DS4.EffectEnabled": "Aktiv", + "DS4.EffectEnabledAbbr": "A", + "DS4.EffectLabel": "Bezeichnung", + "DS4.EffectSourceName": "Quelle", "DS4.ActorName": "Name", "DS4.ActorImageAltText": "Bild des Aktors", "DS4.ActorTypeCharacter": "Charakter", @@ -207,7 +211,7 @@ "DS4.CreatureBaseInfoSizeCategory": "Größenkategorie", "DS4.CreatureBaseInfoExperiencePoints": "Erfahrungspunkte", "DS4.CreatureBaseInfoDescription": "Beschreibung", - "DS4.WarningManageActiveEffectOnOwnedItem": "Das Verwalten von aktiven Effekten innerhalb eines besessen Items wird derzeit nicht unterstützt und wird in einem nachfolgenden Update hinzugefügt.", + "DS4.WarningManageActiveEffectOnOwnedItem": "Das Verwalten von aktiven Effekten innerhalb eines besessen Items wird derzeit nicht unterstützt und wird in einem nachfolgenden Update hinzugefügt. Falls Sie eigentlich den auf den Aktor übertragenen Effekt verwalten wollen, können Sie dies im 'Effekte'-Tab des Aktorbogens tun.", "DS4.WarningActorCannotOwnItem": "Der Aktor '{actorName}' vom Typ '{actorType}' kann das Item '{itemName}' vom Typ '{itemType}' nicht besitzen.", "DS4.ErrorDiceCoupFumbleOverlap": "Es gibt eine Überlappung zwischen Patzern und Immersiegen.", "DS4.ErrorSlayingDiceRecursionLimitExceeded": "Die maximale Rekursionstiefe für slayende Würfelwürfe wurde überschritten.", @@ -253,6 +257,7 @@ "DS4.ErrorActorDoesNotHaveItem": "Der Aktor '{actor}' hat kein Item mit der ID '{id}'.", "DS4.ErrorUnexpectedError": "Es gab einen unerwarteten Fehler im Dungeonslayers 4 System. Für mehr Details schauen Sie bitte in die Konsole (F12).", "DS4.ErrorItemDoesNotHaveEffect": "Das Item '{item}' hat keinen Effekt mit der ID '{id}'.", + "DS4.ErrorActorDoesNotHaveEffect": "Der Aktor '{actor}' hat keinen Effekt mit der ID '{id}'.", "DS4.DialogRollOptionsCheckTargetNumberLabel": "Probenwert", "DS4.DialogRollOptionsGMModifierLabel": "SL-Modifikator", "DS4.DialogRollOptionsMaximumCoupResultLabel": "Immersieg bis", @@ -295,5 +300,17 @@ "DS4.ChecksWorkMechanism": "Mechanismus Öffnen", "DS4.ActorCheckFlavor": "{actor} würfelt eine {check} Probe.", "DS4.ActorGenericCheckFlavor": "{actor} würfelt eine Probe gegen {attribute} + {trait}.", - "DS4.CheckTooltip": "{check} Probe würfeln" + "DS4.CheckTooltip": "{check} Probe würfeln", + "DS4.NewWeaponName": "Neue Waffe", + "DS4.NewArmorName": "Neue Panzerung", + "DS4.NewShieldName": "Neuer Schild", + "DS4.NewSpellName": "Neuer Zauberspruch", + "DS4.NewEquipmentName": "Neue Ausrüstung", + "DS4.NewLootName": "Neue Beute", + "DS4.NewTalentName": "Neues Talent", + "DS4.NewRacialAbilityName": "Neue Volksfähigkeit", + "DS4.NewLanguageName": "Neue Sprache", + "DS4.NewAlphabetName": "Neue Schriftzeichen", + "DS4.NewSpecialCreatureAbilityName": "Neue Besondere Kreaturenfähigkeit", + "DS4.NewEffectLabel": "Neuer Effekt" } diff --git a/src/lang/en.json b/src/lang/en.json index 60f638ac..d1042021 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -1,10 +1,11 @@ { - "DS4.UserInteractionAddItem": "Add item", - "DS4.UserInteractionEditItem": "Edit item", - "DS4.UserInteractionDeleteItem": "Delete item", - "DS4.UserInteractionAddEffect": "Add Effect", - "DS4.UserInteractionEditEffect": "Edit Effect", - "DS4.UserInteractionDeleteEffect": "Delete Effect", + "DS4.UserInteractionAdd": "Add", + "DS4.UserInteractionAddItemTitle": "Create Item", + "DS4.UserInteractionEditItemTitle": "Edit Item", + "DS4.UserInteractionDeleteItemTitle": "Delete Item", + "DS4.UserInteractionAddEffectTitle": "Create Effect", + "DS4.UserInteractionEditEffectTitle": "Edit Effect", + "DS4.UserInteractionDeleteEffectTitle": "Delete Effect", "DS4.DocumentImageAltText": "Image of {name}", "DS4.RollableImageRollableTitle": "Roll for {name}", "DS4.DiceOverlayImageAltText": "Image of a d20", @@ -18,7 +19,6 @@ "DS4.HeadingAbilities": "Abilities", "DS4.HeadingSpells": "Spells", "DS4.HeadingDescription": "Description", - "DS4.HeadingSpecialCreatureAbilities": "Special Abilities", "DS4.AttackType": "Attack Type", "DS4.AttackTypeAbbr": "AT", "DS4.DialogAttackTypeSelection": "Which Attack Type?", @@ -121,6 +121,10 @@ "DS4.SpellMinimumLevelsSorcerer": "Minimum level for Sorcerers", "DS4.SpellMinimumLevelsSorcererAbbr": "Min lvl SRC", "DS4.SpellPrice": "Price (Gold)", + "DS4.EffectEnabled": "Enabled", + "DS4.EffectEnabledAbbr": "E", + "DS4.EffectLabel": "Label", + "DS4.EffectSourceName": "Source", "DS4.ActorName": "Name", "DS4.ActorImageAltText": "Image of the Actor", "DS4.ActorTypeCharacter": "Character", @@ -207,7 +211,7 @@ "DS4.CreatureBaseInfoSizeCategory": "Size Category", "DS4.CreatureBaseInfoExperiencePoints": "Experience Points", "DS4.CreatureBaseInfoDescription": "Description", - "DS4.WarningManageActiveEffectOnOwnedItem": "Managing Active Effects within an Owned Item is not currently supported and will be added in a subsequent update.", + "DS4.WarningManageActiveEffectOnOwnedItem": "Managing Active Effects within an Owned Item is not currently supported and will be added in a subsequent update. If you actually want to manage the effect that has been transferred to the actor, you can do so in the 'Effects' tab in the actor sheet.", "DS4.WarningActorCannotOwnItem": "The actor '{actorName}' of type '{actorType}' cannot own the item '{itemName}' of type '{itemType}'.", "DS4.ErrorDiceCoupFumbleOverlap": "There is an overlap between Fumbles and Coups.", "DS4.ErrorSlayingDiceRecursionLimitExceeded": "Maximum recursion depth for slaying dice roll exceeded.", @@ -253,6 +257,7 @@ "DS4.ErrorActorDoesNotHaveItem": "The actor '{actor}' does not have any item with the id '{id}'.", "DS4.ErrorUnexpectedError": "There was an unexpected error in the Dungeonslayers 4 system. For more details, please take a look at the console (F12).", "DS4.ErrorItemDoesNotHaveEffect": "The item '{item}' does not have any effect with the id '{id}'.", + "DS4.ErrorActorDoesNotHaveEffect": "The actor '{actor}' does not have any effect with the id '{id}'.", "DS4.DialogRollOptionsCheckTargetNumberLabel": "Check Target Number", "DS4.DialogRollOptionsGMModifierLabel": "Game Master Modifier", "DS4.DialogRollOptionsMaximumCoupResultLabel": "Coup to", @@ -295,5 +300,17 @@ "DS4.ChecksWorkMechanism": "Work Mechanism", "DS4.ActorCheckFlavor": "{actor} rolls a {check} check.", "DS4.ActorGenericCheckFlavor": "{actor} rolls a check against {attribute} + {trait}.", - "DS4.CheckTooltip": "Roll a {check} check" + "DS4.CheckTooltip": "Roll a {check} check", + "DS4.NewWeaponName": "New Weapon", + "DS4.NewArmorName": "New Armor", + "DS4.NewShieldName": "New Shield", + "DS4.NewSpellName": "New Spell", + "DS4.NewEquipmentName": "New Equipment", + "DS4.NewLootName": "New Loot", + "DS4.NewTalentName": "New Talent", + "DS4.NewRacialAbilityName": "New Racial Ability", + "DS4.NewLanguageName": "New Language", + "DS4.NewAlphabetName": "New Alphabet", + "DS4.NewSpecialCreatureAbilityName": "New Special Creature Ability", + "DS4.NewEffectLabel": "New Effect" } diff --git a/src/module/active-effect.ts b/src/module/active-effect.ts index 1ae6eccc..8d53ba28 100644 --- a/src/module/active-effect.ts +++ b/src/module/active-effect.ts @@ -3,6 +3,7 @@ // SPDX-License-Identifier: MIT import { DS4Actor } from "./actor/actor"; +import { getGame } from "./helpers"; declare global { interface DocumentClassConfig { @@ -10,7 +11,18 @@ declare global { } } +type PromisedType = T extends Promise ? U : T; export class DS4ActiveEffect extends ActiveEffect { + /** + * A fallback icon that can be used if no icon is defined for the effect. + */ + static FALLBACK_ICON = "icons/svg/aura.svg"; + + /** + * A cached reference to the source document to avoid recurring database lookups + */ + protected source: PromisedType> | undefined = undefined; + /** @override */ apply(actor: DS4Actor, change: foundry.data.ActiveEffectData["changes"][number]): unknown { change.value = Roll.replaceFormulaData(change.value, actor.data); @@ -21,4 +33,25 @@ export class DS4ActiveEffect extends ActiveEffect { } return super.apply(actor, change); } + + /** + * Gets the current source name based on the cached source object. + */ + async getCurrentSourceName(): Promise { + const game = getGame(); + const origin = await this.getSource(); + if (origin === null) return game.i18n.localize("None"); + return origin.name ?? game.i18n.localize("Unknown"); + } + + /** + * Gets the source document for this effect. Uses the cached {@link DS4ActiveEffect#origin} if it has already been + * set. + */ + protected async getSource(): ReturnType { + if (this.source === undefined) { + this.source = this.data.origin !== undefined ? await fromUuid(this.data.origin) : null; + } + return this.source; + } } diff --git a/src/module/actor/sheets/actor-sheet.ts b/src/module/actor/sheets/actor-sheet.ts index c254ee97..99e8829f 100644 --- a/src/module/actor/sheets/actor-sheet.ts +++ b/src/module/actor/sheets/actor-sheet.ts @@ -5,16 +5,17 @@ // // SPDX-License-Identifier: MIT +import { DS4ActiveEffect } from "../../active-effect"; import { ModifiableDataBaseTotal } from "../../common/common-data"; import { DS4 } from "../../config"; import { getCanvas, getGame } from "../../helpers"; -import { DS4Item } from "../../item/item"; import { DS4Settings, getDS4Settings } from "../../settings"; import notifications from "../../ui/notifications"; +import { enforce } from "../../utils"; import { isCheck } from "../actor-data-properties"; /** - * The base Sheet class for all DS4 Actors + * The base sheet class for all {@link DS4Actor}s. */ export class DS4ActorSheet extends ActorSheet { /** @override */ @@ -22,15 +23,7 @@ export class DS4ActorSheet extends ActorSheet { const itemsByType = Object.fromEntries( Object.entries(this.actor.itemTypes).map(([itemType, items]) => { return [itemType, items.map((item) => item.data).sort((a, b) => (a.sort || 0) - (b.sort || 0))]; }), ); + + const enrichedEffectPromises = this.actor.effects.map(async (effect) => { + return { + ...effect.toObject(), + icon: effect.data.icon ?? DS4ActiveEffect.FALLBACK_ICON, + sourceName: await effect.getCurrentSourceName(), + }; + }); + const enrichedEffects = await Promise.all(enrichedEffectPromises); + const data = { ...this.addTooltipsToData(await super.getData()), - // Add the localization config to the data: config: DS4, - // Add the items explicitly sorted by type to the data: itemsByType, + enrichedEffects, settings: getDS4Settings(), }; return data; } + /** + * Adds tooltips to the attributes, traits, and combatValues of the actor data of the given {@link ActorSheet.Data}. + */ protected addTooltipsToData(data: ActorSheet.Data): ActorSheet.Data { const valueGroups = [data.data.data.attributes, data.data.data.traits, data.data.data.combatValues]; @@ -80,6 +80,9 @@ export class DS4ActorSheet extends ActorSheet): string { return `${value.base} (${getGame().i18n.localize("DS4.TooltipBaseValue")}) + ${ value.mod @@ -92,144 +95,209 @@ export class DS4ActorSheet extends ActorSheet { - const li = $(ev.currentTarget).parents(".item"); - const id = li.data("itemId"); - const item = this.actor.items.get(id); - if (!item) { - throw new Error(getGame().i18n.format("DS4.ErrorActorDoesNotHaveItem", { id, actor: this.actor.name })); - } - if (!item.sheet) { - throw new Error(getGame().i18n.localize("DS4.ErrorUnexpectedError")); - } - item.sheet.render(true); - }); - - // Delete Inventory Item - html.find(".item-delete").on("click", (ev) => { - const li = $(ev.currentTarget).parents(".item"); - this.actor.deleteEmbeddedDocuments("Item", [li.data("itemId")]); - li.slideUp(200, () => this.render(false)); - }); - - html.find(".item-change").on("change", this.onItemChange.bind(this)); + html.find(".control-effect").on("click", this.onControlEffect.bind(this)); + html.find(".change-effect").on("change", this.onChangeEffect.bind(this)); html.find(".rollable-item").on("click", this.onRollItem.bind(this)); - html.find(".rollable-check").on("click", this.onRollCheck.bind(this)); } /** - * Handle creating a new embedded Item for the actor using initial data defined in the HTML dataset + * Handles a click on an element of this sheet to control an embedded item of the actor corresponding to this sheet. + * * @param event - The originating click event */ - protected onItemCreate(event: JQuery.ClickEvent): void { + protected onControlItem(event: JQuery.ClickEvent): void { event.preventDefault(); - const header = event.currentTarget; - - const { type, ...data } = foundry.utils.deepClone(header.dataset); - - const name = `New ${type.capitalize()}`; + const a = event.currentTarget; + switch (a.dataset["action"]) { + case "create": + return this.onCreateItem(event); + case "edit": + return this.onEditItem(event); + case "delete": + return this.onDeleteItem(event); + } + } + /** + * Creates a new embedded item using the initial data defined in the HTML dataset of the clicked element. + * + * @param event - The originating click event + */ + protected onCreateItem(event: JQuery.ClickEvent): void { + const { type, ...data } = foundry.utils.deepClone(event.currentTarget.dataset); + const name = getGame().i18n.localize(`DS4.New${type.capitalize()}Name`); const itemData = { name: name, type: type, data: data, }; - - DS4Item.create(itemData, { parent: this.actor }); + Item.create(itemData, { parent: this.actor }); } /** - * Handle changes to properties of an Owned Item from within character sheet. - * Can currently properly bind: see getValue(). - * Assumes the item property is given as the value of the HTML element property 'data-property'. - * @param ev - The originating change event + * Opens the sheet of the embedded item corresponding to the clicked element. + * + * @param event - The originating click event */ - protected onItemChange(ev: JQuery.ChangeEvent): void { - ev.preventDefault(); - const el: HTMLFormElement = $(ev.currentTarget).get(0); - const id = $(ev.currentTarget).parents(".item").data("itemId"); + protected onEditItem(event: JQuery.ClickEvent): void { + const id = $(event.currentTarget) + .parents(embeddedDocumentListEntryProperties.Item.selector) + .data(embeddedDocumentListEntryProperties.Item.idDataAttribute); const item = this.actor.items.get(id); - if (!item) { - throw new Error(getGame().i18n.format("DS4.ErrorActorDoesNotHaveItem", { id, actor: this.actor.name })); - } - const itemObject = item.toObject(); - const property: string | undefined = $(ev.currentTarget).data("property"); - - // Early return: - // Disabled => do nothing - if (el.disabled || el.getAttribute("disabled")) return; - // name not given => raise - if (property === undefined) { - throw TypeError("HTML element does not provide 'data-property' attribute"); - } - - // Set new value - const newValue = this.getValue(el); - foundry.utils.setProperty(itemObject, property, newValue); - item.update(itemObject); + enforce(item, getGame().i18n.format("DS4.ErrorActorDoesNotHaveItem", { id, actor: this.actor.name })); + enforce(item.sheet); + item.sheet.render(true); } /** - * Collect the value of a form element depending on the element's type - * The value is parsed to: - * - Checkbox: boolean - * - Text input: string - * - Number: number - * @param el - The input element to collect the value of + * Deletes the embedded item corresponding to the clicked element. + * + * @param event - The originating click event */ - private getValue(el: HTMLFormElement): boolean | string | number { - // One needs to differentiate between e.g. checkboxes (value="on") and select boxes etc. - // Checkbox: - if (el.type === "checkbox") { - const value: boolean = el.checked; - return value; + protected onDeleteItem(event: JQuery.ClickEvent): void { + const li = $(event.currentTarget).parents(embeddedDocumentListEntryProperties.Item.selector); + this.actor.deleteEmbeddedDocuments("Item", [li.data(embeddedDocumentListEntryProperties.Item.idDataAttribute)]); + li.slideUp(200, () => this.render(false)); + } + + /** + * Applies a change to a property of an embedded item depending on the `data-property` attribute of the + * {@link HTMLInputElement} that has been changed and its new value. + * + * @param event - The originating change event + */ + protected onChangeItem(event: JQuery.ChangeEvent): void { + return this.onChangeEmbeddedDocument(event, "Item"); + } + + /** + * Handles a click on an element of this sheet to control an embedded effect of the actor corresponding to this + * sheet. + * + * @param event - The originating click event + */ + protected onControlEffect(event: JQuery.ClickEvent): void { + event.preventDefault(); + const a = event.currentTarget; + switch (a.dataset["action"]) { + case "create": + return this.onCreateEffect(); + case "edit": + return this.onEditEffect(event); + case "delete": + return this.onDeleteEffect(event); } + } - // Text input: - else if (el.type === "text") { - const value: string = el.value; - return value; - } + /** + * Creates a new embedded effect. + * + * @param event - The originating click event + */ + protected onCreateEffect(): void { + const effectData = { + label: getGame().i18n.localize(`DS4.NewEffectLabel`), + icon: "icons/svg/aura.svg", + origin: this.actor.uuid, + }; + ActiveEffect.create(effectData, { parent: this.actor }); + } - // Numbers: - else if (el.type === "number") { - const value = Number(el.value.trim()); - return value; - } + /** + * Opens the sheet of the embedded effect corresponding to the clicked element. + * + * @param event - The originating click event + */ + protected onEditEffect(event: JQuery.ClickEvent): void { + const id = $(event.currentTarget) + .parents(embeddedDocumentListEntryProperties.ActiveEffect.selector) + .data(embeddedDocumentListEntryProperties.ActiveEffect.idDataAttribute); + const effect = this.actor.effects.get(id); + enforce(effect, getGame().i18n.format("DS4.ErrorActorDoesNotHaveEffect", { id, actor: this.actor.name })); + effect.sheet.render(true); + } - // // Ranges: - // else if (el.type === "range") { - // const value: string = el.value.trim(); - // return value; - // } + /** + * Deletes the embedded item corresponding to the clicked element. + * + * @param event - The originating click event + */ + protected onDeleteEffect(event: JQuery.ClickEvent): void { + const li = $(event.currentTarget).parents(embeddedDocumentListEntryProperties.ActiveEffect.selector); + const id = li.data(embeddedDocumentListEntryProperties.ActiveEffect.idDataAttribute); + this.actor.deleteEmbeddedDocuments("ActiveEffect", [id]); + li.slideUp(200, () => this.render(false)); + } - // // Radio Checkboxes (untested, cf. FormDataExtended.process) - // else if (el.type === "radio") { - // const chosen: HTMLFormElement = el.find((r: HTMLFormElement) => r["checked"]); - // const value: string = chosen ? chosen.value : null; - // return value; - // } + /** + * Applies a change to a property of an embedded effect depending on the `data-property` attribute of the + * {@link HTMLInputElement} that has been changed and its new value. + * + * @param event - The originating change event + */ + protected onChangeEffect(event: JQuery.ChangeEvent): void { + return this.onChangeEmbeddedDocument(event, "ActiveEffect"); + } - // // Multi-Select (untested, cf. FormDataExtended.process) - // else if (el.type === "select-multiple") { - // const value: Array = []; - // el.options.array.forEach((opt: HTMLOptionElement) => { - // if (opt.selected) value.push(opt.value); - // }); - // return value; + /** + * Applies a change to a property of an embedded document of the actor belonging to this sheet. The change depends + * on the `data-property` attribute of the {@link HTMLInputElement} that has been changed and its new value. + * + * @param event - The originating change event + * @param documentName - The name of the embedded document to be changed. + */ + protected onChangeEmbeddedDocument(event: JQuery.ChangeEvent, documentName: "Item" | "ActiveEffect"): void { + event.preventDefault(); + const element = $(event.currentTarget).get(0); + enforce(element instanceof HTMLInputElement); + if (element.disabled) return; - // unsupported: - else { - throw new TypeError("Binding of item property to this type of HTML element not supported; given: " + el); + const effectElement = element.closest(embeddedDocumentListEntryProperties[documentName].selector); + enforce(effectElement instanceof HTMLElement); + const id = effectElement.dataset[embeddedDocumentListEntryProperties[documentName].idDataAttribute]; + const property = element.dataset["property"]; + enforce(property !== undefined, TypeError("HTML element does not provide 'data-property' attribute")); + + const newValue = this.parseValue(element); + this.actor.updateEmbeddedDocuments(documentName, [{ _id: id, [property]: newValue }]); + } + + /** + * Parses the value of the given {@link HTMLInputElement} depending on the element's type + * The value is parsed to: + * - checkbox: `boolean`, if the attribute `data-inverted` is set to a truthy value, the parsed value is inverted + * - text input: `string` + * - number: `number` + * + * @param element - The input element to parse the value from + */ + protected parseValue(element: HTMLInputElement): boolean | string | number { + switch (element.type) { + case "checkbox": { + const inverted = Boolean(element.dataset["inverted"]); + const value: boolean = element.checked; + return inverted ? !value : value; + } + case "text": { + const value: string = element.value; + return value; + } + case "number": { + const value = Number(element.value.trim()); + return value; + } + default: { + throw new TypeError( + "Binding of item property to this type of HTML element not supported; given: " + element, + ); + } } } @@ -239,11 +307,11 @@ export class DS4ActorSheet extends ActorSheet notifications.error(e, { log: true })); } @@ -265,7 +333,7 @@ export class DS4ActorSheet extends ActorSheet { - const item = await DS4Item.fromDropData(data); + const item = await Item.fromDropData(data); if (item && !this.actor.canOwnItemType(item.data.type)) { notifications.warn( getGame().i18n.format("DS4.WarningActorCannotOwnItem", { @@ -299,5 +367,27 @@ export class DS4ActorSheet extends ActorSheet { config: typeof DS4; itemsByType: Record; + enrichedEffects: EnrichedActiveEffectDataSource[]; settings: DS4Settings; } + +type ActiveEffectDataSource = foundry.data.ActiveEffectData["_source"]; + +interface EnrichedActiveEffectDataSource extends ActiveEffectDataSource { + icon: string; + sourceName: string; +} + +/** + * This object contains information about specific properties embedded document list entries for each different type. + */ +const embeddedDocumentListEntryProperties = Object.freeze({ + ActiveEffect: { + selector: ".effect", + idDataAttribute: "effectId", + }, + Item: { + selector: ".item", + idDataAttribute: "itemId", + }, +}); diff --git a/src/module/handlebars/handlebars-partials.ts b/src/module/handlebars/handlebars-partials.ts index 738cf21b..28e4da16 100644 --- a/src/module/handlebars/handlebars-partials.ts +++ b/src/module/handlebars/handlebars-partials.ts @@ -8,30 +8,33 @@ export default async function registerHandlebarsPartials(): Promise { const templatePaths = [ "systems/ds4/templates/sheets/actor/components/actor-header.hbs", "systems/ds4/templates/sheets/actor/components/actor-progression.hbs", + "systems/ds4/templates/sheets/actor/components/add-button.hbs", "systems/ds4/templates/sheets/actor/components/biography.hbs", "systems/ds4/templates/sheets/actor/components/character-properties.hbs", "systems/ds4/templates/sheets/actor/components/check.hbs", "systems/ds4/templates/sheets/actor/components/checks.hbs", "systems/ds4/templates/sheets/actor/components/combat-value.hbs", "systems/ds4/templates/sheets/actor/components/combat-values.hbs", + "systems/ds4/templates/sheets/actor/components/control-button-group.hbs", "systems/ds4/templates/sheets/actor/components/core-value.hbs", "systems/ds4/templates/sheets/actor/components/core-values.hbs", "systems/ds4/templates/sheets/actor/components/creature-properties.hbs", "systems/ds4/templates/sheets/actor/components/currency.hbs", + "systems/ds4/templates/sheets/actor/components/effect-list-entry.hbs", + "systems/ds4/templates/sheets/actor/components/effect-list-header.hbs", "systems/ds4/templates/sheets/actor/components/item-list-entry.hbs", "systems/ds4/templates/sheets/actor/components/item-list-header.hbs", "systems/ds4/templates/sheets/actor/components/items-overview.hbs", - "systems/ds4/templates/sheets/actor/components/overview-add-button.hbs", - "systems/ds4/templates/sheets/actor/components/overview-control-buttons.hbs", "systems/ds4/templates/sheets/actor/components/profile.hbs", "systems/ds4/templates/sheets/actor/components/rollable-image.hbs", "systems/ds4/templates/sheets/actor/components/talent-rank-equation.hbs", - "systems/ds4/templates/sheets/actor/tabs/abilities.hbs", "systems/ds4/templates/sheets/actor/tabs/biography.hbs", + "systems/ds4/templates/sheets/actor/tabs/character-abilities.hbs", "systems/ds4/templates/sheets/actor/tabs/character-inventory.hbs", + "systems/ds4/templates/sheets/actor/tabs/creature-abilities.hbs", "systems/ds4/templates/sheets/actor/tabs/creature-inventory.hbs", "systems/ds4/templates/sheets/actor/tabs/description.hbs", - "systems/ds4/templates/sheets/actor/tabs/special-creature-abilities.hbs", + "systems/ds4/templates/sheets/actor/tabs/effects.hbs", "systems/ds4/templates/sheets/actor/tabs/spells.hbs", "systems/ds4/templates/sheets/actor/tabs/values.hbs", "systems/ds4/templates/sheets/item/components/body.hbs", diff --git a/src/module/helpers.ts b/src/module/helpers.ts index edfc28d3..e96322e4 100644 --- a/src/module/helpers.ts +++ b/src/module/helpers.ts @@ -15,3 +15,7 @@ export function getGame(): Game { } return game; } + +export function getGameSafe(): Game | undefined { + return game instanceof Game ? game : undefined; +} diff --git a/src/module/item/item-sheet.ts b/src/module/item/item-sheet.ts index d604df7f..eca1d176 100644 --- a/src/module/item/item-sheet.ts +++ b/src/module/item/item-sheet.ts @@ -99,8 +99,9 @@ export class DS4ItemSheet extends ItemSheet */ protected async createActiveEffect(): Promise { const createData = { - label: "New Effect", + label: getGame().i18n.localize(`DS4.NewEffectLabel`), icon: "icons/svg/aura.svg", + origin: this.item.uuid, }; return ActiveEffect.create(createData, { parent: this.item }); diff --git a/src/module/macros/roll-item.ts b/src/module/macros/roll-item.ts index 751a7e99..92c59b59 100644 --- a/src/module/macros/roll-item.ts +++ b/src/module/macros/roll-item.ts @@ -38,7 +38,7 @@ async function getOrCreateRollItemMacro(itemData: foundry.data.ItemData["_source } /** - * Executes the roll item macro for the given itemId. + * Executes the roll item macro for the item associated to the given `itemId`. */ export async function rollItem(itemId: string): Promise { const actor = getActiveActor(); diff --git a/src/module/settings.ts b/src/module/settings.ts index 96a86481..a2d1017e 100644 --- a/src/module/settings.ts +++ b/src/module/settings.ts @@ -5,10 +5,12 @@ import { getGame } from "./helpers"; export function registerSystemSettings(): void { + const game = getGame(); + /** * Track the migrations version of the latest migration that has been applied */ - getGame().settings.register("ds4", "systemMigrationVersion", { + game.settings.register("ds4", "systemMigrationVersion", { name: "System Migration Version", scope: "world", config: false, @@ -16,7 +18,7 @@ export function registerSystemSettings(): void { default: -1, }); - getGame().settings.register("ds4", "useSlayingDiceForAutomatedChecks", { + game.settings.register("ds4", "useSlayingDiceForAutomatedChecks", { name: "DS4.SettingUseSlayingDiceForAutomatedChecksName", hint: "DS4.SettingUseSlayingDiceForAutomatedChecksHint", scope: "world", @@ -25,7 +27,7 @@ export function registerSystemSettings(): void { default: false, }); - getGame().settings.register("ds4", "showSlayerPoints", { + game.settings.register("ds4", "showSlayerPoints", { name: "DS4.SettingShowSlayerPointsName", hint: "DS4.SettingShowSlayerPointsHint", scope: "world", @@ -42,9 +44,10 @@ export interface DS4Settings { } export function getDS4Settings(): DS4Settings { + const game = getGame(); return { - systemMigrationVersion: getGame().settings.get("ds4", "systemMigrationVersion"), - useSlayingDiceForAutomatedChecks: getGame().settings.get("ds4", "useSlayingDiceForAutomatedChecks"), - showSlayerPoints: getGame().settings.get("ds4", "showSlayerPoints"), + systemMigrationVersion: game.settings.get("ds4", "systemMigrationVersion"), + useSlayingDiceForAutomatedChecks: game.settings.get("ds4", "useSlayingDiceForAutomatedChecks"), + showSlayerPoints: game.settings.get("ds4", "showSlayerPoints"), }; } diff --git a/src/module/utils.ts b/src/module/utils.ts new file mode 100644 index 00000000..a3038fe1 --- /dev/null +++ b/src/module/utils.ts @@ -0,0 +1,24 @@ +// SPDX-FileCopyrightText: 2021 Johannes Loher +// +// SPDX-License-Identifier: MIT + +import { getGameSafe } from "./helpers"; + +/** + * Tests if the given `value` is truthy. + * + * If it is not truthy, an {@link Error} is thrown, which depends on the given `message` parameter: + * - If `message` is a string`, it is used to construct a new {@link Error} which then is thrown. + * - If `message` is an instance of {@link Error}, it is thrown. + * - If `message` is `undefined`, an {@link Error} with a default message is thrown. + */ +export function enforce(value: unknown, message?: string | Error): asserts value { + if (!value) { + if (!message) { + message = + getGameSafe()?.i18n.localize("DS4.ErrorUnexpectedError") ?? + "There was an unexpected error in the Dungeonslayers 4 system. For more details, please take a look at the console (F12)."; + } + throw message instanceof Error ? message : new Error(message); + } +} diff --git a/src/scss/components/_control_button_group.scss b/src/scss/components/_control_button_group.scss new file mode 100644 index 00000000..6fa87150 --- /dev/null +++ b/src/scss/components/_control_button_group.scss @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2021 Johannes Loher + * + * SPDX-License-Identifier: MIT + */ + +.ds4-control-button-group { + display: flex; + text-align: center; + width: 100%; + padding: 0 calc(1em / 3); + + &__button { + flex: 1; + } +} diff --git a/src/scss/components/_item_list.scss b/src/scss/components/_embedded_document_list.scss similarity index 73% rename from src/scss/components/_item_list.scss rename to src/scss/components/_embedded_document_list.scss index 7c16a34f..e459e8d4 100644 --- a/src/scss/components/_item_list.scss +++ b/src/scss/components/_embedded_document_list.scss @@ -8,7 +8,7 @@ @use "../utils/mixins"; @use "../utils/variables"; -.ds4-item-list { +.ds4-embedded-document-list { @include mixins.mark-invalid-or-disabled-input; $row-height: 1.75em; @@ -23,24 +23,51 @@ &--weapon { grid-template-columns: $row-height $row-height 3ch 3fr $row-height 1fr 3ch 5fr 5ch; + :nth-child(9n + 1), + :nth-child(9n + 5), + :nth-child(9n + 6), + :nth-child(9n + 7) { + justify-self: center; + } } &--armor { grid-template-columns: $row-height $row-height 3ch 3fr 1fr 1fr 3ch 5fr 5ch; + :nth-child(9n + 1), + :nth-child(9n + 7) { + justify-self: center; + } } &--shield { grid-template-columns: $row-height $row-height 3ch 1fr 3ch 3fr 5ch; + :nth-child(7n + 1), + :nth-child(7n + 5) { + justify-self: center; + } } &--equipment { grid-template-columns: $row-height $row-height 3ch 1fr 10ch 3fr 5ch; + :nth-child(7n + 1) { + justify-self: center; + } } &--loot { grid-template-columns: $row-height 3ch 1fr 10ch 3fr 5ch; } &--spell { grid-template-columns: $row-height $row-height 2fr $row-height 1fr 1fr 1fr 1fr 5ch; + :nth-child(9n + 1), + :nth-child(9n + 4), + :nth-child(9n + 6), + :nth-child(9n + 7), + :nth-child(9n + 8) { + justify-self: center; + } } &--talent { grid-template-columns: $row-height 1fr 21ch 3fr 5ch; + :nth-child(9n + 3) { + justify-self: center; + } } &--racial-ability, &--language, @@ -49,6 +76,13 @@ grid-template-columns: $row-height 1fr 3fr 5ch; } + &--effect { + grid-template-columns: $row-height $row-height 3fr 2fr 5ch; + :nth-child(5n + 1) { + justify-self: center; + } + } + &__row { display: contents; // TODO: Once chromium supports `grid-template-columns: subgrid` (https://bugs.chromium.org/p/chromium/issues/detail?id=618969), switch to `display: grid; grid: 1/-1; grid-template-columns: subgrid` @@ -96,17 +130,9 @@ text-overflow: ellipsis; } } - - &__control-buttons { - display: grid; - grid-template-columns: 1fr 1fr; - text-align: center; - width: 100%; - padding: 0 calc(1em / 3); - } } -.ds4-item-list-title { +.ds4-embedded-document-list-title { border-bottom: variables.$border-groove; font-weight: bold; margin-bottom: 0; diff --git a/src/scss/ds4.scss b/src/scss/ds4.scss index a6afe386..79fb8a1d 100644 --- a/src/scss/ds4.scss +++ b/src/scss/ds4.scss @@ -29,12 +29,13 @@ @include meta.load-css("components/checks"); @include meta.load-css("components/combat_value"); @include meta.load-css("components/combat_values"); + @include meta.load-css("components/control_button_group"); @include meta.load-css("components/core_value"); @include meta.load-css("components/core_values"); @include meta.load-css("components/currency"); @include meta.load-css("components/description"); + @include meta.load-css("components/embedded_document_list"); @include meta.load-css("components/forms"); - @include meta.load-css("components/item_list"); @include meta.load-css("components/profile"); @include meta.load-css("components/rollable_image"); @include meta.load-css("components/sheet_tab_nav"); diff --git a/src/system.json b/src/system.json index 6b34831e..c2f5483b 100644 --- a/src/system.json +++ b/src/system.json @@ -1,11 +1,10 @@ { "name": "ds4", "title": "Dungeonslayers 4", - "description": "The Dungeonslayers 4 system for FoundryVTT. Dungeonslayers by Christian Kennig is licensed under CC BY-NC-SA 3.0 (https://creativecommons.org/licenses/by-nc-sa/3.0/). The icons by the authors of Game-icons.net are licensed under CC BY 3.0 (https://creativecommons.org/licenses/by/3.0/). The creature images by Devin Night (https://immortalnights.com/) and are licensed under the terms described at https://immortalnights.com/tokens/token-usage-rights/.", - "version": "1.1.3", + "description": "The Dungeonslayers 4 system for FoundryVTT. Dungeonslayers by Christian Kennig is licensed under CC BY-NC-SA 3.0 (https://creativecommons.org/licenses/by-nc-sa/3.0/). The icons by the authors of Game-icons.net are licensed under CC BY 3.0 (https://creativecommons.org/licenses/by/3.0/). The token images by Devin Night (https://immortalnights.com/) and are licensed under the terms described at https://immortalnights.com/tokens/token-usage-rights/.", + "version": "1.2.1", "minimumCoreVersion": "0.8.8", "compatibleCoreVersion": "0.8.8", - "templateVersion": 6, "author": "Johannes Loher, Gesina Schwalbe, Oliver Rümpelein, Siegfried Krug, Max Tharr, Sascha Martens", "authors": [ { @@ -93,7 +92,7 @@ "primaryTokenAttribute": "combatValues.hitPoints", "url": "https://git.f3l.de/dungeonslayers/ds4", "manifest": "https://git.f3l.de/dungeonslayers/ds4/-/raw/latest/src/system.json?inline=false", - "download": "https://git.f3l.de/dungeonslayers/ds4/-/jobs/artifacts/1.1.3/download?job=build", + "download": "https://git.f3l.de/dungeonslayers/ds4/-/jobs/artifacts/1.2.1/download?job=build", "license": "https://git.f3l.de/dungeonslayers/ds4#licensing", "initiative": "@combatValues.initiative.total", "manifestPlusVersion": "1.0.0", diff --git a/src/templates/sheets/actor/character-sheet.hbs b/src/templates/sheets/actor/character-sheet.hbs index 99ff588c..70455a92 100644 --- a/src/templates/sheets/actor/character-sheet.hbs +++ b/src/templates/sheets/actor/character-sheet.hbs @@ -18,6 +18,7 @@ SPDX-License-Identifier: MIT {{localize 'DS4.HeadingInventory'}} {{localize 'DS4.HeadingSpells'}} {{localize 'DS4.HeadingAbilities'}} + {{localize 'DS4.HeadingEffects'}} {{localize 'DS4.HeadingBiography'}} @@ -35,7 +36,10 @@ SPDX-License-Identifier: MIT {{> systems/ds4/templates/sheets/actor/tabs/spells.hbs}} {{!-- Abilities Tab --}} -{{> systems/ds4/templates/sheets/actor/tabs/abilities.hbs}} +{{> systems/ds4/templates/sheets/actor/tabs/character-abilities.hbs}} + +{{!-- Effects Tab --}} +{{> systems/ds4/templates/sheets/actor/tabs/effects.hbs}} {{!-- Biography Tab --}} {{> systems/ds4/templates/sheets/actor/tabs/biography.hbs}} diff --git a/src/templates/sheets/actor/components/add-button.hbs b/src/templates/sheets/actor/components/add-button.hbs new file mode 100644 index 00000000..1fc86419 --- /dev/null +++ b/src/templates/sheets/actor/components/add-button.hbs @@ -0,0 +1,20 @@ +{{!-- +SPDX-FileCopyrightText: 2021 Johannes Loher +SPDX-FileCopyrightText: 2021 Gesina Schwalbe + +SPDX-License-Identifier: MIT +--}} + +{{! +!-- Render an "add" button. +!-- @param documentType: The type of document this button controls, item or effect +!-- @param title: The title to use for the link element (will be localized) +!-- @param type: An optional property to use as data-type attribute +}} + diff --git a/src/templates/sheets/actor/components/control-button-group.hbs b/src/templates/sheets/actor/components/control-button-group.hbs new file mode 100644 index 00000000..dffef3e0 --- /dev/null +++ b/src/templates/sheets/actor/components/control-button-group.hbs @@ -0,0 +1,20 @@ +{{!-- +SPDX-FileCopyrightText: 2021 Johannes Loher +SPDX-FileCopyrightText: 2021 Gesina Schwalbe + +SPDX-License-Identifier: MIT +--}} + +{{!-- +!-- Render a group of an "edit" and a "delete" button. +!-- The current item is defined by the a corresponding id attribute of the parent li element. +!-- @param documentType: The type of document that is controlled by this button group, item or effect +!-- @param editTitle: The title to use for the edit link element (will be localized) +!-- @param deleteTitle: The title to use for the delete link element (will be localized) +--}} +
+ + +
diff --git a/src/templates/sheets/actor/components/currency.hbs b/src/templates/sheets/actor/components/currency.hbs index 99e70195..7635f91e 100644 --- a/src/templates/sheets/actor/components/currency.hbs +++ b/src/templates/sheets/actor/components/currency.hbs @@ -10,7 +10,7 @@ SPDX-License-Identifier: MIT
{{#each data.data.currency as |value key|}} - {{/each}}
diff --git a/src/templates/sheets/actor/components/effect-list-entry.hbs b/src/templates/sheets/actor/components/effect-list-entry.hbs new file mode 100644 index 00000000..f9c9d908 --- /dev/null +++ b/src/templates/sheets/actor/components/effect-list-entry.hbs @@ -0,0 +1,31 @@ +{{!-- +SPDX-FileCopyrightText: 2021 Johannes Loher +SPDX-FileCopyrightText: 2021 Gesina Schwalbe + +SPDX-License-Identifier: MIT +--}} + +{{!-- +!-- Render an effect list entry row. +!-- @param effectData: The data of the item. +--}} +
  • + {{!-- enabled --}} + + + {{!-- icon --}} + {{> systems/ds4/templates/sheets/actor/components/rollable-image.hbs rollable=false src=effectData.icon + alt=(localize "DS4.EffectIconAltText" label=effectData.label) title=effectData.label}} + + {{!-- label --}} +
    {{effectData.label}}
    + + {{!-- source name --}} +
    {{effectData.sourceName}}
    + + {{!-- control button group --}} + {{> systems/ds4/templates/sheets/actor/components/control-button-group.hbs documentType="effect" + editTitle="DS4.UserInteractionEditEffectTitle" deleteTitle="DS4.UserInteractionDeleteEffectTitle"}} +
  • diff --git a/src/templates/sheets/actor/components/effect-list-header.hbs b/src/templates/sheets/actor/components/effect-list-header.hbs new file mode 100644 index 00000000..91311fe5 --- /dev/null +++ b/src/templates/sheets/actor/components/effect-list-header.hbs @@ -0,0 +1,26 @@ +{{!-- +SPDX-FileCopyrightText: 2021 Johannes Loher +SPDX-FileCopyrightText: 2021 Gesina Schwalbe + +SPDX-License-Identifier: MIT +--}} + +{{!-- +!-- Render an effect list header row. +--}} +
  • + {{!-- enabled --}} +
    {{localize 'DS4.EffectEnabledAbbr'}}
    + + {{!-- icon --}} +
    + + {{!-- label --}} +
    {{localize 'DS4.EffectLabel'}}
    + + {{!-- source name --}} +
    {{localize 'DS4.EffectSourceName'}}
    + + {{!-- control buttons placeholder --}} +
    +
  • diff --git a/src/templates/sheets/actor/components/item-list-entry.hbs b/src/templates/sheets/actor/components/item-list-entry.hbs index 0992d45c..8cfd3a44 100644 --- a/src/templates/sheets/actor/components/item-list-entry.hbs +++ b/src/templates/sheets/actor/components/item-list-entry.hbs @@ -15,10 +15,10 @@ SPDX-License-Identifier: MIT !-- @param hideDescription: A flag to disable the description column. !-- @param @partial-block: Custom column headers can be passed using the partial block. --}} -
  • +
  • {{!-- equipped --}} {{#if isEquipable}} - {{/if}} @@ -30,12 +30,12 @@ SPDX-License-Identifier: MIT {{!-- amount --}} {{#if hasQuantity}} - {{/if}} {{!-- name --}} - {{!-- item type specifics --}} @@ -45,11 +45,11 @@ SPDX-License-Identifier: MIT {{!-- description --}} {{#unless hideDescription}} -
    +
    {{{itemData.data.description}}}
    {{/unless}} - {{!-- control buttons --}} - {{> systems/ds4/templates/sheets/actor/components/overview-control-buttons.hbs - class="ds4-item-list__control-buttons" }} + {{!-- control button group --}} + {{> systems/ds4/templates/sheets/actor/components/control-button-group.hbs documentType="item" + editTitle="DS4.UserInteractionEditItemTitle" deleteTitle="DS4.UserInteractionDeleteItemTitle"}}
  • diff --git a/src/templates/sheets/actor/components/item-list-header.hbs b/src/templates/sheets/actor/components/item-list-header.hbs index c2ebdb99..54229ade 100644 --- a/src/templates/sheets/actor/components/item-list-header.hbs +++ b/src/templates/sheets/actor/components/item-list-header.hbs @@ -14,7 +14,7 @@ SPDX-License-Identifier: MIT !-- @param hideDescription: A flag to disable the description column. !-- @param @partial-block: Custom column headers can be passed using the partial block. --}} -
  • +
  • {{!-- equipped --}} {{#if isEquipable}}
    {{localize 'DS4.ItemEquippedAbbr'}}
    diff --git a/src/templates/sheets/actor/components/items-overview.hbs b/src/templates/sheets/actor/components/items-overview.hbs index e3d4d292..c9e25bf5 100644 --- a/src/templates/sheets/actor/components/items-overview.hbs +++ b/src/templates/sheets/actor/components/items-overview.hbs @@ -7,12 +7,12 @@ SPDX-License-Identifier: MIT --}} {{!-- WEAPONS --}} -

    {{localize 'DS4.ItemTypeWeaponPlural'}}

    +

    {{localize 'DS4.ItemTypeWeaponPlural'}}

    {{#unless (isEmpty itemsByType.weapon)}} -
      +
        {{#> systems/ds4/templates/sheets/actor/components/item-list-header.hbs isEquipable=true hasQuantity=true}} {{!-- attack type --}} -
        {{localize 'DS4.AttackTypeAbbr'}}
        +
        {{localize 'DS4.AttackTypeAbbr'}}
        {{!-- weapon bonus --}}
        @@ -29,7 +29,7 @@ SPDX-License-Identifier: MIT {{#> systems/ds4/templates/sheets/actor/components/item-list-entry.hbs itemData=itemData isEquipable=true hasQuantity=true}} {{!-- attack type --}} - {{!-- weapon bonus --}} @@ -41,12 +41,13 @@ SPDX-License-Identifier: MIT {{/each}}
      {{/unless}} -{{> systems/ds4/templates/sheets/actor/components/overview-add-button.hbs dataType='weapon'}} +{{> systems/ds4/templates/sheets/actor/components/add-button.hbs title='DS4.UserInteractionAddItemTitle' +documentType='item' type='weapon'}} {{!-- ARMOR --}} -

      {{localize 'DS4.ItemTypeArmorPlural'}}

      +

      {{localize 'DS4.ItemTypeArmorPlural'}}

      {{#unless (isEmpty itemsByType.armor)}} -
        +
          {{#> systems/ds4/templates/sheets/actor/components/item-list-header.hbs isEquipable=true hasQuantity=true}} {{!-- armor material type --}}
          {{localize 'DS4.ArmorMaterialTypeAbbr'}}
          @@ -79,12 +80,13 @@ SPDX-License-Identifier: MIT {{/each}}
        {{/unless}} -{{> systems/ds4/templates/sheets/actor/components/overview-add-button.hbs dataType='armor'}} +{{> systems/ds4/templates/sheets/actor/components/add-button.hbs title='DS4.UserInteractionAddItemTitle' +documentType='item' type='armor'}} {{!-- SHIELD --}} -

        {{localize 'DS4.ItemTypeShieldPlural'}}

        +

        {{localize 'DS4.ItemTypeShieldPlural'}}

        {{#unless (isEmpty itemsByType.shield)}} -
          +
            {{#> systems/ds4/templates/sheets/actor/components/item-list-header.hbs isEquipable=true hasQuantity=true}} {{!-- armor value --}}
            @@ -100,12 +102,13 @@ SPDX-License-Identifier: MIT {{/each}}
          {{/unless}} -{{> systems/ds4/templates/sheets/actor/components/overview-add-button.hbs dataType='shield'}} +{{> systems/ds4/templates/sheets/actor/components/add-button.hbs title='DS4.UserInteractionAddItemTitle' +documentType='item' type='shield'}} {{!-- EQUIPMENT --}} -

          {{localize 'DS4.ItemTypeEquipmentPlural'}}

          +

          {{localize 'DS4.ItemTypeEquipmentPlural'}}

          {{#unless (isEmpty itemsByType.equipment)}} -
            +
              {{#> systems/ds4/templates/sheets/actor/components/item-list-header.hbs isEquipable=true hasQuantity=true}} {{!-- storage location --}}
              {{localize 'DS4.StorageLocation'}}
              @@ -114,18 +117,19 @@ SPDX-License-Identifier: MIT {{#> systems/ds4/templates/sheets/actor/components/item-list-entry.hbs itemData=itemData isEquipable=true hasQuantity=true}} {{!-- storage location --}} - {{/systems/ds4/templates/sheets/actor/components/item-list-entry.hbs}} {{/each}}
            {{/unless}} -{{> systems/ds4/templates/sheets/actor/components/overview-add-button.hbs dataType='equipment'}} +{{> systems/ds4/templates/sheets/actor/components/add-button.hbs title='DS4.UserInteractionAddItemTitle' +documentType='item' type='equipment'}} {{!-- LOOT --}} -

            {{localize 'DS4.ItemTypeLootPlural'}}

            +

            {{localize 'DS4.ItemTypeLootPlural'}}

            {{#unless (isEmpty itemsByType.loot)}} -
              +
                {{#> systems/ds4/templates/sheets/actor/components/item-list-header.hbs hasQuantity=true}} {{!-- storage location --}}
                {{localize 'DS4.StorageLocation'}}
                @@ -133,10 +137,11 @@ SPDX-License-Identifier: MIT {{#each itemsByType.loot as |itemData id|}} {{#> systems/ds4/templates/sheets/actor/components/item-list-entry.hbs itemData=itemData hasQuantity=true}} {{!-- storage location --}} - {{/systems/ds4/templates/sheets/actor/components/item-list-entry.hbs}} {{/each}}
              {{/unless}} -{{> systems/ds4/templates/sheets/actor/components/overview-add-button.hbs dataType='loot'}} +{{> systems/ds4/templates/sheets/actor/components/add-button.hbs title='DS4.UserInteractionAddItemTitle' +documentType='item' type='loot'}} diff --git a/src/templates/sheets/actor/components/overview-add-button.hbs b/src/templates/sheets/actor/components/overview-add-button.hbs deleted file mode 100644 index a041ac9b..00000000 --- a/src/templates/sheets/actor/components/overview-add-button.hbs +++ /dev/null @@ -1,17 +0,0 @@ -{{!-- -SPDX-FileCopyrightText: 2021 Johannes Loher -SPDX-FileCopyrightText: 2021 Gesina Schwalbe - -SPDX-License-Identifier: MIT ---}} - -{{! -!-- Render an "add" button for adding an item of given data type. -!-- @param dataType: hand over the dataType to the partial as hash parameter -}} - diff --git a/src/templates/sheets/actor/components/overview-control-buttons.hbs b/src/templates/sheets/actor/components/overview-control-buttons.hbs deleted file mode 100644 index e3078224..00000000 --- a/src/templates/sheets/actor/components/overview-control-buttons.hbs +++ /dev/null @@ -1,17 +0,0 @@ -{{!-- -SPDX-FileCopyrightText: 2021 Johannes Loher -SPDX-FileCopyrightText: 2021 Gesina Schwalbe - -SPDX-License-Identifier: MIT ---}} - -{{!-- -!-- Render a group of an "edit" and a "delete" button for the current item. -!-- The current item is defined by the data-item-id HTML property of the parent li element. -!-- @param class: Additional CSS class(es) for the controls ---}} -
              - - -
              diff --git a/src/templates/sheets/actor/components/talent-rank-equation.hbs b/src/templates/sheets/actor/components/talent-rank-equation.hbs index ce91c8b9..3480b5f1 100644 --- a/src/templates/sheets/actor/components/talent-rank-equation.hbs +++ b/src/templates/sheets/actor/components/talent-rank-equation.hbs @@ -18,7 +18,7 @@ disable the input element !-- @param localizeString: The string to use as key for the localized tooltip --}} {{#*inline "talentRankValue"}} - {{/inline}} diff --git a/src/templates/sheets/actor/creature-sheet.hbs b/src/templates/sheets/actor/creature-sheet.hbs index 12e78d61..ebd9f437 100644 --- a/src/templates/sheets/actor/creature-sheet.hbs +++ b/src/templates/sheets/actor/creature-sheet.hbs @@ -17,9 +17,9 @@ SPDX-License-Identifier: MIT @@ -31,12 +31,15 @@ SPDX-License-Identifier: MIT {{!-- Inventory Tab --}} {{> systems/ds4/templates/sheets/actor/tabs/creature-inventory.hbs}} - {{!-- Special Creature Abilities Tab --}} - {{> systems/ds4/templates/sheets/actor/tabs/special-creature-abilities.hbs}} - {{!-- Spells Tab --}} {{> systems/ds4/templates/sheets/actor/tabs/spells.hbs}} + {{!-- Abilities Tab --}} + {{> systems/ds4/templates/sheets/actor/tabs/creature-abilities.hbs}} + + {{!-- Effects Tab --}} + {{> systems/ds4/templates/sheets/actor/tabs/effects.hbs}} + {{!-- Description Tab --}} {{> systems/ds4/templates/sheets/actor/tabs/description.hbs}} diff --git a/src/templates/sheets/actor/tabs/abilities.hbs b/src/templates/sheets/actor/tabs/character-abilities.hbs similarity index 59% rename from src/templates/sheets/actor/tabs/abilities.hbs rename to src/templates/sheets/actor/tabs/character-abilities.hbs index 99217df6..0fdb1dc2 100644 --- a/src/templates/sheets/actor/tabs/abilities.hbs +++ b/src/templates/sheets/actor/tabs/character-abilities.hbs @@ -7,9 +7,9 @@ SPDX-License-Identifier: MIT
              {{!-- TALENT --}} -

              {{localize 'DS4.ItemTypeTalentPlural'}}

              +

              {{localize 'DS4.ItemTypeTalentPlural'}}

              {{#unless (isEmpty itemsByType.talent)}} -
                +
                  {{#> systems/ds4/templates/sheets/actor/components/item-list-header.hbs}} {{!-- rank --}}
                  {{localize 'DS4.TalentRank'}}
                  @@ -22,41 +22,45 @@ SPDX-License-Identifier: MIT {{/each}}
                {{/unless}} - {{> systems/ds4/templates/sheets/actor/components/overview-add-button.hbs dataType='talent'}} + {{> systems/ds4/templates/sheets/actor/components/add-button.hbs title='DS4.UserInteractionAddItemTitle' + documentType='item' type='talent'}} {{!-- RACIAL ABILITY --}} -

                {{localize 'DS4.ItemTypeRacialAbilityPlural'}}

                +

                {{localize 'DS4.ItemTypeRacialAbilityPlural'}}

                {{#unless (isEmpty itemsByType.racialAbility)}} -
                  +
                    {{> systems/ds4/templates/sheets/actor/components/item-list-header.hbs}} {{#each itemsByType.racialAbility as |itemData id|}} {{> systems/ds4/templates/sheets/actor/components/item-list-entry.hbs itemData=itemData}} {{/each}}
                  {{/unless}} - {{> systems/ds4/templates/sheets/actor/components/overview-add-button.hbs dataType='racialAbility'}} + {{> systems/ds4/templates/sheets/actor/components/add-button.hbs title='DS4.UserInteractionAddItemTitle' + documentType='item' type='racialAbility'}} {{!-- LANGUAGE --}} -

                  {{localize 'DS4.ItemTypeLanguagePlural'}}

                  +

                  {{localize 'DS4.ItemTypeLanguagePlural'}}

                  {{#unless (isEmpty itemsByType.language)}} -
                    +
                      {{> systems/ds4/templates/sheets/actor/components/item-list-header.hbs}} {{#each itemsByType.language as |itemData id|}} {{> systems/ds4/templates/sheets/actor/components/item-list-entry.hbs itemData=itemData}} {{/each}}
                    {{/unless}} - {{> systems/ds4/templates/sheets/actor/components/overview-add-button.hbs dataType='language'}} + {{> systems/ds4/templates/sheets/actor/components/add-button.hbs title='DS4.UserInteractionAddItemTitle' + documentType='item' type='language'}} {{!-- ALPHABET --}} -

                    {{localize 'DS4.ItemTypeAlphabetPlural'}}

                    +

                    {{localize 'DS4.ItemTypeAlphabetPlural'}}

                    {{#unless (isEmpty itemsByType.alphabet)}} -
                      +
                        {{> systems/ds4/templates/sheets/actor/components/item-list-header.hbs}} {{#each itemsByType.alphabet as |itemData id|}} {{> systems/ds4/templates/sheets/actor/components/item-list-entry.hbs itemData=itemData}} {{/each}}
                      {{/unless}} - {{> systems/ds4/templates/sheets/actor/components/overview-add-button.hbs dataType='alphabet'}} + {{> systems/ds4/templates/sheets/actor/components/add-button.hbs title='DS4.UserInteractionAddItemTitle' + documentType='item' type='alphabet'}}
              diff --git a/src/templates/sheets/actor/tabs/special-creature-abilities.hbs b/src/templates/sheets/actor/tabs/creature-abilities.hbs similarity index 58% rename from src/templates/sheets/actor/tabs/special-creature-abilities.hbs rename to src/templates/sheets/actor/tabs/creature-abilities.hbs index 6782d481..ab62882d 100644 --- a/src/templates/sheets/actor/tabs/special-creature-abilities.hbs +++ b/src/templates/sheets/actor/tabs/creature-abilities.hbs @@ -5,14 +5,15 @@ SPDX-FileCopyrightText: 2021 Gesina Schwalbe SPDX-License-Identifier: MIT --}} -
              +
              {{#unless (isEmpty itemsByType.specialCreatureAbility)}} -
                +
                  {{> systems/ds4/templates/sheets/actor/components/item-list-header.hbs}} {{#each itemsByType.specialCreatureAbility as |itemData id|}} {{> systems/ds4/templates/sheets/actor/components/item-list-entry.hbs itemData=itemData}} {{/each}}
                {{/unless}} - {{> systems/ds4/templates/sheets/actor/components/overview-add-button.hbs dataType='specialCreatureAbility'}} + {{> systems/ds4/templates/sheets/actor/components/add-button.hbs title='DS4.UserInteractionAddItemTitle' + documentType='item' type='specialCreatureAbility'}}
              diff --git a/src/templates/sheets/actor/tabs/effects.hbs b/src/templates/sheets/actor/tabs/effects.hbs new file mode 100644 index 00000000..67ed0a36 --- /dev/null +++ b/src/templates/sheets/actor/tabs/effects.hbs @@ -0,0 +1,19 @@ +{{!-- +SPDX-FileCopyrightText: 2021 Johannes Loher +SPDX-FileCopyrightText: 2021 Gesina Schwalbe + +SPDX-License-Identifier: MIT +--}} + +
              + {{#unless (isEmpty data.effects)}} +
                + {{> systems/ds4/templates/sheets/actor/components/effect-list-header.hbs}} + {{#each enrichedEffects as |effectData id| }} + {{> systems/ds4/templates/sheets/actor/components/effect-list-entry.hbs effectData=effectData}} + {{/each}} +
              + {{/unless}} + {{> systems/ds4/templates/sheets/actor/components/add-button.hbs title='DS4.UserInteractionAddEffectTitle' + documentType='effect'}} +
              diff --git a/src/templates/sheets/actor/tabs/spells.hbs b/src/templates/sheets/actor/tabs/spells.hbs index 4dac5d28..64e6eac9 100644 --- a/src/templates/sheets/actor/tabs/spells.hbs +++ b/src/templates/sheets/actor/tabs/spells.hbs @@ -51,7 +51,7 @@ titleKey=titleKey}}
              {{#unless (isEmpty itemsByType.spell)}} -
                +
                  {{#> systems/ds4/templates/sheets/actor/components/item-list-header.hbs isEquipable=true hideDescription=true}} {{!-- spell type --}}
                  {{localize 'DS4.SpellTypeAbbr'}}
                  @@ -72,11 +72,11 @@ titleKey=titleKey}} {{#> systems/ds4/templates/sheets/actor/components/item-list-entry.hbs itemData=itemData isEquipable=true hideDescription=true}} {{!-- spell type --}} - {{!-- spell bonus --}} - {{!-- max. distance --}} @@ -93,5 +93,6 @@ titleKey=titleKey}} {{/each}}
                {{/unless}} - {{> systems/ds4/templates/sheets/actor/components/overview-add-button.hbs dataType='spell' }} + {{> systems/ds4/templates/sheets/actor/components/add-button.hbs title='DS4.UserInteractionAddItemTitle' + documentType='item' type='spell'}}
              diff --git a/src/templates/sheets/item/tabs/effects.hbs b/src/templates/sheets/item/tabs/effects.hbs index 2fd894a1..0404d749 100644 --- a/src/templates/sheets/item/tabs/effects.hbs +++ b/src/templates/sheets/item/tabs/effects.hbs @@ -12,17 +12,18 @@ SPDX-License-Identifier: MIT
              Name
              {{#each item.effects as |effect id|}}
            1. {{effect.data.label}}

            2. diff --git a/yarn.lock b/yarn.lock index 179c75a5..de15bc27 100644 --- a/yarn.lock +++ b/yarn.lock @@ -420,9 +420,9 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^0.4.2": - version: 0.4.2 - resolution: "@eslint/eslintrc@npm:0.4.2" +"@eslint/eslintrc@npm:^0.4.3": + version: 0.4.3 + resolution: "@eslint/eslintrc@npm:0.4.3" dependencies: ajv: ^6.12.4 debug: ^4.1.1 @@ -433,7 +433,7 @@ __metadata: js-yaml: ^3.13.1 minimatch: ^3.0.4 strip-json-comments: ^3.1.1 - checksum: 60b66ce4257bf5c36a920dea83a056102fef746e7afd7100a6fe245a126ff455f67f4948e75d28ed73090bff8f8556b6a996e74a124911ca703440bc245dbc23 + checksum: fa916db689fac96c749571f03f931448d896ce07c3da40079082f28621f52defa36cc0c88bfcdd8d19b9981a6549c3a9a3977953db2f6945aba1135bb83a3d35 languageName: node linkType: hard @@ -663,19 +663,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/types@npm:26.6.2" - dependencies: - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^15.0.0 - chalk: ^4.0.0 - checksum: 5c511d7807f414b298299ae4a053abf265f39984942e0eefdfb17a7986a36f1047e0fd9a6f785bdddbf7343a5737595dfabe148719a80e118dd77486502009cc - languageName: node - linkType: hard - "@jest/types@npm:^27.0.6": version: 27.0.6 resolution: "@jest/types@npm:27.0.6" @@ -689,19 +676,19 @@ __metadata: languageName: node linkType: hard -"@league-of-foundry-developers/foundry-vtt-types@npm:^0.8.8-5": - version: 0.8.8-5 - resolution: "@league-of-foundry-developers/foundry-vtt-types@npm:0.8.8-5" +"@league-of-foundry-developers/foundry-vtt-types@npm:0.8.8-8": + version: 0.8.8-8 + resolution: "@league-of-foundry-developers/foundry-vtt-types@npm:0.8.8-8" dependencies: - "@types/jquery": ~3.5.5 - "@types/simple-peer": ~9.11.0 + "@types/jquery": ~3.5.6 + "@types/simple-peer": ~9.11.1 handlebars: 4.7.7 pixi-particles: 4.3.1 pixi.js: 5.3.4 socket.io-client: 4.1.2 tinymce: 5.8.1 - typescript: ^4.1.6 - checksum: e5f06d5bd68403cf79ed367bcfcc2eade250dc00800e1ede33357515ba9cd437336e0c1388c316501087ac5bce8b36731782e2509683d9186e1387283ed83e35 + typescript: ^4.3.5 + checksum: e327a47b2f0a18ab05bbc8703c596aed4d35f3b12aff3252b5facbcc6b993a88034f233fcf446d0925176c7e8d5b15546ec97e0df10d1e9689e11b4e19ab1e3a languageName: node linkType: hard @@ -1122,35 +1109,6 @@ __metadata: languageName: node linkType: hard -"@rollup/plugin-node-resolve@npm:^13.0.0": - version: 13.0.0 - resolution: "@rollup/plugin-node-resolve@npm:13.0.0" - dependencies: - "@rollup/pluginutils": ^3.1.0 - "@types/resolve": 1.17.1 - builtin-modules: ^3.1.0 - deepmerge: ^4.2.2 - is-module: ^1.0.0 - resolve: ^1.19.0 - peerDependencies: - rollup: ^2.42.0 - checksum: 4b323e8ad5f1245449cd44b4857ed94a8dd3b998178ce139e74542c216a5abeb5a9e44885f3809ac747296a108f0562f986f9561055e76d1b0b268cf788a5c83 - languageName: node - linkType: hard - -"@rollup/pluginutils@npm:^3.1.0": - version: 3.1.0 - resolution: "@rollup/pluginutils@npm:3.1.0" - dependencies: - "@types/estree": 0.0.39 - estree-walker: ^1.0.1 - picomatch: ^2.2.2 - peerDependencies: - rollup: ^1.20.0||^2.0.0 - checksum: 45da6411e045d1b034242a8144f4a5e8c02ff1b68a2e0857807f5bb4b091c416f2015e075057f0f0dec200e7b35efe6ed4e301b43e365cedea09192f01a6839b - languageName: node - linkType: hard - "@rollup/pluginutils@npm:^4.1.0": version: 4.1.0 resolution: "@rollup/pluginutils@npm:4.1.0" @@ -1236,14 +1194,7 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:0.0.39": - version: 0.0.39 - resolution: "@types/estree@npm:0.0.39" - checksum: 43e5361de39969def145f32f4599391ab13055ec94841f1633a7cfe10f0e8a940ebf0e9a4b2770454a6bddd034b57e7e0d51a4d565cb2714ee2accf10a7718be - languageName: node - linkType: hard - -"@types/fs-extra@npm:^9.0.12": +"@types/fs-extra@npm:9.0.12": version: 9.0.12 resolution: "@types/fs-extra@npm:9.0.12" dependencies: @@ -1286,17 +1237,17 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^26.0.24": - version: 26.0.24 - resolution: "@types/jest@npm:26.0.24" +"@types/jest@npm:27.0.1": + version: 27.0.1 + resolution: "@types/jest@npm:27.0.1" dependencies: - jest-diff: ^26.0.0 - pretty-format: ^26.0.0 - checksum: e5d3651c1edf197011d19ee8f4bacd52667fa673d1b2ffbfbce624208d643fd4372ebb31fa8a1d89843a7705f142e38076e25e1e7b67f3aacafd6ae8bc77cbcf + jest-diff: ^27.0.0 + pretty-format: ^27.0.0 + checksum: 5f2382b5800e736a1fb805b5ce35dc9276b978ab24225f3d3da0c5f74789a528cd8e2b085e3a157a12b1395038f137f7e1babd18c4b55c54c25f5db1d4ea3153 languageName: node linkType: hard -"@types/jquery@npm:~3.5.5": +"@types/jquery@npm:~3.5.6": version: 3.5.6 resolution: "@types/jquery@npm:3.5.6" dependencies: @@ -1333,16 +1284,7 @@ __metadata: languageName: node linkType: hard -"@types/resolve@npm:1.17.1": - version: 1.17.1 - resolution: "@types/resolve@npm:1.17.1" - dependencies: - "@types/node": "*" - checksum: 8e72a73574f9489760662498c1ad512a8d4084a5db15f327e0d785cb277bb0a3146cd049241a8e3268bd0ed204ad3ee7b4a6b4622ef681e70547be9af258ca6a - languageName: node - linkType: hard - -"@types/simple-peer@npm:~9.11.0": +"@types/simple-peer@npm:~9.11.1": version: 9.11.1 resolution: "@types/simple-peer@npm:9.11.1" dependencies: @@ -1372,15 +1314,6 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^15.0.0": - version: 15.0.13 - resolution: "@types/yargs@npm:15.0.13" - dependencies: - "@types/yargs-parser": "*" - checksum: fa1a5b0a07dbbff1657a27d1191d586632412d170321000f6f417f279547a8c191d7058dbf4d4187c188a5a1aeb2473ddb25fe316b206fccdfe1de6fad976619 - languageName: node - linkType: hard - "@types/yargs@npm:^16.0.0": version: 16.0.3 resolution: "@types/yargs@npm:16.0.3" @@ -1390,12 +1323,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^4.28.2": - version: 4.28.2 - resolution: "@typescript-eslint/eslint-plugin@npm:4.28.2" +"@typescript-eslint/eslint-plugin@npm:4.29.2": + version: 4.29.2 + resolution: "@typescript-eslint/eslint-plugin@npm:4.29.2" dependencies: - "@typescript-eslint/experimental-utils": 4.28.2 - "@typescript-eslint/scope-manager": 4.28.2 + "@typescript-eslint/experimental-utils": 4.29.2 + "@typescript-eslint/scope-manager": 4.29.2 debug: ^4.3.1 functional-red-black-tree: ^1.0.1 regexpp: ^3.1.0 @@ -1407,23 +1340,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 6af8ea7665d5eaf0bafe241d71e3a85df07c0c82e59f530bd6627e0371e66a2d4a517cacd00d030680fe13d423b065c53185d3f48daa174fea316f024b1ab545 + checksum: 5ea5fc49a7569cb4a636ae71c5521908e74d3e504a6898977a67bba0a50756ebff63446f81424a8c427629095b6fa1bd014fdf8bd541a459bf5e6461890bfb2c languageName: node linkType: hard -"@typescript-eslint/experimental-utils@npm:4.28.2": - version: 4.28.2 - resolution: "@typescript-eslint/experimental-utils@npm:4.28.2" +"@typescript-eslint/experimental-utils@npm:4.29.2": + version: 4.29.2 + resolution: "@typescript-eslint/experimental-utils@npm:4.29.2" dependencies: "@types/json-schema": ^7.0.7 - "@typescript-eslint/scope-manager": 4.28.2 - "@typescript-eslint/types": 4.28.2 - "@typescript-eslint/typescript-estree": 4.28.2 + "@typescript-eslint/scope-manager": 4.29.2 + "@typescript-eslint/types": 4.29.2 + "@typescript-eslint/typescript-estree": 4.29.2 eslint-scope: ^5.1.1 eslint-utils: ^3.0.0 peerDependencies: eslint: "*" - checksum: 5b3fed818af9882ae54bf258351c2740a92aa0bb5a85478ce1d4d957e594882ece42048149b1a1a8500023c1d334d9846048bc96f309ed60715232be8ef5d1a8 + checksum: c92c7ae0c8395f06f77367b73c2a65de4f703d1fea54372ba7792eba0356e2e1f4d2102ca1a03f27ecad6e43e414d3b67cc227931a28c341d92a039a6e0ffd7d languageName: node linkType: hard @@ -1443,20 +1376,20 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^4.28.2": - version: 4.28.2 - resolution: "@typescript-eslint/parser@npm:4.28.2" +"@typescript-eslint/parser@npm:4.29.2": + version: 4.29.2 + resolution: "@typescript-eslint/parser@npm:4.29.2" dependencies: - "@typescript-eslint/scope-manager": 4.28.2 - "@typescript-eslint/types": 4.28.2 - "@typescript-eslint/typescript-estree": 4.28.2 + "@typescript-eslint/scope-manager": 4.29.2 + "@typescript-eslint/types": 4.29.2 + "@typescript-eslint/typescript-estree": 4.29.2 debug: ^4.3.1 peerDependencies: eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 4d71ddbe039007f366b6e9deca12183e45ea165053a29b64e8e4534451a134fe664fd3bf8ec06951e2afe8b5fd14143fb2ef3182a9ee8d2b20a89a3c0f4f2529 + checksum: a836810bf6611cc1d66aa8d99fefd865e56f75d1bd49387f36d90c339f43c236894d7f7b7cdb343d389f95d592a1db3f4f0b096f8be9641d4164f1ccb0046212 languageName: node linkType: hard @@ -1470,13 +1403,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:4.28.2": - version: 4.28.2 - resolution: "@typescript-eslint/scope-manager@npm:4.28.2" +"@typescript-eslint/scope-manager@npm:4.29.2": + version: 4.29.2 + resolution: "@typescript-eslint/scope-manager@npm:4.29.2" dependencies: - "@typescript-eslint/types": 4.28.2 - "@typescript-eslint/visitor-keys": 4.28.2 - checksum: 31c30f428ba50087fc6a8dacc00b4d007d6653f1ea261a468e0a5425d730c5bf1e87bea581494862687c294d1f2ace30813f919800a05190fa332db6cd192bef + "@typescript-eslint/types": 4.29.2 + "@typescript-eslint/visitor-keys": 4.29.2 + checksum: 136c22579df2a3ad550f0e8b92d0b18b61facda27364715d1db9721c12aa079191f7917396eeb89fe72f98c17a4d2ec6494fee4dc95bffbc91d6f93df06f1efe languageName: node linkType: hard @@ -1487,10 +1420,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:4.28.2": - version: 4.28.2 - resolution: "@typescript-eslint/types@npm:4.28.2" - checksum: 9f5e6bf3df4540adf8eb1f83909bac778257f60a6ef7fcafa7df5224949839a63dba61fe4b58de538ffe17517e88ff6b29f691209f80a55df87935bac6349f69 +"@typescript-eslint/types@npm:4.29.2": + version: 4.29.2 + resolution: "@typescript-eslint/types@npm:4.29.2" + checksum: 31e4438afcb2aed8c24d9aeb8d65f46ea2bea6b35f796b77de399977b39516a515f8307f8596fff3568b9852664d72d03fd58f55cc346c66d5841c10f230fa5a languageName: node linkType: hard @@ -1512,12 +1445,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:4.28.2": - version: 4.28.2 - resolution: "@typescript-eslint/typescript-estree@npm:4.28.2" +"@typescript-eslint/typescript-estree@npm:4.29.2": + version: 4.29.2 + resolution: "@typescript-eslint/typescript-estree@npm:4.29.2" dependencies: - "@typescript-eslint/types": 4.28.2 - "@typescript-eslint/visitor-keys": 4.28.2 + "@typescript-eslint/types": 4.29.2 + "@typescript-eslint/visitor-keys": 4.29.2 debug: ^4.3.1 globby: ^11.0.3 is-glob: ^4.0.1 @@ -1526,7 +1459,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 4fe36863b8af9808ee86b3cf64d6076a8b9a3224f9e1c17650d06ea46d80225b7e94903f71e7330a682b84eb1045189f1f09dc896165e9cab36714d24992ee84 + checksum: 74cc09a05ee5b26948ec0f8054397b8f6f43b57169e04ae404a6573a48f58ca321cabb4332f9779a294890b623802b4fa8d9c637771652ef1f9c57aa95157508 languageName: node linkType: hard @@ -1540,13 +1473,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:4.28.2": - version: 4.28.2 - resolution: "@typescript-eslint/visitor-keys@npm:4.28.2" +"@typescript-eslint/visitor-keys@npm:4.29.2": + version: 4.29.2 + resolution: "@typescript-eslint/visitor-keys@npm:4.29.2" dependencies: - "@typescript-eslint/types": 4.28.2 + "@typescript-eslint/types": 4.29.2 eslint-visitor-keys: ^2.0.0 - checksum: cec563831f563bb057f00045104db7ed92576755065d7563607c5f3581e5588fe8b83229767cd81763136aeb663dd49b99e7ee24decfbfc5fc7bd7b36bb1a525 + checksum: 30e1eef4f29e52193441240c2dfcc583d19691657bda4c93494cac7c728db47182b76d742239ad36323b5d5289073aaf88defd0e309c01405abd422ef272c53b languageName: node linkType: hard @@ -2210,20 +2143,13 @@ __metadata: languageName: node linkType: hard -"buffer-from@npm:1.x, buffer-from@npm:^1.0.0": +"buffer-from@npm:^1.0.0": version: 1.1.1 resolution: "buffer-from@npm:1.1.1" checksum: 540ceb79c4f5bfcadaabbc18324fa84c50dc52905084be7c03596a339cf5a88513bee6831ce9b36ddd046fab09257a7c80686e129d0559a0cfd141da196ad956 languageName: node linkType: hard -"builtin-modules@npm:^3.1.0": - version: 3.2.0 - resolution: "builtin-modules@npm:3.2.0" - checksum: f0e7240f70ae472a0a0167bf76d2e828c73028fe60be8cd229939c38a27527ea68c92f700553dac1316fa124af3037bc7a765ca0e029a03d2e9201dfb372ea24 - languageName: node - linkType: hard - "cacache@npm:^15.0.5": version: 15.2.0 resolution: "cacache@npm:15.2.0" @@ -2311,6 +2237,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: e3901b97d953991712bf0b941d586175be7ca5da56a97d25187e07453c6b26cae0ac8d9c7aa9e87e7c5c986fff870771b3a8e2705b3becda868829e2e12c2a65 + languageName: node + linkType: hard + "chalk@npm:^2.0.0": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -2904,13 +2840,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^26.6.2": - version: 26.6.2 - resolution: "diff-sequences@npm:26.6.2" - checksum: dd1eb6e52f0a200228b836876a69c90690003b8991cf7d9264d6e6063acde8fe852084b6a196f2a13f169d309e30c24c457e9c8db617aed186c665efb50af1d8 - languageName: node - linkType: hard - "diff-sequences@npm:^27.0.6": version: 27.0.6 resolution: "diff-sequences@npm:27.0.6" @@ -2949,33 +2878,32 @@ __metadata: version: 0.0.0-use.local resolution: "dungeonslayers4@workspace:." dependencies: - "@league-of-foundry-developers/foundry-vtt-types": ^0.8.8-5 - "@rollup/plugin-node-resolve": ^13.0.0 - "@types/fs-extra": ^9.0.12 - "@types/jest": ^26.0.24 - "@typescript-eslint/eslint-plugin": ^4.28.2 - "@typescript-eslint/parser": ^4.28.2 - chalk: ^4.1.1 - eslint: ^7.30.0 - eslint-config-prettier: ^8.3.0 - eslint-plugin-jest: ^24.3.6 - eslint-plugin-prettier: ^3.4.0 - fs-extra: ^10.0.0 - gulp: ^4.0.2 - gulp-sass: ^5.0.0 - husky: ^7.0.1 - jest: ^27.0.6 - jest-junit: ^12.2.0 - lint-staged: ^11.0.0 - prettier: ^2.3.2 - rollup: ^2.53.1 - rollup-plugin-typescript2: ^0.30.0 - sass: 1.35.2 - semver: ^7.3.5 - ts-jest: ^27.0.3 - tslib: ^2.3.0 - typescript: ^4.3.5 - yargs: ^17.0.1 + "@league-of-foundry-developers/foundry-vtt-types": 0.8.8-8 + "@types/fs-extra": 9.0.12 + "@types/jest": 27.0.1 + "@typescript-eslint/eslint-plugin": 4.29.2 + "@typescript-eslint/parser": 4.29.2 + chalk: 4.1.2 + eslint: 7.32.0 + eslint-config-prettier: 8.3.0 + eslint-plugin-jest: 24.4.0 + eslint-plugin-prettier: 3.4.0 + fs-extra: 10.0.0 + gulp: 4.0.2 + gulp-sass: 5.0.0 + husky: 7.0.1 + jest: 27.0.6 + jest-junit: 12.2.0 + lint-staged: 11.1.2 + prettier: 2.3.2 + rollup: 2.56.2 + rollup-plugin-typescript2: 0.30.0 + sass: 1.38.0 + semver: 7.3.5 + ts-jest: 27.0.5 + tslib: 2.3.1 + typescript: 4.3.5 + yargs: 17.1.1 languageName: unknown linkType: soft @@ -3203,7 +3131,7 @@ __metadata: languageName: node linkType: hard -"eslint-config-prettier@npm:^8.3.0": +"eslint-config-prettier@npm:8.3.0": version: 8.3.0 resolution: "eslint-config-prettier@npm:8.3.0" peerDependencies: @@ -3214,9 +3142,9 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:^24.3.6": - version: 24.3.6 - resolution: "eslint-plugin-jest@npm:24.3.6" +"eslint-plugin-jest@npm:24.4.0": + version: 24.4.0 + resolution: "eslint-plugin-jest@npm:24.4.0" dependencies: "@typescript-eslint/experimental-utils": ^4.0.1 peerDependencies: @@ -3225,11 +3153,11 @@ __metadata: peerDependenciesMeta: "@typescript-eslint/eslint-plugin": optional: true - checksum: 13f4522cd838a6a356a080f76424579a58aa2f9b4f4b3fdd3713278718496c62ba3d8f53c0fb6ad6fd96ca6cfd6ee728f7dd51893b91eccfb4396b832f757afb + checksum: 189a78413943822ad3b58e13906960815dca790035ed00eab796fe465b6f48855b7e2f40a1d30c5fa34bf205d9baa27fdf47cc58c9f402f7d7c358cd3dea8698 languageName: node linkType: hard -"eslint-plugin-prettier@npm:^3.4.0": +"eslint-plugin-prettier@npm:3.4.0": version: 3.4.0 resolution: "eslint-plugin-prettier@npm:3.4.0" dependencies: @@ -3288,12 +3216,12 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^7.30.0": - version: 7.30.0 - resolution: "eslint@npm:7.30.0" +"eslint@npm:7.32.0": + version: 7.32.0 + resolution: "eslint@npm:7.32.0" dependencies: "@babel/code-frame": 7.12.11 - "@eslint/eslintrc": ^0.4.2 + "@eslint/eslintrc": ^0.4.3 "@humanwhocodes/config-array": ^0.5.0 ajv: ^6.10.0 chalk: ^4.0.0 @@ -3334,7 +3262,7 @@ __metadata: v8-compile-cache: ^2.0.3 bin: eslint: bin/eslint.js - checksum: 028048847e0252d6c972ac612fe37be55822ae2255d10d1bf68255749f7ae1364b2aa538cd95f3bc4d951fc7d36195e46b62fe8d215297ef9a6a8aeb8ca28a90 + checksum: e25f9159d3b6b7e826b190ebb38accf3ec1513e1811bd7df2e8de83313370d266b8b6a571491a9f092d254fc53b2c5cde14dd2196cf046e22970ef037a4c7f3d languageName: node linkType: hard @@ -3391,13 +3319,6 @@ __metadata: languageName: node linkType: hard -"estree-walker@npm:^1.0.1": - version: 1.0.1 - resolution: "estree-walker@npm:1.0.1" - checksum: 85e7cee763e9125a7d8a947b3a06a8b9282873936df220dd0d791d9b3315e45e40ab096b43ba71bdc99140c11a6d23fdcf686642dc119a7b2d6181004fdb24d2 - languageName: node - linkType: hard - "estree-walker@npm:^2.0.1": version: 2.0.2 resolution: "estree-walker@npm:2.0.2" @@ -3785,6 +3706,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:10.0.0": + version: 10.0.0 + resolution: "fs-extra@npm:10.0.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: 84632d143fe3125b8c3c2b1fedbbdfcfb84fc3e087522b4e138cc07edf574619925713a6609f6d5e53ede2e31ab319c7d528ea4a4a770ba6622a16bf4447cd8b + languageName: node + linkType: hard + "fs-extra@npm:8.1.0": version: 8.1.0 resolution: "fs-extra@npm:8.1.0" @@ -3796,17 +3728,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^10.0.0": - version: 10.0.0 - resolution: "fs-extra@npm:10.0.0" - dependencies: - graceful-fs: ^4.2.0 - jsonfile: ^6.0.1 - universalify: ^2.0.0 - checksum: 84632d143fe3125b8c3c2b1fedbbdfcfb84fc3e087522b4e138cc07edf574619925713a6609f6d5e53ede2e31ab319c7d528ea4a4a770ba6622a16bf4447cd8b - languageName: node - linkType: hard - "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -4125,7 +4046,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"gulp-sass@npm:^5.0.0": +"gulp-sass@npm:5.0.0": version: 5.0.0 resolution: "gulp-sass@npm:5.0.0" dependencies: @@ -4140,7 +4061,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"gulp@npm:^4.0.2": +"gulp@npm:4.0.2": version: 4.0.2 resolution: "gulp@npm:4.0.2" dependencies: @@ -4340,7 +4261,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"husky@npm:^7.0.1": +"husky@npm:7.0.1": version: 7.0.1 resolution: "husky@npm:7.0.1" bin: @@ -4667,13 +4588,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"is-module@npm:^1.0.0": - version: 1.0.0 - resolution: "is-module@npm:1.0.0" - checksum: 2cbd41e2760874130b76aee84cc53120c4feef0d0f196fa665326857b444c8549909cc840f3f3a59652a7e8df46146a77f6c0f3f70a578704e03670975843e74 - languageName: node - linkType: hard - "is-negated-glob@npm:^1.0.0": version: 1.0.0 resolution: "is-negated-glob@npm:1.0.0" @@ -4988,19 +4902,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"jest-diff@npm:^26.0.0": - version: 26.6.2 - resolution: "jest-diff@npm:26.6.2" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^26.6.2 - jest-get-type: ^26.3.0 - pretty-format: ^26.6.2 - checksum: 05d0f1bdba147a026eab4121a73a69ee3df21aec59ecd34659d665ee0663e518636650b435d248974ab5aceb345de9bfcc035efd01df723fe788756a07c8d046 - languageName: node - linkType: hard - -"jest-diff@npm:^27.0.6": +"jest-diff@npm:^27.0.0, jest-diff@npm:^27.0.6": version: 27.0.6 resolution: "jest-diff@npm:27.0.6" dependencies: @@ -5063,13 +4965,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"jest-get-type@npm:^26.3.0": - version: 26.3.0 - resolution: "jest-get-type@npm:26.3.0" - checksum: fc3e2d2b90cca74597c4ad6234c2fcc2ccb62894d0f7afe22fc55b5d93a2f02d3080ccef50f09c979d4b5a060bc76c4343911556d75ed9e892e0ebda6d54c44b - languageName: node - linkType: hard - "jest-get-type@npm:^27.0.6": version: 27.0.6 resolution: "jest-get-type@npm:27.0.6" @@ -5127,7 +5022,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"jest-junit@npm:^12.2.0": +"jest-junit@npm:12.2.0": version: 12.2.0 resolution: "jest-junit@npm:12.2.0" dependencies: @@ -5395,7 +5290,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"jest@npm:^27.0.6": +"jest@npm:27.0.6": version: 27.0.6 resolution: "jest@npm:27.0.6" dependencies: @@ -5678,16 +5573,15 @@ fsevents@^1.2.7: languageName: node linkType: hard -"lint-staged@npm:^11.0.0": - version: 11.0.0 - resolution: "lint-staged@npm:11.0.0" +"lint-staged@npm:11.1.2": + version: 11.1.2 + resolution: "lint-staged@npm:11.1.2" dependencies: chalk: ^4.1.1 cli-truncate: ^2.1.0 commander: ^7.2.0 cosmiconfig: ^7.0.0 debug: ^4.3.1 - dedent: ^0.7.0 enquirer: ^2.3.6 execa: ^5.0.0 listr2: ^3.8.2 @@ -5699,7 +5593,7 @@ fsevents@^1.2.7: stringify-object: ^3.3.0 bin: lint-staged: bin/lint-staged.js - checksum: e5d9c38f468fae090939d150f8a1676ca208e50c714f20c9957a16833eeae20ca9676c8679883d0a005fda58375581c26352e18a2227d6449a29adaca650f957 + checksum: 0c44f4fbd9360cb68a7c80475a2c37c01adc60c3598cc0beafc27d48f49be7d696e01f2a4b96eef0d6aba3fbe547861a434910ba80ec96fda30b6b21375ae937 languageName: node linkType: hard @@ -6057,7 +5951,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"mkdirp@npm:1.x, mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": +"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" bin: @@ -6777,7 +6671,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"prettier@npm:^2.3.2": +"prettier@npm:2.3.2": version: 2.3.2 resolution: "prettier@npm:2.3.2" bin: @@ -6786,19 +6680,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"pretty-format@npm:^26.0.0, pretty-format@npm:^26.6.2": - version: 26.6.2 - resolution: "pretty-format@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - ansi-regex: ^5.0.0 - ansi-styles: ^4.0.0 - react-is: ^17.0.1 - checksum: 5ad34fc128218485732cf0271d396158a00584708fc97bf063c1c3c000fe14da572e9a1d3d7b92d95c5e24965434656c56ed0e45804dea2435ca59a1f86f1b07 - languageName: node - linkType: hard - -"pretty-format@npm:^27.0.6": +"pretty-format@npm:^27.0.0, pretty-format@npm:^27.0.6": version: 27.0.6 resolution: "pretty-format@npm:27.0.6" dependencies: @@ -7140,7 +7022,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"resolve@1.20.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.4.0": +"resolve@1.20.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.4.0": version: 1.20.0 resolution: "resolve@npm:1.20.0" dependencies: @@ -7150,7 +7032,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"resolve@patch:resolve@1.20.0#builtin, resolve@patch:resolve@^1.1.6#builtin, resolve@patch:resolve@^1.1.7#builtin, resolve@patch:resolve@^1.10.0#builtin, resolve@patch:resolve@^1.19.0#builtin, resolve@patch:resolve@^1.20.0#builtin, resolve@patch:resolve@^1.4.0#builtin": +"resolve@patch:resolve@1.20.0#builtin, resolve@patch:resolve@^1.1.6#builtin, resolve@patch:resolve@^1.1.7#builtin, resolve@patch:resolve@^1.10.0#builtin, resolve@patch:resolve@^1.20.0#builtin, resolve@patch:resolve@^1.4.0#builtin": version: 1.20.0 resolution: "resolve@patch:resolve@npm%3A1.20.0#builtin::version=1.20.0&hash=3388aa" dependencies: @@ -7212,7 +7094,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"rollup-plugin-typescript2@npm:^0.30.0": +"rollup-plugin-typescript2@npm:0.30.0": version: 0.30.0 resolution: "rollup-plugin-typescript2@npm:0.30.0" dependencies: @@ -7228,9 +7110,9 @@ fsevents@^1.2.7: languageName: node linkType: hard -"rollup@npm:^2.53.1": - version: 2.53.1 - resolution: "rollup@npm:2.53.1" +"rollup@npm:2.56.2": + version: 2.56.2 + resolution: "rollup@npm:2.56.2" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -7238,7 +7120,7 @@ fsevents@^1.2.7: optional: true bin: rollup: dist/bin/rollup - checksum: 7c63a7251e87715795a4141371f4f7b31ce46c7dd8273a0f4b5240977eb7ecaddd1e8d0fdaf8eabfc7cf73075cc9d83e03c67b89e56f31a2e85cf1089e9fc34f + checksum: babe2dce8eec8c130915baa54b0d62260fa4691ca9f2a989a2685b4e72761e701d53c374efa51a59a4c3f59a3c667ca5c8ac0e0de9a294ad50d1c1271d2d5199 languageName: node linkType: hard @@ -7283,14 +7165,14 @@ fsevents@^1.2.7: languageName: node linkType: hard -"sass@npm:1.35.2": - version: 1.35.2 - resolution: "sass@npm:1.35.2" +"sass@npm:1.38.0": + version: 1.38.0 + resolution: "sass@npm:1.38.0" dependencies: chokidar: ">=3.0.0 <4.0.0" bin: sass: sass.js - checksum: d102e3fd6e6aa1a61f9c765fb31ff701d78ef05cf256ebb9ed80994c86638dcc8cc71832df1a1f71edce427cf823449c2fc43618b29ad51a8ca5bf93349ccaf4 + checksum: ce6da83497f56daab29bc9ed316cbfd18111c1c0afa466912e8c7815c8f006620595b8d3c5db632e9f09366691c2d8fc5f8faa8eb9532ae3bd0364c2ae7c6a93 languageName: node linkType: hard @@ -7328,7 +7210,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5": +"semver@npm:7.3.5, semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5": version: 7.3.5 resolution: "semver@npm:7.3.5" dependencies: @@ -8066,26 +7948,34 @@ fsevents@^1.2.7: languageName: node linkType: hard -"ts-jest@npm:^27.0.3": - version: 27.0.3 - resolution: "ts-jest@npm:27.0.3" +"ts-jest@npm:27.0.5": + version: 27.0.5 + resolution: "ts-jest@npm:27.0.5" dependencies: bs-logger: 0.x - buffer-from: 1.x fast-json-stable-stringify: 2.x jest-util: ^27.0.0 json5: 2.x lodash: 4.x make-error: 1.x - mkdirp: 1.x semver: 7.x yargs-parser: 20.x peerDependencies: + "@babel/core": ">=7.0.0-beta.0 <8" + "@types/jest": ^27.0.0 + babel-jest: ">=27.0.0 <28" jest: ^27.0.0 typescript: ">=3.8 <5.0" + peerDependenciesMeta: + "@babel/core": + optional: true + "@types/jest": + optional: true + babel-jest: + optional: true bin: ts-jest: cli.js - checksum: a63f3a8620a16335d745f22377a9cc118129d28a5b122c609a7c6aabbb8048c85733c771a0dd39b136e8a75401473409452bdd3c5b9e3b85317c2e3f3ac03267 + checksum: 0f7479a6c967f192d9be8bf8ac75498f41cc03964ed7fa6f3ae826080bf8ddb1e2f1e59cda34342a99c44c2fff4b7350019dd4f963fa059af694de4196054576 languageName: node linkType: hard @@ -8096,6 +7986,13 @@ fsevents@^1.2.7: languageName: node linkType: hard +"tslib@npm:2.3.1": + version: 2.3.1 + resolution: "tslib@npm:2.3.1" + checksum: 5ae2f209c5127bad284974c78916f02c72082615f65889a7ed0c7ca6d5f935c30338a0ee7310e1d9652dabc7b7507fd2905035487446d09d45fc1f19de71cf05 + languageName: node + linkType: hard + "tslib@npm:^1.8.1, tslib@npm:^1.9.0": version: 1.14.1 resolution: "tslib@npm:1.14.1" @@ -8103,13 +8000,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"tslib@npm:^2.3.0": - version: 2.3.0 - resolution: "tslib@npm:2.3.0" - checksum: 7b4fc9feff0f704743c3760f5d8d708f6417fac6458159e63df3a6b1100f0736e3b99edb9fe370f274ad15160a1f49ff05cb49402534c818ff552c48e38c3e6e - languageName: node - linkType: hard - "tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" @@ -8190,7 +8080,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"typescript@^4.1.6, typescript@^4.3.5": +"typescript@4.3.5, typescript@^4.3.5": version: 4.3.5 resolution: "typescript@npm:4.3.5" bin: @@ -8200,7 +8090,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"typescript@patch:typescript@^4.1.6#builtin, typescript@patch:typescript@^4.3.5#builtin": +"typescript@patch:typescript@4.3.5#builtin, typescript@patch:typescript@^4.3.5#builtin": version: 4.3.5 resolution: "typescript@patch:typescript@npm%3A4.3.5#builtin::version=4.3.5&hash=ddfc1b" bin: @@ -8752,6 +8642,21 @@ fsevents@^1.2.7: languageName: node linkType: hard +"yargs@npm:17.1.1": + version: 17.1.1 + resolution: "yargs@npm:17.1.1" + dependencies: + 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 + checksum: c2a16b61eb0db8882becd0aa382a5c59b87afcd17b35dd7077b3c9d83f77a3ad3de1526e4f1cf940f9481d7ce537e883af7c16879c33258724a09bc43a04e8ea + languageName: node + linkType: hard + "yargs@npm:^16.0.3": version: 16.2.0 resolution: "yargs@npm:16.2.0" @@ -8767,21 +8672,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"yargs@npm:^17.0.1": - version: 17.0.1 - resolution: "yargs@npm:17.0.1" - dependencies: - 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 - checksum: a7969b48d2dea129a7d4fcc3f13e88d4f94bacbd24f720b2ce19946fa9facc42cfed89c059d953091241f4e9e9000ed9dbf86e4bb4b6ceb3a26af10ddebdd0b2 - languageName: node - linkType: hard - "yargs@npm:^7.1.0": version: 7.1.2 resolution: "yargs@npm:7.1.2"