Skip to content

Commit ba42fe8

Browse files
nielslyngsoeJesmoDeviOvergaard
authored
fix: Small visual corrections (#213)
Co-authored-by: Jesper Møller Jensen <[email protected]> Co-authored-by: Jacob Overgaard <[email protected]>
1 parent 4322eff commit ba42fe8

File tree

7 files changed

+43
-44
lines changed

7 files changed

+43
-44
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

+14-38
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,18 @@ export class UUICardElement extends SelectOnlyMixin(
4646
outline-offset: var(--uui-card-border-width);
4747
}
4848
49-
:host([error]) {
50-
border: var(--uui-card-border-width) solid var(--uui-look-danger-border);
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;
58+
border: var(--uui-card-border-width) solid
59+
var(--uui-look-danger-border, #d42054);
60+
border-radius: var(--uui-border-radius);
5161
}
5262
5363
:host([selectable]) {
@@ -64,8 +74,8 @@ export class UUICardElement extends SelectOnlyMixin(
6474
position: absolute;
6575
pointer-events: none;
6676
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);
77+
width: calc(100% + calc(var(--uui-card-border-width) * 2));
78+
height: calc(100% + calc(var(--uui-card-border-width) * 2));
6979
box-sizing: border-box;
7080
border: var(--uui-card-border-width) solid var(--uui-interface-select);
7181
border-radius: calc(
@@ -84,40 +94,6 @@ export class UUICardElement extends SelectOnlyMixin(
8494
opacity: 1;
8595
}
8696
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-
12197
:host([select-only]) *,
12298
:host([select-only]) ::slotted(*) {
12399
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';
@@ -266,6 +267,10 @@ export class UUIMenuItemElement extends SelectOnlyMixin(
266267
@state()
267268
private iconSlotHasContent = false;
268269

270+
labelButtonChanged(label?: Element | undefined) {
271+
this.selectableTarget = label || this;
272+
}
273+
269274
connectedCallback() {
270275
super.connectedCallback();
271276
if (!this.hasAttribute('role')) this.setAttribute('role', 'menu');
@@ -305,12 +310,13 @@ export class UUIMenuItemElement extends SelectOnlyMixin(
305310

306311
private _renderLabelAsAnchor() {
307312
if (this.disabled) {
308-
return html` <span id="label-button">
313+
return html` <span id="label-button" ${ref(this.labelButtonChanged)}>
309314
${this._renderLabelInside()}
310315
</span>`;
311316
}
312317
return html` <a
313318
id="label-button"
319+
${ref(this.labelButtonChanged)}
314320
href=${ifDefined(this.href)}
315321
target=${ifDefined(this.target || undefined)}
316322
rel=${ifDefined(this.target === '_blank' ? 'noopener' : undefined)}
@@ -324,6 +330,7 @@ export class UUIMenuItemElement extends SelectOnlyMixin(
324330
private _renderLabelAsButton() {
325331
return html` <button
326332
id="label-button"
333+
${ref(this.labelButtonChanged)}
327334
@click=${this.onLabelClicked}
328335
?disabled=${this.disabled}
329336
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)