@sky.ui/core 0.0.40 → 0.0.42
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/dist/custom-elements.json +2011 -1275
- package/dist/helper/controllers/animation-controller.d.ts +4 -4
- package/dist/helper/controllers/animation-controller.js.map +1 -1
- package/dist/helper/controllers/index.d.ts +1 -0
- package/dist/helper/controllers/index.js +1 -1
- package/dist/helper/controllers/popover-controller.d.ts +12 -12
- package/dist/helper/controllers/popover-controller.js.map +1 -1
- package/dist/helper/controllers/preset-controller.d.ts +55 -0
- package/dist/helper/controllers/preset-controller.js +2 -0
- package/dist/helper/controllers/preset-controller.js.map +1 -0
- package/dist/helper/iconify-offline.js.map +1 -1
- package/dist/helper/index.js +1 -1
- package/dist/helper/internals/form-control-base.d.ts +6 -6
- package/dist/helper/internals/form-control-base.js.map +1 -1
- package/dist/helper/styles/focus-ring.d.ts +10 -0
- package/dist/helper/styles/focus-ring.js +10 -0
- package/dist/helper/styles/focus-ring.js.map +1 -0
- package/dist/helper/utils/color-resolver.d.ts +0 -14
- package/dist/helper/utils/color-resolver.js +1 -1
- package/dist/helper/utils/color-resolver.js.map +1 -1
- package/dist/helper/utils/component-presets.d.ts +132 -0
- package/dist/helper/utils/component-presets.js +2 -0
- package/dist/helper/utils/component-presets.js.map +1 -0
- package/dist/helper/utils/contrast-color.d.ts +6 -6
- package/dist/helper/utils/contrast-color.js.map +1 -1
- package/dist/helper/utils/index.d.ts +1 -0
- package/dist/helper/utils/index.js +1 -1
- package/dist/helper/utils/size-resolver.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/sky-alert/sky-alert.d.ts +15 -7
- package/dist/sky-alert/sky-alert.js +10 -20
- package/dist/sky-alert/sky-alert.js.map +1 -1
- package/dist/sky-appbar/sky-appbar.d.ts +9 -3
- package/dist/sky-appbar/sky-appbar.js +27 -19
- package/dist/sky-appbar/sky-appbar.js.map +1 -1
- package/dist/sky-avatar/sky-avatar.d.ts +6 -2
- package/dist/sky-avatar/sky-avatar.js +17 -14
- package/dist/sky-avatar/sky-avatar.js.map +1 -1
- package/dist/sky-badge/sky-badge.d.ts +9 -5
- package/dist/sky-badge/sky-badge.js +12 -16
- package/dist/sky-badge/sky-badge.js.map +1 -1
- package/dist/sky-button/sky-button.d.ts +27 -7
- package/dist/sky-button/sky-button.js +24 -32
- package/dist/sky-button/sky-button.js.map +1 -1
- package/dist/sky-card/sky-card.d.ts +13 -5
- package/dist/sky-card/sky-card.js +24 -24
- package/dist/sky-card/sky-card.js.map +1 -1
- package/dist/sky-checkbox/sky-checkbox.d.ts +6 -3
- package/dist/sky-checkbox/sky-checkbox.js +43 -44
- package/dist/sky-checkbox/sky-checkbox.js.map +1 -1
- package/dist/sky-chip/sky-chip.d.ts +7 -3
- package/dist/sky-chip/sky-chip.js +35 -43
- package/dist/sky-chip/sky-chip.js.map +1 -1
- package/dist/sky-col/sky-col.d.ts +7 -3
- package/dist/sky-col/sky-col.js +6 -11
- package/dist/sky-col/sky-col.js.map +1 -1
- package/dist/sky-combobox/sky-combobox.d.ts +15 -8
- package/dist/sky-combobox/sky-combobox.js +193 -257
- package/dist/sky-combobox/sky-combobox.js.map +1 -1
- package/dist/sky-dialog/sky-dialog.d.ts +7 -3
- package/dist/sky-dialog/sky-dialog.js +22 -20
- package/dist/sky-dialog/sky-dialog.js.map +1 -1
- package/dist/sky-divider/sky-divider.d.ts +6 -2
- package/dist/sky-divider/sky-divider.js +5 -5
- package/dist/sky-divider/sky-divider.js.map +1 -1
- package/dist/sky-flexbox/sky-flexbox.d.ts +10 -6
- package/dist/sky-flexbox/sky-flexbox.js +6 -6
- package/dist/sky-flexbox/sky-flexbox.js.map +1 -1
- package/dist/sky-flexcol/sky-flexcol.d.ts +6 -2
- package/dist/sky-flexcol/sky-flexcol.js +2 -2
- package/dist/sky-flexcol/sky-flexcol.js.map +1 -1
- package/dist/sky-form/sky-form.d.ts +15 -11
- package/dist/sky-form/sky-form.js +14 -14
- package/dist/sky-form/sky-form.js.map +1 -1
- package/dist/sky-grid/sky-grid.d.ts +5 -1
- package/dist/sky-grid/sky-grid.js +3 -3
- package/dist/sky-grid/sky-grid.js.map +1 -1
- package/dist/sky-icon/sky-icon.d.ts +3 -0
- package/dist/sky-icon/sky-icon.js +4 -4
- package/dist/sky-icon/sky-icon.js.map +1 -1
- package/dist/sky-image/sky-image.d.ts +8 -4
- package/dist/sky-image/sky-image.js +5 -5
- package/dist/sky-image/sky-image.js.map +1 -1
- package/dist/sky-image/srcset-utils.js.map +1 -1
- package/dist/sky-input/sky-input.d.ts +9 -5
- package/dist/sky-input/sky-input.js +155 -170
- package/dist/sky-input/sky-input.js.map +1 -1
- package/dist/sky-list/sky-list.d.ts +7 -3
- package/dist/sky-list/sky-list.js +6 -4
- package/dist/sky-list/sky-list.js.map +1 -1
- package/dist/sky-listitem/sky-listitem.d.ts +5 -1
- package/dist/sky-listitem/sky-listitem.js +10 -7
- package/dist/sky-listitem/sky-listitem.js.map +1 -1
- package/dist/sky-radio/sky-radio.d.ts +9 -4
- package/dist/sky-radio/sky-radio.js +7 -9
- package/dist/sky-radio/sky-radio.js.map +1 -1
- package/dist/sky-row/sky-row.d.ts +4 -1
- package/dist/sky-row/sky-row.js +2 -2
- package/dist/sky-row/sky-row.js.map +1 -1
- package/dist/sky-sheet/sky-sheet.d.ts +11 -6
- package/dist/sky-sheet/sky-sheet.js +23 -23
- package/dist/sky-sheet/sky-sheet.js.map +1 -1
- package/dist/sky-simple-table/sky-simple-table.d.ts +7 -3
- package/dist/sky-simple-table/sky-simple-table.js +4 -7
- package/dist/sky-simple-table/sky-simple-table.js.map +1 -1
- package/dist/sky-theme-provider/sky-theme-provider.d.ts +26 -26
- package/dist/sky-theme-provider/sky-theme-provider.js +2 -2
- package/dist/sky-theme-provider/sky-theme-provider.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{LitElement as e,unsafeCSS as t,css as i,nothing as s,html as r}from"lit";import{property as o,state as a,customElement as n}from"lit/decorators.js";import{when as c}from"lit/directives/when.js";import{classMap as h}from"lit/directives/class-map.js";import{styleMap as l}from"lit/directives/style-map.js";import{resolveColor as d}from"../helper/utils/color-resolver.js";import{cssOnFillEnhance as p}from"../helper/utils/contrast-color.js";import{FormControlBase as u}from"../helper/internals/form-control-base.js";var
|
|
1
|
+
import{LitElement as e,unsafeCSS as t,css as i,nothing as s,html as r}from"lit";import{property as o,state as a,customElement as n}from"lit/decorators.js";import{when as c}from"lit/directives/when.js";import{classMap as h}from"lit/directives/class-map.js";import{styleMap as l}from"lit/directives/style-map.js";import{resolveColor as d}from"../helper/utils/color-resolver.js";import{cssOnFillEnhance as p}from"../helper/utils/contrast-color.js";import{FormControlBase as u}from"../helper/internals/form-control-base.js";import{PresetController as v}from"../helper/controllers/preset-controller.js";import{skyFocusRingHostStyles as y}from"../helper/styles/focus-ring.js";var k=Object.defineProperty,m=Object.getOwnPropertyDescriptor,f=(e,t,i,s)=>{for(var r,o=s>1?void 0:s?m(t,i):t,a=e.length-1;a>=0;a--)(r=e[a])&&(o=(s?r(t,i,o):r(o))||o);return s&&o&&k(t,i,o),o};let b=class extends u{constructor(){super(...arguments),this.label="",this.id="",this.value="",this.color="primary",this.defaultChecked=!1,this.showErrors=!1,this.prefix="",this.suffix="",this.prefixColor="",this.suffixColor="",this.validationActive=!1,this.invalid=!1,this._checked=!1,this._indeterminate=!1,this.validationErrors=[],this._hasMeaningfulSlot=!1,this._inputId=`sky-cb-${Math.random().toString(36).slice(2)}`,this.preset="",this._presets=new v(this),this._onSlotChange=e=>{const t=e.target,i=this._slotHasMeaningfulContent(t);i!==this._hasMeaningfulSlot&&(this._hasMeaningfulSlot=i)},this.handleBlur=e=>{this.validationActive=!0,this.validateInput();const t=this.shadowRoot?.querySelector(".cbx");t?.classList.remove("active"),this.syncValidity()},this._onKeyDown=e=>{this.disabled||this.readonly||" "!==e.key&&"Enter"!==e.key||(e.preventDefault(),this._inputElement?.click())}}get checked(){return this._checked}set checked(e){const t=this._checked;this._checked=e,e&&this.indeterminate&&(this.indeterminate=!1,this._inputElement&&(this._inputElement.indeterminate=!1)),this.requestUpdate("checked",t),this._inputElement&&(this._inputElement.checked=e,this._inputElement.indeterminate=this.indeterminate),this._updateVisualState(),this.syncFormValue(),this.syncValidity()}get indeterminate(){return this._indeterminate}set indeterminate(e){const t=this._indeterminate;this._indeterminate=e,e&&this.checked&&(this.checked=!1),this.requestUpdate("indeterminate",t),this._inputElement&&(this._inputElement.indeterminate=e),this._updateVisualState(),this.syncValidity()}getFormValue(){return this.name?this.disabled?null:this.checked?this.value&&""!==this.value.trim()?this.value:"on":null:null}setValueFromFormState(e){if(null===e)return this.checked=!1,void(this.indeterminate=!1);"string"==typeof e&&(this.value&&""!==this.value.trim()?this.checked=e===this.value:this.checked="on"===e||"true"===e||"1"===e,this.indeterminate=!1)}getValidityAnchor(){return this.shadowRoot?.querySelector('input[type="checkbox"]')??void 0}isEmpty(){return!this.checked}getNativeControl(){return this.shadowRoot?.querySelector('input[type="checkbox"]')}onFormReset(){this.checked=this.defaultChecked,this.indeterminate=!1,this.validationErrors=[],this.invalid=!1,this.validationActive=!1}updated(e){super.updated(e),this.style.setProperty("--checkbox-color",d(this.color)),this._inputElement||(this._inputElement=this.shadowRoot?.querySelector('input[type="checkbox"]')),this._inputElement&&(this._inputElement.checked=this.checked,this._inputElement.indeterminate=this.indeterminate,this._inputElement.disabled=this.disabled||this.readonly),this._updateVisualState(),(e.has("checked")||e.has("name")||e.has("disabled")||e.has("readonly")||e.has("required")||e.has("value"))&&(this.syncFormValue(),this.syncValidity())}handleChange(e){const t=e.target;if(this.disabled||this.readonly)return this._inputElement&&(this._inputElement.checked=this.checked,this._inputElement.indeterminate=this.indeterminate),e.preventDefault(),void e.stopPropagation();this.checked=t.checked,this.validateInput();const i=this.value&&""!==this.value.trim()?this.checked?this.value:void 0:this.checked;this.dispatchEvent(new CustomEvent("value-changed",{detail:{checked:this.checked,value:i},bubbles:!0,composed:!0}))}validateInput(){if(!this.validationActive)return!0;this.validationErrors=[],this.required&&!this.checked&&(this.validationErrors=[this.requiredMessage]),this.dispatchEvent(new CustomEvent("validation-error",{detail:{errors:[...this.validationErrors]},bubbles:!0,composed:!0}));const e=this.shadowRoot?.querySelector(".cbx");this.validationErrors.length?e?.classList.add("invalid"):e?.classList.remove("invalid");const t=0===this.validationErrors.length;return this.invalid=!t,t}check(){this.disabled||this.readonly||(this.checked=!0,this.indeterminate=!1)}uncheck(){this.disabled||this.readonly||(this.checked=!1,this.indeterminate=!1)}toggle(){this.disabled||this.readonly||(this.checked=!this.checked,this.indeterminate=!1)}reset(){this.onFormReset(),this.syncFormValue(),this.syncValidity(),this.dispatchEvent(new CustomEvent("value-cleared",{detail:{value:this.value,checked:this.checked},bubbles:!0,composed:!0}))}_updateVisualState(){const e=this.shadowRoot?.querySelector(".cbx");e&&(this.checked?(e.classList.add("checked"),e.classList.remove("indeterminate")):this.indeterminate?(e.classList.add("indeterminate"),e.classList.remove("checked")):e.classList.remove("checked","indeterminate"))}_slotHasMeaningfulContent(e){return e.assignedNodes({flatten:!0}).some(e=>e.nodeType===Node.ELEMENT_NODE||(e.textContent??"").trim().length>0)}get _hasTextContent(){return!!this.prefix||!!this.suffix||!!this.label||this._hasMeaningfulSlot}render(){const e=this._hasTextContent,t=h({"checkbox-wrapper":!0,"no-text":!e}),i=h({cbx:!0,checked:this.checked,indeterminate:this.indeterminate}),o=h({box:!0,"box--checked":this.checked,"box--indeterminate":this.indeterminate,"box--invalid":this.validationErrors.length>0}),a="box"+(this.checked?" box--checked":"")+(this.indeterminate?" box--indeterminate":"")+(this.validationErrors.length?" box--invalid":"");return r`
|
|
2
2
|
<div class=${t} part="wrapper">
|
|
3
3
|
<input
|
|
4
4
|
type="checkbox"
|
|
@@ -25,21 +25,27 @@ import{LitElement as e,unsafeCSS as t,css as i,nothing as s,html as r}from"lit";
|
|
|
25
25
|
<slot @slotchange=${this._onSlotChange}></slot>
|
|
26
26
|
${c(e,()=>{const e=l({textAlign:"start",color:"var(--sky-text-primary)"}),t=l({color:this.prefixColor,display:"inline-block"}),i=l({color:this.suffixColor,display:"inline-block"});return r`
|
|
27
27
|
<span style=${e} part="text">
|
|
28
|
-
<div style=${t} part="prefix"
|
|
28
|
+
<div style=${t} part="prefix">
|
|
29
|
+
${this.prefix}
|
|
30
|
+
</div>
|
|
29
31
|
${this._hasMeaningfulSlot?s:this.label}
|
|
30
|
-
<div style=${i} part="suffix"
|
|
32
|
+
<div style=${i} part="suffix">
|
|
33
|
+
${this.suffix}
|
|
34
|
+
</div>
|
|
31
35
|
</span>
|
|
32
36
|
`})}
|
|
33
37
|
</label>
|
|
34
38
|
</div>
|
|
35
39
|
${c(this.showErrors&&this.validationErrors.length>0&&this.validationActive,()=>r`<div class="error-message" part="error-message">
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
`}};
|
|
40
|
+
${this.validationErrors[0]}
|
|
41
|
+
</div>`)}
|
|
42
|
+
`}};b.shadowRootOptions={...e.shadowRootOptions,delegatesFocus:!0},b.styles=[y,i`
|
|
39
43
|
:host {
|
|
40
44
|
display: block;
|
|
41
45
|
position: relative;
|
|
42
46
|
font-family: var(--sky-font);
|
|
47
|
+
/* Tint focus ring with the control color (not global active-primary). */
|
|
48
|
+
--sky-focus-ring-color: var(--checkbox-color, var(--sky-active-primary));
|
|
43
49
|
}
|
|
44
50
|
|
|
45
51
|
:host([readonly]) .cbx {
|
|
@@ -50,7 +56,7 @@ import{LitElement as e,unsafeCSS as t,css as i,nothing as s,html as r}from"lit";
|
|
|
50
56
|
:host(:focus-within) .cbx span:first-child,
|
|
51
57
|
:host(:focus) .cbx span:first-child {
|
|
52
58
|
box-shadow: var(--sky-focus-ring);
|
|
53
|
-
border-color: var(--checkbox-color) !important;
|
|
59
|
+
border-color: var(--checkbox-color, var(--sky-active-primary)) !important;
|
|
54
60
|
}
|
|
55
61
|
|
|
56
62
|
.checkbox-wrapper {
|
|
@@ -98,10 +104,9 @@ import{LitElement as e,unsafeCSS as t,css as i,nothing as s,html as r}from"lit";
|
|
|
98
104
|
justify-content: center;
|
|
99
105
|
transform: translateZ(0);
|
|
100
106
|
contain: layout;
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
border-color 0.2s ease,
|
|
107
|
+
/* visible so --sky-focus-ring (outer box-shadow) is not clipped */
|
|
108
|
+
overflow: visible;
|
|
109
|
+
transition: background-color 0.2s ease, border-color 0.2s ease,
|
|
105
110
|
box-shadow 0.2s ease;
|
|
106
111
|
}
|
|
107
112
|
|
|
@@ -116,9 +121,7 @@ import{LitElement as e,unsafeCSS as t,css as i,nothing as s,html as r}from"lit";
|
|
|
116
121
|
stroke-linejoin: round;
|
|
117
122
|
stroke-dasharray: 16px;
|
|
118
123
|
stroke-dashoffset: 16px;
|
|
119
|
-
transition:
|
|
120
|
-
stroke-dashoffset 0.2s ease,
|
|
121
|
-
transform 0.2s ease;
|
|
124
|
+
transition: stroke-dashoffset 0.2s ease, transform 0.2s ease;
|
|
122
125
|
transform: translate3d(0, 0, 0);
|
|
123
126
|
}
|
|
124
127
|
|
|
@@ -127,13 +130,19 @@ import{LitElement as e,unsafeCSS as t,css as i,nothing as s,html as r}from"lit";
|
|
|
127
130
|
border-color: var(--sky-text-tertiary);
|
|
128
131
|
}
|
|
129
132
|
|
|
130
|
-
input[type=
|
|
133
|
+
input[type="checkbox"]:checked + .cbx:hover span:first-child {
|
|
131
134
|
box-shadow: var(--sky-box-shadow-hover);
|
|
132
135
|
transition: box-shadow 0.2s ease;
|
|
133
136
|
}
|
|
134
137
|
|
|
138
|
+
/* Keep focus ring above hover shadow when both apply */
|
|
139
|
+
:host(:focus-within) input[type="checkbox"]:checked + .cbx:hover span:first-child,
|
|
140
|
+
:host(:focus) input[type="checkbox"]:checked + .cbx:hover span:first-child {
|
|
141
|
+
box-shadow: var(--sky-focus-ring);
|
|
142
|
+
}
|
|
143
|
+
|
|
135
144
|
.cbx span:first-child:before {
|
|
136
|
-
content:
|
|
145
|
+
content: "";
|
|
137
146
|
inset: 0;
|
|
138
147
|
width: auto;
|
|
139
148
|
height: auto;
|
|
@@ -142,15 +151,13 @@ import{LitElement as e,unsafeCSS as t,css as i,nothing as s,html as r}from"lit";
|
|
|
142
151
|
transform: scale(0);
|
|
143
152
|
opacity: 0;
|
|
144
153
|
border-radius: 50%;
|
|
145
|
-
transition:
|
|
146
|
-
transform 0.2s ease-out,
|
|
147
|
-
opacity 0.2s ease-out;
|
|
154
|
+
transition: transform 0.2s ease-out, opacity 0.2s ease-out;
|
|
148
155
|
position: absolute;
|
|
149
156
|
z-index: -1;
|
|
150
157
|
pointer-events: none;
|
|
151
158
|
}
|
|
152
159
|
|
|
153
|
-
input[type=
|
|
160
|
+
input[type="checkbox"] {
|
|
154
161
|
position: absolute;
|
|
155
162
|
opacity: 0;
|
|
156
163
|
width: 1px;
|
|
@@ -160,62 +167,52 @@ import{LitElement as e,unsafeCSS as t,css as i,nothing as s,html as r}from"lit";
|
|
|
160
167
|
border: 0;
|
|
161
168
|
}
|
|
162
169
|
|
|
163
|
-
input[type=
|
|
164
|
-
input[type=
|
|
165
|
-
border-color: var(--sky-text-tertiary);
|
|
170
|
+
input[type="checkbox"]:focus-visible + .cbx span:first-child,
|
|
171
|
+
input[type="checkbox"]:focus + .cbx span:first-child {
|
|
166
172
|
outline: none;
|
|
167
173
|
}
|
|
168
174
|
|
|
169
|
-
input[type=
|
|
175
|
+
input[type="checkbox"]:checked + .cbx span:first-child {
|
|
170
176
|
background: var(--checkbox-color, var(--sky-active-primary));
|
|
171
177
|
border-color: var(--checkbox-color, var(--sky-active-primary));
|
|
172
|
-
|
|
173
|
-
transform: none; /* Ensure no transform applied */
|
|
178
|
+
transform: none;
|
|
174
179
|
}
|
|
175
180
|
|
|
176
|
-
input[type=
|
|
181
|
+
input[type="checkbox"]:checked + .cbx span:first-child svg.checkmark {
|
|
177
182
|
stroke-dashoffset: 0;
|
|
178
|
-
transition:
|
|
179
|
-
stroke-dashoffset 0.2s ease-in-out 0.1s,
|
|
183
|
+
transition: stroke-dashoffset 0.2s ease-in-out 0.1s,
|
|
180
184
|
transform 0.2s ease-in-out 0.1s;
|
|
181
185
|
}
|
|
182
186
|
|
|
183
|
-
input[type=
|
|
187
|
+
input[type="checkbox"]:not(:checked) + .cbx span:first-child svg.checkmark {
|
|
184
188
|
transition: opacity 0.2s ease-in-out;
|
|
185
189
|
opacity: 0;
|
|
186
190
|
}
|
|
187
191
|
|
|
188
|
-
input[type=
|
|
192
|
+
input[type="checkbox"]:checked + .cbx span:first-child:before {
|
|
189
193
|
transform: scale(3.5);
|
|
190
194
|
opacity: 0;
|
|
191
|
-
transition:
|
|
192
|
-
transform 0.2s ease-out,
|
|
193
|
-
opacity 0.2s ease-out;
|
|
195
|
+
transition: transform 0.2s ease-out, opacity 0.2s ease-out;
|
|
194
196
|
}
|
|
195
197
|
|
|
196
198
|
.cbx.checked span:first-child {
|
|
197
199
|
background: var(--checkbox-color, var(--sky-active-primary));
|
|
198
200
|
border-color: var(--checkbox-color, var(--sky-active-primary));
|
|
199
201
|
}
|
|
202
|
+
|
|
200
203
|
.cbx.checked span:first-child svg.checkmark {
|
|
201
204
|
stroke-dashoffset: 0;
|
|
202
|
-
transition:
|
|
203
|
-
stroke-dashoffset 0.2s ease-in-out 0.1s,
|
|
205
|
+
transition: stroke-dashoffset 0.2s ease-in-out 0.1s,
|
|
204
206
|
transform 0.2s ease-in-out 0.1s;
|
|
205
207
|
}
|
|
206
208
|
|
|
207
209
|
.indeterminate-line {
|
|
208
210
|
width: 10px;
|
|
209
211
|
height: 2px;
|
|
210
|
-
background-color: var(
|
|
211
|
-
--sky-on-color-fallback-light,
|
|
212
|
-
var(--sky-text-white)
|
|
213
|
-
);
|
|
212
|
+
background-color: var(--sky-on-color-fallback-light, var(--sky-text-white));
|
|
214
213
|
position: absolute;
|
|
215
214
|
border-radius: 1px;
|
|
216
|
-
transition:
|
|
217
|
-
opacity 0.2s ease,
|
|
218
|
-
transform 0.2s ease;
|
|
215
|
+
transition: opacity 0.2s ease, transform 0.2s ease;
|
|
219
216
|
opacity: 0;
|
|
220
217
|
transform: scaleX(0);
|
|
221
218
|
}
|
|
@@ -238,6 +235,7 @@ import{LitElement as e,unsafeCSS as t,css as i,nothing as s,html as r}from"lit";
|
|
|
238
235
|
transform: scaleX(1);
|
|
239
236
|
}
|
|
240
237
|
|
|
238
|
+
|
|
241
239
|
.error-message {
|
|
242
240
|
font-size: var(--sky-font-size-xs);
|
|
243
241
|
color: var(--sky-danger-primary);
|
|
@@ -256,6 +254,7 @@ import{LitElement as e,unsafeCSS as t,css as i,nothing as s,html as r}from"lit";
|
|
|
256
254
|
}
|
|
257
255
|
|
|
258
256
|
:host([validationactive]:invalid) .cbx span:first-child {
|
|
257
|
+
|
|
259
258
|
border-color: var(--sky-danger-primary);
|
|
260
259
|
}
|
|
261
260
|
:host([validationactive]:invalid) .cbx span:first-child svg.checkmark {
|
|
@@ -293,5 +292,5 @@ import{LitElement as e,unsafeCSS as t,css as i,nothing as s,html as r}from"lit";
|
|
|
293
292
|
}
|
|
294
293
|
|
|
295
294
|
${t(p([{selector:'input[type="checkbox"]:checked + .cbx span:first-child svg, .cbx.checked span:first-child svg',fillVar:"var(--checkbox-color, var(--sky-active-primary))",property:"stroke"},{selector:".indeterminate-line, .indeterminate .indeterminate-line",fillVar:"var(--checkbox-color, var(--sky-active-primary))",property:"background-color"}]))}
|
|
296
|
-
|
|
295
|
+
`],f([o({type:String})],b.prototype,"label",2),f([o({type:String})],b.prototype,"id",2),f([o({type:String})],b.prototype,"value",2),f([o({type:String})],b.prototype,"color",2),f([o({type:Boolean})],b.prototype,"defaultChecked",2),f([o({type:Boolean})],b.prototype,"showErrors",2),f([o({type:String})],b.prototype,"prefix",2),f([o({type:String})],b.prototype,"suffix",2),f([o({type:String})],b.prototype,"prefixColor",2),f([o({type:String})],b.prototype,"suffixColor",2),f([o({type:Boolean,reflect:!0})],b.prototype,"validationActive",2),f([o({type:Boolean,reflect:!0})],b.prototype,"invalid",2),f([a()],b.prototype,"_checked",2),f([a()],b.prototype,"_indeterminate",2),f([a()],b.prototype,"validationErrors",2),f([a()],b.prototype,"_hasMeaningfulSlot",2),f([o({type:Boolean,reflect:!0})],b.prototype,"checked",1),f([o({type:Boolean,reflect:!0})],b.prototype,"indeterminate",1),f([o({type:String,reflect:!0})],b.prototype,"preset",2),b=f([n("sky-checkbox")],b);export{b as SkyCheckbox};
|
|
297
296
|
//# sourceMappingURL=sky-checkbox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sky-checkbox.js","sources":["../../src/sky-checkbox/sky-checkbox.ts"],"sourcesContent":["import { LitElement, html, css, nothing, unsafeCSS } from 'lit';\nimport { property, customElement, state } from 'lit/decorators.js';\nimport { when } from 'lit/directives/when.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { resolveColor } from '../helper/utils/color-resolver';\nimport { cssOnFillEnhance } from '../helper/utils/contrast-color';\nimport {\n FormControlBase,\n FormState,\n} from '../helper/internals/form-control-base';\n\nexport interface CheckboxProperties {\n label: string;\n checked: boolean;\n disabled: boolean;\n indeterminate: boolean;\n id: string;\n value: string;\n color: string;\n required: boolean;\n validationErrors: string[];\n validationActive: boolean;\n defaultChecked: boolean;\n requiredMessage: string;\n showErrors: boolean;\n prefix: string;\n suffix: string;\n prefixColor: string;\n suffixColor: string;\n}\n/** `checked` is always the boolean model; `value` keeps form/legacy semantics (see `handleChange`). */\nexport type SkyCheckboxValueChangedDetail = {\n checked: boolean;\n value: string | boolean | undefined;\n};\nexport type SkyCheckboxValidationErrorDetail = { errors: string[] };\nexport type SkyCheckboxValueClearedDetail = { value: string; checked: boolean };\n\n/**\n * @element sky-checkbox\n *\n * @summary Form-associated checkbox with validation, indeterminate state, and customizable label/prefix/suffix rendering.\n *\n * @status stable\n * @since 1.0.0\n *\n * @documentation https://sky-ui.com/components/checkbox\n *\n * @uiVModel checked value-changed detail=checked\n *\n * @slot - Default slot for the checkbox label or other content.\n * @slot prefix - Optional prefix content that can be placed before the label.\n * @slot suffix - Optional suffix content that can be placed after the label.\n *\n * @csspart wrapper - The wrapper element for the checkbox.\n * @csspart input - The native input element used for the checkbox.\n * @csspart label - The label element for the checkbox, used for styling.\n * @csspart box - The visual box for the checkbox, which includes the checkmark and indeterminate state.\n * @csspart checkmark - The checkmark icon that appears when the checkbox is checked.\n * @csspart indeterminate-line - The line representing the indeterminate state of the checkbox.\n * @csspart error-message - The error message displayed if the checkbox is invalid.\n *\n * @property {string} label - The label for the checkbox. Default: `\"\"`.\n * @property {boolean} checked - Whether the checkbox is checked. Default: `false`.\n * @property {boolean} indeterminate - Whether the checkbox is in the indeterminate state. Default: `false`.\n * @property {string} color - The color used for the checkbox and its checkmark. Default: `\"primary\"`.\n * @property {string} value - The value of the checkbox, which gets submitted with the form. Default: `\"\"`.\n * @property {boolean} showErrors - Whether to display validation error messages. Default: `false`.\n * @property {string} prefix - Optional prefix text or content before the label. Default: `\"\"`.\n * @property {string} suffix - Optional suffix text or content after the label. Default: `\"\"`.\n * @property {string} prefixColor - The color for the prefix text. Default: `\"\"`.\n * @property {string} suffixColor - The color for the suffix text. Default: `\"\"`.\n * @property {boolean} defaultChecked - Default checked state for reset operations. Default: `false`.\n * @method check Sets checked state to `true`.\n * @method uncheck Sets checked state to `false`.\n * @method toggle Toggles checked state.\n * @method reset Resets checkbox state to defaults and clears UI validation state.\n *\n * @fires {CustomEvent<SkyCheckboxValueChangedDetail>} value-changed - Fired when checked state changes; `detail.checked` is always boolean (use for v-model). `detail.value` is the form token when the `value` prop is set, else mirrors `checked`.\n * @fires {CustomEvent<SkyCheckboxValidationErrorDetail>} validation-error - Fired when validation errors are updated.\n * @fires {CustomEvent<SkyCheckboxValueClearedDetail>} value-cleared - Fired when checkbox is reset programmatically.\n *\n * @example\n * ```html\n * <sky-checkbox label=\"Accept Terms\" required showerrors prefix=\"Legal\"></sky-checkbox>\n * ```\n * ```vue\n * <template>\n * <sky-checkbox label=\"Accept Terms\" required showerrors prefix=\"Legal\"></sky-checkbox>\n * </template>\n * ```\n * ```jsx\n * export default function Demo() {\n * return <sky-checkbox label=\"Accept Terms\" required showerrors prefix=\"Legal\"></sky-checkbox>;\n * }\n * ```\n */\n@customElement('sky-checkbox')\nexport class SkyCheckbox extends FormControlBase {\n static override shadowRootOptions = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n @property({ type: String }) label = '';\n @property({ type: String }) override id = '';\n @property({ type: String }) value = '';\n @property({ type: String }) color = 'primary';\n @property({ type: Boolean }) defaultChecked = false;\n @property({ type: Boolean }) showErrors = false;\n @property({ type: String }) override prefix = '';\n @property({ type: String }) suffix = '';\n @property({ type: String }) prefixColor = '';\n @property({ type: String }) suffixColor = '';\n @property({ type: Boolean, reflect: true }) validationActive: boolean = false;\n @property({ type: Boolean, reflect: true }) invalid: boolean = false;\n @state() private _checked = false;\n @state() private _indeterminate = false;\n @state() private validationErrors: string[] = [];\n @state() private _hasMeaningfulSlot = false;\n\n private _inputElement?: HTMLInputElement;\n private _inputId = `sky-cb-${Math.random().toString(36).slice(2)}`;\n\n @property({ type: Boolean, reflect: true })\n get checked() {\n return this._checked;\n }\n set checked(v: boolean) {\n const old = this._checked;\n this._checked = v;\n\n if (v && this.indeterminate) {\n this.indeterminate = false;\n if (this._inputElement) this._inputElement.indeterminate = false;\n }\n\n this.requestUpdate('checked', old);\n\n if (this._inputElement) {\n this._inputElement.checked = v;\n this._inputElement.indeterminate = this.indeterminate;\n }\n\n this._updateVisualState();\n\n this.syncFormValue();\n this.syncValidity();\n }\n\n @property({ type: Boolean, reflect: true })\n get indeterminate() {\n return this._indeterminate;\n }\n set indeterminate(v: boolean) {\n const old = this._indeterminate;\n this._indeterminate = v;\n\n if (v && this.checked) this.checked = false;\n\n this.requestUpdate('indeterminate', old);\n\n if (this._inputElement) this._inputElement.indeterminate = v;\n\n this._updateVisualState();\n\n this.syncValidity();\n }\n\n static override styles = css`\n :host {\n display: block;\n position: relative;\n font-family: var(--sky-font);\n }\n\n :host([readonly]) .cbx {\n cursor: default;\n }\n\n /* Show focus UI whenever anything inside is focused */\n :host(:focus-within) .cbx span:first-child,\n :host(:focus) .cbx span:first-child {\n box-shadow: var(--sky-focus-ring);\n border-color: var(--checkbox-color) !important;\n }\n\n .checkbox-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--sky-space-1, 5px);\n }\n\n :host([disabled]) {\n pointer-events: none;\n opacity: var(--sky-opacity-disabled, 0.6);\n }\n\n .cbx {\n display: flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n gap: var(--sky-space-1, 5px);\n transition: color 0.2s ease;\n font-family: var(--sky-font);\n font-size: var(--sky-font-size-sm);\n line-height: var(--sky-line-height-snug, 1.25);\n color: var(--sky-text-primary);\n }\n\n .cbx span {\n display: inline-block;\n vertical-align: middle;\n }\n\n .cbx span:first-child {\n position: relative;\n box-sizing: border-box;\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n border-radius: min(6px, var(--sky-radius-primary));\n vertical-align: middle;\n background: var(--sky-glass-solid);\n border: 2px solid var(--sky-text-tertiary);\n display: flex;\n align-items: center;\n justify-content: center;\n transform: translateZ(0);\n contain: layout;\n overflow: hidden;\n transition:\n background-color 0.2s ease,\n border-color 0.2s ease,\n box-shadow 0.2s ease;\n }\n\n .cbx span:first-child svg {\n position: absolute;\n width: 12px;\n height: 10px;\n fill: none;\n stroke: var(--sky-on-color-fallback-light, var(--sky-text-white));\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 16px;\n stroke-dashoffset: 16px;\n transition:\n stroke-dashoffset 0.2s ease,\n transform 0.2s ease;\n transform: translate3d(0, 0, 0);\n }\n\n .cbx:hover span:first-child {\n background-color: var(--sky-hover-primary);\n border-color: var(--sky-text-tertiary);\n }\n\n input[type='checkbox']:checked + .cbx:hover span:first-child {\n box-shadow: var(--sky-box-shadow-hover);\n transition: box-shadow 0.2s ease;\n }\n\n .cbx span:first-child:before {\n content: '';\n inset: 0;\n width: auto;\n height: auto;\n background: var(--checkbox-color, var(--sky-active-primary));\n display: block;\n transform: scale(0);\n opacity: 0;\n border-radius: 50%;\n transition:\n transform 0.2s ease-out,\n opacity 0.2s ease-out;\n position: absolute;\n z-index: -1;\n pointer-events: none;\n }\n\n input[type='checkbox'] {\n position: absolute;\n opacity: 0;\n width: 1px;\n height: 1px;\n margin: 0;\n padding: 0;\n border: 0;\n }\n\n input[type='checkbox']:focus-visible + .cbx span:first-child,\n input[type='checkbox']:focus + .cbx span:first-child {\n border-color: var(--sky-text-tertiary);\n outline: none;\n }\n\n input[type='checkbox']:checked + .cbx span:first-child {\n background: var(--checkbox-color, var(--sky-active-primary));\n border-color: var(--checkbox-color, var(--sky-active-primary));\n\n transform: none; /* Ensure no transform applied */\n }\n\n input[type='checkbox']:checked + .cbx span:first-child svg.checkmark {\n stroke-dashoffset: 0;\n transition:\n stroke-dashoffset 0.2s ease-in-out 0.1s,\n transform 0.2s ease-in-out 0.1s;\n }\n\n input[type='checkbox']:not(:checked) + .cbx span:first-child svg.checkmark {\n transition: opacity 0.2s ease-in-out;\n opacity: 0;\n }\n\n input[type='checkbox']:checked + .cbx span:first-child:before {\n transform: scale(3.5);\n opacity: 0;\n transition:\n transform 0.2s ease-out,\n opacity 0.2s ease-out;\n }\n\n .cbx.checked span:first-child {\n background: var(--checkbox-color, var(--sky-active-primary));\n border-color: var(--checkbox-color, var(--sky-active-primary));\n }\n .cbx.checked span:first-child svg.checkmark {\n stroke-dashoffset: 0;\n transition:\n stroke-dashoffset 0.2s ease-in-out 0.1s,\n transform 0.2s ease-in-out 0.1s;\n }\n\n .indeterminate-line {\n width: 10px;\n height: 2px;\n background-color: var(\n --sky-on-color-fallback-light,\n var(--sky-text-white)\n );\n position: absolute;\n border-radius: 1px;\n transition:\n opacity 0.2s ease,\n transform 0.2s ease;\n opacity: 0;\n transform: scaleX(0);\n }\n\n .indeterminate-active {\n opacity: 1;\n transform: scaleX(1);\n }\n\n .checked .checkmark {\n stroke-dashoffset: 0;\n }\n\n .indeterminate .checkmark {\n display: none;\n }\n\n .indeterminate .indeterminate-line {\n opacity: 1;\n transform: scaleX(1);\n }\n\n .error-message {\n font-size: var(--sky-font-size-xs);\n color: var(--sky-danger-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n pointer-events: none;\n margin-left: var(--sky-space-1, 5px);\n width: 100%;\n text-align: start;\n font-family: var(--sky-font);\n }\n :dir(rtl) .error-message {\n margin-right: var(--sky-space-1, 5px);\n margin-left: unset;\n }\n\n :host([validationactive]:invalid) .cbx span:first-child {\n border-color: var(--sky-danger-primary);\n }\n :host([validationactive]:invalid) .cbx span:first-child svg.checkmark {\n stroke-dashoffset: 0;\n }\n :host([validationactive]:invalid) .cbx span:first-child:before {\n transform: scale(3.5);\n opacity: 0;\n }\n :host([validationactive]:invalid) .error-message {\n display: block;\n }\n\n :host([indeterminate]) .indeterminate-line {\n opacity: 1;\n transform: scaleX(1);\n }\n :host([indeterminate]) .cbx span:first-child {\n background-color: var(--checkbox-color);\n border-color: var(--checkbox-color);\n }\n\n .checkbox-wrapper.no-text {\n gap: 0;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .cbx,\n .cbx span:first-child,\n .cbx span:first-child svg,\n .cbx span:first-child:before,\n .indeterminate-line {\n transition: none;\n }\n }\n\n ${unsafeCSS(\n cssOnFillEnhance([\n {\n selector:\n 'input[type=\"checkbox\"]:checked + .cbx span:first-child svg, .cbx.checked span:first-child svg',\n fillVar: 'var(--checkbox-color, var(--sky-active-primary))',\n property: 'stroke',\n },\n {\n selector: '.indeterminate-line, .indeterminate .indeterminate-line',\n fillVar: 'var(--checkbox-color, var(--sky-active-primary))',\n property: 'background-color',\n },\n ])\n )}\n `;\n\n protected override getFormValue(): FormState {\n if (!this.name) return null;\n if (this.disabled) return null;\n\n if (!this.checked) return null;\n\n if (this.value && this.value.trim() !== '') return this.value;\n\n return 'on';\n }\n\n protected override setValueFromFormState(state: FormState): void {\n if (state === null) {\n this.checked = false;\n this.indeterminate = false;\n return;\n }\n\n if (typeof state === 'string') {\n if (this.value && this.value.trim() !== '') {\n this.checked = state === this.value;\n } else {\n this.checked = state === 'on' || state === 'true' || state === '1';\n }\n this.indeterminate = false;\n }\n }\n\n protected override getValidityAnchor(): HTMLElement | undefined {\n return (\n (this.shadowRoot?.querySelector(\n 'input[type=\"checkbox\"]'\n ) as HTMLElement) ?? undefined\n );\n }\n\n protected override isEmpty(): boolean {\n return !this.checked;\n }\n\n protected override getNativeControl(): HTMLElement | null {\n return this.shadowRoot?.querySelector(\n 'input[type=\"checkbox\"]'\n ) as HTMLInputElement | null;\n }\n\n protected override onFormReset(): void {\n this.checked = this.defaultChecked;\n this.indeterminate = false;\n\n this.validationErrors = [];\n this.invalid = false;\n this.validationActive = false;\n }\n\n override willUpdate(changed: Map<string | number | symbol, unknown>): void {\n if (changed.has('color')) {\n this.style.setProperty('--checkbox-color', resolveColor(this.color));\n }\n }\n\n override updated(changed: Map<string, unknown>): void {\n super.updated(changed);\n\n if (!this._inputElement) {\n this._inputElement = this.shadowRoot?.querySelector(\n 'input[type=\"checkbox\"]'\n ) as HTMLInputElement;\n }\n\n if (this._inputElement) {\n this._inputElement.checked = this.checked;\n this._inputElement.indeterminate = this.indeterminate;\n this._inputElement.disabled = this.disabled || this.readonly;\n }\n\n this._updateVisualState();\n\n if (\n changed.has('checked') ||\n changed.has('name') ||\n changed.has('disabled') ||\n changed.has('readonly') ||\n changed.has('required') ||\n changed.has('value')\n ) {\n this.syncFormValue();\n this.syncValidity();\n }\n }\n\n private handleChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n\n if (this.disabled || this.readonly) {\n if (this._inputElement) {\n this._inputElement.checked = this.checked;\n this._inputElement.indeterminate = this.indeterminate;\n }\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n this.checked = target.checked;\n\n // UI validation\n this.validateInput();\n\n const emittedValue =\n this.value && this.value.trim() !== ''\n ? this.checked\n ? this.value\n : undefined\n : this.checked;\n\n this.dispatchEvent(\n new CustomEvent<SkyCheckboxValueChangedDetail>('value-changed', {\n detail: { checked: this.checked, value: emittedValue },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private validateInput(): boolean {\n if (!this.validationActive) return true;\n\n this.validationErrors = [];\n if (this.required && !this.checked) {\n this.validationErrors = [this.requiredMessage]; // from base\n }\n\n this.dispatchEvent(\n new CustomEvent<SkyCheckboxValidationErrorDetail>('validation-error', {\n detail: { errors: [...this.validationErrors] },\n bubbles: true,\n composed: true,\n })\n );\n\n const cbx = this.shadowRoot?.querySelector('.cbx') as HTMLElement | null;\n if (this.validationErrors.length) cbx?.classList.add('invalid');\n else cbx?.classList.remove('invalid');\n\n const isValid = this.validationErrors.length === 0;\n this.invalid = !isValid;\n\n return isValid;\n }\n\n /**\n * Sets checked state to `true`.\n *\n * @returns {void}\n */\n public check(): void {\n if (this.disabled || this.readonly) return;\n this.checked = true;\n this.indeterminate = false;\n }\n\n /**\n * Sets checked state to `false`.\n *\n * @returns {void}\n */\n public uncheck(): void {\n if (this.disabled || this.readonly) return;\n this.checked = false;\n this.indeterminate = false;\n }\n\n /**\n * Toggles checked state.\n *\n * @returns {void}\n */\n public toggle(): void {\n if (this.disabled || this.readonly) return;\n this.checked = !this.checked;\n this.indeterminate = false;\n }\n\n /**\n * Resets checkbox state to defaults and clears UI validation state.\n *\n * @returns {void}\n */\n public reset(): void {\n this.onFormReset();\n this.syncFormValue();\n this.syncValidity();\n\n this.dispatchEvent(\n new CustomEvent<SkyCheckboxValueClearedDetail>('value-cleared', {\n detail: { value: this.value, checked: this.checked },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _updateVisualState(): void {\n const cbx = this.shadowRoot?.querySelector('.cbx');\n if (!cbx) return;\n\n if (this.checked) {\n cbx.classList.add('checked');\n cbx.classList.remove('indeterminate');\n } else if (this.indeterminate) {\n cbx.classList.add('indeterminate');\n cbx.classList.remove('checked');\n } else {\n cbx.classList.remove('checked', 'indeterminate');\n }\n }\n\n private _slotHasMeaningfulContent(slotEl: HTMLSlotElement): boolean {\n const nodes = slotEl.assignedNodes({ flatten: true });\n return nodes.some((n) =>\n n.nodeType === Node.ELEMENT_NODE\n ? true\n : (n.textContent ?? '').trim().length > 0\n );\n }\n\n private _onSlotChange = (e: Event) => {\n const slot = e.target as HTMLSlotElement;\n const next = this._slotHasMeaningfulContent(slot);\n if (next !== this._hasMeaningfulSlot) this._hasMeaningfulSlot = next;\n };\n\n private get _hasTextContent(): boolean {\n return (\n !!this.prefix || !!this.suffix || !!this.label || this._hasMeaningfulSlot\n );\n }\n\n private handleBlur = (_e: FocusEvent): void => {\n this.validationActive = true;\n this.validateInput();\n\n const cbx = this.shadowRoot?.querySelector('.cbx');\n cbx?.classList.remove('active');\n\n this.syncValidity();\n };\n private _onKeyDown = (e: KeyboardEvent): void => {\n if (this.disabled || this.readonly) return;\n\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n this._inputElement?.click();\n }\n };\n\n override render() {\n const hasText = this._hasTextContent;\n const wrapperClasses = classMap({\n 'checkbox-wrapper': true,\n 'no-text': !hasText,\n });\n const labelClasses = classMap({\n cbx: true,\n checked: this.checked,\n indeterminate: this.indeterminate,\n });\n const boxClasses = classMap({\n box: true,\n 'box--checked': this.checked,\n 'box--indeterminate': this.indeterminate,\n 'box--invalid': this.validationErrors.length > 0,\n });\n const boxPart =\n 'box' +\n (this.checked ? ' box--checked' : '') +\n (this.indeterminate ? ' box--indeterminate' : '') +\n (this.validationErrors.length ? ' box--invalid' : '');\n\n return html`\n <div class=${wrapperClasses} part=\"wrapper\">\n <input\n type=\"checkbox\"\n id=\"${this._inputId}\"\n class=\"inp-cbx\"\n part=\"input\"\n .checked=\"${this.checked}\"\n @blur=${this.handleBlur}\n @keydown=${this._onKeyDown}\n .disabled=\"${this.disabled || this.readonly}\"\n .value=\"${this.value}\"\n @change=${this.handleChange}\n aria-checked=${this.indeterminate ? 'mixed' : this.checked}\n aria-invalid=\"${this.validationErrors.length > 0}\"\n aria-readonly=\"${this.readonly}\"\n />\n <label class=${labelClasses} part=\"label\" for=\"${this._inputId}\">\n <span part=${boxPart} class=${boxClasses}>\n <svg viewBox=\"0 0 12 10\" class=\"checkmark\" part=\"checkmark\">\n <polyline points=\"1.5 6 4.5 9 10.5 1\"></polyline>\n </svg>\n <div class=\"indeterminate-line\" part=\"indeterminate-line\"></div>\n </span>\n <slot @slotchange=${this._onSlotChange}></slot>\n ${when(hasText, () => {\n const textStyle = styleMap({\n textAlign: 'start',\n color: 'var(--sky-text-primary)',\n });\n const prefixStyle = styleMap({\n color: this.prefixColor,\n display: 'inline-block',\n });\n const suffixStyle = styleMap({\n color: this.suffixColor,\n display: 'inline-block',\n });\n return html`\n <span style=${textStyle} part=\"text\">\n <div style=${prefixStyle} part=\"prefix\">${this.prefix}</div>\n ${this._hasMeaningfulSlot ? nothing : this.label}\n <div style=${suffixStyle} part=\"suffix\">${this.suffix}</div>\n </span>\n `;\n })}\n </label>\n </div>\n ${when(\n this.showErrors &&\n this.validationErrors.length > 0 &&\n this.validationActive,\n () =>\n html`<div class=\"error-message\" part=\"error-message\">\n ${this.validationErrors[0]}\n </div>`\n )}\n `;\n }\n}\n"],"names":["SkyCheckbox","FormControlBase","constructor","super","arguments","this","label","id","value","color","defaultChecked","showErrors","prefix","suffix","prefixColor","suffixColor","validationActive","invalid","_checked","_indeterminate","validationErrors","_hasMeaningfulSlot","_inputId","Math","random","toString","slice","_onSlotChange","e","slot","target","next","_slotHasMeaningfulContent","handleBlur","_e","validateInput","cbx","shadowRoot","querySelector","classList","remove","syncValidity","_onKeyDown","disabled","readonly","key","preventDefault","_inputElement","click","checked","v","old","indeterminate","requestUpdate","_updateVisualState","syncFormValue","getFormValue","name","trim","setValueFromFormState","state","getValidityAnchor","isEmpty","getNativeControl","onFormReset","willUpdate","changed","has","style","setProperty","resolveColor","updated","handleChange","event","stopPropagation","emittedValue","dispatchEvent","CustomEvent","detail","bubbles","composed","required","requiredMessage","errors","length","add","isValid","check","uncheck","toggle","reset","slotEl","assignedNodes","flatten","some","n","nodeType","Node","ELEMENT_NODE","textContent","_hasTextContent","render","hasText","wrapperClasses","classMap","labelClasses","boxClasses","box","boxPart","html","when","textStyle","styleMap","textAlign","prefixStyle","display","suffixStyle","nothing","shadowRootOptions","LitElement","delegatesFocus","styles","css","unsafeCSS","cssOnFillEnhance","selector","fillVar","property","__decorateClass","type","String","prototype","Boolean","reflect","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sky-checkbox.js","sources":["../../src/sky-checkbox/sky-checkbox.ts"],"sourcesContent":["import { LitElement, html, css, nothing, unsafeCSS } from \"lit\";\nimport { property, customElement, state } from \"lit/decorators.js\";\nimport { when } from \"lit/directives/when.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { resolveColor } from \"../helper/utils/color-resolver\";\nimport { cssOnFillEnhance } from \"../helper/utils/contrast-color\";\nimport { FormControlBase, FormState } from \"../helper/internals/form-control-base\";\nimport { PresetController } from \"../helper/controllers/preset-controller\";\nimport { skyFocusRingHostStyles } from \"../helper/styles/focus-ring\";\n\nexport interface CheckboxProperties {\n label: string;\n checked: boolean;\n disabled: boolean;\n indeterminate: boolean;\n id: string;\n value: string;\n color: string;\n required: boolean;\n validationErrors: string[];\n validationActive: boolean;\n defaultChecked: boolean;\n requiredMessage: string;\n showErrors: boolean;\n prefix: string;\n suffix: string;\n prefixColor: string;\n suffixColor: string;\n}\n/** `checked` is always the boolean model; `value` keeps form/legacy semantics (see `handleChange`). */\nexport type SkyCheckboxValueChangedDetail = {\n checked: boolean;\n value: string | boolean | undefined;\n};\nexport type SkyCheckboxValidationErrorDetail = { errors: string[] };\nexport type SkyCheckboxValueClearedDetail = { value: string; checked: boolean };\n\n/**\n * @element sky-checkbox\n *\n * @summary Form-associated checkbox with validation, indeterminate state, and customizable label/prefix/suffix rendering.\n *\n * @status stable\n * @since 1.0.0\n *\n * @documentation https://sky-ui.com/components/checkbox\n *\n * @uiVModel checked value-changed detail=checked\n *\n * @slot - Default slot for the checkbox label or other content.\n * @slot prefix - Optional prefix content that can be placed before the label.\n * @slot suffix - Optional suffix content that can be placed after the label.\n *\n * @csspart wrapper - The wrapper element for the checkbox.\n * @csspart input - The native input element used for the checkbox.\n * @csspart label - The label element for the checkbox, used for styling.\n * @csspart box - The visual box for the checkbox, which includes the checkmark and indeterminate state.\n * @csspart checkmark - The checkmark icon that appears when the checkbox is checked.\n * @csspart indeterminate-line - The line representing the indeterminate state of the checkbox.\n * @csspart error-message - The error message displayed if the checkbox is invalid.\n *\n * @property {string} label - The label for the checkbox. Default: `\"\"`.\n * @property {boolean} checked - Whether the checkbox is checked. Default: `false`.\n * @property {boolean} indeterminate - Whether the checkbox is in the indeterminate state. Default: `false`.\n * @property {string} color - The color used for the checkbox and its checkmark. Default: `\"primary\"`.\n * @property {string} value - The value of the checkbox, which gets submitted with the form. Default: `\"\"`.\n * @property {boolean} showErrors - Whether to display validation error messages. Default: `false`.\n * @property {string} prefix - Optional prefix text or content before the label. Default: `\"\"`.\n * @property {string} suffix - Optional suffix text or content after the label. Default: `\"\"`.\n * @property {string} prefixColor - The color for the prefix text. Default: `\"\"`.\n * @property {string} suffixColor - The color for the suffix text. Default: `\"\"`.\n * @property {boolean} defaultChecked - Default checked state for reset operations. Default: `false`.\n * @property {string} preset - Named prop preset from nearest `sky-config-provider`. Default: `\"\"`.\n * @method check Sets checked state to `true`.\n * @method uncheck Sets checked state to `false`.\n * @method toggle Toggles checked state.\n * @method reset Resets checkbox state to defaults and clears UI validation state.\n *\n * @fires {CustomEvent<SkyCheckboxValueChangedDetail>} value-changed - Fired when checked state changes; `detail.checked` is always boolean (use for v-model). `detail.value` is the form token when the `value` prop is set, else mirrors `checked`.\n * @fires {CustomEvent<SkyCheckboxValidationErrorDetail>} validation-error - Fired when validation errors are updated.\n * @fires {CustomEvent<SkyCheckboxValueClearedDetail>} value-cleared - Fired when checkbox is reset programmatically.\n *\n * @example\n * ```html\n * <sky-checkbox label=\"Accept Terms\" required showerrors prefix=\"Legal\"></sky-checkbox>\n * ```\n * ```vue\n * <template>\n * <sky-checkbox label=\"Accept Terms\" required showerrors prefix=\"Legal\"></sky-checkbox>\n * </template>\n * ```\n * ```jsx\n * export default function Demo() {\n * return <sky-checkbox label=\"Accept Terms\" required showerrors prefix=\"Legal\"></sky-checkbox>;\n * }\n * ```\n */\n@customElement(\"sky-checkbox\")\nexport class SkyCheckbox extends FormControlBase {\n static override shadowRootOptions = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n @property({ type: String }) label = \"\";\n @property({ type: String }) override id = \"\";\n @property({ type: String }) value = \"\";\n @property({ type: String }) color = \"primary\";\n @property({ type: Boolean }) defaultChecked = false;\n @property({ type: Boolean }) showErrors = false;\n @property({ type: String }) override prefix = \"\";\n @property({ type: String }) suffix = \"\";\n @property({ type: String }) prefixColor = \"\";\n @property({ type: String }) suffixColor = \"\";\n @property({ type: Boolean, reflect: true }) validationActive: boolean = false;\n @property({ type: Boolean, reflect: true }) invalid: boolean = false;\n @state() private _checked = false;\n @state() private _indeterminate = false;\n @state() private validationErrors: string[] = [];\n @state() private _hasMeaningfulSlot = false;\n\n private _inputElement?: HTMLInputElement;\n private _inputId = `sky-cb-${Math.random().toString(36).slice(2)}`;\n\n @property({ type: Boolean, reflect: true })\n get checked() {\n return this._checked;\n }\n set checked(v: boolean) {\n const old = this._checked;\n this._checked = v;\n\n if (v && this.indeterminate) {\n this.indeterminate = false;\n if (this._inputElement) this._inputElement.indeterminate = false;\n }\n\n this.requestUpdate(\"checked\", old);\n\n if (this._inputElement) {\n this._inputElement.checked = v;\n this._inputElement.indeterminate = this.indeterminate;\n }\n\n this._updateVisualState();\n\n this.syncFormValue();\n this.syncValidity();\n }\n\n @property({ type: Boolean, reflect: true })\n get indeterminate() {\n return this._indeterminate;\n }\n set indeterminate(v: boolean) {\n const old = this._indeterminate;\n this._indeterminate = v;\n\n if (v && this.checked) this.checked = false;\n\n this.requestUpdate(\"indeterminate\", old);\n\n if (this._inputElement) this._inputElement.indeterminate = v;\n\n this._updateVisualState();\n\n this.syncValidity();\n }\n\n\n /** Named prop preset from nearest `sky-config-provider`. */\n @property({ type: String, reflect: true }) preset = \"\";\n\n private _presets = new PresetController(this);\n\n static override styles = [\n skyFocusRingHostStyles,\n css`\n :host {\n display: block;\n position: relative;\n font-family: var(--sky-font);\n /* Tint focus ring with the control color (not global active-primary). */\n --sky-focus-ring-color: var(--checkbox-color, var(--sky-active-primary));\n }\n\n :host([readonly]) .cbx {\n cursor: default;\n }\n\n /* Show focus UI whenever anything inside is focused */\n :host(:focus-within) .cbx span:first-child,\n :host(:focus) .cbx span:first-child {\n box-shadow: var(--sky-focus-ring);\n border-color: var(--checkbox-color, var(--sky-active-primary)) !important;\n }\n\n .checkbox-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--sky-space-1, 5px);\n }\n\n :host([disabled]) {\n pointer-events: none;\n opacity: var(--sky-opacity-disabled, 0.6);\n }\n\n .cbx {\n display: flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n gap: var(--sky-space-1, 5px);\n transition: color 0.2s ease;\n font-family: var(--sky-font);\n font-size: var(--sky-font-size-sm);\n line-height: var(--sky-line-height-snug, 1.25);\n color: var(--sky-text-primary);\n }\n\n .cbx span {\n display: inline-block;\n vertical-align: middle;\n }\n\n .cbx span:first-child {\n position: relative;\n box-sizing: border-box;\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n border-radius: min(6px, var(--sky-radius-primary));\n vertical-align: middle;\n background: var(--sky-glass-solid);\n border: 2px solid var(--sky-text-tertiary);\n display: flex;\n align-items: center;\n justify-content: center;\n transform: translateZ(0);\n contain: layout;\n /* visible so --sky-focus-ring (outer box-shadow) is not clipped */\n overflow: visible;\n transition: background-color 0.2s ease, border-color 0.2s ease,\n box-shadow 0.2s ease;\n }\n\n .cbx span:first-child svg {\n position: absolute;\n width: 12px;\n height: 10px;\n fill: none;\n stroke: var(--sky-on-color-fallback-light, var(--sky-text-white));\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 16px;\n stroke-dashoffset: 16px;\n transition: stroke-dashoffset 0.2s ease, transform 0.2s ease;\n transform: translate3d(0, 0, 0);\n }\n\n .cbx:hover span:first-child {\n background-color: var(--sky-hover-primary);\n border-color: var(--sky-text-tertiary);\n }\n\n input[type=\"checkbox\"]:checked + .cbx:hover span:first-child {\n box-shadow: var(--sky-box-shadow-hover);\n transition: box-shadow 0.2s ease;\n }\n\n /* Keep focus ring above hover shadow when both apply */\n :host(:focus-within) input[type=\"checkbox\"]:checked + .cbx:hover span:first-child,\n :host(:focus) input[type=\"checkbox\"]:checked + .cbx:hover span:first-child {\n box-shadow: var(--sky-focus-ring);\n }\n\n .cbx span:first-child:before {\n content: \"\";\n inset: 0;\n width: auto;\n height: auto;\n background: var(--checkbox-color, var(--sky-active-primary));\n display: block;\n transform: scale(0);\n opacity: 0;\n border-radius: 50%;\n transition: transform 0.2s ease-out, opacity 0.2s ease-out;\n position: absolute;\n z-index: -1;\n pointer-events: none;\n }\n\n input[type=\"checkbox\"] {\n position: absolute;\n opacity: 0;\n width: 1px;\n height: 1px;\n margin: 0;\n padding: 0;\n border: 0;\n }\n\n input[type=\"checkbox\"]:focus-visible + .cbx span:first-child,\n input[type=\"checkbox\"]:focus + .cbx span:first-child {\n outline: none;\n }\n\n input[type=\"checkbox\"]:checked + .cbx span:first-child {\n background: var(--checkbox-color, var(--sky-active-primary));\n border-color: var(--checkbox-color, var(--sky-active-primary));\n transform: none;\n }\n\n input[type=\"checkbox\"]:checked + .cbx span:first-child svg.checkmark {\n stroke-dashoffset: 0;\n transition: stroke-dashoffset 0.2s ease-in-out 0.1s,\n transform 0.2s ease-in-out 0.1s;\n }\n\n input[type=\"checkbox\"]:not(:checked) + .cbx span:first-child svg.checkmark {\n transition: opacity 0.2s ease-in-out;\n opacity: 0;\n }\n\n input[type=\"checkbox\"]:checked + .cbx span:first-child:before {\n transform: scale(3.5);\n opacity: 0;\n transition: transform 0.2s ease-out, opacity 0.2s ease-out;\n }\n\n .cbx.checked span:first-child {\n background: var(--checkbox-color, var(--sky-active-primary));\n border-color: var(--checkbox-color, var(--sky-active-primary));\n }\n\n .cbx.checked span:first-child svg.checkmark {\n stroke-dashoffset: 0;\n transition: stroke-dashoffset 0.2s ease-in-out 0.1s,\n transform 0.2s ease-in-out 0.1s;\n }\n\n .indeterminate-line {\n width: 10px;\n height: 2px;\n background-color: var(--sky-on-color-fallback-light, var(--sky-text-white));\n position: absolute;\n border-radius: 1px;\n transition: opacity 0.2s ease, transform 0.2s ease;\n opacity: 0;\n transform: scaleX(0);\n }\n\n .indeterminate-active {\n opacity: 1;\n transform: scaleX(1);\n }\n\n .checked .checkmark {\n stroke-dashoffset: 0;\n }\n\n .indeterminate .checkmark {\n display: none;\n }\n\n .indeterminate .indeterminate-line {\n opacity: 1;\n transform: scaleX(1);\n }\n\n\n .error-message {\n font-size: var(--sky-font-size-xs);\n color: var(--sky-danger-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n pointer-events: none;\n margin-left: var(--sky-space-1, 5px);\n width: 100%;\n text-align: start;\n font-family: var(--sky-font);\n }\n :dir(rtl) .error-message {\n margin-right: var(--sky-space-1, 5px);\n margin-left: unset;\n }\n\n :host([validationactive]:invalid) .cbx span:first-child {\n\n border-color: var(--sky-danger-primary);\n }\n :host([validationactive]:invalid) .cbx span:first-child svg.checkmark {\n stroke-dashoffset: 0;\n }\n :host([validationactive]:invalid) .cbx span:first-child:before {\n transform: scale(3.5);\n opacity: 0;\n }\n :host([validationactive]:invalid) .error-message {\n display: block;\n }\n\n :host([indeterminate]) .indeterminate-line {\n opacity: 1;\n transform: scaleX(1);\n }\n :host([indeterminate]) .cbx span:first-child {\n background-color: var(--checkbox-color);\n border-color: var(--checkbox-color);\n }\n\n .checkbox-wrapper.no-text {\n gap: 0;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .cbx,\n .cbx span:first-child,\n .cbx span:first-child svg,\n .cbx span:first-child:before,\n .indeterminate-line {\n transition: none;\n }\n }\n\n ${unsafeCSS(\n cssOnFillEnhance([\n {\n selector:\n 'input[type=\"checkbox\"]:checked + .cbx span:first-child svg, .cbx.checked span:first-child svg',\n fillVar: \"var(--checkbox-color, var(--sky-active-primary))\",\n property: \"stroke\",\n },\n {\n selector: \".indeterminate-line, .indeterminate .indeterminate-line\",\n fillVar: \"var(--checkbox-color, var(--sky-active-primary))\",\n property: \"background-color\",\n },\n ]),\n )}\n `,\n ];\n\n protected override getFormValue(): FormState {\n if (!this.name) return null;\n if (this.disabled) return null;\n\n if (!this.checked) return null;\n\n if (this.value && this.value.trim() !== \"\") return this.value;\n\n return \"on\";\n }\n\n protected override setValueFromFormState(state: FormState): void {\n if (state === null) {\n this.checked = false;\n this.indeterminate = false;\n return;\n }\n\n if (typeof state === \"string\") {\n if (this.value && this.value.trim() !== \"\") {\n this.checked = state === this.value;\n } else {\n this.checked = state === \"on\" || state === \"true\" || state === \"1\";\n }\n this.indeterminate = false;\n }\n }\n\n protected override getValidityAnchor(): HTMLElement | undefined {\n return (this.shadowRoot?.querySelector('input[type=\"checkbox\"]') as HTMLElement) ?? undefined;\n }\n\n protected override isEmpty(): boolean {\n return !this.checked;\n }\n\n protected override getNativeControl(): HTMLElement | null {\n return this.shadowRoot?.querySelector('input[type=\"checkbox\"]') as HTMLInputElement | null;\n }\n\n protected override onFormReset(): void {\n this.checked = this.defaultChecked;\n this.indeterminate = false;\n\n this.validationErrors = [];\n this.invalid = false;\n this.validationActive = false;\n }\n\n override updated(changed: Map<string, unknown>): void {\n super.updated(changed);\n\n // After PresetController hostUpdate — color may come from presets.\n this.style.setProperty(\"--checkbox-color\", resolveColor(this.color));\n\n if (!this._inputElement) {\n this._inputElement = this.shadowRoot?.querySelector(\n 'input[type=\"checkbox\"]'\n ) as HTMLInputElement;\n }\n\n if (this._inputElement) {\n this._inputElement.checked = this.checked;\n this._inputElement.indeterminate = this.indeterminate;\n this._inputElement.disabled = this.disabled || this.readonly;\n }\n\n this._updateVisualState();\n\n if (\n changed.has(\"checked\") ||\n changed.has(\"name\") ||\n changed.has(\"disabled\") ||\n changed.has(\"readonly\") ||\n changed.has(\"required\") ||\n changed.has(\"value\")\n ) {\n this.syncFormValue();\n this.syncValidity();\n }\n }\n\n private handleChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n\n if (this.disabled || this.readonly) {\n if (this._inputElement) {\n this._inputElement.checked = this.checked;\n this._inputElement.indeterminate = this.indeterminate;\n }\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n this.checked = target.checked;\n\n this.validateInput();\n\n const emittedValue =\n this.value && this.value.trim() !== \"\"\n ? this.checked ? this.value : undefined\n : this.checked;\n\n this.dispatchEvent(\n new CustomEvent<SkyCheckboxValueChangedDetail>(\"value-changed\", {\n detail: { checked: this.checked, value: emittedValue },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private validateInput(): boolean {\n if (!this.validationActive) return true;\n\n this.validationErrors = [];\n if (this.required && !this.checked) {\n this.validationErrors = [this.requiredMessage]; // from base\n }\n\n this.dispatchEvent(\n new CustomEvent<SkyCheckboxValidationErrorDetail>(\"validation-error\", {\n detail: { errors: [...this.validationErrors] },\n bubbles: true,\n composed: true,\n })\n );\n\n const cbx = this.shadowRoot?.querySelector(\".cbx\") as HTMLElement | null;\n if (this.validationErrors.length) cbx?.classList.add(\"invalid\");\n else cbx?.classList.remove(\"invalid\");\n\n const isValid = this.validationErrors.length === 0;\n this.invalid = !isValid;\n\n return isValid;\n }\n\n /**\n * Sets checked state to `true`.\n *\n * @returns {void}\n */\n public check(): void {\n if (this.disabled || this.readonly) return;\n this.checked = true;\n this.indeterminate = false;\n }\n\n /**\n * Sets checked state to `false`.\n *\n * @returns {void}\n */\n public uncheck(): void {\n if (this.disabled || this.readonly) return;\n this.checked = false;\n this.indeterminate = false;\n }\n\n /**\n * Toggles checked state.\n *\n * @returns {void}\n */\n public toggle(): void {\n if (this.disabled || this.readonly) return;\n this.checked = !this.checked;\n this.indeterminate = false;\n }\n\n /**\n * Resets checkbox state to defaults and clears UI validation state.\n *\n * @returns {void}\n */\n public reset(): void {\n this.onFormReset();\n this.syncFormValue();\n this.syncValidity();\n\n this.dispatchEvent(\n new CustomEvent<SkyCheckboxValueClearedDetail>(\"value-cleared\", {\n detail: { value: this.value, checked: this.checked },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _updateVisualState(): void {\n const cbx = this.shadowRoot?.querySelector(\".cbx\");\n if (!cbx) return;\n\n if (this.checked) {\n cbx.classList.add(\"checked\");\n cbx.classList.remove(\"indeterminate\");\n } else if (this.indeterminate) {\n cbx.classList.add(\"indeterminate\");\n cbx.classList.remove(\"checked\");\n } else {\n cbx.classList.remove(\"checked\", \"indeterminate\");\n }\n }\n\n private _slotHasMeaningfulContent(slotEl: HTMLSlotElement): boolean {\n const nodes = slotEl.assignedNodes({ flatten: true });\n return nodes.some((n) =>\n n.nodeType === Node.ELEMENT_NODE\n ? true\n : (n.textContent ?? \"\").trim().length > 0\n );\n }\n\n private _onSlotChange = (e: Event) => {\n const slot = e.target as HTMLSlotElement;\n const next = this._slotHasMeaningfulContent(slot);\n if (next !== this._hasMeaningfulSlot) this._hasMeaningfulSlot = next;\n };\n\n private get _hasTextContent(): boolean {\n return !!this.prefix || !!this.suffix || !!this.label || this._hasMeaningfulSlot;\n }\n\n private handleBlur = (_e: FocusEvent): void => {\n this.validationActive = true;\n this.validateInput();\n\n const cbx = this.shadowRoot?.querySelector(\".cbx\");\n cbx?.classList.remove(\"active\");\n\n this.syncValidity();\n };\n private _onKeyDown = (e: KeyboardEvent): void => {\n if (this.disabled || this.readonly) return;\n\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n this._inputElement?.click();\n }\n };\n\n\n override render() {\n const hasText = this._hasTextContent;\n const wrapperClasses = classMap({\n \"checkbox-wrapper\": true,\n \"no-text\": !hasText,\n });\n const labelClasses = classMap({\n cbx: true,\n checked: this.checked,\n indeterminate: this.indeterminate,\n });\n const boxClasses = classMap({\n box: true,\n \"box--checked\": this.checked,\n \"box--indeterminate\": this.indeterminate,\n \"box--invalid\": this.validationErrors.length > 0,\n });\n const boxPart =\n \"box\" +\n (this.checked ? \" box--checked\" : \"\") +\n (this.indeterminate ? \" box--indeterminate\" : \"\") +\n (this.validationErrors.length ? \" box--invalid\" : \"\");\n\n return html`\n <div class=${wrapperClasses} part=\"wrapper\">\n <input\n type=\"checkbox\"\n id=\"${this._inputId}\"\n class=\"inp-cbx\"\n part=\"input\"\n .checked=\"${this.checked}\"\n @blur=${this.handleBlur}\n @keydown=${this._onKeyDown}\n .disabled=\"${this.disabled || this.readonly}\"\n .value=\"${this.value}\"\n @change=${this.handleChange}\n aria-checked=${this.indeterminate ? \"mixed\" : this.checked}\n aria-invalid=\"${this.validationErrors.length > 0}\"\n aria-readonly=\"${this.readonly}\"\n />\n <label class=${labelClasses} part=\"label\" for=\"${this._inputId}\">\n <span part=${boxPart} class=${boxClasses}>\n <svg viewBox=\"0 0 12 10\" class=\"checkmark\" part=\"checkmark\">\n <polyline points=\"1.5 6 4.5 9 10.5 1\"></polyline>\n </svg>\n <div class=\"indeterminate-line\" part=\"indeterminate-line\"></div>\n </span>\n <slot @slotchange=${this._onSlotChange}></slot>\n ${when(\n hasText,\n () => {\n const textStyle = styleMap({ textAlign: \"start\", color: \"var(--sky-text-primary)\" });\n const prefixStyle = styleMap({ color: this.prefixColor, display: \"inline-block\" });\n const suffixStyle = styleMap({ color: this.suffixColor, display: \"inline-block\" });\n return html`\n <span style=${textStyle} part=\"text\">\n <div style=${prefixStyle} part=\"prefix\">\n ${this.prefix}\n </div>\n ${this._hasMeaningfulSlot ? nothing : this.label}\n <div style=${suffixStyle} part=\"suffix\">\n ${this.suffix}\n </div>\n </span>\n `;\n },\n )}\n </label>\n </div>\n ${when(\n this.showErrors &&\n this.validationErrors.length > 0 &&\n this.validationActive,\n () => html`<div class=\"error-message\" part=\"error-message\">\n ${this.validationErrors[0]}\n </div>`,\n )}\n `;\n }\n}"],"names":["SkyCheckbox","FormControlBase","constructor","super","arguments","this","label","id","value","color","defaultChecked","showErrors","prefix","suffix","prefixColor","suffixColor","validationActive","invalid","_checked","_indeterminate","validationErrors","_hasMeaningfulSlot","_inputId","Math","random","toString","slice","preset","_presets","PresetController","_onSlotChange","e","slot","target","next","_slotHasMeaningfulContent","handleBlur","_e","validateInput","cbx","shadowRoot","querySelector","classList","remove","syncValidity","_onKeyDown","disabled","readonly","key","preventDefault","_inputElement","click","checked","v","old","indeterminate","requestUpdate","_updateVisualState","syncFormValue","getFormValue","name","trim","setValueFromFormState","state","getValidityAnchor","isEmpty","getNativeControl","onFormReset","updated","changed","style","setProperty","resolveColor","has","handleChange","event","stopPropagation","emittedValue","dispatchEvent","CustomEvent","detail","bubbles","composed","required","requiredMessage","errors","length","add","isValid","check","uncheck","toggle","reset","slotEl","assignedNodes","flatten","some","n","nodeType","Node","ELEMENT_NODE","textContent","_hasTextContent","render","hasText","wrapperClasses","classMap","labelClasses","boxClasses","box","boxPart","html","when","textStyle","styleMap","textAlign","prefixStyle","display","suffixStyle","nothing","shadowRootOptions","LitElement","delegatesFocus","styles","skyFocusRingHostStyles","css","unsafeCSS","cssOnFillEnhance","selector","fillVar","property","__decorateClass","type","String","prototype","Boolean","reflect","customElement"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { LitElement } from
|
|
2
|
-
export type SkyChipVariant =
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export type SkyChipVariant = "solid" | "flat" | "shadow" | "bordered" | "faded" | "light" | "dot";
|
|
3
3
|
export type SkyChipRemovedEventDetail = {
|
|
4
4
|
label: string;
|
|
5
5
|
};
|
|
@@ -34,6 +34,7 @@ export type SkyChipRemovedEventDetail = {
|
|
|
34
34
|
* @property {boolean} loading - Whether the chip is in a loading state. Default: `false`.
|
|
35
35
|
* @property {boolean} disabled - Whether the chip is disabled. Default: `false`.
|
|
36
36
|
* @property {SkyChipVariant} variant - Visual style variant. Default: `"flat"`.
|
|
37
|
+
* @property {string} preset - Named prop preset from nearest `sky-config-provider`. Default: `""`.
|
|
37
38
|
* @method removeChip Dispatches `chip-removed` and removes the chip from the DOM.
|
|
38
39
|
*
|
|
39
40
|
* @fires {CustomEvent<SkyChipRemovedEventDetail>} chip-removed - Fired when the chip is removed by user action.
|
|
@@ -74,7 +75,10 @@ export declare class SkyChip extends LitElement {
|
|
|
74
75
|
loading: boolean;
|
|
75
76
|
disabled: boolean;
|
|
76
77
|
variant: SkyChipVariant;
|
|
77
|
-
|
|
78
|
+
/** Named prop preset from nearest `sky-config-provider`. */
|
|
79
|
+
preset: string;
|
|
80
|
+
private _presets;
|
|
81
|
+
static styles: import("lit").CSSResult[];
|
|
78
82
|
/** Updates host CSS variables from current color token/value. */
|
|
79
83
|
protected updated(): void;
|
|
80
84
|
/** Size resolver similar to button: controls padding + font-size */
|
|
@@ -1,45 +1,42 @@
|
|
|
1
|
-
import{unsafeCSS as o,css as t,LitElement as e,nothing as
|
|
1
|
+
import{unsafeCSS as o,css as t,LitElement as e,nothing as r,html as i}from"lit";import{property as s,customElement as n}from"lit/decorators.js";import{when as a}from"lit/directives/when.js";import{styleMap as l}from"lit/directives/style-map.js";import{classMap as c}from"lit/directives/class-map.js";import{resolveColor as p,isDefaultColorToken as h,resolveInkColorForToken as d,resolveAccentColorForToken as y}from"../helper/utils/color-resolver.js";import{cssOnFillEnhance as f,ON_COLOR_FALLBACK_LIGHT as u}from"../helper/utils/contrast-color.js";import{resolveRadius as g}from"../helper/utils/size-resolver.js";import{PresetController as v}from"../helper/controllers/preset-controller.js";import{SkyIcon as b}from"../sky-icon/sky-icon.js";import{skyFocusRingHostStyles as m}from"../helper/styles/focus-ring.js";var x=Object.defineProperty,k=Object.getOwnPropertyDescriptor,S=(o,t,e,r)=>{for(var i,s=r>1?void 0:r?k(t,e):t,n=o.length-1;n>=0;n--)(i=o[n])&&(s=(r?i(t,e,s):i(s))||s);return r&&s&&x(t,e,s),s};let w=class extends e{constructor(){super(...arguments),this.label="",this.removable=!1,this.color="primary",this.radius="full",this.size="md",this.iconL=null,this.iconR=null,this.loading=!1,this.disabled=!1,this.variant="flat",this.preset="",this._presets=new v(this),this._onSlotChange=()=>{this.requestUpdate()}}updated(){const o=p(this.color),t=h(this.color)?"var(--sky-text-primary)":u;this.style.setProperty("--chip-bg-color",o),this.style.setProperty("--chip-text-color",t),h(this.color)?(this.style.setProperty("--chip-ink-color",d(this.color)),this.style.setProperty("--chip-accent-color",y(this.color)),this.style.setProperty("--chip-fill-color","var(--sky-hover-tertiary)")):(this.style.removeProperty("--chip-ink-color"),this.style.removeProperty("--chip-accent-color"),this.style.removeProperty("--chip-fill-color"))}_resolveSize(o){const t={xs:{padding:"2px 4px",fontSize:"11px"},sm:{padding:"3px 6px",fontSize:"12px"},md:{padding:"4px 8px",fontSize:"13px"},lg:{padding:"5px 10px",fontSize:"14px"},xl:{padding:"6px 12px",fontSize:"15px"}};if(t[o])return t[o];const e=String(o).trim().match(/^([\d.]+)(px|rem|em)?$/i),r=e?.[2]||"px",i=e?parseFloat(e[1]):13,s=`${i}${r}`,n=(o,t,e)=>Math.max(t,Math.min(e,o)),a=n(.4*i,2,10),l=n(.8*i,6,16),c=o=>`${Math.round(100*o)/100}${r}`;return{padding:`${c(a)} ${c(l)}`,fontSize:s}}removeChip(){const o=new CustomEvent("chip-removed",{detail:{label:this.label},bubbles:!0,composed:!0});this.dispatchEvent(o),this.remove()}_slotHasMeaningfulContent(o){return o.assignedNodes({flatten:!0}).some(o=>o.nodeType===Node.ELEMENT_NODE||(o.textContent??"").trim().length>0)}_hasPrefixSlotContent(){if(this.querySelector('[slot="prefix"]'))return!0;const o=this.shadowRoot?.querySelector('slot[name="prefix"]');return!!o&&this._slotHasMeaningfulContent(o)}_hasSuffixSlotContent(){if(this.querySelector('[slot="suffix"]'))return!0;const o=this.shadowRoot?.querySelector('slot[name="suffix"]');return!!o&&this._slotHasMeaningfulContent(o)}_hasDefaultSlotContent(){for(const o of Array.from(this.childNodes)){if(o.nodeType===Node.ELEMENT_NODE){const t=o.getAttribute("slot");if("prefix"===t||"suffix"===t)continue;return!0}if((o.textContent??"").trim().length>0)return!0}const o=this.shadowRoot?.querySelector("slot:not([name])");return!!o&&this._slotHasMeaningfulContent(o)}render(){const o=this._resolveSize(this.size),t={padding:o.padding,borderRadius:g(this.radius),fontSize:o.fontSize};return i`
|
|
2
2
|
<div
|
|
3
3
|
class=${c({chip:!0,[this.variant]:!0,loading:this.loading})}
|
|
4
4
|
style=${l(t)}
|
|
5
5
|
part="chip"
|
|
6
6
|
>
|
|
7
7
|
<slot name="prefix" @slotchange=${this._onSlotChange}></slot>
|
|
8
|
-
${a(!this._hasPrefixSlotContent()&&this.iconL,()=>
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
${a(!this._hasPrefixSlotContent()&&this.iconL,()=>i`
|
|
9
|
+
<sky-icon class="icon" part="icon" icon="${this.iconL}"></sky-icon>
|
|
10
|
+
`)}
|
|
11
11
|
<slot @slotchange=${this._onSlotChange}></slot>
|
|
12
|
-
${this._hasDefaultSlotContent()?
|
|
12
|
+
${this._hasDefaultSlotContent()?r:this.label}
|
|
13
13
|
<slot name="suffix" @slotchange=${this._onSlotChange}></slot>
|
|
14
|
-
${a(!this._hasSuffixSlotContent()&&this.iconR,()=>
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
<div class="loading-overlay" part="loading-overlay">
|
|
34
|
-
<div class="loading-spinner" part="loading-spinner"></div>
|
|
35
|
-
</div>
|
|
36
|
-
`)}
|
|
14
|
+
${a(!this._hasSuffixSlotContent()&&this.iconR,()=>i`
|
|
15
|
+
<sky-icon class="icon icon-right" part="icon" icon="${this.iconR}"></sky-icon>
|
|
16
|
+
`)}
|
|
17
|
+
${a(this.removable,()=>i`
|
|
18
|
+
<button
|
|
19
|
+
class="close-button"
|
|
20
|
+
part="close-button"
|
|
21
|
+
type="button"
|
|
22
|
+
aria-label="Remove chip"
|
|
23
|
+
@click=${this.removeChip}
|
|
24
|
+
>
|
|
25
|
+
<sky-icon icon="ion:close"></sky-icon>
|
|
26
|
+
</button>
|
|
27
|
+
`)}
|
|
28
|
+
${a(this.loading,()=>i`
|
|
29
|
+
<div class="loading-overlay" part="loading-overlay">
|
|
30
|
+
<div class="loading-spinner" part="loading-spinner"></div>
|
|
31
|
+
</div>
|
|
32
|
+
`)}
|
|
37
33
|
</div>
|
|
38
|
-
`}};
|
|
34
|
+
`}};w.dependencies={"sky-icon":b},w.styles=[m,t`
|
|
39
35
|
:host {
|
|
40
36
|
display: inline-block;
|
|
41
37
|
font-family: var(--sky-font);
|
|
42
38
|
z-index: 1;
|
|
39
|
+
--sky-focus-ring-color: var(--chip-bg-color, var(--sky-active-primary));
|
|
43
40
|
}
|
|
44
41
|
|
|
45
42
|
:host([disabled]) {
|
|
@@ -56,11 +53,8 @@ import{unsafeCSS as o,css as t,LitElement as e,nothing as i,html as r}from"lit";
|
|
|
56
53
|
border-radius: var(--sky-radius-secondary);
|
|
57
54
|
color: var(--chip-text-color);
|
|
58
55
|
font-weight: var(--sky-font-weight-medium, 500);
|
|
59
|
-
transition:
|
|
60
|
-
|
|
61
|
-
color 0.3s ease,
|
|
62
|
-
box-shadow 0.2s ease,
|
|
63
|
-
transform 0.2s ease;
|
|
56
|
+
transition: background-color 0.3s ease, color 0.3s ease,
|
|
57
|
+
box-shadow 0.2s ease, transform 0.2s ease;
|
|
64
58
|
cursor: pointer;
|
|
65
59
|
background-color: var(--chip-bg-color);
|
|
66
60
|
}
|
|
@@ -80,9 +74,7 @@ import{unsafeCSS as o,css as t,LitElement as e,nothing as i,html as r}from"lit";
|
|
|
80
74
|
border-radius: var(--sky-radius-full);
|
|
81
75
|
cursor: pointer;
|
|
82
76
|
color: var(--sky-text-primary);
|
|
83
|
-
transition:
|
|
84
|
-
color 0.2s ease,
|
|
85
|
-
background-color 0.2s ease;
|
|
77
|
+
transition: color 0.2s ease, background-color 0.2s ease;
|
|
86
78
|
}
|
|
87
79
|
|
|
88
80
|
.close-button sky-icon {
|
|
@@ -108,7 +100,7 @@ import{unsafeCSS as o,css as t,LitElement as e,nothing as i,html as r}from"lit";
|
|
|
108
100
|
}
|
|
109
101
|
|
|
110
102
|
.close-button:hover sky-icon,
|
|
111
|
-
.close-button:focus-visible sky-icon
|
|
103
|
+
.close-button:focus-visible sky-icon{
|
|
112
104
|
color: var(--sky-danger-primary);
|
|
113
105
|
outline: none;
|
|
114
106
|
}
|
|
@@ -126,8 +118,8 @@ import{unsafeCSS as o,css as t,LitElement as e,nothing as i,html as r}from"lit";
|
|
|
126
118
|
height: 1em;
|
|
127
119
|
}
|
|
128
120
|
|
|
129
|
-
::slotted([slot=
|
|
130
|
-
::slotted([slot=
|
|
121
|
+
::slotted([slot="prefix"]),
|
|
122
|
+
::slotted([slot="suffix"]) {
|
|
131
123
|
display: inline-flex;
|
|
132
124
|
align-items: center;
|
|
133
125
|
}
|
|
@@ -223,7 +215,7 @@ import{unsafeCSS as o,css as t,LitElement as e,nothing as i,html as r}from"lit";
|
|
|
223
215
|
}
|
|
224
216
|
|
|
225
217
|
.chip.dot::before {
|
|
226
|
-
content:
|
|
218
|
+
content: "";
|
|
227
219
|
position: absolute;
|
|
228
220
|
left: var(--sky-space-1\\.5, 6px);
|
|
229
221
|
top: 50%;
|
|
@@ -235,6 +227,6 @@ import{unsafeCSS as o,css as t,LitElement as e,nothing as i,html as r}from"lit";
|
|
|
235
227
|
}
|
|
236
228
|
|
|
237
229
|
/* Solid / shadow chips: enhance label + icon FG against fill. */
|
|
238
|
-
${o(
|
|
239
|
-
|
|
230
|
+
${o(f([{selector:".chip.solid, .chip.shadow",fillVar:"--chip-bg-color"},{selector:".chip.solid .icon, .chip.shadow .icon",fillVar:"--chip-bg-color"}]))}
|
|
231
|
+
`],S([s({type:String})],w.prototype,"label",2),S([s({type:Boolean})],w.prototype,"removable",2),S([s({type:String})],w.prototype,"color",2),S([s({type:String})],w.prototype,"radius",2),S([s({type:String})],w.prototype,"size",2),S([s({type:String})],w.prototype,"iconL",2),S([s({type:String})],w.prototype,"iconR",2),S([s({type:Boolean})],w.prototype,"loading",2),S([s({type:Boolean,reflect:!0})],w.prototype,"disabled",2),S([s({type:String,reflect:!0})],w.prototype,"variant",2),S([s({type:String,reflect:!0})],w.prototype,"preset",2),w=S([n("sky-chip")],w);export{w as SkyChip};
|
|
240
232
|
//# sourceMappingURL=sky-chip.js.map
|