@justeattakeaway/pie-checkbox 0.6.0 → 0.7.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.
@@ -117,9 +117,6 @@
117
117
  {
118
118
  "kind": "field",
119
119
  "name": "required",
120
- "type": {
121
- "text": "CheckboxProps['required'] | undefined"
122
- },
123
120
  "privacy": "public",
124
121
  "attribute": "required",
125
122
  "reflects": true
@@ -127,9 +124,6 @@
127
124
  {
128
125
  "kind": "field",
129
126
  "name": "indeterminate",
130
- "type": {
131
- "text": "CheckboxProps['indeterminate'] | undefined"
132
- },
133
127
  "privacy": "public",
134
128
  "attribute": "indeterminate",
135
129
  "reflects": true
@@ -163,9 +157,6 @@
163
157
  {
164
158
  "kind": "field",
165
159
  "name": "status",
166
- "type": {
167
- "text": "CheckboxProps['status'] | undefined"
168
- },
169
160
  "privacy": "public",
170
161
  "attribute": "status"
171
162
  },
@@ -282,16 +273,10 @@
282
273
  },
283
274
  {
284
275
  "name": "required",
285
- "type": {
286
- "text": "CheckboxProps['required'] | undefined"
287
- },
288
276
  "fieldName": "required"
289
277
  },
290
278
  {
291
279
  "name": "indeterminate",
292
- "type": {
293
- "text": "CheckboxProps['indeterminate'] | undefined"
294
- },
295
280
  "fieldName": "indeterminate"
296
281
  },
297
282
  {
@@ -310,9 +295,6 @@
310
295
  },
311
296
  {
312
297
  "name": "status",
313
- "type": {
314
- "text": "CheckboxProps['status'] | undefined"
315
- },
316
298
  "fieldName": "status"
317
299
  }
318
300
  ],
package/dist/index.d.ts CHANGED
@@ -80,12 +80,12 @@ export declare class PieCheckbox extends PieCheckbox_base implements CheckboxPro
80
80
  checked: boolean;
81
81
  defaultChecked: boolean;
82
82
  disabled?: CheckboxProps['disabled'];
83
- required?: CheckboxProps['required'];
84
- indeterminate?: CheckboxProps['indeterminate'];
83
+ required: boolean;
84
+ indeterminate: boolean;
85
85
  aria: CheckboxProps['aria'];
86
86
  private checkbox;
87
87
  assistiveText?: CheckboxProps['assistiveText'];
88
- status?: CheckboxProps['status'];
88
+ status: "default" | "error" | "success";
89
89
  /**
90
90
  * (Read-only) returns a ValidityState with the validity states that this element is in.
91
91
  * https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement/validity
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
- import { LitElement as y, html as f, nothing as p, unsafeCSS as g } from "lit";
2
- import { property as i, query as C } from "lit/decorators.js";
3
- import { ifDefined as m } from "lit/directives/if-defined.js";
4
- import { live as $ } from "lit/directives/live.js";
5
- import { FormControlMixin as F, RtlMixin as E, wrapNativeEvent as S, validPropertyValues as q, defineCustomElement as A } from "@justeattakeaway/pie-webc-core";
1
+ import { LitElement as g, html as u, nothing as h, unsafeCSS as w } from "lit";
2
+ import { property as c, query as $ } from "lit/decorators.js";
3
+ import { ifDefined as f } from "lit/directives/if-defined.js";
4
+ import { live as x } from "lit/directives/live.js";
5
+ import { FormControlMixin as C, RtlMixin as F, wrapNativeEvent as E, validPropertyValues as S, defineCustomElement as q } from "@justeattakeaway/pie-webc-core";
6
6
  import "@justeattakeaway/pie-assistive-text";
7
- const O = `*,*:after,*:before{box-sizing:inherit}
8
- `, P = ["default", "success", "error"], n = {
7
+ const A = `*,*:after,*:before{box-sizing:inherit}@keyframes checkboxCheck{0%{width:0;height:0;border-color:#fff;transform:translateZ(0) rotate(45deg)}33%{width:8px;height:0;transform:translateZ(0) rotate(45deg)}to{width:8px;height:16px;border-color:#fff;border-bottom-right-radius:2px;transform:translate3d(0,-16px,0) rotate(45deg)}}@keyframes scaleDown{0%{transform:scale(.7)}to{transform:scale(0)}}@keyframes scaleUp{0%{transform:scale(0)}33%{transform:scale(.5)}to{transform:scale(1)}}.c-checkbox-tick{content:"";display:flex;flex:0 0 auto;width:var(--checkbox-width);height:var(--checkbox-height);margin:var(--checkbox-margin);border:1px solid var(--checkbox-border-color);border-radius:var(--checkbox-radius);background-color:var(--checkbox-bg-color)}@media (prefers-reduced-motion: no-preference){.c-checkbox-tick{transition:background-color var(--dt-motion-timing-100) var(--checkbox-motion-easing);animation:scaleDown var(--dt-motion-timing-100) var(--checkbox-motion-easing)}}.c-checkbox-tick[data-pie-disabled]{--checkbox-bg-color: var(--dt-color-container-strong);--checkbox-border-color: var(--dt-color-disabled-01)}.c-checkbox-tick[data-pie-status=error]{--checkbox-border-color: var(--dt-color-support-error)}@media (prefers-reduced-motion: no-preference){.c-checkbox-tick[data-pie-checked]{animation:scaleUp var(--dt-motion-timing-100) var(--checkbox-motion-easing)}}.c-checkbox-tick[data-pie-checked]:not([data-pie-disabled]){--checkbox-bg-color: var(--dt-color-interactive-brand);--checkbox-border-color: var(--dt-color-interactive-brand)}.c-checkbox-tick[data-pie-checked][data-pie-status=error]{--checkbox-border-color: var(--dt-color-support-error);--checkbox-bg-color: var(--dt-color-support-error)}.c-checkbox-tick[data-pie-checked]:before{content:"";position:relative;top:55%;left:14%;border-right:2px solid transparent;border-bottom:2px solid transparent;transform:rotate(45deg);transform-origin:0% 100%;animation:checkboxCheck var(--dt-motion-timing-150) var(--checkbox-motion-easing) forwards}@media (prefers-reduced-motion: reduce){.c-checkbox-tick[data-pie-checked]:before{animation:none;width:8px;height:16px;border-color:#fff;border-bottom-right-radius:2px;transform:translate3d(0,-16px,0) rotate(45deg)}}@media only percy{.c-checkbox-tick[data-pie-checked]:before{animation:none;width:8px;height:16px;border-color:#fff;border-bottom-right-radius:2px;transform:translate3d(0,-16px,0) rotate(45deg)}}.c-checkbox-tick[data-pie-indeterminate]:not([data-pie-disabled]){--checkbox-bg-color: var(--dt-color-interactive-brand);--checkbox-border-color: var(--dt-color-interactive-brand)}.c-checkbox-tick[data-pie-indeterminate][data-pie-status=error]{--checkbox-border-color: var(--dt-color-support-error);--checkbox-bg-color: var(--dt-color-support-error)}.c-checkbox-tick[data-pie-indeterminate]:after{width:16px}@media (prefers-reduced-motion: no-preference){.c-checkbox-tick[data-pie-indeterminate]:after{transition:width var(--dt-motion-timing-100) var(--checkbox-motion-easing) var(--dt-motion-timing-100)}}.c-checkbox-text{display:inline;flex:1 1 auto;align-self:center;min-width:0;margin-inline-start:var(--checkbox-gap);white-space:normal;color:var(--checkbox-content-color);font-size:var(--checkbox-font-size);font-weight:var(--checkbox-font-weight)}.c-checkbox-tick:after{content:"";position:relative;top:47%;left:14%;width:0;height:2px;background-color:#fff}.c-checkbox{--checkbox-height: 24px;--checkbox-width: 24px;--checkbox-radius: var(--dt-radius-rounded-a);--checkbox-margin: 1px;--checkbox-gap: var(--dt-spacing-b);--checkbox-font-size: var(--dt-font-body-l-size);--checkbox-font-weight: var(--dt-font-weight-regular);--checkbox-bg-color: var(--dt-color-container-default);--checkbox-border-color: var(--dt-color-interactive-form);--checkbox-content-color: var(--dt-color-content-default);--checkbox-motion-easing: var(--dt-motion-easing-persistent-functional);display:flex;flex-direction:column}.c-checkbox input{display:block;position:absolute;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px);clip-path:inset(1px);white-space:nowrap}.c-checkbox label{display:flex;max-width:100%;white-space:nowrap;cursor:pointer}.c-checkbox:hover .c-checkbox-tick{--checkbox-bg-color: hsl(var(--dt-color-container-default-h), var(--dt-color-container-default-s), calc(var(--dt-color-container-default-l) + calc(-1 * var(--dt-color-hover-01))));transition:background-color var(--dt-motion-timing-200) var(--checkbox-motion-easing)}.c-checkbox:active .c-checkbox-tick{--checkbox-bg-color: hsl(var(--dt-color-container-default-h), var(--dt-color-container-default-s), calc(var(--dt-color-container-default-l) + calc(-1 * var(--dt-color-active-01))));transition:background-color var(--dt-motion-timing-100) var(--checkbox-motion-easing)}.c-checkbox[data-pie-disabled] label{cursor:default;pointer-events:none}.c-checkbox input:focus-visible+label .c-checkbox-tick{box-shadow:0 0 0 2px var(--dt-color-focus-inner),0 0 0 4px var(--dt-color-focus-outer);outline:none}.c-checkbox[data-pie-disabled]:hover .c-checkbox-tick,.c-checkbox[data-pie-disabled]:active .c-checkbox-tick{--checkbox-bg-color: var(--dt-color-container-strong);--checkbox-border-color: var(--dt-color-disabled-01)}.c-checkbox[data-pie-status=error]:hover .c-checkbox-tick{--checkbox-bg-color: hsl(var(--dt-color-container-default-h), var(--dt-color-container-default-s), calc(var(--dt-color-container-default-l) + calc(-1 * var(--dt-color-hover-01))))}.c-checkbox[data-pie-status=error]:active .c-checkbox-tick{--checkbox-bg-color: hsl(var(--dt-color-container-default-h), var(--dt-color-container-default-s), calc(var(--dt-color-container-default-l) + calc(-1 * var(--dt-color-active-01))))}.c-checkbox[data-pie-checked]:not([data-pie-disabled]):hover .c-checkbox-tick,.c-checkbox[data-pie-indeterminate]:not([data-pie-disabled]):hover .c-checkbox-tick{--checkbox-bg-color: hsl(var(--dt-color-interactive-brand-h), var(--dt-color-interactive-brand-s), calc(var(--dt-color-interactive-brand-l) + calc(-1 * var(--dt-color-hover-01))));--checkbox-border-color: hsl(var(--dt-color-interactive-brand-h), var(--dt-color-interactive-brand-s), calc(var(--dt-color-interactive-brand-l) + calc(-1 * var(--dt-color-hover-01))))}.c-checkbox[data-pie-checked][data-pie-status=error]:hover .c-checkbox-tick,.c-checkbox[data-pie-indeterminate][data-pie-status=error]:hover .c-checkbox-tick{--checkbox-bg-color: hsl(var(--dt-color-support-error-h), var(--dt-color-support-error-s), calc(var(--dt-color-support-error-l) + calc(-1 * var(--dt-color-hover-01))));--checkbox-border-color: hsl(var(--dt-color-support-error-h), var(--dt-color-support-error-s), calc(var(--dt-color-support-error-l) + calc(-1 * var(--dt-color-hover-01))))}.c-checkbox[data-pie-checked]:not([data-pie-disabled]):active .c-checkbox-tick,.c-checkbox[data-pie-indeterminate]:not([data-pie-disabled]):active .c-checkbox-tick{--checkbox-bg-color: hsl(var(--dt-color-interactive-brand-h), var(--dt-color-interactive-brand-s), calc(var(--dt-color-interactive-brand-l) + calc(-1 * var(--dt-color-active-01))));--checkbox-border-color: hsl(var(--dt-color-interactive-brand-h), var(--dt-color-interactive-brand-s), calc(var(--dt-color-interactive-brand-l) + calc(-1 * var(--dt-color-active-01))))}.c-checkbox[data-pie-checked][data-pie-status=error]:active .c-checkbox-tick,.c-checkbox[data-pie-indeterminate][data-pie-status=error]:active .c-checkbox-tick{--checkbox-bg-color: hsl(var(--dt-color-support-error-h), var(--dt-color-support-error-s), calc(var(--dt-color-support-error-l) + calc(-1 * var(--dt-color-active-01))));--checkbox-border-color: hsl(var(--dt-color-support-error-h), var(--dt-color-support-error-s), calc(var(--dt-color-support-error-l) + calc(-1 * var(--dt-color-active-01))))}
8
+ `, O = ["default", "success", "error"], n = {
9
9
  // a default value for the html <input type="checkbox" /> value attribute.
10
10
  // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#value
11
11
  value: "on",
@@ -15,13 +15,13 @@ const O = `*,*:after,*:before{box-sizing:inherit}
15
15
  checked: !1,
16
16
  status: "default"
17
17
  };
18
- var _ = Object.defineProperty, w = Object.getOwnPropertyDescriptor, s = (h, e, r, a) => {
19
- for (var o = a > 1 ? void 0 : a ? w(e, r) : e, d = h.length - 1, l; d >= 0; d--)
20
- (l = h[d]) && (o = (a ? l(e, r, o) : l(o)) || o);
21
- return a && o && _(e, r, o), o;
18
+ var P = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, o = (b, e, d, i) => {
19
+ for (var r = i > 1 ? void 0 : i ? _(e, d) : e, a = b.length - 1, s; a >= 0; a--)
20
+ (s = b[a]) && (r = (i ? s(e, d, r) : s(r)) || r);
21
+ return i && r && P(e, d, r), r;
22
22
  };
23
- const v = "pie-checkbox", b = "assistive-text";
24
- class t extends F(E(y)) {
23
+ const y = "pie-checkbox", m = "assistive-text";
24
+ class t extends C(F(g)) {
25
25
  constructor() {
26
26
  super(...arguments), this.value = n.value, this.checked = n.checked, this.defaultChecked = n.defaultChecked, this.required = n.required, this.indeterminate = n.indeterminate, this.status = n.status;
27
27
  }
@@ -58,10 +58,10 @@ class t extends F(E(y)) {
58
58
  * @param {Event} event - This should be the change event that was listened for on an input element with `type="checkbox"`.
59
59
  */
60
60
  handleChange(e) {
61
- const { checked: r } = e == null ? void 0 : e.currentTarget;
62
- this.checked = r;
63
- const a = S(e);
64
- this.dispatchEvent(a), this.handleFormAssociation();
61
+ const { checked: d } = e == null ? void 0 : e.currentTarget;
62
+ this.checked = d;
63
+ const i = E(e);
64
+ this.dispatchEvent(i), this.handleFormAssociation();
65
65
  }
66
66
  /**
67
67
  * Called when the form that contains this component is reset.
@@ -78,79 +78,99 @@ class t extends F(E(y)) {
78
78
  render() {
79
79
  const {
80
80
  checked: e,
81
- value: r,
82
- name: a,
83
- label: o,
84
- disabled: d,
85
- required: l,
86
- indeterminate: k,
87
- aria: c,
88
- assistiveText: u,
89
- status: x
81
+ value: d,
82
+ name: i,
83
+ label: r,
84
+ disabled: a,
85
+ required: s,
86
+ indeterminate: p,
87
+ aria: l,
88
+ assistiveText: k,
89
+ status: v
90
90
  } = this;
91
- return f`
92
- <label data-test-id="checkbox-component">
91
+ return u`
92
+ <div
93
+ class="c-checkbox"
94
+ data-pie-status=${!a && v}
95
+ ?data-pie-disabled=${x(a)}
96
+ ?data-pie-checked=${e}
97
+ ?data-pie-indeterminate=${p && !e}>
93
98
  <input
94
99
  type="checkbox"
95
- .value=${r}
96
- .checked=${$(e)}
97
- name=${m(a)}
98
- ?disabled=${d}
99
- ?required=${l}
100
- .indeterminate=${!!k}
101
- aria-label=${(c == null ? void 0 : c.label) || p}
102
- aria-labelledby=${o ? p : (c == null ? void 0 : c.labelledby) || p}
103
- aria-describedby=${m(u ? b : void 0)}
100
+ id="inputId"
101
+ .value=${d}
102
+ .checked=${x(e)}
103
+ name=${f(i)}
104
+ ?disabled=${a}
105
+ ?required=${s}
106
+ .indeterminate=${p}
107
+ aria-label=${(l == null ? void 0 : l.label) || h}
108
+ aria-labelledby=${r ? h : (l == null ? void 0 : l.labelledby) || h}
109
+ aria-describedby=${f(k ? m : void 0)}
104
110
  @change=${this.handleChange}
105
111
  data-test-id="checkbox-input"
106
112
  />
107
- ${o}
108
- </label>
109
- ${u ? f`<pie-assistive-text id="${b}" variant=${m(x)} data-test-id="pie-checkbox-assistive-text">${u}</pie-assistive-text>` : p}`;
113
+ <label for="inputId" data-test-id="checkbox-component">
114
+ <span
115
+ class="c-checkbox-tick"
116
+ ?data-pie-checked=${e}
117
+ ?data-pie-disabled=${x(a)}
118
+ data-pie-status=${!a && v}
119
+ ?data-pie-indeterminate=${p && !e}></span>
120
+ <span class="c-checkbox-text">${r}</span>
121
+ </label>
122
+ ${k ? u`
123
+ <pie-assistive-text
124
+ id="${m}"
125
+ variant=${v}
126
+ data-test-id="pie-checkbox-assistive-text">
127
+ ${k}
128
+ </pie-assistive-text>` : h}
129
+ </div>`;
110
130
  }
111
131
  }
112
- t.shadowRootOptions = { ...y.shadowRootOptions, delegatesFocus: !0 };
113
- t.styles = g(O);
114
- s([
115
- i({ type: String })
132
+ t.shadowRootOptions = { ...g.shadowRootOptions, delegatesFocus: !0 };
133
+ t.styles = w(A);
134
+ o([
135
+ c({ type: String })
116
136
  ], t.prototype, "value", 2);
117
- s([
118
- i({ type: String })
137
+ o([
138
+ c({ type: String })
119
139
  ], t.prototype, "label", 2);
120
- s([
121
- i({ type: String })
140
+ o([
141
+ c({ type: String })
122
142
  ], t.prototype, "name", 2);
123
- s([
124
- i({ type: Boolean, reflect: !0 })
143
+ o([
144
+ c({ type: Boolean, reflect: !0 })
125
145
  ], t.prototype, "checked", 2);
126
- s([
127
- i({ type: Boolean, reflect: !0 })
146
+ o([
147
+ c({ type: Boolean, reflect: !0 })
128
148
  ], t.prototype, "defaultChecked", 2);
129
- s([
130
- i({ type: Boolean, reflect: !0 })
149
+ o([
150
+ c({ type: Boolean, reflect: !0 })
131
151
  ], t.prototype, "disabled", 2);
132
- s([
133
- i({ type: Boolean, reflect: !0 })
152
+ o([
153
+ c({ type: Boolean, reflect: !0 })
134
154
  ], t.prototype, "required", 2);
135
- s([
136
- i({ type: Boolean, reflect: !0 })
155
+ o([
156
+ c({ type: Boolean, reflect: !0 })
137
157
  ], t.prototype, "indeterminate", 2);
138
- s([
139
- i({ type: Object })
158
+ o([
159
+ c({ type: Object })
140
160
  ], t.prototype, "aria", 2);
141
- s([
142
- C('input[type="checkbox"]')
161
+ o([
162
+ $('input[type="checkbox"]')
143
163
  ], t.prototype, "checkbox", 2);
144
- s([
145
- i({ type: String })
164
+ o([
165
+ c({ type: String })
146
166
  ], t.prototype, "assistiveText", 2);
147
- s([
148
- i({ type: String }),
149
- q(v, P, n.status)
167
+ o([
168
+ c({ type: String }),
169
+ S(y, O, n.status)
150
170
  ], t.prototype, "status", 2);
151
- A(v, t);
171
+ q(y, t);
152
172
  export {
153
173
  t as PieCheckbox,
154
174
  n as defaultProps,
155
- P as statusTypes
175
+ O as statusTypes
156
176
  };
package/dist/react.d.ts CHANGED
@@ -83,12 +83,12 @@ declare class PieCheckbox_2 extends PieCheckbox_base implements CheckboxProps {
83
83
  checked: boolean;
84
84
  defaultChecked: boolean;
85
85
  disabled?: CheckboxProps['disabled'];
86
- required?: CheckboxProps['required'];
87
- indeterminate?: CheckboxProps['indeterminate'];
86
+ required: boolean;
87
+ indeterminate: boolean;
88
88
  aria: CheckboxProps['aria'];
89
89
  private checkbox;
90
90
  assistiveText?: CheckboxProps['assistiveText'];
91
- status?: CheckboxProps['status'];
91
+ status: "default" | "error" | "success";
92
92
  /**
93
93
  * (Read-only) returns a ValidityState with the validity states that this element is in.
94
94
  * https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement/validity
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@justeattakeaway/pie-checkbox",
3
3
  "description": "PIE Design System Checkbox built using Web Components",
4
- "version": "0.6.0",
4
+ "version": "0.7.0",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.js",
package/src/checkbox.scss CHANGED
@@ -1 +1,299 @@
1
1
  @use '@justeattakeaway/pie-css/scss' as p;
2
+
3
+ @keyframes checkboxCheck {
4
+ 0% {
5
+ width: 0;
6
+ height: 0;
7
+ border-color: #fff;
8
+
9
+ transform: translate3d(0, 0, 0) rotate(45deg);
10
+ }
11
+
12
+ 33% {
13
+ width: 8px;
14
+ height: 0;
15
+
16
+ transform: translate3d(0, 0, 0) rotate(45deg);
17
+ }
18
+
19
+ 100% {
20
+ width: 8px;
21
+ height: 16px;
22
+ border-color: #fff;
23
+ border-bottom-right-radius: 2px;
24
+
25
+
26
+ transform: translate3d(0, -16px, 0) rotate(45deg);
27
+ }
28
+ }
29
+
30
+ @keyframes scaleDown {
31
+ 0% {
32
+ transform: scale(0.7);
33
+ }
34
+
35
+ 100% {
36
+ transform: scale(0);
37
+ }
38
+ }
39
+
40
+ @keyframes scaleUp {
41
+ 0% {
42
+ transform: scale(0);
43
+ }
44
+
45
+ 33% {
46
+ transform: scale(0.5);
47
+ }
48
+
49
+ 100% {
50
+ transform: scale(1);
51
+ }
52
+ }
53
+
54
+ .c-checkbox-tick {
55
+ content: "";
56
+ display: flex;
57
+
58
+ flex: 0 0 auto;
59
+
60
+ width: var(--checkbox-width);
61
+ height: var(--checkbox-height);
62
+
63
+ margin: var(--checkbox-margin);
64
+
65
+ border: 1px solid var(--checkbox-border-color);
66
+ border-radius: var(--checkbox-radius);
67
+ background-color: var(--checkbox-bg-color);
68
+
69
+ @media (prefers-reduced-motion: no-preference) {
70
+ transition: background-color var(--dt-motion-timing-100) var(--checkbox-motion-easing);
71
+
72
+ animation: scaleDown var(--dt-motion-timing-100) var(--checkbox-motion-easing);
73
+ }
74
+
75
+ &[data-pie-disabled] {
76
+ --checkbox-bg-color: var(--dt-color-container-strong);
77
+ --checkbox-border-color: var(--dt-color-disabled-01);
78
+ }
79
+
80
+ &[data-pie-status="error"] {
81
+ --checkbox-border-color: var(--dt-color-support-error);
82
+ }
83
+
84
+ &[data-pie-checked] {
85
+ @media (prefers-reduced-motion: no-preference) {
86
+ animation: scaleUp var(--dt-motion-timing-100) var(--checkbox-motion-easing);
87
+ }
88
+
89
+ &:not([data-pie-disabled]) {
90
+ --checkbox-bg-color: var(--dt-color-interactive-brand);
91
+ --checkbox-border-color: var(--dt-color-interactive-brand);
92
+ }
93
+
94
+ &[data-pie-status="error"] {
95
+ --checkbox-border-color: var(--dt-color-support-error);
96
+ --checkbox-bg-color: var(--dt-color-support-error);
97
+ }
98
+ }
99
+
100
+ &[data-pie-checked]:before {
101
+ content: "";
102
+
103
+ position: relative;
104
+ top: 55%;
105
+ left: 14%;
106
+
107
+ border-right: 2px solid transparent;
108
+ border-bottom: 2px solid transparent;
109
+
110
+ transform: rotate(45deg);
111
+ transform-origin: 0% 100%;
112
+
113
+ animation: checkboxCheck var(--dt-motion-timing-150) var(--checkbox-motion-easing) forwards;
114
+
115
+ @media (prefers-reduced-motion: reduce) {
116
+ animation: none;
117
+ width: 8px;
118
+ height: 16px;
119
+ border-color: #fff;
120
+ border-bottom-right-radius: 2px;
121
+
122
+ transform: translate3d(0, -16px, 0) rotate(45deg);
123
+ }
124
+
125
+ @media only percy {
126
+ animation: none;
127
+
128
+ width: 8px;
129
+ height: 16px;
130
+ border-color: #fff;
131
+ border-bottom-right-radius: 2px;
132
+
133
+ transform: translate3d(0, -16px, 0) rotate(45deg);
134
+ }
135
+ }
136
+
137
+ &[data-pie-indeterminate] {
138
+ &:not([data-pie-disabled]) {
139
+ --checkbox-bg-color: var(--dt-color-interactive-brand);
140
+ --checkbox-border-color: var(--dt-color-interactive-brand);
141
+ }
142
+
143
+ &[data-pie-status="error"] {
144
+ --checkbox-border-color: var(--dt-color-support-error);
145
+ --checkbox-bg-color: var(--dt-color-support-error);
146
+ }
147
+ }
148
+
149
+ &[data-pie-indeterminate]:after {
150
+ width: 16px;
151
+
152
+ @media (prefers-reduced-motion: no-preference) {
153
+ transition: width var(--dt-motion-timing-100) var(--checkbox-motion-easing) var(--dt-motion-timing-100);
154
+ }
155
+ }
156
+ }
157
+
158
+ .c-checkbox-text {
159
+ display: inline;
160
+ flex: 1 1 auto;
161
+ align-self: center;
162
+ min-width: 0;
163
+ margin-inline-start: var(--checkbox-gap);
164
+ white-space: normal;
165
+ color: var(--checkbox-content-color);
166
+ font-size: var(--checkbox-font-size);
167
+ font-weight: var(--checkbox-font-weight);
168
+ }
169
+
170
+ // initial styles for indeterminate state
171
+ .c-checkbox-tick:after {
172
+ content: "";
173
+
174
+ position: relative;
175
+ top: 47%;
176
+ left: 14%;
177
+ width: 0;
178
+ height: 2px;
179
+ background-color: white;
180
+ }
181
+
182
+ .c-checkbox {
183
+ --checkbox-height: 24px;
184
+ --checkbox-width: 24px;
185
+ --checkbox-radius: var(--dt-radius-rounded-a);
186
+ --checkbox-margin: 1px;
187
+ --checkbox-gap: var(--dt-spacing-b);
188
+ --checkbox-font-size: var(--dt-font-body-l-size);
189
+ --checkbox-font-weight: var(--dt-font-weight-regular);
190
+ --checkbox-bg-color: var(--dt-color-container-default);
191
+ --checkbox-border-color: var(--dt-color-interactive-form);
192
+ --checkbox-content-color: var(--dt-color-content-default);
193
+ --checkbox-motion-easing: var(--dt-motion-easing-persistent-functional);
194
+
195
+ display: flex;
196
+ flex-direction: column;
197
+
198
+ input {
199
+ display: block;
200
+ position: absolute;
201
+ height: 1px;
202
+ width: 1px;
203
+ overflow: hidden;
204
+ clip: rect(1px, 1px, 1px, 1px);
205
+ clip-path: inset(1px);
206
+ white-space: nowrap;
207
+ }
208
+
209
+ label {
210
+ display: flex;
211
+ max-width: 100%;
212
+ white-space: nowrap;
213
+ cursor: pointer;
214
+ }
215
+
216
+ &:hover {
217
+ .c-checkbox-tick {
218
+ --checkbox-bg-color: hsl(var(--dt-color-container-default-h), var(--dt-color-container-default-s), calc(var(--dt-color-container-default-l) + calc(-1 * var(--dt-color-hover-01))));
219
+
220
+ transition: background-color var(--dt-motion-timing-200) var(--checkbox-motion-easing);
221
+ }
222
+ }
223
+
224
+ &:active {
225
+ .c-checkbox-tick {
226
+ --checkbox-bg-color: hsl(var(--dt-color-container-default-h), var(--dt-color-container-default-s), calc(var(--dt-color-container-default-l) + calc(-1 * var(--dt-color-active-01))));
227
+
228
+ transition: background-color var(--dt-motion-timing-100) var(--checkbox-motion-easing);
229
+ }
230
+ }
231
+
232
+ &[data-pie-disabled] {
233
+ label {
234
+ cursor: default;
235
+ pointer-events: none;
236
+ }
237
+ }
238
+
239
+ input:focus-visible + label {
240
+ .c-checkbox-tick {
241
+ @include p.focus;
242
+ }
243
+ }
244
+
245
+ &[data-pie-disabled] {
246
+ &:hover,
247
+ &:active {
248
+ .c-checkbox-tick {
249
+ --checkbox-bg-color: var(--dt-color-container-strong);
250
+ --checkbox-border-color: var(--dt-color-disabled-01);
251
+ }
252
+ }
253
+ }
254
+
255
+ &[data-pie-status="error"] {
256
+ &:hover {
257
+ .c-checkbox-tick {
258
+ --checkbox-bg-color: hsl(var(--dt-color-container-default-h), var(--dt-color-container-default-s), calc(var(--dt-color-container-default-l) + calc(-1 * var(--dt-color-hover-01))));
259
+ }
260
+ }
261
+
262
+ &:active {
263
+ .c-checkbox-tick {
264
+ --checkbox-bg-color: hsl(var(--dt-color-container-default-h), var(--dt-color-container-default-s), calc(var(--dt-color-container-default-l) + calc(-1 * var(--dt-color-active-01))));
265
+ }
266
+ }
267
+ }
268
+
269
+ &[data-pie-checked],
270
+ &[data-pie-indeterminate] {
271
+ &:not([data-pie-disabled]):hover {
272
+ .c-checkbox-tick {
273
+ --checkbox-bg-color: hsl(var(--dt-color-interactive-brand-h), var(--dt-color-interactive-brand-s), calc(var(--dt-color-interactive-brand-l) + calc(-1 * var(--dt-color-hover-01))));
274
+ --checkbox-border-color: hsl(var(--dt-color-interactive-brand-h), var(--dt-color-interactive-brand-s), calc(var(--dt-color-interactive-brand-l) + calc(-1 * var(--dt-color-hover-01))));
275
+ }
276
+ }
277
+
278
+ &[data-pie-status="error"]:hover {
279
+ .c-checkbox-tick {
280
+ --checkbox-bg-color: hsl(var(--dt-color-support-error-h), var(--dt-color-support-error-s), calc(var(--dt-color-support-error-l) + calc(-1 * var(--dt-color-hover-01))));
281
+ --checkbox-border-color: hsl(var(--dt-color-support-error-h), var(--dt-color-support-error-s), calc(var(--dt-color-support-error-l) + calc(-1 * var(--dt-color-hover-01))));
282
+ }
283
+ }
284
+
285
+ &:not([data-pie-disabled]):active {
286
+ .c-checkbox-tick {
287
+ --checkbox-bg-color: hsl(var(--dt-color-interactive-brand-h), var(--dt-color-interactive-brand-s), calc(var(--dt-color-interactive-brand-l) + calc(-1 * var(--dt-color-active-01))));
288
+ --checkbox-border-color: hsl(var(--dt-color-interactive-brand-h), var(--dt-color-interactive-brand-s), calc(var(--dt-color-interactive-brand-l) + calc(-1 * var(--dt-color-active-01))));
289
+ }
290
+ }
291
+
292
+ &[data-pie-status="error"]:active {
293
+ .c-checkbox-tick {
294
+ --checkbox-bg-color: hsl(var(--dt-color-support-error-h), var(--dt-color-support-error-s), calc(var(--dt-color-support-error-l) + calc(-1 * var(--dt-color-active-01))));
295
+ --checkbox-border-color: hsl(var(--dt-color-support-error-h), var(--dt-color-support-error-s), calc(var(--dt-color-support-error-l) + calc(-1 * var(--dt-color-active-01))));
296
+ }
297
+ }
298
+ }
299
+ }
package/src/index.ts CHANGED
@@ -49,10 +49,10 @@ export class PieCheckbox extends FormControlMixin(RtlMixin(LitElement)) implemen
49
49
  public disabled?: CheckboxProps['disabled'];
50
50
 
51
51
  @property({ type: Boolean, reflect: true })
52
- public required?: CheckboxProps['required'] = defaultProps.required;
52
+ public required = defaultProps.required;
53
53
 
54
54
  @property({ type: Boolean, reflect: true })
55
- public indeterminate?: CheckboxProps['indeterminate'] = defaultProps.indeterminate;
55
+ public indeterminate = defaultProps.indeterminate;
56
56
 
57
57
  @property({ type: Object })
58
58
  public aria: CheckboxProps['aria'];
@@ -65,7 +65,7 @@ export class PieCheckbox extends FormControlMixin(RtlMixin(LitElement)) implemen
65
65
 
66
66
  @property({ type: String })
67
67
  @validPropertyValues(componentSelector, statusTypes, defaultProps.status)
68
- public status?: CheckboxProps['status'] = defaultProps.status;
68
+ public status = defaultProps.status;
69
69
 
70
70
  /**
71
71
  * (Read-only) returns a ValidityState with the validity states that this element is in.
@@ -155,24 +155,44 @@ export class PieCheckbox extends FormControlMixin(RtlMixin(LitElement)) implemen
155
155
  } = this;
156
156
 
157
157
  return html`
158
- <label data-test-id="checkbox-component">
158
+ <div
159
+ class="c-checkbox"
160
+ data-pie-status=${!disabled && status}
161
+ ?data-pie-disabled=${live(disabled)}
162
+ ?data-pie-checked=${checked}
163
+ ?data-pie-indeterminate=${indeterminate && !checked}>
159
164
  <input
160
165
  type="checkbox"
166
+ id="inputId"
161
167
  .value=${value}
162
168
  .checked=${live(checked)}
163
169
  name=${ifDefined(name)}
164
170
  ?disabled=${disabled}
165
171
  ?required=${required}
166
- .indeterminate=${!!indeterminate}
172
+ .indeterminate=${indeterminate}
167
173
  aria-label=${aria?.label || nothing}
168
174
  aria-labelledby=${label ? nothing : aria?.labelledby || nothing}
169
175
  aria-describedby=${ifDefined(assistiveText ? assistiveTextIdValue : undefined)}
170
176
  @change=${this.handleChange}
171
177
  data-test-id="checkbox-input"
172
178
  />
173
- ${label}
174
- </label>
175
- ${assistiveText ? html`<pie-assistive-text id="${assistiveTextIdValue}" variant=${ifDefined(status)} data-test-id="pie-checkbox-assistive-text">${assistiveText}</pie-assistive-text>` : nothing}`;
179
+ <label for="inputId" data-test-id="checkbox-component">
180
+ <span
181
+ class="c-checkbox-tick"
182
+ ?data-pie-checked=${checked}
183
+ ?data-pie-disabled=${live(disabled)}
184
+ data-pie-status=${!disabled && status}
185
+ ?data-pie-indeterminate=${indeterminate && !checked}></span>
186
+ <span class="c-checkbox-text">${label}</span>
187
+ </label>
188
+ ${assistiveText ? html`
189
+ <pie-assistive-text
190
+ id="${assistiveTextIdValue}"
191
+ variant=${status}
192
+ data-test-id="pie-checkbox-assistive-text">
193
+ ${assistiveText}
194
+ </pie-assistive-text>` : nothing}
195
+ </div>`;
176
196
  }
177
197
 
178
198
  // Renders a `CSSResult` generated from SCSS by Vite