From b6195127fe629d0dd299eb579a1255774f59aa89 Mon Sep 17 00:00:00 2001 From: WBHarry <89362246+WBHarry@users.noreply.github.com> Date: Fri, 11 Jul 2025 22:26:56 +0200 Subject: [PATCH] 199 - Tooltips (#311) * Set up templates for all 'advanced' tooltips * Fixed ItemFeature Header label * Fixed less import --- lang/en.json | 21 +++- module/config/actorConfig.mjs | 2 +- module/data/item/armor.mjs | 6 + module/data/item/weapon.mjs | 6 + module/documents/tooltipManager.mjs | 24 +++- module/helpers/handlebarsHelper.mjs | 56 ++++----- module/systemRegistration/handlebars.mjs | 3 +- styles/daggerheart.less | 2 + styles/less/ux/index.less | 1 + styles/less/ux/tooltip/tooltip.less | 106 ++++++++++++++++++ templates/sheets/global/tabs/tab-actions.hbs | 1 + templates/sheets/global/tabs/tab-features.hbs | 2 +- templates/sheets/items/feature/header.hbs | 2 +- templates/ui/tooltip/action.hbs | 83 ++++++++++++++ templates/ui/tooltip/adversary.hbs | 64 +++++++++++ templates/ui/tooltip/armor.hbs | 40 ++++++- templates/ui/tooltip/beastform.hbs | 6 - templates/ui/tooltip/consumable.hbs | 14 +++ templates/ui/tooltip/domainCard.hbs | 34 +++++- templates/ui/tooltip/feature.hbs | 8 ++ templates/ui/tooltip/miscellaneous.hbs | 7 ++ templates/ui/tooltip/parts/tooltipTags.hbs | 12 ++ templates/ui/tooltip/weapon.hbs | 59 +++++++++- 23 files changed, 505 insertions(+), 54 deletions(-) create mode 100644 styles/less/ux/index.less create mode 100644 styles/less/ux/tooltip/tooltip.less create mode 100644 templates/ui/tooltip/action.hbs create mode 100644 templates/ui/tooltip/adversary.hbs delete mode 100644 templates/ui/tooltip/beastform.hbs create mode 100644 templates/ui/tooltip/consumable.hbs create mode 100644 templates/ui/tooltip/feature.hbs create mode 100644 templates/ui/tooltip/miscellaneous.hbs create mode 100644 templates/ui/tooltip/parts/tooltipTags.hbs diff --git a/lang/en.json b/lang/en.json index db420652..f58cba35 100755 --- a/lang/en.json +++ b/lang/en.json @@ -973,6 +973,10 @@ "singular": "Character", "plural": "Characters" }, + "Cost": { + "single": "Cost", + "plural": "Costs" + }, "Damage": { "severe": "Severe", "major": "Major", @@ -1078,6 +1082,7 @@ "specialization": "Specialization", "mastery": "Mastery", "optional": "Optional", + "recovery": "Recovery", "setup": "Setup", "equipment": "Equipment" }, @@ -1099,6 +1104,8 @@ "burden": "Burden", "check": "{check} Check", "criticalSuccess": "Critical Success", + "damage": "Damage", + "damageType": "Damage Type", "description": "Description", "duality": "Duality", "dualityRoll": "Duality Roll", @@ -1111,17 +1118,25 @@ "inactiveEffects": "Inactive Effects", "inventory": "Inventory", "level": "Level", + "max": "Max", "modifier": "Modifier", "multiclass": "Multiclass", + "none": "None", "quantity": "Quantity", "range": "Range", + "recovery": "Recovery", + "scalable": "Scalable", "stress": "Stress", "take": "Take", "target": "Target", "title": "Title", + "true": "True", "type": "Type", "unarmored": "Unarmored", - "use": "Use" + "use": "Use", + "used": "Used", + "uses": "Uses", + "value": "Value" }, "ITEMS": { "Armor": { @@ -1178,6 +1193,7 @@ "spellcastingTrait": "Spellcasting Trait" }, "Weapon": { + "weaponType": "Weapon Type", "primaryWeapon": "Primary Weapon", "secondaryWeapon": "Secondary Weapon" } @@ -1386,7 +1402,8 @@ "unequip": "Unequip", "sendToVault": "Send to Vault", "sendToLoadout": "Send to Loadout", - "makeDeathMove": "Make a Death Move" + "makeDeathMove": "Make a Death Move", + "rangeAndTarget": "Range & Target" } } } diff --git a/module/config/actorConfig.mjs b/module/config/actorConfig.mjs index 7a179308..02cfd4a9 100644 --- a/module/config/actorConfig.mjs +++ b/module/config/actorConfig.mjs @@ -113,7 +113,7 @@ export const adversaryTypes = { }, social: { id: 'social', - label: 'DAGGERHEART.CONFIG.AdversaryTypee.social.label', + label: 'DAGGERHEART.CONFIG.AdversaryType.social.label', description: 'DAGGERHEART.ACTORS.Adversary.social.description' }, solo: { diff --git a/module/data/item/armor.mjs b/module/data/item/armor.mjs index 696a95a2..bf2bf73e 100644 --- a/module/data/item/armor.mjs +++ b/module/data/item/armor.mjs @@ -44,6 +44,12 @@ export default class DHArmor extends BaseDataItem { }; } + get customActions() { + return this.actions.filter( + action => !this.armorFeatures.some(feature => feature.actionIds.includes(action.id)) + ); + } + async _preUpdate(changes, options, user) { const allowed = await super._preUpdate(changes, options, user); if (allowed === false) return false; diff --git a/module/data/item/weapon.mjs b/module/data/item/weapon.mjs index e1370395..80c8271d 100644 --- a/module/data/item/weapon.mjs +++ b/module/data/item/weapon.mjs @@ -73,6 +73,12 @@ export default class DHWeapon extends BaseDataItem { return [this.attack, ...this.actions]; } + get customActions() { + return this.actions.filter( + action => !this.weaponFeatures.some(feature => feature.actionIds.includes(action.id)) + ); + } + async _preUpdate(changes, options, user) { const allowed = await super._preUpdate(changes, options, user); if (allowed === false) return false; diff --git a/module/documents/tooltipManager.mjs b/module/documents/tooltipManager.mjs index 2e660cff..d9444207 100644 --- a/module/documents/tooltipManager.mjs +++ b/module/documents/tooltipManager.mjs @@ -2,15 +2,33 @@ export default class DhTooltipManager extends foundry.helpers.interaction.Toolti async activate(element, options = {}) { let html = options.html; if (element.dataset.tooltip?.startsWith('#item#')) { - const item = await foundry.utils.fromUuid(element.dataset.tooltip.slice(6)); + const splitValues = element.dataset.tooltip.slice(6).split('#action#'); + const itemUuid = splitValues[0]; + const actionId = splitValues.length > 1 ? splitValues[1] : null; + + const baseItem = await foundry.utils.fromUuid(itemUuid); + const item = actionId ? baseItem.system.actions.find(x => x.id === actionId) : baseItem; if (item) { + const type = actionId ? 'action' : item.type; html = await foundry.applications.handlebars.renderTemplate( - `systems/daggerheart/templates/ui/tooltip/${item.type}.hbs`, - item + `systems/daggerheart/templates/ui/tooltip/${type}.hbs`, + { + item: item, + config: CONFIG.DH + } ); + + this.tooltip.innerHTML = html; + options.direction = this._determineItemTooltipDirection(element); } } super.activate(element, { ...options, html: html }); } + + _determineItemTooltipDirection(element) { + const pos = element.getBoundingClientRect(); + const dirs = this.constructor.TOOLTIP_DIRECTIONS; + return dirs[pos.x - this.tooltip.offsetWidth < 0 ? 'DOWN' : 'LEFT']; + } } diff --git a/module/helpers/handlebarsHelper.mjs b/module/helpers/handlebarsHelper.mjs index 6db51225..feeebbd2 100644 --- a/module/helpers/handlebarsHelper.mjs +++ b/module/helpers/handlebarsHelper.mjs @@ -1,47 +1,49 @@ -import { getWidthOfText } from './utils.mjs'; - export default class RegisterHandlebarsHelpers { static registerHelpers() { Handlebars.registerHelper({ - times: this.times, - join: this.join, add: this.add, - subtract: this.subtract, includes: this.includes, - case: this.case + times: this.times, + damageFormula: this.damageFormula, + damageSymbols: this.damageSymbols, + tertiary: this.tertiary, + signedNumber: this.signedNumber }); } - static times(nr, block) { - var accum = ''; - for (var i = 0; i < nr; ++i) accum += block.fn(i); - return accum; - } - - static join(...options) { - return options.slice(0, options.length - 1); - } - static add(a, b) { const aNum = Number.parseInt(a); const bNum = Number.parseInt(b); return (Number.isNaN(aNum) ? 0 : aNum) + (Number.isNaN(bNum) ? 0 : bNum); } - static subtract(a, b) { - const aNum = Number.parseInt(a); - const bNum = Number.parseInt(b); - return (Number.isNaN(aNum) ? 0 : aNum) - (Number.isNaN(bNum) ? 0 : bNum); - } - static includes(list, item) { return list.includes(item); } - static case(value, options) { - if (value == this.switch_value) { - this.switch_break = true; - return options.fn(this); - } + static times(nr, block) { + var accum = ''; + for (var i = 0; i < nr; ++i) accum += block.fn(i); + return accum; + } + + static damageFormula(attack, actor) { + const traitTotal = actor.system.traits?.[attack.roll.trait]?.total; + const instances = [ + attack.damage.parts.map(x => Roll.replaceFormulaData(x.value.getFormula(), actor)).join(' + '), + traitTotal + ].filter(x => x); + + return instances.join(traitTotal > 0 ? ' + ' : ' - '); + } + + static damageSymbols(damageParts) { + const symbols = new Set(); + damageParts.forEach(part => symbols.add(...CONFIG.DH.GENERAL.damageTypes[part.type].icon)); + return new Handlebars.SafeString(Array.from(symbols).map(symbol => ``)); + } + + static tertiary(a, b) { + return a ?? b; } } diff --git a/module/systemRegistration/handlebars.mjs b/module/systemRegistration/handlebars.mjs index 75a5aff6..e4cc1a2c 100644 --- a/module/systemRegistration/handlebars.mjs +++ b/module/systemRegistration/handlebars.mjs @@ -22,6 +22,7 @@ export const preloadHandlebarsTemplates = async function () { 'systems/daggerheart/templates/actionTypes/beastform.hbs', 'systems/daggerheart/templates/settings/components/settings-item-line.hbs', 'systems/daggerheart/templates/ui/chat/parts/damage-chat.hbs', - 'systems/daggerheart/templates/ui/chat/parts/target-chat.hbs' + 'systems/daggerheart/templates/ui/chat/parts/target-chat.hbs', + 'systems/daggerheart/templates/ui/tooltip/parts/tooltipTags.hbs' ]); }; diff --git a/styles/daggerheart.less b/styles/daggerheart.less index a48131c3..c2127681 100755 --- a/styles/daggerheart.less +++ b/styles/daggerheart.less @@ -12,4 +12,6 @@ @import './less/ui/index.less'; +@import './less/ux/index.less'; + @import '../node_modules/@yaireo/tagify/dist/tagify.css'; diff --git a/styles/less/ux/index.less b/styles/less/ux/index.less new file mode 100644 index 00000000..ff645288 --- /dev/null +++ b/styles/less/ux/index.less @@ -0,0 +1 @@ +@import './tooltip/tooltip.less'; diff --git a/styles/less/ux/tooltip/tooltip.less b/styles/less/ux/tooltip/tooltip.less new file mode 100644 index 00000000..38502d09 --- /dev/null +++ b/styles/less/ux/tooltip/tooltip.less @@ -0,0 +1,106 @@ +.daggerheart.dh-style.tooltip { + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; + + .tooltip-title { + margin: 0; + text-align: center; + } + + .tooltip-image { + height: 180px; + width: 180px; + } + + .tooltip-description { + font-style: italic; + } + + .tooltip-sub-title { + margin: 0; + color: light-dark(@dark-blue, @beige); + } + + .tooltip-information-section { + width: 100%; + display: grid; + grid-template-columns: 1fr 1fr; + gap: 4px; + + &.triple { + grid-template-columns: 1fr 1fr 1fr; + } + + &.border { + border: 1px solid light-dark(@dark-blue, @golden); + border-radius: 6px; + padding: 2px; + } + + .tooltip-information { + display: flex; + flex-direction: column; + align-items: center; + gap: 2px; + + &.full-width { + grid-column: span 2; + } + + label { + font-weight: bold; + } + + label, + div { + white-space: nowrap; + } + } + } + + .tooltip-tags { + width: 100%; + display: flex; + flex-direction: column; + gap: 4px; + + .tooltip-tag { + width: 100%; + display: grid; + grid-template-columns: 80px 1fr; + align-items: start; + gap: 8px; + padding: 4px; + border: 1px solid light-dark(@dark-blue, @golden); + border-radius: 6px; + + .tooltip-tag-label-container { + display: flex; + align-items: center; + flex-direction: column; + gap: 2px; + + .tooltip-tag-image { + width: 40px; + height: 40px; + } + } + + .tooltip-tag-label { + font-weight: bold; + text-align: center; + } + + .tooltip-tag-description { + display: flex; + flex-wrap: wrap; + } + } + } + + .spaced { + margin-bottom: 4px; + } +} diff --git a/templates/sheets/global/tabs/tab-actions.hbs b/templates/sheets/global/tabs/tab-actions.hbs index 54345bed..ed71c45f 100644 --- a/templates/sheets/global/tabs/tab-actions.hbs +++ b/templates/sheets/global/tabs/tab-actions.hbs @@ -10,6 +10,7 @@
{{action.name}} diff --git a/templates/sheets/global/tabs/tab-features.hbs b/templates/sheets/global/tabs/tab-features.hbs index 71f6f1f1..eced83d7 100644 --- a/templates/sheets/global/tabs/tab-features.hbs +++ b/templates/sheets/global/tabs/tab-features.hbs @@ -11,7 +11,7 @@ data-action="editFeature" id="{{feature.id}}" > - + {{feature.name}}
diff --git a/templates/sheets/items/feature/header.hbs b/templates/sheets/items/feature/header.hbs index e6a11503..e603c0f7 100755 --- a/templates/sheets/items/feature/header.hbs +++ b/templates/sheets/items/feature/header.hbs @@ -4,7 +4,7 @@

-

{{localize (concat 'TYPES.Item.feature' source.system.type)}}

+

{{localize 'TYPES.Item.feature'}}

\ No newline at end of file diff --git a/templates/ui/tooltip/action.hbs b/templates/ui/tooltip/action.hbs new file mode 100644 index 00000000..c101ee68 --- /dev/null +++ b/templates/ui/tooltip/action.hbs @@ -0,0 +1,83 @@ +
+

{{item.name}}

+ +
{{{item.description}}}
+ + {{#if item.uses.max}} +

{{localize "DAGGERHEART.GENERAL.uses"}}

+
+
+ +
{{item.uses.value}}
+
+
+ +
{{item.uses.max}}
+
+
+ + {{#with (lookup config.GENERAL.refreshTypes item.uses.recovery) as | type |}} +
{{localize type.label}}
+ {{/with}} +
+
+ {{/if}} + + {{#if (gt item.cost.length 0)}} +

{{localize "DAGGERHEART.GENERAL.Cost.plural"}}

+ {{#each item.cost as | cost |}} +
+
+ + {{#with (lookup @root.config.GENERAL.abilityCosts cost.type) as | type |}} +
{{localize type.label}}
+ {{/with}} +
+
+ +
{{cost.value}}
+
+ {{#if cost.scalable}} +
+ +
{{localize "DAGGERHEART.GENERAL.true"}}
+
+
+ +
{{cost.step}}
+
+ {{/if}} +
+ {{/each}} + {{/if}} + + {{#if (or item.range item.target)}} +

{{localize "DAGGERHEART.UI.Tooltip.rangeAndTarget"}}

+
+
+ +
+ {{#if item.range}} + {{#with (lookup @root.config.GENERAL.range item.range) as | range |}} +
{{localize range.label}}
+ {{/with}} + {{else}} +
{{localize "DAGGERHEART.GENERAL.none"}}
+ {{/if}} +
+
+
+ +
+ {{#if item.target.type}} + {{#with (lookup @root.config.ACTIONS.targetTypes item.target.type) as | target |}} +
{{@root.item.target.amount}} {{localize target.label}}
+ {{/with}} + {{else}} +
{{localize "DAGGERHEART.GENERAL.none"}}
+ {{/if}} +
+
+
+ {{/if}} +
\ No newline at end of file diff --git a/templates/ui/tooltip/adversary.hbs b/templates/ui/tooltip/adversary.hbs new file mode 100644 index 00000000..5fa559ff --- /dev/null +++ b/templates/ui/tooltip/adversary.hbs @@ -0,0 +1,64 @@ +
+

{{item.name}}

+ +
{{{item.system.description}}}
+ +
+
+ + {{#with (lookup config.GENERAL.tiers item.system.tier) as | tier |}} +
{{localize tier.label}}
+ {{/with}} +
+
+ + {{#with (lookup config.ACTOR.adversaryTypes item.system.type) as | type |}} +
{{localize type.label}}
+ {{/with}} +
+
+ +
{{item.system.difficulty}}
+
+
+
+
+ +
{{item.system.resources.hitPoints.max}}
+
+
+ +
{{item.system.resources.stress.max}}
+
+
+ +
{{item.system.damageThresholds.major}}
+
+
+ +
{{item.system.damageThresholds.severe}}
+
+
+ +
{{numberFormat item.system.attack.roll.bonus sign=true}}
+
+
+ +
{{damageFormula item.system.attack item}}
+
+
+ + {{localize "DAGGERHEART.GENERAL.Experience.plural"}} + {{#each item.system.experiences as | experience |}} +
{{experience.name}} {{numberFormat experience.total sign=true}}
+ {{/each}} + +
+
+ +
{{item.system.motivesAndTactics}}
+
+
+ + {{> "systems/daggerheart/templates/ui/tooltip/parts/tooltipTags.hbs" features=item.system.features }} +
\ No newline at end of file diff --git a/templates/ui/tooltip/armor.hbs b/templates/ui/tooltip/armor.hbs index c2972700..456fb226 100644 --- a/templates/ui/tooltip/armor.hbs +++ b/templates/ui/tooltip/armor.hbs @@ -1,5 +1,37 @@ -
-
{{name}}
- -
{{{system.description}}}
+
+

{{item.name}}

+ +
{{{item.system.description}}}
+ +
+
+ +
{{item.system.baseScore}}
+
+ +
+ +
{{item.system.baseThresholds.major}}
+
+
+ +
{{item.system.baseThresholds.severe}}
+
+
+ + {{#if (gt item.system.armorFeatures.length 0)}}

{{localize "DAGGERHEART.GENERAL.features"}}

{{/if}} +
+ {{#each item.system.armorFeatures}} + {{#with (lookup ../config.ITEM.armorFeatures this.value) as | feature | }} +
+
+
{{localize feature.label}}
+
+
{{{localize feature.description}}}
+
+ {{/with}} + {{/each}} +
+ + {{> "systems/daggerheart/templates/ui/tooltip/parts/tooltipTags.hbs" features=item.system.customActions label=(localize "DAGGERHEART.GENERAL.Action.plural")}}
\ No newline at end of file diff --git a/templates/ui/tooltip/beastform.hbs b/templates/ui/tooltip/beastform.hbs deleted file mode 100644 index 3af49969..00000000 --- a/templates/ui/tooltip/beastform.hbs +++ /dev/null @@ -1,6 +0,0 @@ -
-
{{name}}
- -
{{{system.examples}}}
-
{{system.advantageOn}}
-
\ No newline at end of file diff --git a/templates/ui/tooltip/consumable.hbs b/templates/ui/tooltip/consumable.hbs new file mode 100644 index 00000000..2c998b1d --- /dev/null +++ b/templates/ui/tooltip/consumable.hbs @@ -0,0 +1,14 @@ +
+

{{item.name}}

+ +
{{{item.system.description}}}
+ +
+
+ +
{{item.system.quantity}}
+
+
+ + {{> "systems/daggerheart/templates/ui/tooltip/parts/tooltipTags.hbs" features=item.system.actions label=(localize "DAGGERHEART.GENERAL.Action.plural") }} +
\ No newline at end of file diff --git a/templates/ui/tooltip/domainCard.hbs b/templates/ui/tooltip/domainCard.hbs index c2972700..dad00b1b 100644 --- a/templates/ui/tooltip/domainCard.hbs +++ b/templates/ui/tooltip/domainCard.hbs @@ -1,5 +1,31 @@ -
-
{{name}}
- -
{{{system.description}}}
+
+

{{item.name}}

+ +
{{{item.system.description}}}
+ +
+
+ + {{#with (lookup config.DOMAIN.domains item.system.domain) as | domain |}} +
{{localize domain.label}}
+ {{/with}} +
+ +
+ + {{#with (lookup config.DOMAIN.cardTypes item.system.type) as | type |}} +
{{localize type.label}}
+ {{/with}} +
+
+ +
{{item.system.level}}
+
+
+ +
{{item.system.recallCost}}
+
+
+ + {{> "systems/daggerheart/templates/ui/tooltip/parts/tooltipTags.hbs" features=item.system.actions label=(localize "DAGGERHEART.GENERAL.Action.plural") }}
\ No newline at end of file diff --git a/templates/ui/tooltip/feature.hbs b/templates/ui/tooltip/feature.hbs new file mode 100644 index 00000000..17ff2db6 --- /dev/null +++ b/templates/ui/tooltip/feature.hbs @@ -0,0 +1,8 @@ +
+

{{item.name}}

+ +
{{{item.system.description}}}
+ + {{> "systems/daggerheart/templates/ui/tooltip/parts/tooltipTags.hbs" features=item.system.actions label=(localize "DAGGERHEART.GENERAL.Action.plural") }} + {{> "systems/daggerheart/templates/ui/tooltip/parts/tooltipTags.hbs" features=item.effects label=(localize "DAGGERHEART.GENERAL.Effect.plural") }} +
\ No newline at end of file diff --git a/templates/ui/tooltip/miscellaneous.hbs b/templates/ui/tooltip/miscellaneous.hbs new file mode 100644 index 00000000..83014a88 --- /dev/null +++ b/templates/ui/tooltip/miscellaneous.hbs @@ -0,0 +1,7 @@ +
+

{{item.name}}

+ +
{{{item.system.description}}}
+ + {{> "systems/daggerheart/templates/ui/tooltip/parts/tooltipTags.hbs" features=item.system.actions label=(localize "DAGGERHEART.GENERAL.Action.plural") }} +
\ No newline at end of file diff --git a/templates/ui/tooltip/parts/tooltipTags.hbs b/templates/ui/tooltip/parts/tooltipTags.hbs new file mode 100644 index 00000000..a02a729a --- /dev/null +++ b/templates/ui/tooltip/parts/tooltipTags.hbs @@ -0,0 +1,12 @@ +{{#if (gt features.length 0)}}

{{label}}

{{/if}} +
+ {{#each features as | feature |}} +
+
+
{{localize feature.name}}
+ {{#if feature.img}}{{/if}} +
+
{{{localize (tertiary feature.description feature.system.description)}}}
+
+ {{/each}} +
\ No newline at end of file diff --git a/templates/ui/tooltip/weapon.hbs b/templates/ui/tooltip/weapon.hbs index c2972700..963b0714 100644 --- a/templates/ui/tooltip/weapon.hbs +++ b/templates/ui/tooltip/weapon.hbs @@ -1,5 +1,56 @@ -
-
{{name}}
- -
{{{system.description}}}
+
+

{{item.name}}

+ +
{{{item.system.description}}}
+ +
+
+ +
{{#if item.system.secondaryWeapon}}{{localize "DAGGERHEART.ITEMS.Weapon.secondaryWeapon"}}{{else}}{{localize "DAGGERHEART.ITEMS.Weapon.primaryWeapon"}}{{/if}}
+
+
+ + {{#with (lookup config.GENERAL.burden item.system.burden) as | burden |}} +
{{localize burden.label}}
+ {{/with}} +
+ {{#if item.system.attack.roll.trait}} +
+ + {{#with (lookup config.ACTOR.abilities item.system.attack.roll.trait) as | trait |}} +
{{localize trait.label}}
+ {{/with}} +
+ {{/if}} +
+ + {{#with (lookup config.GENERAL.range item.system.attack.range) as | range |}} +
{{localize range.label}}
+ {{/with}} +
+
+ +
{{{damageFormula item.system.attack item.parent}}}
+
+
+ +
{{{damageSymbols item.system.attack.damage.parts}}}
+
+
+ + {{#if (gt item.system.weaponFeatures.length 0)}}

{{localize "DAGGERHEART.GENERAL.features"}}

{{/if}} +
+ {{#each item.system.weaponFeatures}} + {{#with (lookup ../config.ITEM.weaponFeatures this.value) as | feature | }} +
+
+
{{localize feature.label}}
+
+
{{{localize feature.description}}}
+
+ {{/with}} + {{/each}} +
+ + {{> "systems/daggerheart/templates/ui/tooltip/parts/tooltipTags.hbs" features=item.system.customActions label=(localize "DAGGERHEART.GENERAL.Action.plural") }}
\ No newline at end of file