Skip to content

Commit bb3a3d7

Browse files
JesmoDevnielslyngsoeiOvergaard
authored
fix: Small visual corrections (#212)
Co-authored-by: Niels Lyngsø <[email protected]> Co-authored-by: Jacob Overgaard <[email protected]>
1 parent b73f038 commit bb3a3d7

File tree

7 files changed

+41
-43
lines changed

7 files changed

+41
-43
lines changed

.eslintignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
node_modules/
22
.eslintrc.js
3+
plopfile.js

packages/uui-base/lib/mixins/SelectableMixin.ts

+15-4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export declare class SelectableMixinInterface extends LitElement {
99
selectable: boolean;
1010
unselectable: boolean;
1111
selected: boolean;
12+
selectableTarget: EventTarget;
1213
}
1314

1415
/**
@@ -54,16 +55,20 @@ export const SelectableMixin = <T extends Constructor<LitElement>>(
5455
@property({ type: Boolean, reflect: true })
5556
public selected = false;
5657

58+
protected selectableTarget: EventTarget = this;
59+
5760
constructor(...args: any[]) {
5861
super(...args);
5962
this.addEventListener('click', this._handleClick);
6063
this.addEventListener('keydown', this.handleSelectKeydown);
6164
}
6265

6366
private handleSelectKeydown(e: KeyboardEvent) {
64-
if (e.key !== ' ' && e.key !== 'Enter') return;
65-
e.preventDefault();
66-
this._handleClick();
67+
if (e.composedPath().indexOf(this.selectableTarget) !== -1) {
68+
if (e.key !== ' ' && e.key !== 'Enter') return;
69+
e.preventDefault();
70+
this._toggleSelect();
71+
}
6772
}
6873

6974
private _select() {
@@ -78,7 +83,13 @@ export const SelectableMixin = <T extends Constructor<LitElement>>(
7883
this.dispatchEvent(new UUISelectableEvent(UUISelectableEvent.UNSELECTED));
7984
}
8085

81-
private _handleClick() {
86+
private _handleClick(e: Event) {
87+
if (e.composedPath().indexOf(this.selectableTarget) !== -1) {
88+
this._toggleSelect();
89+
}
90+
}
91+
92+
private _toggleSelect() {
8293
if (this.unselectable === false) {
8394
this._select();
8495
} else {

packages/uui-card-media/lib/uui-card-media.element.ts

+2
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ export class UUICardMediaElement extends UUICardElement {
7676
7777
:host([disabled]) #open-part {
7878
pointer-events: none;
79+
background: var(--uui-interface-surface-disabled);
80+
color: var(--uui-interface-contrast-disabled);
7981
}
8082
8183
#open-part:hover {

packages/uui-card/lib/uui-card.element.ts

+12-37
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,17 @@ export class UUICardElement extends SelectOnlyMixin(
4646
outline-offset: var(--uui-card-border-width);
4747
}
4848
49-
:host([error]) {
49+
:host([error])::before {
50+
content: '';
51+
position: absolute;
52+
pointer-events: none;
53+
inset: 0;
54+
width: 100%;
55+
height: 100%;
56+
z-index: 1;
57+
box-sizing: border-box;
5058
border: var(--uui-card-border-width) solid var(--uui-color-danger);
59+
border-radius: var(--uui-border-radius);
5160
}
5261
5362
:host([selectable]) {
@@ -64,8 +73,8 @@ export class UUICardElement extends SelectOnlyMixin(
6473
position: absolute;
6574
pointer-events: none;
6675
inset: calc(var(--uui-card-border-width) * -1);
67-
width: calc(100% + var(--uui-card-border-width) * 2);
68-
height: calc(100% + var(--uui-card-border-width) * 2);
76+
width: calc(100% + calc(var(--uui-card-border-width) * 2));
77+
height: calc(100% + calc(var(--uui-card-border-width) * 2));
6978
box-sizing: border-box;
7079
border: var(--uui-card-border-width) solid var(--uui-color-selected);
7180
border-radius: calc(
@@ -84,40 +93,6 @@ export class UUICardElement extends SelectOnlyMixin(
8493
opacity: 1;
8594
}
8695
87-
:host([selectable]:not([selected]):hover) #select-border::after {
88-
animation: not-selected--hover 1.2s infinite;
89-
}
90-
@keyframes not-selected--hover {
91-
0%,
92-
100% {
93-
opacity: 0.66;
94-
}
95-
50% {
96-
opacity: 1;
97-
}
98-
}
99-
100-
:host([selectable][selected]:hover) #select-border::after {
101-
animation: selected--hover 1.4s infinite;
102-
}
103-
@keyframes selected--hover {
104-
0%,
105-
100% {
106-
opacity: 1;
107-
}
108-
50% {
109-
opacity: 0.66;
110-
}
111-
}
112-
:host([selectable]) #open-part:hover + #select-border::after {
113-
animation: none;
114-
}
115-
:host([error])::after {
116-
inset: calc(var(--uui-card-border-width) * -2);
117-
width: calc(100% + calc(var(--uui-card-border-width) * 4));
118-
height: calc(100% + calc(var(--uui-card-border-width) * 4));
119-
}
120-
12196
:host([select-only]) *,
12297
:host([select-only]) ::slotted(*) {
12398
pointer-events: none;

packages/uui-checkbox/lib/uui-checkbox.element.ts

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export class UUICheckboxElement extends UUIBooleanInputElement {
3636
display: flex;
3737
align-items: center;
3838
justify-content: center;
39+
flex-shrink: 0;
3940
4041
box-sizing: border-box;
4142
width: var(--uui-checkbox-size);

packages/uui-menu-item/lib/uui-menu-item.element.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { defineElement } from '@umbraco-ui/uui-base/lib/registration';
88
import { demandCustomElement } from '@umbraco-ui/uui-base/lib/utils';
99
import { css, html, LitElement } from 'lit';
1010
import { property, state } from 'lit/decorators.js';
11+
import { ref } from 'lit/directives/ref.js';
1112
import { ifDefined } from 'lit/directives/if-defined.js';
1213

1314
import { UUIMenuItemEvent } from './UUIMenuItemEvent';
@@ -261,6 +262,10 @@ export class UUIMenuItemElement extends SelectOnlyMixin(
261262
@state()
262263
private iconSlotHasContent = false;
263264

265+
labelButtonChanged(label?: Element | undefined) {
266+
this.selectableTarget = label || this;
267+
}
268+
264269
connectedCallback() {
265270
super.connectedCallback();
266271
if (!this.hasAttribute('role')) this.setAttribute('role', 'menu');
@@ -300,12 +305,13 @@ export class UUIMenuItemElement extends SelectOnlyMixin(
300305

301306
private _renderLabelAsAnchor() {
302307
if (this.disabled) {
303-
return html` <span id="label-button">
308+
return html` <span id="label-button" ${ref(this.labelButtonChanged)}>
304309
${this._renderLabelInside()}
305310
</span>`;
306311
}
307312
return html` <a
308313
id="label-button"
314+
${ref(this.labelButtonChanged)}
309315
href=${ifDefined(this.href)}
310316
target=${ifDefined(this.target || undefined)}
311317
rel=${ifDefined(this.target === '_blank' ? 'noopener' : undefined)}
@@ -319,6 +325,7 @@ export class UUIMenuItemElement extends SelectOnlyMixin(
319325
private _renderLabelAsButton() {
320326
return html` <button
321327
id="label-button"
328+
${ref(this.labelButtonChanged)}
322329
@click=${this.onLabelClicked}
323330
?disabled=${this.disabled}
324331
aria-label="${this.label}">

plopfile.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ module.exports = function (plop) {
8282
{
8383
type: 'append',
8484
path: './packages/uui/lib/index.ts',
85-
template: "export * from '@umbraco-ui/{{> tagnamePartial }}/lib/index.js';",
85+
template:
86+
"export * from '@umbraco-ui/{{> tagnamePartial }}/lib/index.js';",
8687
},
8788
],
8889
});

0 commit comments

Comments
 (0)