Compare commits

..

4 commits

Author SHA1 Message Date
Carlos Fernandez
fa6f9d56b8
Add emphatic color variable and set up scoped based overrides for core variables (#1932)
Some checks are pending
Project CI / build (24.x) (push) Waiting to run
2026-05-26 22:18:52 +02:00
Carlos Fernandez
c2f8b34ef2
Show actor sheet when clicking actors in item browser (#1930) 2026-05-26 15:46:08 +02:00
Carlos Fernandez
de0ab9d047
Include more item types when viewing compendium browser from item tab (#1931) 2026-05-26 15:43:36 +02:00
Carlos Fernandez
b9416ead5a
Fix usable checks on adversary features and locked compendium actors (#1934) 2026-05-26 15:41:26 +02:00
41 changed files with 127 additions and 87 deletions

View file

@ -1,3 +1,4 @@
import { getDocFromElement } from '../../helpers/utils.mjs';
import { RefreshType, socketEvent } from '../../systemRegistration/socket.mjs';
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
@ -47,7 +48,8 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
expandContent: this.expandContent,
resetFilters: this.resetFilters,
sortList: this.sortList,
openSettings: this.openSettings
openSettings: this.openSettings,
viewSheet: this.#onViewSheet
},
position: {
left: 100,
@ -306,7 +308,8 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
{
items: this.items,
menu: this.selectedMenu,
formatLabel: this.formatLabel
formatLabel: this.formatLabel,
viewSheet: this.items[0] instanceof Actor
}
);
@ -568,6 +571,11 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
}
}
static async #onViewSheet(_, target) {
const document = await getDocFromElement(target);
document?.sheet?.render(true);
}
_createDragProcess() {
new foundry.applications.ux.DragDrop.implementation({
dragSelector: '.item-container',
@ -606,7 +614,16 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
items: {
folder: 'equipments',
render: {
noFolder: true
folders: [
'equipments',
'ancestries',
'classes',
'subclasses',
'domains',
'communities',
'beastforms'
// excluded: features
]
}
},
compendium: {}

View file

@ -148,10 +148,14 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
: null;
}
/** Returns true if the action is usable */
/**
* Returns true if the action is usable.
* An action is usable on any actor type. For example, an adversary might have a base attack action.
*/
get usable() {
const actor = this.actor;
return this.isOwner && actor?.type === 'character';
const pack = actor?.pack ? game.packs.get(actor.pack) : null;
return !pack?.locked && this.isOwner;
}
static getRollType(parent) {

View file

@ -73,8 +73,10 @@ export default class DHItem extends foundry.documents.Item {
/** Returns true if the item can be used */
get usable() {
const actor = this.actor;
const actionsList = this.system.actionsList;
return this.isOwner && actor?.type === 'character' && (actionsList?.size || actionsList?.length);
const pack = actor?.pack ? game.packs.get(actor.pack) : null;
const hasActions = this.system.actionsList?.size || this.system.actionsList?.length;
const isValidType = actor?.type === 'character' || this.type === 'feature';
return !pack?.locked && this.isOwner && isValidType && hasActions;
}
/** @inheritdoc */

View file

@ -7,7 +7,7 @@
border-top: 0;
a {
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
&[disabled] {
opacity: 0.4;

View file

@ -67,7 +67,6 @@
i {
font-size: 18px;
// color: light-dark(@dark-blue, @golden);
}
}
}

View file

@ -56,7 +56,7 @@
cursor: pointer;
padding: 5px;
background: light-dark(@dark-blue-10, @golden-10);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
.label {
font-style: normal;
@ -129,7 +129,7 @@
cursor: pointer;
padding: 5px;
background: light-dark(@dark-blue-10, @golden-10);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
.label {
font-style: normal;

View file

@ -37,7 +37,7 @@
.activity-marker {
font-size: 0.5rem;
flex: none;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
margin-right: 4px;
}

View file

@ -1,5 +1,5 @@
h1 {
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
font: 700 var(--font-size-24) var(--dh-font-subtitle);
text-align: center;
}

View file

@ -110,7 +110,7 @@
display: flex;
flex-direction: row;
button {
--button-text-color: var(--color-text-primary);
--button-text-color: @color-text-primary;
--button-size: 1.5em;
padding: 0 var(--spacer-4);
img {

View file

@ -19,7 +19,7 @@
a,
span {
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
}
}

View file

@ -35,7 +35,7 @@
width: 120px;
height: 120px;
background: light-dark(@dark-blue-10, @golden-10);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
&.selected {
background: light-dark(@dark-blue-40, @golden-40);

View file

@ -62,7 +62,7 @@
padding: 5rem 4px var(--spacer-8) 4px;
text-align: center;
color: var(--color-text-primary);
color: @color-text-primary;
text-shadow: 1px 1px 2px var(--shadow-color), 0 0 10px var(--shadow-color);
.smooth-gradient-ease-in-out(background-image, to bottom, var(--shadow-color), 100%);
}

View file

@ -1,6 +1,6 @@
.daggerheart.dialog.dh-style.views.tag-team-dialog .window-content {
h1 {
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
font: 700 var(--font-size-24) var(--dh-font-subtitle);
text-align: center;
}
@ -64,7 +64,7 @@
.roll-title {
font-size: var(--font-size-20);
font-weight: bold;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
text-align: center;
display: flex;
align-items: center;
@ -72,7 +72,7 @@
&::before,
&::after {
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
content: '';
flex: 1;
height: 2px;
@ -202,7 +202,7 @@
justify-content: center;
i {
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
font-size: 48px;
&.inactive {

View file

@ -37,7 +37,7 @@
&:hover {
border: 1px solid light-dark(@dark-blue, @golden);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
}
}
@ -81,7 +81,7 @@
cursor: pointer;
padding: 5px;
background: light-dark(@dark-blue-10, @golden-10);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
.label {
font-style: normal;

View file

@ -14,7 +14,7 @@
box-shadow: 0 4px 30px @soft-shadow;
backdrop-filter: blur(9.5px);
outline: 2px solid transparent;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
border: 1px solid light-dark(@dark, @beige);
transition: all 0.3s ease;
@ -107,7 +107,7 @@
&:hover {
background: light-dark(@light-black, @dark-blue);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
&.glow {
@ -128,7 +128,7 @@
&.reverted {
background: light-dark(@dark-blue-10, @golden-10);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
border: 1px solid light-dark(@dark, transparent);
&:hover {
background: light-dark(transparent, @golden);
@ -175,7 +175,7 @@
height: inherit;
.tag {
padding: 0.3rem 0.5rem;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
background-color: light-dark(@dark-blue-10, @golden-40);
border-radius: 3px;
transition: 0.13s ease-out;
@ -353,7 +353,7 @@
legend {
font-weight: bold;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
&.with-icon {
display: flex;
@ -571,7 +571,7 @@
border: 0;
&:hover {
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
&:not(:first-child) {

View file

@ -13,7 +13,7 @@
legend {
font-weight: bold;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
font-size: var(--font-size-12);
}
@ -25,7 +25,7 @@
button {
background: light-dark(@light-black, @dark-blue);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
outline: none;
box-shadow: none;
border: 1px solid light-dark(@dark-blue, @dark-blue);

View file

@ -53,7 +53,7 @@
border: 1px solid light-dark(@dark-blue, @golden);
border-radius: 6px;
z-index: 1;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
width: fit-content;
.slot {

View file

@ -43,7 +43,7 @@ body.game:is(.performance-low, .noblur) {
&:hover {
border-color: light-dark(@dark-blue, @golden);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
}
}

View file

@ -20,7 +20,7 @@
white-space: nowrap;
a {
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
}
}

View file

@ -24,7 +24,7 @@
.palette-category-title {
grid-column: span var(--effect-columns);
font-weight: bold;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
}
}

View file

@ -13,7 +13,7 @@
font-size: var(--font-size-24);
margin: 0;
text-align: center;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
}
}

View file

@ -127,7 +127,7 @@
.title-name {
text-align: start;
font-size: var(--font-size-28);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
text-align: center;
}
}
@ -180,7 +180,7 @@
display: flex;
gap: 10px;
background-color: light-dark(transparent, @dark-blue);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
padding: 5px 10px;
border: 1px solid light-dark(@dark-blue, @golden);
border-radius: 6px;
@ -194,7 +194,7 @@
font-size: var(--font-size-14);
font-weight: bold;
text-transform: uppercase;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
.domain {
@ -206,7 +206,7 @@
font-size: var(--font-size-14);
font-weight: bold;
text-transform: uppercase;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
img {
@ -230,7 +230,7 @@
padding: 10px;
border-radius: 5px;
min-width: 90px;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
background-color: light-dark(@dark-blue-10, @golden-40);
}
}

View file

@ -65,7 +65,7 @@
display: flex;
gap: 10px;
background-color: light-dark(transparent, @dark-blue);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
padding: 5px 10px;
border: 1px solid light-dark(@dark-blue, @golden);
border-radius: 6px;
@ -77,7 +77,7 @@
font-size: var(--font-size-14);
font-weight: bold;
text-transform: uppercase;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
&.threshold-value {
color: light-dark(@dark, @beige);

View file

@ -103,7 +103,7 @@
padding: 5px 0;
margin-bottom: 8px;
font-size: var(--font-size-12);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
.missing-header-feature {
opacity: 0.5;
@ -170,7 +170,7 @@
display: flex;
gap: 4px;
background-color: light-dark(transparent, @dark-blue);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
padding: 5px 10px;
border: 1px solid light-dark(@dark-blue, @golden);
border-radius: 6px;
@ -182,7 +182,7 @@
font-size: var(--font-size-14);
font-weight: bold;
text-transform: uppercase;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
margin-right: 4px;
}
@ -195,7 +195,7 @@
font-size: var(--font-size-14);
font-weight: bold;
text-transform: uppercase;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
img {

View file

@ -54,7 +54,7 @@
span {
margin: 1px;
width: 26px;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
&.list-icon {
i {

View file

@ -286,7 +286,7 @@
h4,
i {
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
}
}
@ -314,7 +314,7 @@
z-index: 1;
background: @dark-blue;
justify-content: center;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
.armor-slot {
cursor: pointer;
@ -348,7 +348,7 @@
.label,
.value,
i {
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
}
@ -513,7 +513,7 @@
align-self: center;
gap: 10px;
background-color: light-dark(transparent, @dark-blue);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
padding: 5px 10px;
border: 1px solid light-dark(@dark-blue, @golden);
border-radius: 6px;
@ -525,7 +525,7 @@
font-size: var(--font-size-14);
font-weight: bold;
text-transform: uppercase;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
&.threshold-value {
color: light-dark(@dark, @beige);

View file

@ -79,7 +79,7 @@
display: flex;
gap: 4px;
background-color: light-dark(var(--color-light-1), @dark-blue);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
padding: 4px 6px;
border: 1px solid light-dark(@dark-blue, @golden);
border-radius: 3px;
@ -93,7 +93,7 @@
&.threshold-label {
font-size: var(--font-size-10);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
&.threshold-value {
@ -116,7 +116,7 @@
width: 100%;
z-index: 1;
font-size: var(--font-size-20);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
font-weight: bold;
}
@ -132,7 +132,7 @@
.hope-section {
display: flex;
background-color: light-dark(transparent, @dark-blue);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
padding: 3px 6px;
border: 1px solid light-dark(@dark-blue, @golden);
border-radius: 3px;
@ -144,7 +144,7 @@
font-size: var(--font-size-12);
font-weight: bold;
text-transform: uppercase;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
margin-right: 3px;
}
@ -212,7 +212,7 @@
gap: 4px;
background-color: light-dark(@dark-blue-10, @dark-blue);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
padding: 2px 5px;
border: 1px solid light-dark(@dark-blue, @golden);
border-radius: 0 6px 6px 0;
@ -260,7 +260,7 @@
justify-content: space-between;
gap: 3px;
.label {
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
.value {
font-weight: 600;

View file

@ -31,7 +31,7 @@
}
i {
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
}
}
@ -71,7 +71,7 @@
align-items: center;
justify-content: center;
gap: 10px;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
.main-value {
font-size: var(--font-size-24);
@ -153,7 +153,7 @@
cursor: pointer;
padding: 5px;
background: light-dark(@dark-blue-10, @golden-10);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
&.finished {
background-color: initial;

View file

@ -93,7 +93,7 @@
}
a[href] {
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
a[href]:hover,

View file

@ -17,7 +17,7 @@
position: relative;
border: 0;
box-shadow: none;
color: var(--color-text-primary);
color: @color-text-primary;
width: 300px;
pointer-events: all;
align-self: flex-end;

View file

@ -200,7 +200,7 @@
font-weight: bold;
border-radius: 3px;
background-color: light-dark(@dark-blue-40, @golden-40);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
.subfolder-list {
@ -218,7 +218,7 @@
font-weight: bold;
border-radius: 3px;
background-color: light-dark(@dark-blue-10, @golden-10);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
}
.wrapper {
@ -245,7 +245,7 @@
}
.item-list-header,
.item-list [data-action='expandContent'] {
.item-list .item-info[data-action] {
display: flex;
> * {
@ -265,7 +265,7 @@
.item-list-header {
align-items: center;
background-color: light-dark(@dark-15, @dark-golden-80);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
border: 1px solid light-dark(@dark-blue, @golden);
border-radius: 3px;
min-height: 30px;

View file

@ -61,7 +61,7 @@
display: flex;
align-items: center;
gap: 4px;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
i {
font-size: 14px;

View file

@ -1,7 +1,7 @@
@import '../../utils/colors.less';
.daggerheart.dh-style.setting {
--color-form-label: var(--color-text-primary);
--color-form-label: @color-text-primary;
h2,
h3,

View file

@ -34,7 +34,7 @@
cursor: pointer;
padding: 5px;
background: light-dark(@dark-blue-10, @golden-10);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
.label {
font-style: normal;

View file

@ -83,8 +83,21 @@
--gradient-stress: linear-gradient(15deg, rgb(130, 59, 1) 0%, rgb(252, 142, 69) 65%, rgb(190, 0, 0) 100%);
--primary-color-fear: rgba(9, 71, 179, 0.75);
}
--dh-color-text-subtle: light-dark(#555, #a29086);
@scope (.theme-light) to (.themed) {
.dh-style,
.duality {
--color-text-emphatic: @dark-blue;
--color-text-subtle: #555;
}
}
@scope (.theme-dark) to (.themed) {
.dh-style,
.duality {
--color-text-emphatic: @golden;
--color-text-subtle: #a29086;
}
}
@primary-blue: var(--primary-blue, #1488cc);
@ -193,4 +206,7 @@
}
}
@color-text-subtle: var(--dh-color-text-subtle);
// LESS variable versions of core foundry color variables
@color-text-emphatic: var(--color-text-emphatic);
@color-text-primary: var(--color-text-primary);
@color-text-subtle: var(--color-text-subtle);

View file

@ -124,7 +124,7 @@
background: @dark-blue;
align-items: center;
justify-content: center;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
min-height: 30px;
width: 100%;

View file

@ -9,7 +9,7 @@
display: flex;
gap: 10px;
background-color: light-dark(transparent, @dark-blue);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
padding: 5px 10px;
border: 1px solid light-dark(@dark-blue, @golden);
border-radius: 6px;
@ -22,7 +22,7 @@
font-size: var(--font-size-14);
font-weight: bold;
text-transform: uppercase;
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
margin: 0;
}

View file

@ -3,7 +3,7 @@ aside[role='tooltip']:has(div.daggerheart.dh-style.tooltip),
#tooltip.bordered-tooltip {
.tooltip-title {
font-size: var(--font-size-20);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
font-weight: 700;
}

View file

@ -132,7 +132,7 @@ aside[role='tooltip']:has(div.daggerheart.dh-style.tooltip.card-style) {
border-radius: 3px;
padding: 3px;
background: light-dark(@dark-blue-60, @rustic-brown-80);
color: light-dark(@dark-blue, @golden);
color: @color-text-emphatic;
font-size: 12px;
margin-bottom: 10px;
}

View file

@ -5,7 +5,7 @@
(hasProperty item "toChat" ) "toChat" "editDoc" ) }}' {{#unless hideTooltip}} {{#if (eq type 'attack' )}}
data-tooltip="#attack#{{item.actor.uuid}}" {{else}} data-tooltip="#item#{{item.uuid}}" {{/if}} {{/unless}}>
<img src="{{item.img}}" class="item-img {{#if isActor}}actor-img{{/if}}" />
{{#if (or item.system.actionsList.size item.system.actionsList.length item.actionType)}}
{{#if item.usable}}
{{#if @root.isNPC}}
<img class="roll-img d20" src="systems/daggerheart/assets/icons/dice/default/d20.svg" alt="d20">
{{else}}

View file

@ -1,7 +1,7 @@
{{#each items}}
<div class="item-container" data-item-uuid="{{uuid}}" draggable="true">
<div class="item-header">
<div class="item-info" data-action="expandContent">
<div class="item-info" {{#if @root.viewSheet}}data-action="viewSheet"{{else}}data-action="expandContent"{{/if}}>
<img src="{{img}}" data-item-key="img" class="item-list-img">
<span data-item-key="name" class="item-list-name">{{name}}</span>
{{#each ../menu.data.columns}}
@ -9,11 +9,13 @@
{{/each}}
</div>
</div>
{{#unless viewSheet}}
<div class="item-desc extensible">
<span class="wrapper">
{{{system.enrichedTags}}}
{{{system.enrichedDescription}}}
</span>
</div>
{{/unless}}
</div>
{{/each}}