@justeattakeaway/pie-switch 2.0.6 → 2.1.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 +9 -4
- package/dist/index.d.ts +2 -2
- package/dist/index.js +75 -72
- package/dist/react.d.ts +2 -2
- package/package.json +4 -4
- package/src/index.ts +15 -5
- package/src/switch.scss +34 -12
package/custom-elements.json
CHANGED
|
@@ -139,6 +139,15 @@
|
|
|
139
139
|
},
|
|
140
140
|
"privacy": "public"
|
|
141
141
|
},
|
|
142
|
+
{
|
|
143
|
+
"kind": "field",
|
|
144
|
+
"name": "_isAnimationAllowed",
|
|
145
|
+
"type": {
|
|
146
|
+
"text": "boolean"
|
|
147
|
+
},
|
|
148
|
+
"privacy": "private",
|
|
149
|
+
"default": "false"
|
|
150
|
+
},
|
|
142
151
|
{
|
|
143
152
|
"kind": "method",
|
|
144
153
|
"name": "handleFormAssociation",
|
|
@@ -265,10 +274,6 @@
|
|
|
265
274
|
{
|
|
266
275
|
"name": "FormControlMixin",
|
|
267
276
|
"package": "@justeattakeaway/pie-webc-core"
|
|
268
|
-
},
|
|
269
|
-
{
|
|
270
|
-
"name": "RtlMixin",
|
|
271
|
-
"package": "@justeattakeaway/pie-webc-core"
|
|
272
277
|
}
|
|
273
278
|
],
|
|
274
279
|
"superclass": {
|
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,6 @@ import { FormControlInterface } from '@justeattakeaway/pie-webc-core';
|
|
|
4
4
|
import { GenericConstructor } from '@justeattakeaway/pie-webc-core';
|
|
5
5
|
import { PieElement } from '@justeattakeaway/pie-webc-core/src/internals/PieElement';
|
|
6
6
|
import { PIEInputElement } from '@justeattakeaway/pie-webc-core';
|
|
7
|
-
import { RTLInterface } from '@justeattakeaway/pie-webc-core';
|
|
8
7
|
import { TemplateResult } from 'lit-html';
|
|
9
8
|
|
|
10
9
|
declare type AriaProps = {
|
|
@@ -40,6 +39,7 @@ export declare class PieSwitch extends PieSwitch_base implements SwitchProps, PI
|
|
|
40
39
|
disabled: boolean;
|
|
41
40
|
private input;
|
|
42
41
|
focusTarget: HTMLElement;
|
|
42
|
+
private _isAnimationAllowed;
|
|
43
43
|
protected firstUpdated(): void;
|
|
44
44
|
protected updated(): void;
|
|
45
45
|
static styles: CSSResult;
|
|
@@ -91,7 +91,7 @@ export declare class PieSwitch extends PieSwitch_base implements SwitchProps, PI
|
|
|
91
91
|
render(): TemplateResult<1>;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
declare const PieSwitch_base: GenericConstructor<FormControlInterface> &
|
|
94
|
+
declare const PieSwitch_base: GenericConstructor<FormControlInterface> & typeof PieElement;
|
|
95
95
|
|
|
96
96
|
export declare interface SwitchProps {
|
|
97
97
|
/**
|
package/dist/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { LitElement as Ft, nothing as L, html as N, unsafeCSS as It } from "lit";
|
|
2
|
-
import { property as y, query as dt } from "lit/decorators.js";
|
|
3
|
-
import { classMap as
|
|
4
|
-
import { ifDefined as
|
|
5
|
-
import { FormControlMixin as
|
|
2
|
+
import { property as y, query as dt, state as St } from "lit/decorators.js";
|
|
3
|
+
import { classMap as Vt } from "lit/directives/class-map.js";
|
|
4
|
+
import { ifDefined as Tt } from "lit/directives/if-defined.js";
|
|
5
|
+
import { FormControlMixin as Lt, wrapNativeEvent as Nt, validPropertyValues as Ot, safeCustomElement as Pt } from "@justeattakeaway/pie-webc-core";
|
|
6
6
|
import "@justeattakeaway/pie-icons-webc/dist/IconCheck.js";
|
|
7
7
|
const O = class O extends Ft {
|
|
8
8
|
willUpdate() {
|
|
9
9
|
this.getAttribute("v") || this.setAttribute("v", O.v);
|
|
10
10
|
}
|
|
11
11
|
};
|
|
12
|
-
O.v = "2.0
|
|
12
|
+
O.v = "2.1.0";
|
|
13
13
|
let q = O;
|
|
14
14
|
(function() {
|
|
15
15
|
(function(n) {
|
|
@@ -65,8 +65,8 @@ let q = O;
|
|
|
65
65
|
get() {
|
|
66
66
|
return a;
|
|
67
67
|
},
|
|
68
|
-
set(
|
|
69
|
-
a =
|
|
68
|
+
set(o) {
|
|
69
|
+
a = o, e.isConnected ? e.setAttribute(r, o) : A.set(e, t);
|
|
70
70
|
}
|
|
71
71
|
});
|
|
72
72
|
}
|
|
@@ -77,18 +77,18 @@ let q = O;
|
|
|
77
77
|
}
|
|
78
78
|
const J = (e, t = !1) => {
|
|
79
79
|
const i = document.createTreeWalker(e, NodeFilter.SHOW_ELEMENT, {
|
|
80
|
-
acceptNode(
|
|
81
|
-
return c.has(
|
|
80
|
+
acceptNode(o) {
|
|
81
|
+
return c.has(o) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
|
|
82
82
|
}
|
|
83
83
|
});
|
|
84
84
|
let a = i.nextNode();
|
|
85
85
|
const r = !t || e.disabled;
|
|
86
86
|
for (; a; )
|
|
87
|
-
a.formDisabledCallback && r &&
|
|
87
|
+
a.formDisabledCallback && r && D(a, e.disabled), a = i.nextNode();
|
|
88
88
|
}, Q = { attributes: !0, attributeFilter: ["disabled", "name"] }, I = T() ? new MutationObserver((e) => {
|
|
89
89
|
for (const t of e) {
|
|
90
90
|
const i = t.target;
|
|
91
|
-
if (t.attributeName === "disabled" && (i.constructor.formAssociated ?
|
|
91
|
+
if (t.attributeName === "disabled" && (i.constructor.formAssociated ? D(i, i.hasAttribute("disabled")) : i.localName === "fieldset" && J(i)), t.attributeName === "name" && i.constructor.formAssociated) {
|
|
92
92
|
const a = c.get(i), r = B.get(i);
|
|
93
93
|
a.setFormValue(r);
|
|
94
94
|
}
|
|
@@ -96,21 +96,21 @@ let q = O;
|
|
|
96
96
|
}) : {};
|
|
97
97
|
function _(e) {
|
|
98
98
|
e.forEach((t) => {
|
|
99
|
-
const { addedNodes: i, removedNodes: a } = t, r = Array.from(i),
|
|
100
|
-
r.forEach((
|
|
99
|
+
const { addedNodes: i, removedNodes: a } = t, r = Array.from(i), o = Array.from(a);
|
|
100
|
+
r.forEach((s) => {
|
|
101
101
|
var u;
|
|
102
|
-
if (c.has(
|
|
103
|
-
const d = A.get(
|
|
102
|
+
if (c.has(s) && s.constructor.formAssociated && Y(s), A.has(s)) {
|
|
103
|
+
const d = A.get(s);
|
|
104
104
|
Object.keys(F).filter((b) => d[b] !== null).forEach((b) => {
|
|
105
|
-
|
|
106
|
-
}), A.delete(
|
|
105
|
+
s.setAttribute(F[b], d[b]);
|
|
106
|
+
}), A.delete(s);
|
|
107
107
|
}
|
|
108
|
-
if (C.has(
|
|
109
|
-
const d = C.get(
|
|
110
|
-
|
|
108
|
+
if (C.has(s)) {
|
|
109
|
+
const d = C.get(s);
|
|
110
|
+
s.setAttribute("internals-valid", d.validity.valid.toString()), s.setAttribute("internals-invalid", (!d.validity.valid).toString()), s.setAttribute("aria-invalid", (!d.validity.valid).toString()), C.delete(s);
|
|
111
111
|
}
|
|
112
|
-
if (
|
|
113
|
-
const d = g.get(
|
|
112
|
+
if (s.localName === "form") {
|
|
113
|
+
const d = g.get(s), w = document.createTreeWalker(s, NodeFilter.SHOW_ELEMENT, {
|
|
114
114
|
acceptNode(z) {
|
|
115
115
|
return c.has(z) && z.constructor.formAssociated && !(d && d.has(z)) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
|
|
116
116
|
}
|
|
@@ -119,10 +119,10 @@ let q = O;
|
|
|
119
119
|
for (; b; )
|
|
120
120
|
Y(b), b = w.nextNode();
|
|
121
121
|
}
|
|
122
|
-
|
|
123
|
-
}),
|
|
124
|
-
const u = c.get(
|
|
125
|
-
u && m.get(u) && X(u), P.has(
|
|
122
|
+
s.localName === "fieldset" && ((u = I.observe) === null || u === void 0 || u.call(I, s, Q), J(s, !0));
|
|
123
|
+
}), o.forEach((s) => {
|
|
124
|
+
const u = c.get(s);
|
|
125
|
+
u && m.get(u) && X(u), P.has(s) && P.get(s).disconnect();
|
|
126
126
|
});
|
|
127
127
|
});
|
|
128
128
|
}
|
|
@@ -144,7 +144,7 @@ let q = O;
|
|
|
144
144
|
const $ = {
|
|
145
145
|
childList: !0,
|
|
146
146
|
subtree: !0
|
|
147
|
-
},
|
|
147
|
+
}, D = (e, t) => {
|
|
148
148
|
e.toggleAttribute("internals-disabled", t), t ? e.setAttribute("aria-disabled", "true") : e.removeAttribute("aria-disabled"), e.formDisabledCallback && e.formDisabledCallback.apply(e, [t]);
|
|
149
149
|
}, X = (e) => {
|
|
150
150
|
m.get(e).forEach((i) => {
|
|
@@ -163,7 +163,7 @@ let q = O;
|
|
|
163
163
|
t[0].id || (i = `${t[0].htmlFor}_Label`, t[0].id = i), e.setAttribute("aria-labelledby", i);
|
|
164
164
|
}
|
|
165
165
|
}, S = (e) => {
|
|
166
|
-
const t = Array.from(e.elements).filter((
|
|
166
|
+
const t = Array.from(e.elements).filter((o) => !o.tagName.includes("-") && o.validity).map((o) => o.validity.valid), i = g.get(e) || [], a = Array.from(i).filter((o) => o.isConnected).map((o) => c.get(o).validity.valid), r = [...t, ...a].includes(!1);
|
|
167
167
|
e.toggleAttribute("internals-invalid", r), e.toggleAttribute("internals-valid", !r);
|
|
168
168
|
}, ft = (e) => {
|
|
169
169
|
S(V(e.target));
|
|
@@ -227,7 +227,7 @@ let q = O;
|
|
|
227
227
|
for (let i in e)
|
|
228
228
|
i !== "valid" && e[i] !== !1 && (t = !1);
|
|
229
229
|
return t;
|
|
230
|
-
},
|
|
230
|
+
}, R = /* @__PURE__ */ new WeakMap();
|
|
231
231
|
function rt(e, t) {
|
|
232
232
|
e.toggleAttribute(t, !0), e.part && e.part.add(t);
|
|
233
233
|
}
|
|
@@ -238,12 +238,12 @@ let q = O;
|
|
|
238
238
|
constructor(t) {
|
|
239
239
|
if (super(), !t || !t.tagName || t.tagName.indexOf("-") === -1)
|
|
240
240
|
throw new TypeError("Illegal constructor");
|
|
241
|
-
|
|
241
|
+
R.set(this, t);
|
|
242
242
|
}
|
|
243
243
|
add(t) {
|
|
244
244
|
if (!/^--/.test(t) || typeof t != "string")
|
|
245
245
|
throw new DOMException(`Failed to execute 'add' on 'CustomStateSet': The specified value ${t} must start with '--'.`);
|
|
246
|
-
const i = super.add(t), a =
|
|
246
|
+
const i = super.add(t), a = R.get(this), r = `state${t}`;
|
|
247
247
|
return a.isConnected ? rt(a, r) : setTimeout(() => {
|
|
248
248
|
rt(a, r);
|
|
249
249
|
}), i;
|
|
@@ -254,13 +254,13 @@ let q = O;
|
|
|
254
254
|
super.clear();
|
|
255
255
|
}
|
|
256
256
|
delete(t) {
|
|
257
|
-
const i = super.delete(t), a =
|
|
257
|
+
const i = super.delete(t), a = R.get(this);
|
|
258
258
|
return a.isConnected ? (a.toggleAttribute(`state${t}`, !1), a.part && a.part.remove(`state${t}`)) : setTimeout(() => {
|
|
259
259
|
a.toggleAttribute(`state${t}`, !1), a.part && a.part.remove(`state${t}`);
|
|
260
260
|
}), i;
|
|
261
261
|
}
|
|
262
262
|
}
|
|
263
|
-
function
|
|
263
|
+
function ot(e, t, i, a) {
|
|
264
264
|
if (typeof t == "function" ? e !== t || !a : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
265
265
|
return i === "m" ? a : i === "a" ? a.call(e) : a ? a.value : t.get(e);
|
|
266
266
|
}
|
|
@@ -279,10 +279,10 @@ let q = O;
|
|
|
279
279
|
Object.freeze(this);
|
|
280
280
|
}
|
|
281
281
|
get length() {
|
|
282
|
-
return
|
|
282
|
+
return ot(this, x, "f").length;
|
|
283
283
|
}
|
|
284
284
|
[(x = /* @__PURE__ */ new WeakMap(), Symbol.iterator)]() {
|
|
285
|
-
return
|
|
285
|
+
return ot(this, x, "f")[Symbol.iterator]();
|
|
286
286
|
}
|
|
287
287
|
item(t) {
|
|
288
288
|
return this[t] == null ? null : this[t];
|
|
@@ -296,26 +296,26 @@ let q = O;
|
|
|
296
296
|
HTMLFormElement.prototype.checkValidity = i;
|
|
297
297
|
const t = HTMLFormElement.prototype.reportValidity;
|
|
298
298
|
HTMLFormElement.prototype.reportValidity = a;
|
|
299
|
-
function i(...
|
|
300
|
-
let
|
|
301
|
-
return it(this,
|
|
299
|
+
function i(...o) {
|
|
300
|
+
let s = e.apply(this, o);
|
|
301
|
+
return it(this, s, "checkValidity");
|
|
302
302
|
}
|
|
303
|
-
function a(...
|
|
304
|
-
let
|
|
305
|
-
return it(this,
|
|
303
|
+
function a(...o) {
|
|
304
|
+
let s = t.apply(this, o);
|
|
305
|
+
return it(this, s, "reportValidity");
|
|
306
306
|
}
|
|
307
307
|
const { get: r } = Object.getOwnPropertyDescriptor(HTMLFormElement.prototype, "elements");
|
|
308
308
|
Object.defineProperty(HTMLFormElement.prototype, "elements", {
|
|
309
|
-
get(...
|
|
310
|
-
const
|
|
309
|
+
get(...o) {
|
|
310
|
+
const s = r.call(this, ...o), u = Array.from(g.get(this) || []);
|
|
311
311
|
if (u.length === 0)
|
|
312
|
-
return
|
|
313
|
-
const d = Array.from(
|
|
312
|
+
return s;
|
|
313
|
+
const d = Array.from(s).concat(u).sort((w, b) => w.compareDocumentPosition ? w.compareDocumentPosition(b) & 2 ? 1 : -1 : 0);
|
|
314
314
|
return new xt(d);
|
|
315
315
|
}
|
|
316
316
|
});
|
|
317
317
|
}
|
|
318
|
-
class
|
|
318
|
+
class st {
|
|
319
319
|
static get isPolyfilled() {
|
|
320
320
|
return !0;
|
|
321
321
|
}
|
|
@@ -370,8 +370,8 @@ let q = O;
|
|
|
370
370
|
}
|
|
371
371
|
} else t != null && t instanceof FormData && Array.from(t).reverse().forEach(([a, r]) => {
|
|
372
372
|
if (typeof r == "string") {
|
|
373
|
-
const
|
|
374
|
-
|
|
373
|
+
const o = Z(i, this);
|
|
374
|
+
o.name = a, o.value = r;
|
|
375
375
|
}
|
|
376
376
|
});
|
|
377
377
|
B.set(i, t);
|
|
@@ -381,13 +381,13 @@ let q = O;
|
|
|
381
381
|
if (v(r, "Failed to execute 'setValidity' on 'ElementInternals': The target element is not a form-associated custom element."), !t)
|
|
382
382
|
throw new TypeError("Failed to execute 'setValidity' on 'ElementInternals': 1 argument required, but only 0 present.");
|
|
383
383
|
j.set(this, a);
|
|
384
|
-
const
|
|
384
|
+
const o = h.get(this), s = {};
|
|
385
385
|
for (const w in t)
|
|
386
|
-
|
|
387
|
-
Object.keys(
|
|
388
|
-
const u = Object.assign(Object.assign({},
|
|
386
|
+
s[w] = t[w];
|
|
387
|
+
Object.keys(s).length === 0 && yt(o);
|
|
388
|
+
const u = Object.assign(Object.assign({}, o), s);
|
|
389
389
|
delete u.valid;
|
|
390
|
-
const { valid: d } = Et(
|
|
390
|
+
const { valid: d } = Et(o, u, this.form);
|
|
391
391
|
if (!d && !i)
|
|
392
392
|
throw new DOMException("Failed to execute 'setValidity' on 'ElementInternals': The second argument should not be empty if one or more flags in the first argument are true.");
|
|
393
393
|
E.set(this, d ? "" : i), r.isConnected ? (r.toggleAttribute("internals-invalid", !d), r.toggleAttribute("internals-valid", d), r.setAttribute("aria-invalid", `${!d}`)) : C.set(r, this);
|
|
@@ -442,13 +442,13 @@ let q = O;
|
|
|
442
442
|
}
|
|
443
443
|
function ct(e = !0) {
|
|
444
444
|
if (!nt) {
|
|
445
|
-
if (nt = !0, typeof window < "u" && (window.ElementInternals =
|
|
445
|
+
if (nt = !0, typeof window < "u" && (window.ElementInternals = st), typeof CustomElementRegistry < "u") {
|
|
446
446
|
const t = CustomElementRegistry.prototype.define;
|
|
447
447
|
CustomElementRegistry.prototype.define = function(i, a, r) {
|
|
448
448
|
if (a.formAssociated) {
|
|
449
|
-
const
|
|
449
|
+
const o = a.prototype.connectedCallback;
|
|
450
450
|
a.prototype.connectedCallback = function() {
|
|
451
|
-
G.has(this) || (G.set(this, !0), this.hasAttribute("disabled") &&
|
|
451
|
+
G.has(this) || (G.set(this, !0), this.hasAttribute("disabled") && D(this, !0)), o != null && o.apply(this), at(this);
|
|
452
452
|
};
|
|
453
453
|
}
|
|
454
454
|
t.call(this, i, a, r);
|
|
@@ -461,13 +461,13 @@ let q = O;
|
|
|
461
461
|
} else return {};
|
|
462
462
|
if (c.has(this))
|
|
463
463
|
throw new DOMException("DOMException: Failed to execute 'attachInternals' on 'HTMLElement': ElementInternals for the specified element was already attached.");
|
|
464
|
-
return new
|
|
464
|
+
return new st(this);
|
|
465
465
|
}), typeof Element < "u") {
|
|
466
466
|
let t = function(...a) {
|
|
467
467
|
const r = i.apply(this, a);
|
|
468
468
|
if (U.set(this, r), T()) {
|
|
469
|
-
const
|
|
470
|
-
window.ShadyDOM ?
|
|
469
|
+
const o = new MutationObserver(_);
|
|
470
|
+
window.ShadyDOM ? o.observe(this, $) : o.observe(r, $), P.set(this, o);
|
|
471
471
|
}
|
|
472
472
|
return r;
|
|
473
473
|
};
|
|
@@ -480,22 +480,22 @@ let q = O;
|
|
|
480
480
|
return !!customElements.polyfillWrapFlushCallback || (Ct() ? typeof window < "u" && !window.CustomStateSet && W(HTMLElement.prototype.attachInternals) : ct(!1)), n.forceCustomStateSetPolyfill = W, n.forceElementInternalsPolyfill = ct, Object.defineProperty(n, "__esModule", { value: !0 }), n;
|
|
481
481
|
})({});
|
|
482
482
|
})();
|
|
483
|
-
const _t = "*,*:after,*:before{box-sizing:inherit}:host{display:block}*,*:before,*:after{cursor:inherit}.c-switch-wrapper{display:inline-flex;align-items:center;gap:var(--dt-spacing-b);vertical-align:top;font-family:var(--dt-font-body-l-family);cursor:pointer}.c-switch-wrapper[disabled]{cursor:not-allowed}.c-switch{--int-states-mixin-bg-color: var(--dt-color-interactive-form);--switch-bg-color--checked: var(--dt-color-interactive-brand);--switch-bg-color--disabled: var(--dt-color-disabled-01);--switch-width: 48px;--switch-height: 24px;--switch-control-size: 20px;--switch-padding: 2px;--switch-radius: var(--dt-radius-rounded-e);--switch-translation: calc(var(--switch-width) - var(--switch-control-size) - 2 * var(--switch-padding));position:relative;display:flex;width:var(--switch-width);height:var(--switch-height);flex-shrink:0;padding:var(--switch-padding);border-radius:var(--switch-radius);background-color:var(--int-states-mixin-bg-color)}
|
|
483
|
+
const _t = "*,*:after,*:before{box-sizing:inherit}:host{display:block}*,*:before,*:after{cursor:inherit}.c-switch-wrapper{display:inline-flex;align-items:center;gap:var(--dt-spacing-b);vertical-align:top;font-family:var(--dt-font-body-l-family);cursor:pointer}.c-switch-wrapper[disabled]{cursor:not-allowed}.c-switch{--int-states-mixin-bg-color: var(--dt-color-interactive-form);--switch-bg-color--checked: var(--dt-color-interactive-brand);--switch-bg-color--disabled: var(--dt-color-disabled-01);--switch-width: 48px;--switch-height: 24px;--switch-control-size: 20px;--switch-padding: 2px;--switch-radius: var(--dt-radius-rounded-e);--switch-translation: calc(var(--switch-width) - var(--switch-control-size) - 2 * var(--switch-padding));position:relative;display:flex;width:var(--switch-width);height:var(--switch-height);flex-shrink:0;padding:var(--switch-padding);border-radius:var(--switch-radius);background-color:var(--int-states-mixin-bg-color)}.c-switch:hover:not(:disabled,.is-disabled,.is-dismissible){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--int-states-mixin-bg-color: hsl(var(--dt-color-interactive-form-h), var(--dt-color-interactive-form-s), calc(var(--dt-color-interactive-form-l) + var(--hover-modifier)))}.c-switch:active:not(:disabled,.is-disabled,.is-dismissible),.c-switch.is-loading:not(:disabled,.is-disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--int-states-mixin-bg-color: hsl(var(--dt-color-interactive-form-h), var(--dt-color-interactive-form-s), calc(var(--dt-color-interactive-form-l) + var(--active-modifier)))}@supports (background-color: color-mix(in srgb,black,white)){.c-switch:hover:not(:disabled,.is-disabled,.is-dismissible){--int-states-mixin-bg-color: color-mix(in srgb, var(--dt-color-hover-01-bg) var(--dt-color-hover-01), var(--dt-color-interactive-form))}.c-switch:active:not(:disabled,.is-disabled,.is-dismissible),.c-switch.is-loading:not(:disabled,.is-disabled){--int-states-mixin-bg-color: color-mix(in srgb, var(--dt-color-active-01-bg) var(--dt-color-active-01), var(--dt-color-interactive-form))}}.c-switch[checked]{--int-states-mixin-bg-color: var(--dt-color-interactive-brand)}.c-switch[checked]:hover:not(:disabled,.is-disabled,.is-dismissible){--hover-modifier: calc(-1 * var(--dt-color-hover-01));--int-states-mixin-bg-color: hsl(var(--dt-color-interactive-brand-h), var(--dt-color-interactive-brand-s), calc(var(--dt-color-interactive-brand-l) + var(--hover-modifier)))}.c-switch[checked]:active:not(:disabled,.is-disabled,.is-dismissible),.c-switch[checked].is-loading:not(:disabled,.is-disabled){--active-modifier: calc(-1 * var(--dt-color-active-01));--int-states-mixin-bg-color: hsl(var(--dt-color-interactive-brand-h), var(--dt-color-interactive-brand-s), calc(var(--dt-color-interactive-brand-l) + var(--active-modifier)))}@supports (background-color: color-mix(in srgb,black,white)){.c-switch[checked]:hover:not(:disabled,.is-disabled,.is-dismissible){--int-states-mixin-bg-color: color-mix(in srgb, var(--dt-color-hover-01-bg) var(--dt-color-hover-01), var(--dt-color-interactive-brand))}.c-switch[checked]:active:not(:disabled,.is-disabled,.is-dismissible),.c-switch[checked].is-loading:not(:disabled,.is-disabled){--int-states-mixin-bg-color: color-mix(in srgb, var(--dt-color-active-01-bg) var(--dt-color-active-01), var(--dt-color-interactive-brand))}}[disabled] .c-switch{--int-states-mixin-bg-color: var(--switch-bg-color--disabled);pointer-events:none}.c-switch:has(.c-switch-input: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-switch-input{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;left:50%;transform:translate(-50%) translateY(-50%);bottom:0}.c-switch-input:disabled{background-color:transparent}.c-switch-control{position:absolute;left:2px;width:var(--switch-control-size);height:var(--switch-control-size);border-radius:var(--switch-radius);background-color:var(--dt-color-interactive-light);padding:var(--switch-padding)}.c-switch-wrapper:dir(rtl) .c-switch-control{position:absolute;left:initial;right:2px}.c-switch-control .c-pieIcon--check{vertical-align:top}.c-switch-input:checked+.c-switch-control{transform:translate(var(--switch-translation))}.c-switch-input:checked+.c-switch-control .c-pieIcon--check{color:var(--dt-color-interactive-brand)}.c-switch-input:disabled~.c-switch-control{color:var(--switch-bg-color--disabled)}.c-switch-input:disabled~.c-switch-control .c-pieIcon--check{color:var(--switch-bg-color--disabled)}.c-switch-label{color:var(--dt-color-content-default)}.c-switch-description{position:absolute;display:block;height:1px;width:1px;overflow:hidden;padding:1px;white-space:nowrap}@media (prefers-reduced-motion: no-preference){.c-switch-wrapper--allow-animation .c-switch{transition:background-color .15s cubic-bezier(.4,0,.9,1) 0s}}@media (prefers-reduced-motion: no-preference){.c-switch-wrapper--allow-animation .c-switch[checked]{transition:background-color .15s cubic-bezier(.4,0,.9,1) 0s}}@media (prefers-reduced-motion: no-preference){.c-switch-wrapper--allow-animation .c-switch-control{transition:transform .15s cubic-bezier(.4,0,.9,1) 0s}}@media (prefers-reduced-motion: no-preference){.c-switch-input:checked+.c-switch-wrapper--allow-animation .c-switch-control{transition:transform .15s cubic-bezier(.4,0,.9,1) 0s}}@media (prefers-reduced-motion: no-preference){.c-switch-input:checked+.c-switch-wrapper--allow-animation .c-switch-control .c-pieIcon--check{transition:color .15s cubic-bezier(.4,0,.9,1) 0s}}@media (prefers-reduced-motion: no-preference){.c-switch-input:disabled~.c-switch-wrapper--allow-animation .c-switch-control .c-pieIcon--check{transition:color .15s cubic-bezier(.4,0,.9,1) 0s}}.c-switch-wrapper:dir(rtl) .c-switch-input:checked+.c-switch-control{transform:translate(calc(-1 * var(--switch-translation)))}", $t = ["leading", "trailing"], Gt = "change", k = {
|
|
484
484
|
checked: !1,
|
|
485
485
|
disabled: !1,
|
|
486
486
|
labelPlacement: "leading",
|
|
487
487
|
required: !1,
|
|
488
488
|
value: "on"
|
|
489
489
|
};
|
|
490
|
-
var
|
|
491
|
-
for (var c = m > 1 ? void 0 : m ?
|
|
490
|
+
var Dt = Object.defineProperty, Rt = Object.getOwnPropertyDescriptor, f = (n, l, h, m) => {
|
|
491
|
+
for (var c = m > 1 ? void 0 : m ? Rt(l, h) : l, E = n.length - 1, M; E >= 0; E--)
|
|
492
492
|
(M = n[E]) && (c = (m ? M(l, h, c) : M(c)) || c);
|
|
493
|
-
return m && c &&
|
|
493
|
+
return m && c && Dt(l, h, c), c;
|
|
494
494
|
};
|
|
495
495
|
const Ht = "pie-switch";
|
|
496
|
-
let p = class extends
|
|
496
|
+
let p = class extends Lt(q) {
|
|
497
497
|
constructor() {
|
|
498
|
-
super(...arguments), this.labelPlacement = k.labelPlacement, this.checked = k.checked, this.required = k.required, this.value = k.value, this.disabled = k.disabled;
|
|
498
|
+
super(...arguments), this.labelPlacement = k.labelPlacement, this.checked = k.checked, this.required = k.required, this.value = k.value, this.disabled = k.disabled, this._isAnimationAllowed = !1;
|
|
499
499
|
}
|
|
500
500
|
firstUpdated() {
|
|
501
501
|
this.handleFormAssociation(), this.input.addEventListener("invalid", (n) => {
|
|
@@ -519,7 +519,7 @@ let p = class extends Tt(Lt(q)) {
|
|
|
519
519
|
const { checked: l } = n == null ? void 0 : n.currentTarget;
|
|
520
520
|
this.checked = l;
|
|
521
521
|
const h = Nt(n);
|
|
522
|
-
this.dispatchEvent(h), this.handleFormAssociation();
|
|
522
|
+
this._isAnimationAllowed || (this._isAnimationAllowed = !0), this.dispatchEvent(h), this.handleFormAssociation();
|
|
523
523
|
}
|
|
524
524
|
/**
|
|
525
525
|
* Returns a boolean value which indicates validity of the value of the component. If the value is invalid, this method also fires the invalid event on the component.
|
|
@@ -589,14 +589,14 @@ let p = class extends Tt(Lt(q)) {
|
|
|
589
589
|
aria: n,
|
|
590
590
|
checked: l,
|
|
591
591
|
disabled: h,
|
|
592
|
-
|
|
593
|
-
|
|
592
|
+
required: m,
|
|
593
|
+
_isAnimationAllowed: c
|
|
594
594
|
} = this;
|
|
595
595
|
return N`
|
|
596
596
|
<label
|
|
597
|
-
class="${
|
|
597
|
+
class="${Vt({
|
|
598
598
|
"c-switch-wrapper": !0,
|
|
599
|
-
"c-switch-wrapper--
|
|
599
|
+
"c-switch-wrapper--allow-animation": c
|
|
600
600
|
})}"
|
|
601
601
|
?disabled=${h}>
|
|
602
602
|
${this.renderSwitchLabel("leading")}
|
|
@@ -609,11 +609,11 @@ let p = class extends Tt(Lt(q)) {
|
|
|
609
609
|
role="switch"
|
|
610
610
|
type="checkbox"
|
|
611
611
|
class="c-switch-input"
|
|
612
|
-
.required=${
|
|
612
|
+
.required=${m}
|
|
613
613
|
.checked="${l}"
|
|
614
614
|
.disabled="${h}"
|
|
615
615
|
@change="${this.handleChange}"
|
|
616
|
-
aria-label="${
|
|
616
|
+
aria-label="${Tt(n == null ? void 0 : n.label)}"
|
|
617
617
|
aria-describedby="${n != null && n.describedBy ? "switch-description" : L}">
|
|
618
618
|
<div class="c-switch-control">
|
|
619
619
|
${l ? N`<icon-check></icon-check>` : L}
|
|
@@ -656,6 +656,9 @@ f([
|
|
|
656
656
|
f([
|
|
657
657
|
dt("label")
|
|
658
658
|
], p.prototype, "focusTarget", 2);
|
|
659
|
+
f([
|
|
660
|
+
St()
|
|
661
|
+
], p.prototype, "_isAnimationAllowed", 2);
|
|
659
662
|
p = f([
|
|
660
663
|
Pt("pie-switch")
|
|
661
664
|
], p);
|
package/dist/react.d.ts
CHANGED
|
@@ -5,7 +5,6 @@ import { GenericConstructor } from '@justeattakeaway/pie-webc-core';
|
|
|
5
5
|
import { PieElement } from '@justeattakeaway/pie-webc-core/src/internals/PieElement';
|
|
6
6
|
import { PIEInputElement } from '@justeattakeaway/pie-webc-core';
|
|
7
7
|
import * as React_2 from 'react';
|
|
8
|
-
import { RTLInterface } from '@justeattakeaway/pie-webc-core';
|
|
9
8
|
import { TemplateResult } from 'lit-html';
|
|
10
9
|
|
|
11
10
|
declare type AriaProps = {
|
|
@@ -43,6 +42,7 @@ declare class PieSwitch_2 extends PieSwitch_base implements SwitchProps, PIEInpu
|
|
|
43
42
|
disabled: boolean;
|
|
44
43
|
private input;
|
|
45
44
|
focusTarget: HTMLElement;
|
|
45
|
+
private _isAnimationAllowed;
|
|
46
46
|
protected firstUpdated(): void;
|
|
47
47
|
protected updated(): void;
|
|
48
48
|
static styles: CSSResult;
|
|
@@ -94,7 +94,7 @@ declare class PieSwitch_2 extends PieSwitch_base implements SwitchProps, PIEInpu
|
|
|
94
94
|
render(): TemplateResult<1>;
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
declare const PieSwitch_base: GenericConstructor<FormControlInterface> &
|
|
97
|
+
declare const PieSwitch_base: GenericConstructor<FormControlInterface> & typeof PieElement;
|
|
98
98
|
|
|
99
99
|
declare type PieSwitchEvents = {
|
|
100
100
|
onInvalid?: (event: Event) => void;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@justeattakeaway/pie-switch",
|
|
3
3
|
"description": "PIE Design System Switch built using Web Components",
|
|
4
|
-
"version": "2.0
|
|
4
|
+
"version": "2.1.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/justeattakeaway/pie",
|
|
@@ -41,13 +41,13 @@
|
|
|
41
41
|
"@custom-elements-manifest/analyzer": "0.9.0",
|
|
42
42
|
"@justeattakeaway/pie-components-config": "0.21.0",
|
|
43
43
|
"@justeattakeaway/pie-css": "0.19.0",
|
|
44
|
-
"@justeattakeaway/pie-monorepo-utils": "0.
|
|
44
|
+
"@justeattakeaway/pie-monorepo-utils": "0.7.0",
|
|
45
45
|
"@justeattakeaway/pie-wrapper-react": "0.14.3",
|
|
46
46
|
"cem-plugin-module-file-extensions": "0.0.5"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@justeattakeaway/pie-icons-webc": "1.14.
|
|
50
|
-
"@justeattakeaway/pie-webc-core": "1.
|
|
49
|
+
"@justeattakeaway/pie-icons-webc": "1.14.2",
|
|
50
|
+
"@justeattakeaway/pie-webc-core": "1.1.0",
|
|
51
51
|
"element-internals-polyfill": "1.3.11"
|
|
52
52
|
},
|
|
53
53
|
"volta": {
|
package/src/index.ts
CHANGED
|
@@ -2,14 +2,17 @@ import {
|
|
|
2
2
|
html, unsafeCSS, nothing,
|
|
3
3
|
} from 'lit';
|
|
4
4
|
import { PieElement } from '@justeattakeaway/pie-webc-core/src/internals/PieElement';
|
|
5
|
-
import { property, query } from 'lit/decorators.js';
|
|
5
|
+
import { property, query, state } from 'lit/decorators.js';
|
|
6
6
|
import { classMap } from 'lit/directives/class-map.js';
|
|
7
7
|
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
8
8
|
import 'element-internals-polyfill';
|
|
9
9
|
|
|
10
10
|
import {
|
|
11
|
-
|
|
11
|
+
validPropertyValues,
|
|
12
|
+
FormControlMixin,
|
|
13
|
+
wrapNativeEvent,
|
|
12
14
|
safeCustomElement,
|
|
15
|
+
type PIEInputElement,
|
|
13
16
|
} from '@justeattakeaway/pie-webc-core';
|
|
14
17
|
import '@justeattakeaway/pie-icons-webc/dist/IconCheck.js';
|
|
15
18
|
|
|
@@ -26,7 +29,7 @@ const componentSelector = 'pie-switch';
|
|
|
26
29
|
* @event {CustomEvent} change - when the switch checked state is changed.
|
|
27
30
|
*/
|
|
28
31
|
@safeCustomElement('pie-switch')
|
|
29
|
-
export class PieSwitch extends FormControlMixin(
|
|
32
|
+
export class PieSwitch extends FormControlMixin(PieElement) implements SwitchProps, PIEInputElement {
|
|
30
33
|
@property({ type: String })
|
|
31
34
|
public label: SwitchProps['label'];
|
|
32
35
|
|
|
@@ -58,6 +61,9 @@ export class PieSwitch extends FormControlMixin(RtlMixin(PieElement)) implements
|
|
|
58
61
|
@query('label')
|
|
59
62
|
public focusTarget!: HTMLElement;
|
|
60
63
|
|
|
64
|
+
@state()
|
|
65
|
+
private _isAnimationAllowed = false;
|
|
66
|
+
|
|
61
67
|
protected firstUpdated (): void {
|
|
62
68
|
this.handleFormAssociation();
|
|
63
69
|
// This ensures that invalid events triggered by checkValidity() are propagated to the custom element
|
|
@@ -101,6 +107,10 @@ export class PieSwitch extends FormControlMixin(RtlMixin(PieElement)) implements
|
|
|
101
107
|
this.checked = checked;
|
|
102
108
|
const changedEvent = wrapNativeEvent(event);
|
|
103
109
|
|
|
110
|
+
if (!this._isAnimationAllowed) {
|
|
111
|
+
this._isAnimationAllowed = true;
|
|
112
|
+
}
|
|
113
|
+
|
|
104
114
|
this.dispatchEvent(changedEvent);
|
|
105
115
|
this.handleFormAssociation();
|
|
106
116
|
}
|
|
@@ -189,13 +199,13 @@ export class PieSwitch extends FormControlMixin(RtlMixin(PieElement)) implements
|
|
|
189
199
|
aria,
|
|
190
200
|
checked,
|
|
191
201
|
disabled,
|
|
192
|
-
isRTL,
|
|
193
202
|
required,
|
|
203
|
+
_isAnimationAllowed,
|
|
194
204
|
} = this;
|
|
195
205
|
|
|
196
206
|
const classes = {
|
|
197
207
|
'c-switch-wrapper': true,
|
|
198
|
-
'c-switch-wrapper--
|
|
208
|
+
'c-switch-wrapper--allow-animation': _isAnimationAllowed,
|
|
199
209
|
};
|
|
200
210
|
|
|
201
211
|
return html`
|
package/src/switch.scss
CHANGED
|
@@ -49,15 +49,11 @@
|
|
|
49
49
|
border-radius: var(--switch-radius);
|
|
50
50
|
background-color: var(--int-states-mixin-bg-color);
|
|
51
51
|
|
|
52
|
-
@include switch-transition(background-color);
|
|
53
|
-
|
|
54
52
|
@include p.interactive-states('--dt-color-interactive-form');
|
|
55
53
|
|
|
56
54
|
&[checked] {
|
|
57
55
|
--int-states-mixin-bg-color: var(--dt-color-interactive-brand);
|
|
58
56
|
|
|
59
|
-
@include switch-transition(background-color);
|
|
60
|
-
|
|
61
57
|
@include p.interactive-states('--dt-color-interactive-brand');
|
|
62
58
|
}
|
|
63
59
|
|
|
@@ -93,14 +89,13 @@
|
|
|
93
89
|
.c-switch-control {
|
|
94
90
|
position: absolute;
|
|
95
91
|
left: 2px;
|
|
96
|
-
@include switch-transition(transform);
|
|
97
92
|
width: var(--switch-control-size);
|
|
98
93
|
height: var(--switch-control-size);
|
|
99
94
|
border-radius: var(--switch-radius);
|
|
100
95
|
background-color: var(--dt-color-interactive-light);
|
|
101
96
|
padding: var(--switch-padding);
|
|
102
97
|
|
|
103
|
-
.c-switch-wrapper
|
|
98
|
+
.c-switch-wrapper:dir(rtl) & {
|
|
104
99
|
position: absolute;
|
|
105
100
|
left: initial;
|
|
106
101
|
right: 2px;
|
|
@@ -111,11 +106,9 @@
|
|
|
111
106
|
}
|
|
112
107
|
|
|
113
108
|
.c-switch-input:checked + & {
|
|
114
|
-
@include switch-transition(transform);
|
|
115
109
|
transform: translateX(var(--switch-translation));
|
|
116
110
|
|
|
117
111
|
.c-pieIcon--check {
|
|
118
|
-
@include switch-transition(color);
|
|
119
112
|
color: var(--dt-color-interactive-brand);
|
|
120
113
|
}
|
|
121
114
|
}
|
|
@@ -124,7 +117,6 @@
|
|
|
124
117
|
color: var(--switch-bg-color--disabled);
|
|
125
118
|
|
|
126
119
|
.c-pieIcon--check {
|
|
127
|
-
@include switch-transition(color);
|
|
128
120
|
color: var(--switch-bg-color--disabled);
|
|
129
121
|
}
|
|
130
122
|
}
|
|
@@ -139,9 +131,39 @@
|
|
|
139
131
|
@include p.visually-hidden;
|
|
140
132
|
}
|
|
141
133
|
|
|
142
|
-
|
|
143
|
-
|
|
134
|
+
|
|
135
|
+
.c-switch-wrapper--allow-animation {
|
|
136
|
+
/* stylelint-disable-next-line no-descending-specificity */
|
|
137
|
+
.c-switch {
|
|
138
|
+
@include switch-transition(background-color);
|
|
139
|
+
|
|
140
|
+
&[checked] {
|
|
141
|
+
@include switch-transition(background-color);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* stylelint-disable-next-line no-descending-specificity */
|
|
146
|
+
.c-switch-control {
|
|
144
147
|
@include switch-transition(transform);
|
|
145
|
-
|
|
148
|
+
|
|
149
|
+
.c-switch-input:checked + & {
|
|
150
|
+
@include switch-transition(transform);
|
|
151
|
+
|
|
152
|
+
.c-pieIcon--check {
|
|
153
|
+
@include switch-transition(color);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.c-switch-input:disabled ~ & {
|
|
158
|
+
.c-pieIcon--check {
|
|
159
|
+
@include switch-transition(color);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
146
162
|
}
|
|
147
163
|
}
|
|
164
|
+
|
|
165
|
+
.c-switch-wrapper:dir(rtl) {
|
|
166
|
+
.c-switch-input:checked + .c-switch-control {
|
|
167
|
+
transform: translateX(calc(-1 * var(--switch-translation)));
|
|
168
|
+
}
|
|
169
|
+
}
|