@justeattakeaway/pie-chip 0.8.6 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +14 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +69 -59
- package/dist/react.d.ts +7 -0
- package/package.json +1 -1
- package/src/chip.scss +35 -26
- package/src/index.ts +20 -5
package/custom-elements.json
CHANGED
|
@@ -126,6 +126,20 @@
|
|
|
126
126
|
"privacy": "public",
|
|
127
127
|
"attribute": "aria"
|
|
128
128
|
},
|
|
129
|
+
{
|
|
130
|
+
"kind": "method",
|
|
131
|
+
"name": "onClickHandler",
|
|
132
|
+
"privacy": "private",
|
|
133
|
+
"parameters": [
|
|
134
|
+
{
|
|
135
|
+
"name": "event",
|
|
136
|
+
"type": {
|
|
137
|
+
"text": "Event"
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
"description": "Hander to prevent click events\nwhen the chip is disabled or dismissible"
|
|
142
|
+
},
|
|
129
143
|
{
|
|
130
144
|
"kind": "method",
|
|
131
145
|
"name": "renderSpinner",
|
package/dist/index.d.ts
CHANGED
|
@@ -60,6 +60,13 @@ export declare class PieChip extends LitElement implements ChipProps {
|
|
|
60
60
|
isLoading: boolean;
|
|
61
61
|
isDismissible: boolean;
|
|
62
62
|
aria: ChipProps['aria'];
|
|
63
|
+
/**
|
|
64
|
+
* Hander to prevent click events
|
|
65
|
+
* when the chip is disabled or dismissible
|
|
66
|
+
*
|
|
67
|
+
* @private
|
|
68
|
+
*/
|
|
69
|
+
private onClickHandler;
|
|
63
70
|
/**
|
|
64
71
|
* Template for the loading state
|
|
65
72
|
*
|
package/dist/index.js
CHANGED
|
@@ -1,25 +1,34 @@
|
|
|
1
|
-
import { LitElement as f, html as
|
|
1
|
+
import { LitElement as f, html as p, nothing as m, unsafeCSS as y } from "lit";
|
|
2
2
|
import { property as t } from "lit/decorators.js";
|
|
3
|
-
import { ifDefined as
|
|
4
|
-
import { classMap as
|
|
5
|
-
import { dispatchCustomEvent as
|
|
3
|
+
import { ifDefined as n } from "lit/directives/if-defined.js";
|
|
4
|
+
import { classMap as k } from "lit/directives/class-map.js";
|
|
5
|
+
import { dispatchCustomEvent as x, validPropertyValues as w, defineCustomElement as $ } from "@justeattakeaway/pie-webc-core";
|
|
6
6
|
import "@justeattakeaway/pie-icons-webc/dist/IconCloseCircleFilled.js";
|
|
7
7
|
import "@justeattakeaway/pie-spinner";
|
|
8
|
-
const
|
|
8
|
+
const C = "*,*:after,*:before{box-sizing:inherit}.c-chip{--chip-bg-color: var(--dt-color-interactive-secondary);--chip-color: var(--dt-color-content-interactive-secondary);--chip-border-width: 1px;--chip-border-color: transparent;--chip-padding-block: calc(6px - var(--chip-border-width));--chip-padding-inline: calc(var(--dt-spacing-c) - var(--chip-border-width));--chip-padding-dismissible: calc(var(--dt-spacing-a) - var(--chip-border-width));--chip-min-width: calc(var(--dt-spacing-g) + var(--dt-spacing-b));--chip-gap: var(--dt-spacing-b);--chip-dismissible-offset: calc(var(--chip-gap) / -2);--chip-cursor: pointer;--chip-close-btn-cursor: pointer;--icon-display-override: block;position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--chip-gap);padding-block-start:var(--chip-padding-block);padding-block-end:var(--chip-padding-block);padding-inline-start:var(--chip-padding-inline);padding-inline-end:var(--chip-padding-inline);background-color:var(--chip-bg-color);color:var(--chip-color);border-radius:var(--dt-radius-rounded-e);border:1px solid;border-color:var(--chip-border-color);cursor:var(--chip-cursor);-webkit-user-select:none;user-select:none;min-width:var(--chip-min-width);font-size:calc(var(--dt-font-interactive-xs-size) * 1px);line-height:calc(var(--dt-font-interactive-xs-line-height) * 1px);font-weight:var(--dt-font-weight-bold)}.c-chip:hover:not(.c-chip--disabled,.c-chip--dismissible){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--chip-bg-color: hsl(var(--dt-color-interactive-secondary-h), var(--dt-color-interactive-secondary-s), calc(var(--dt-color-interactive-secondary-l) + var(--hover-modifier)))}.c-chip:active:not(.c-chip--disabled,.c-chip--dismissible),.c-chip.is-loading:not(.c-chip--disabled,.c-chip--dismissible){--active-modifier: calc(-1 * var(--dt-color-active-01));--chip-bg-color: hsl(var(--dt-color-interactive-secondary-h), var(--dt-color-interactive-secondary-s), calc(var(--dt-color-interactive-secondary-l) + var(--active-modifier)))}.c-chip.c-chip--outline:not(.c-chip--disabled,.c-chip--selected){--chip-border-color: var(--dt-color-border-strong)}.c-chip.c-chip--outline,.c-chip.c-chip--ghost{--chip-bg-color: transparent}.c-chip.c-chip--outline:hover:not(.c-chip--disabled,.c-chip--dismissible),.c-chip.c-chip--ghost:hover:not(.c-chip--disabled,.c-chip--dismissible){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--hover-modifier: var(--dt-color-hover-01);--chip-bg-color: hsl(var(--dt-color-black-h), var(--dt-color-black-s), var(--dt-color-black-l), var(--hover-modifier))}.c-chip.c-chip--outline:active:not(.c-chip--disabled,.c-chip--dismissible),.c-chip.c-chip--outline.is-loading:not(.c-chip--disabled,.c-chip--dismissible),.c-chip.c-chip--ghost:active:not(.c-chip--disabled,.c-chip--dismissible),.c-chip.c-chip--ghost.is-loading:not(.c-chip--disabled,.c-chip--dismissible){--active-modifier: calc(-1 * var(--dt-color-active-01));--active-modifier: var(--dt-color-active-01);--chip-bg-color: hsl(var(--dt-color-black-h), var(--dt-color-black-s), var(--dt-color-black-l), var(--active-modifier))}.c-chip.c-chip--selected{--chip-bg-color: var(--dt-color-interactive-primary);--chip-color: var(--dt-color-content-interactive-primary)}.c-chip.c-chip--selected:hover:not(.c-chip--disabled,.c-chip--dismissible){--hover-modifier: var(--dt-color-hover-02);--chip-bg-color: hsl(var(--dt-color-interactive-primary-h), var(--dt-color-interactive-primary-s), calc(var(--dt-color-interactive-primary-l) + var(--hover-modifier)))}.c-chip.c-chip--selected:active:not(.c-chip--disabled,.c-chip--dismissible),.c-chip.c-chip--selected.is-loading:not(.c-chip--disabled,.c-chip--dismissible){--active-modifier: var(--dt-color-active-02);--chip-bg-color: hsl(var(--dt-color-interactive-primary-h), var(--dt-color-interactive-primary-s), calc(var(--dt-color-interactive-primary-l) + var(--active-modifier)))}.c-chip.is-loading>*:not(.c-chip-spinner){visibility:hidden}.c-chip.is-loading .c-chip-spinner{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%)}.c-chip.c-chip--disabled{--chip-bg-color: var(--dt-color-disabled-01);--chip-color: var(--dt-color-content-disabled);--chip-cursor: not-allowed;--chip-close-btn-cursor: not-allowed}.c-chip.c-chip--disabled.c-chip--ghost{--chip-bg-color: transparent}.c-chip.c-chip--dismissible{--chip-cursor: text;padding-inline-end:var(--chip-padding-dismissible);padding-block-start:var(--chip-padding-dismissible);padding-block-end:var(--chip-padding-dismissible);-webkit-user-select:auto;user-select:auto}.c-chip.c-chip--dismissible .c-chip-closeBtn{display:inline-flex;-webkit-user-select:none;user-select:none;outline:none;border:none;color:inherit;background-color:inherit;border-radius:inherit;cursor:var(--chip-close-btn-cursor);padding:0;margin-inline-start:var(--chip-dismissible-offset)}.c-chip.c-chip--dismissible .c-chip-closeBtn:focus-visible{box-shadow:0 0 0 2px var(--dt-color-focus-inner),0 0 0 4px var(--dt-color-focus-outer);outline:none}.c-chip:focus-visible{box-shadow:0 0 0 2px var(--dt-color-focus-inner),0 0 0 4px var(--dt-color-focus-outer);outline:none}::slotted(svg){display:block;height:var(--icon-size-override);width:var(--icon-size-override)}", B = ["default", "outline", "ghost"], S = "pie-chip-close", r = {
|
|
9
9
|
variant: "default",
|
|
10
10
|
disabled: !1,
|
|
11
11
|
isSelected: !1,
|
|
12
12
|
isLoading: !1,
|
|
13
13
|
isDismissible: !1
|
|
14
14
|
};
|
|
15
|
-
var
|
|
16
|
-
for (var
|
|
17
|
-
(
|
|
18
|
-
return
|
|
15
|
+
var D = Object.defineProperty, s = (v, i, a, d) => {
|
|
16
|
+
for (var c = void 0, l = v.length - 1, o; l >= 0; l--)
|
|
17
|
+
(o = v[l]) && (c = o(i, a, c) || c);
|
|
18
|
+
return c && D(i, a, c), c;
|
|
19
19
|
};
|
|
20
|
-
const
|
|
20
|
+
const g = "pie-chip", h = class h extends f {
|
|
21
21
|
constructor() {
|
|
22
|
-
super(...arguments), this.variant =
|
|
22
|
+
super(...arguments), this.variant = r.variant, this.disabled = r.disabled, this.isSelected = r.isSelected, this.isLoading = r.isLoading, this.isDismissible = r.isDismissible;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Hander to prevent click events
|
|
26
|
+
* when the chip is disabled or dismissible
|
|
27
|
+
*
|
|
28
|
+
* @private
|
|
29
|
+
*/
|
|
30
|
+
onClickHandler(i) {
|
|
31
|
+
(this.disabled || this.isDismissible) && (i.preventDefault(), i.stopPropagation());
|
|
23
32
|
}
|
|
24
33
|
/**
|
|
25
34
|
* Template for the loading state
|
|
@@ -27,12 +36,12 @@ const m = "pie-chip", p = class p extends f {
|
|
|
27
36
|
* @private
|
|
28
37
|
*/
|
|
29
38
|
renderSpinner() {
|
|
30
|
-
const { isSelected:
|
|
31
|
-
return
|
|
39
|
+
const { isSelected: i } = this;
|
|
40
|
+
return p`
|
|
32
41
|
<pie-spinner
|
|
33
42
|
class="c-chip-spinner"
|
|
34
43
|
size="small"
|
|
35
|
-
variant="${
|
|
44
|
+
variant="${i ? "inverse" : "secondary"}">
|
|
36
45
|
</pie-spinner>`;
|
|
37
46
|
}
|
|
38
47
|
/**
|
|
@@ -41,7 +50,7 @@ const m = "pie-chip", p = class p extends f {
|
|
|
41
50
|
* @private
|
|
42
51
|
*/
|
|
43
52
|
_handleCloseButtonClick() {
|
|
44
|
-
|
|
53
|
+
x(this, S);
|
|
45
54
|
}
|
|
46
55
|
/**
|
|
47
56
|
* Template for the dismissible state
|
|
@@ -49,76 +58,77 @@ const m = "pie-chip", p = class p extends f {
|
|
|
49
58
|
* @private
|
|
50
59
|
*/
|
|
51
60
|
renderCloseButton() {
|
|
52
|
-
var
|
|
53
|
-
return
|
|
61
|
+
var i;
|
|
62
|
+
return p`
|
|
54
63
|
<button
|
|
55
64
|
@click="${this._handleCloseButtonClick}"
|
|
56
65
|
?disabled=${this.disabled}
|
|
57
|
-
aria-label="${
|
|
66
|
+
aria-label="${n((i = this.aria) == null ? void 0 : i.close)}"
|
|
58
67
|
class="c-chip-closeBtn"
|
|
59
68
|
data-test-id="chip-close-button">
|
|
60
69
|
<icon-close-circle-filled size="m"></icon-close-circle-filled>
|
|
61
70
|
</button>`;
|
|
62
71
|
}
|
|
63
72
|
render() {
|
|
64
|
-
var
|
|
73
|
+
var b;
|
|
65
74
|
const {
|
|
66
|
-
variant:
|
|
67
|
-
disabled:
|
|
68
|
-
isSelected:
|
|
69
|
-
isLoading:
|
|
70
|
-
isDismissible:
|
|
71
|
-
} = this, d = {
|
|
75
|
+
variant: i,
|
|
76
|
+
disabled: a,
|
|
77
|
+
isSelected: d,
|
|
78
|
+
isLoading: c,
|
|
79
|
+
isDismissible: l
|
|
80
|
+
} = this, o = l && d, u = {
|
|
72
81
|
"c-chip": !0,
|
|
73
|
-
[`c-chip--${
|
|
74
|
-
"c-chip--selected":
|
|
75
|
-
"c-chip--dismissible":
|
|
76
|
-
"
|
|
82
|
+
[`c-chip--${i}`]: !0,
|
|
83
|
+
"c-chip--selected": d,
|
|
84
|
+
"c-chip--dismissible": o,
|
|
85
|
+
"c-chip--disabled": a,
|
|
86
|
+
"is-loading": c
|
|
77
87
|
};
|
|
78
|
-
return
|
|
88
|
+
return p`
|
|
79
89
|
<div
|
|
90
|
+
role="${n(o ? void 0 : "button")}"
|
|
91
|
+
tabindex="${n(o ? void 0 : "0")}"
|
|
80
92
|
aria-atomic="true"
|
|
81
|
-
aria-busy="${
|
|
82
|
-
aria-current="${
|
|
83
|
-
aria-label="${
|
|
93
|
+
aria-busy="${c}"
|
|
94
|
+
aria-current="${d}"
|
|
95
|
+
aria-label="${n((b = this.aria) == null ? void 0 : b.label)}"
|
|
84
96
|
aria-live="polite"
|
|
85
|
-
class=${
|
|
97
|
+
class=${k(u)}
|
|
86
98
|
data-test-id="pie-chip"
|
|
87
|
-
|
|
88
|
-
role="button"
|
|
89
|
-
?disabled="${l}">
|
|
99
|
+
@click="${this.onClickHandler}">
|
|
90
100
|
<slot name="icon"></slot>
|
|
91
|
-
${
|
|
101
|
+
${c ? this.renderSpinner() : m}
|
|
92
102
|
<slot></slot>
|
|
93
|
-
${
|
|
103
|
+
${o ? this.renderCloseButton() : m}
|
|
94
104
|
</div>`;
|
|
95
105
|
}
|
|
96
106
|
};
|
|
97
|
-
|
|
98
|
-
let
|
|
99
|
-
|
|
107
|
+
h.styles = y(C);
|
|
108
|
+
let e = h;
|
|
109
|
+
s([
|
|
100
110
|
t(),
|
|
101
|
-
|
|
102
|
-
],
|
|
103
|
-
|
|
111
|
+
w(g, B, r.variant)
|
|
112
|
+
], e.prototype, "variant");
|
|
113
|
+
s([
|
|
104
114
|
t({ type: Boolean })
|
|
105
|
-
],
|
|
106
|
-
|
|
115
|
+
], e.prototype, "disabled");
|
|
116
|
+
s([
|
|
107
117
|
t({ type: Boolean })
|
|
108
|
-
],
|
|
109
|
-
|
|
118
|
+
], e.prototype, "isSelected");
|
|
119
|
+
s([
|
|
110
120
|
t({ type: Boolean })
|
|
111
|
-
],
|
|
112
|
-
|
|
121
|
+
], e.prototype, "isLoading");
|
|
122
|
+
s([
|
|
113
123
|
t({ type: Boolean })
|
|
114
|
-
],
|
|
115
|
-
|
|
124
|
+
], e.prototype, "isDismissible");
|
|
125
|
+
s([
|
|
116
126
|
t({ type: Object })
|
|
117
|
-
],
|
|
118
|
-
|
|
127
|
+
], e.prototype, "aria");
|
|
128
|
+
$(g, e);
|
|
119
129
|
export {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
130
|
+
S as ON_CHIP_CLOSE_EVENT,
|
|
131
|
+
e as PieChip,
|
|
132
|
+
r as defaultProps,
|
|
133
|
+
B as variants
|
|
124
134
|
};
|
package/dist/react.d.ts
CHANGED
|
@@ -63,6 +63,13 @@ declare class PieChip_2 extends LitElement implements ChipProps {
|
|
|
63
63
|
isLoading: boolean;
|
|
64
64
|
isDismissible: boolean;
|
|
65
65
|
aria: ChipProps['aria'];
|
|
66
|
+
/**
|
|
67
|
+
* Hander to prevent click events
|
|
68
|
+
* when the chip is disabled or dismissible
|
|
69
|
+
*
|
|
70
|
+
* @private
|
|
71
|
+
*/
|
|
72
|
+
private onClickHandler;
|
|
66
73
|
/**
|
|
67
74
|
* Template for the loading state
|
|
68
75
|
*
|
package/package.json
CHANGED
package/src/chip.scss
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
@use '@justeattakeaway/pie-css/scss' as p;
|
|
2
2
|
|
|
3
3
|
@mixin chip-interactive-states($bg-color, $mode: 'default') {
|
|
4
|
-
&:hover:not(
|
|
4
|
+
&:hover:not(.c-chip--disabled, .c-chip--dismissible) {
|
|
5
5
|
@if $mode == 'inverse' {
|
|
6
6
|
--hover-modifier: var(--dt-color-hover-02);
|
|
7
7
|
} @else {
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
&:active:not(
|
|
20
|
-
&.is-loading:not(
|
|
19
|
+
&:active:not(.c-chip--disabled, .c-chip--dismissible),
|
|
20
|
+
&.is-loading:not(.c-chip--disabled, .c-chip--dismissible) {
|
|
21
21
|
@if $mode == 'inverse' {
|
|
22
22
|
--active-modifier: var(--dt-color-active-02);
|
|
23
23
|
} @else {
|
|
@@ -44,6 +44,8 @@
|
|
|
44
44
|
--chip-min-width: calc(var(--dt-spacing-g) + var(--dt-spacing-b));
|
|
45
45
|
--chip-gap: var(--dt-spacing-b);
|
|
46
46
|
--chip-dismissible-offset: calc(var(--chip-gap) / -2); // ensures the spacing between the text and close icon is 4px
|
|
47
|
+
--chip-cursor: pointer;
|
|
48
|
+
--chip-close-btn-cursor: pointer;
|
|
47
49
|
|
|
48
50
|
// Pie Webc Icon var that is used to ensure the correctly sized icon passed in a slot
|
|
49
51
|
--icon-display-override: block;
|
|
@@ -62,7 +64,8 @@
|
|
|
62
64
|
border-radius: var(--dt-radius-rounded-e);
|
|
63
65
|
border: 1px solid;
|
|
64
66
|
border-color: var(--chip-border-color);
|
|
65
|
-
cursor:
|
|
67
|
+
cursor: var(--chip-cursor);
|
|
68
|
+
user-select: none;
|
|
66
69
|
min-width: var(--chip-min-width);
|
|
67
70
|
|
|
68
71
|
@include p.font-size(--dt-font-interactive-xs-size);
|
|
@@ -75,7 +78,7 @@
|
|
|
75
78
|
// same as default styles
|
|
76
79
|
}
|
|
77
80
|
|
|
78
|
-
&.c-chip--outline:not(
|
|
81
|
+
&.c-chip--outline:not(.c-chip--disabled, .c-chip--selected) {
|
|
79
82
|
--chip-border-color: var(--dt-color-border-strong);
|
|
80
83
|
}
|
|
81
84
|
|
|
@@ -93,25 +96,6 @@
|
|
|
93
96
|
@include chip-interactive-states('--dt-color-interactive-primary', 'inverse');
|
|
94
97
|
}
|
|
95
98
|
|
|
96
|
-
&.c-chip--dismissible.c-chip--selected {
|
|
97
|
-
padding-inline-end: var(--chip-padding-dismissible);
|
|
98
|
-
padding-block-start: var(--chip-padding-dismissible);
|
|
99
|
-
padding-block-end: var(--chip-padding-dismissible);
|
|
100
|
-
|
|
101
|
-
.c-chip-closeBtn {
|
|
102
|
-
display: inline-flex;
|
|
103
|
-
user-select: none;
|
|
104
|
-
outline: none;
|
|
105
|
-
border: none;
|
|
106
|
-
color: inherit;
|
|
107
|
-
background-color: inherit;
|
|
108
|
-
border-radius: inherit;
|
|
109
|
-
cursor: pointer;
|
|
110
|
-
padding: 0;
|
|
111
|
-
margin-inline-start: var(--chip-dismissible-offset);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
99
|
&.is-loading {
|
|
116
100
|
& > *:not(.c-chip-spinner) {
|
|
117
101
|
visibility: hidden;
|
|
@@ -125,15 +109,40 @@
|
|
|
125
109
|
}
|
|
126
110
|
}
|
|
127
111
|
|
|
128
|
-
|
|
112
|
+
&.c-chip--disabled {
|
|
129
113
|
--chip-bg-color: var(--dt-color-disabled-01);
|
|
130
114
|
--chip-color: var(--dt-color-content-disabled);
|
|
115
|
+
--chip-cursor: not-allowed;
|
|
116
|
+
--chip-close-btn-cursor: not-allowed;
|
|
131
117
|
|
|
132
118
|
&.c-chip--ghost {
|
|
133
119
|
--chip-bg-color: transparent;
|
|
134
120
|
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
&.c-chip--dismissible {
|
|
124
|
+
--chip-cursor: text;
|
|
125
|
+
padding-inline-end: var(--chip-padding-dismissible);
|
|
126
|
+
padding-block-start: var(--chip-padding-dismissible);
|
|
127
|
+
padding-block-end: var(--chip-padding-dismissible);
|
|
128
|
+
user-select: auto;
|
|
135
129
|
|
|
136
|
-
|
|
130
|
+
.c-chip-closeBtn {
|
|
131
|
+
display: inline-flex;
|
|
132
|
+
user-select: none;
|
|
133
|
+
outline: none;
|
|
134
|
+
border: none;
|
|
135
|
+
color: inherit;
|
|
136
|
+
background-color: inherit;
|
|
137
|
+
border-radius: inherit;
|
|
138
|
+
cursor: var(--chip-close-btn-cursor);
|
|
139
|
+
padding: 0;
|
|
140
|
+
margin-inline-start: var(--chip-dismissible-offset);
|
|
141
|
+
|
|
142
|
+
&:focus-visible {
|
|
143
|
+
@include p.focus;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
137
146
|
}
|
|
138
147
|
|
|
139
148
|
&:focus-visible {
|
package/src/index.ts
CHANGED
|
@@ -46,6 +46,19 @@ export class PieChip extends LitElement implements ChipProps {
|
|
|
46
46
|
@property({ type: Object })
|
|
47
47
|
public aria: ChipProps['aria'];
|
|
48
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Hander to prevent click events
|
|
51
|
+
* when the chip is disabled or dismissible
|
|
52
|
+
*
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
private onClickHandler (event: Event) {
|
|
56
|
+
if (this.disabled || this.isDismissible) {
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
event.stopPropagation();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
49
62
|
/**
|
|
50
63
|
* Template for the loading state
|
|
51
64
|
*
|
|
@@ -97,17 +110,21 @@ export class PieChip extends LitElement implements ChipProps {
|
|
|
97
110
|
isLoading,
|
|
98
111
|
isDismissible,
|
|
99
112
|
} = this;
|
|
113
|
+
const showCloseButton = isDismissible && isSelected;
|
|
100
114
|
|
|
101
115
|
const classes = {
|
|
102
116
|
'c-chip': true,
|
|
103
117
|
[`c-chip--${variant}`]: true,
|
|
104
118
|
'c-chip--selected': isSelected,
|
|
105
|
-
'c-chip--dismissible':
|
|
119
|
+
'c-chip--dismissible': showCloseButton,
|
|
120
|
+
'c-chip--disabled': disabled,
|
|
106
121
|
'is-loading': isLoading,
|
|
107
122
|
};
|
|
108
123
|
|
|
109
124
|
return html`
|
|
110
125
|
<div
|
|
126
|
+
role="${ifDefined(showCloseButton ? undefined : 'button')}"
|
|
127
|
+
tabindex="${ifDefined(showCloseButton ? undefined : '0')}"
|
|
111
128
|
aria-atomic="true"
|
|
112
129
|
aria-busy="${isLoading}"
|
|
113
130
|
aria-current="${isSelected}"
|
|
@@ -115,13 +132,11 @@ export class PieChip extends LitElement implements ChipProps {
|
|
|
115
132
|
aria-live="polite"
|
|
116
133
|
class=${classMap(classes)}
|
|
117
134
|
data-test-id="pie-chip"
|
|
118
|
-
|
|
119
|
-
role="button"
|
|
120
|
-
?disabled="${disabled}">
|
|
135
|
+
@click="${this.onClickHandler}">
|
|
121
136
|
<slot name="icon"></slot>
|
|
122
137
|
${isLoading ? this.renderSpinner() : nothing}
|
|
123
138
|
<slot></slot>
|
|
124
|
-
${
|
|
139
|
+
${showCloseButton ? this.renderCloseButton() : nothing}
|
|
125
140
|
</div>`;
|
|
126
141
|
}
|
|
127
142
|
|