@sky.ui/core 0.0.38 → 0.0.40

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.
Files changed (94) hide show
  1. package/dist/custom-elements.json +2399 -2312
  2. package/dist/helper/controllers/animation-controller.d.ts +4 -4
  3. package/dist/helper/controllers/animation-controller.js.map +1 -1
  4. package/dist/helper/controllers/popover-controller.d.ts +11 -11
  5. package/dist/helper/controllers/popover-controller.js.map +1 -1
  6. package/dist/helper/iconify-offline.js.map +1 -1
  7. package/dist/helper/index.js +1 -1
  8. package/dist/helper/internals/form-control-base.d.ts +4 -4
  9. package/dist/helper/internals/form-control-base.js.map +1 -1
  10. package/dist/helper/utils/color-resolver.d.ts +9 -1
  11. package/dist/helper/utils/color-resolver.js +1 -1
  12. package/dist/helper/utils/color-resolver.js.map +1 -1
  13. package/dist/helper/utils/contrast-color.d.ts +128 -0
  14. package/dist/helper/utils/contrast-color.js +2 -0
  15. package/dist/helper/utils/contrast-color.js.map +1 -0
  16. package/dist/helper/utils/index.d.ts +1 -0
  17. package/dist/helper/utils/index.js +1 -1
  18. package/dist/helper/utils/size-resolver.js.map +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/sky-alert/sky-alert.d.ts +5 -5
  21. package/dist/sky-alert/sky-alert.js +28 -16
  22. package/dist/sky-alert/sky-alert.js.map +1 -1
  23. package/dist/sky-appbar/sky-appbar.d.ts +2 -2
  24. package/dist/sky-appbar/sky-appbar.js +20 -27
  25. package/dist/sky-appbar/sky-appbar.js.map +1 -1
  26. package/dist/sky-avatar/sky-avatar.d.ts +3 -3
  27. package/dist/sky-avatar/sky-avatar.js +8 -11
  28. package/dist/sky-avatar/sky-avatar.js.map +1 -1
  29. package/dist/sky-badge/sky-badge.d.ts +5 -5
  30. package/dist/sky-badge/sky-badge.js +22 -14
  31. package/dist/sky-badge/sky-badge.js.map +1 -1
  32. package/dist/sky-button/sky-button.d.ts +5 -5
  33. package/dist/sky-button/sky-button.js +38 -26
  34. package/dist/sky-button/sky-button.js.map +1 -1
  35. package/dist/sky-card/sky-card.d.ts +5 -5
  36. package/dist/sky-card/sky-card.js +20 -20
  37. package/dist/sky-card/sky-card.js.map +1 -1
  38. package/dist/sky-checkbox/sky-checkbox.d.ts +2 -2
  39. package/dist/sky-checkbox/sky-checkbox.js +78 -68
  40. package/dist/sky-checkbox/sky-checkbox.js.map +1 -1
  41. package/dist/sky-chip/sky-chip.d.ts +3 -3
  42. package/dist/sky-chip/sky-chip.js +48 -36
  43. package/dist/sky-chip/sky-chip.js.map +1 -1
  44. package/dist/sky-col/sky-col.d.ts +4 -4
  45. package/dist/sky-col/sky-col.js +8 -3
  46. package/dist/sky-col/sky-col.js.map +1 -1
  47. package/dist/sky-combobox/sky-combobox.d.ts +22 -9
  48. package/dist/sky-combobox/sky-combobox.js +792 -336
  49. package/dist/sky-combobox/sky-combobox.js.map +1 -1
  50. package/dist/sky-dialog/sky-dialog.d.ts +4 -4
  51. package/dist/sky-dialog/sky-dialog.js +17 -19
  52. package/dist/sky-dialog/sky-dialog.js.map +1 -1
  53. package/dist/sky-divider/sky-divider.d.ts +3 -3
  54. package/dist/sky-divider/sky-divider.js.map +1 -1
  55. package/dist/sky-flexbox/sky-flexbox.d.ts +7 -7
  56. package/dist/sky-flexbox/sky-flexbox.js +2 -2
  57. package/dist/sky-flexbox/sky-flexbox.js.map +1 -1
  58. package/dist/sky-flexcol/sky-flexcol.d.ts +3 -3
  59. package/dist/sky-flexcol/sky-flexcol.js.map +1 -1
  60. package/dist/sky-form/sky-form.d.ts +12 -12
  61. package/dist/sky-form/sky-form.js +12 -12
  62. package/dist/sky-form/sky-form.js.map +1 -1
  63. package/dist/sky-grid/sky-grid.d.ts +2 -2
  64. package/dist/sky-grid/sky-grid.js.map +1 -1
  65. package/dist/sky-icon/sky-icon.d.ts +1 -1
  66. package/dist/sky-icon/sky-icon.js +1 -1
  67. package/dist/sky-icon/sky-icon.js.map +1 -1
  68. package/dist/sky-image/sky-image.d.ts +5 -5
  69. package/dist/sky-image/sky-image.js.map +1 -1
  70. package/dist/sky-image/srcset-utils.js.map +1 -1
  71. package/dist/sky-input/sky-input.d.ts +8 -7
  72. package/dist/sky-input/sky-input.js +489 -202
  73. package/dist/sky-input/sky-input.js.map +1 -1
  74. package/dist/sky-list/sky-list.d.ts +4 -4
  75. package/dist/sky-list/sky-list.js +1 -3
  76. package/dist/sky-list/sky-list.js.map +1 -1
  77. package/dist/sky-listitem/sky-listitem.d.ts +2 -2
  78. package/dist/sky-listitem/sky-listitem.js +4 -7
  79. package/dist/sky-listitem/sky-listitem.js.map +1 -1
  80. package/dist/sky-radio/sky-radio.d.ts +5 -3
  81. package/dist/sky-radio/sky-radio.js +33 -15
  82. package/dist/sky-radio/sky-radio.js.map +1 -1
  83. package/dist/sky-row/sky-row.d.ts +2 -2
  84. package/dist/sky-row/sky-row.js.map +1 -1
  85. package/dist/sky-sheet/sky-sheet.d.ts +6 -6
  86. package/dist/sky-sheet/sky-sheet.js +21 -21
  87. package/dist/sky-sheet/sky-sheet.js.map +1 -1
  88. package/dist/sky-simple-table/sky-simple-table.d.ts +4 -4
  89. package/dist/sky-simple-table/sky-simple-table.js +4 -1
  90. package/dist/sky-simple-table/sky-simple-table.js.map +1 -1
  91. package/dist/sky-theme-provider/sky-theme-provider.d.ts +27 -27
  92. package/dist/sky-theme-provider/sky-theme-provider.js +1 -1
  93. package/dist/sky-theme-provider/sky-theme-provider.js.map +1 -1
  94. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- import{LitElement as e,css as t,nothing as i,html as s}from"lit";import{property as r,state as a,customElement as o}from"lit/decorators.js";import{when as n}from"lit/directives/when.js";import{classMap as c}from"lit/directives/class-map.js";import{styleMap as h}from"lit/directives/style-map.js";import{resolveColor as l}from"../helper/utils/color-resolver.js";import{FormControlBase as d}from"../helper/internals/form-control-base.js";var p=Object.defineProperty,u=Object.getOwnPropertyDescriptor,v=(e,t,i,s)=>{for(var r,a=s>1?void 0:s?u(t,i):t,o=e.length-1;o>=0;o--)(r=e[o])&&(a=(s?r(t,i,a):r(a))||a);return s&&a&&p(t,i,a),a};let y=class extends d{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._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}willUpdate(e){e.has("color")&&this.style.setProperty("--checkbox-color",l(this.color))}updated(e){super.updated(e),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=c({"checkbox-wrapper":!0,"no-text":!e}),r=c({cbx:!0,checked:this.checked,indeterminate:this.indeterminate}),a=c({box:!0,"box--checked":this.checked,"box--indeterminate":this.indeterminate,"box--invalid":this.validationErrors.length>0}),o="box"+(this.checked?" box--checked":"")+(this.indeterminate?" box--indeterminate":"")+(this.validationErrors.length?" box--invalid":"");return s`
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 v=Object.defineProperty,y=Object.getOwnPropertyDescriptor,k=(e,t,i,s)=>{for(var r,o=s>1?void 0:s?y(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&&v(t,i,o),o};let m=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._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}willUpdate(e){e.has("color")&&this.style.setProperty("--checkbox-color",d(this.color))}updated(e){super.updated(e),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"
@@ -15,46 +15,43 @@ import{LitElement as e,css as t,nothing as i,html as s}from"lit";import{property
15
15
  aria-invalid="${this.validationErrors.length>0}"
16
16
  aria-readonly="${this.readonly}"
17
17
  />
18
- <label class=${r} part="label" for="${this._inputId}">
19
- <span part=${o} class=${a}>
18
+ <label class=${i} part="label" for="${this._inputId}">
19
+ <span part=${a} class=${o}>
20
20
  <svg viewBox="0 0 12 10" class="checkmark" part="checkmark">
21
21
  <polyline points="1.5 6 4.5 9 10.5 1"></polyline>
22
22
  </svg>
23
23
  <div class="indeterminate-line" part="indeterminate-line"></div>
24
24
  </span>
25
25
  <slot @slotchange=${this._onSlotChange}></slot>
26
- ${n(e,()=>{const e=h({textAlign:"start",color:"var(--sky-text-primary)"}),t=h({color:this.prefixColor,display:"inline-block"}),r=h({color:this.suffixColor,display:"inline-block"});return s`
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">
29
- ${this.prefix}
30
- </div>
31
- ${this._hasMeaningfulSlot?i:this.label}
32
- <div style=${r} part="suffix">
33
- ${this.suffix}
34
- </div>
28
+ <div style=${t} part="prefix">${this.prefix}</div>
29
+ ${this._hasMeaningfulSlot?s:this.label}
30
+ <div style=${i} part="suffix">${this.suffix}</div>
35
31
  </span>
36
32
  `})}
37
33
  </label>
38
34
  </div>
39
- ${n(this.showErrors&&this.validationErrors.length>0&&this.validationActive,()=>s`<div class="error-message" part="error-message">
40
- ${this.validationErrors[0]}
41
- </div>`)}
42
- `}};y.shadowRootOptions={...e.shadowRootOptions,delegatesFocus:!0},y.styles=t`
35
+ ${c(this.showErrors&&this.validationErrors.length>0&&this.validationActive,()=>r`<div class="error-message" part="error-message">
36
+ ${this.validationErrors[0]}
37
+ </div>`)}
38
+ `}};m.shadowRootOptions={...e.shadowRootOptions,delegatesFocus:!0},m.styles=i`
43
39
  :host {
44
40
  display: block;
45
41
  position: relative;
46
42
  font-family: var(--sky-font);
47
43
  }
48
44
 
49
- :host([readonly]) .cbx {
50
- cursor: default;
51
- }
45
+ :host([readonly]) .cbx {
46
+ cursor: default;
47
+ }
52
48
 
53
- /* Show focus UI whenever anything inside is focused */
54
- :host(:focus-within) .cbx span:first-child,:host(:focus) .cbx span:first-child {
55
- box-shadow: var(--sky-focus-ring);
56
- border-color: var(--checkbox-color)!important;
57
- }
49
+ /* Show focus UI whenever anything inside is focused */
50
+ :host(:focus-within) .cbx span:first-child,
51
+ :host(:focus) .cbx span:first-child {
52
+ box-shadow: var(--sky-focus-ring);
53
+ border-color: var(--checkbox-color) !important;
54
+ }
58
55
 
59
56
  .checkbox-wrapper {
60
57
  position: relative;
@@ -102,7 +99,9 @@ import{LitElement as e,css as t,nothing as i,html as s}from"lit";import{property
102
99
  transform: translateZ(0);
103
100
  contain: layout;
104
101
  overflow: hidden;
105
- transition: background-color 0.2s ease, border-color 0.2s ease,
102
+ transition:
103
+ background-color 0.2s ease,
104
+ border-color 0.2s ease,
106
105
  box-shadow 0.2s ease;
107
106
  }
108
107
 
@@ -111,13 +110,15 @@ import{LitElement as e,css as t,nothing as i,html as s}from"lit";import{property
111
110
  width: 12px;
112
111
  height: 10px;
113
112
  fill: none;
114
- stroke: var(--sky-text-white);
113
+ stroke: var(--sky-on-color-fallback-light, var(--sky-text-white));
115
114
  stroke-width: 2;
116
115
  stroke-linecap: round;
117
116
  stroke-linejoin: round;
118
117
  stroke-dasharray: 16px;
119
118
  stroke-dashoffset: 16px;
120
- transition: stroke-dashoffset 0.2s ease, transform 0.2s ease;
119
+ transition:
120
+ stroke-dashoffset 0.2s ease,
121
+ transform 0.2s ease;
121
122
  transform: translate3d(0, 0, 0);
122
123
  }
123
124
 
@@ -126,13 +127,13 @@ import{LitElement as e,css as t,nothing as i,html as s}from"lit";import{property
126
127
  border-color: var(--sky-text-tertiary);
127
128
  }
128
129
 
129
- input[type="checkbox"]:checked + .cbx:hover span:first-child {
130
+ input[type='checkbox']:checked + .cbx:hover span:first-child {
130
131
  box-shadow: var(--sky-box-shadow-hover);
131
132
  transition: box-shadow 0.2s ease;
132
133
  }
133
134
 
134
135
  .cbx span:first-child:before {
135
- content: "";
136
+ content: '';
136
137
  inset: 0;
137
138
  width: auto;
138
139
  height: auto;
@@ -141,71 +142,80 @@ import{LitElement as e,css as t,nothing as i,html as s}from"lit";import{property
141
142
  transform: scale(0);
142
143
  opacity: 0;
143
144
  border-radius: 50%;
144
- transition: transform 0.2s ease-out, opacity 0.2s ease-out;
145
+ transition:
146
+ transform 0.2s ease-out,
147
+ opacity 0.2s ease-out;
145
148
  position: absolute;
146
149
  z-index: -1;
147
150
  pointer-events: none;
148
151
  }
149
152
 
150
- input[type="checkbox"] {
151
- position: absolute;
152
- opacity: 0;
153
- width: 1px;
154
- height: 1px;
155
- margin: 0;
156
- padding: 0;
157
- border: 0;
158
-
159
- }
153
+ input[type='checkbox'] {
154
+ position: absolute;
155
+ opacity: 0;
156
+ width: 1px;
157
+ height: 1px;
158
+ margin: 0;
159
+ padding: 0;
160
+ border: 0;
161
+ }
160
162
 
161
- input[type="checkbox"]:focus-visible + .cbx span:first-child,
162
- input[type="checkbox"]:focus + .cbx span:first-child {
163
+ input[type='checkbox']:focus-visible + .cbx span:first-child,
164
+ input[type='checkbox']:focus + .cbx span:first-child {
163
165
  border-color: var(--sky-text-tertiary);
164
- outline:none;
166
+ outline: none;
165
167
  }
166
168
 
167
- input[type="checkbox"]:checked + .cbx span:first-child {
168
- background: var(--checkbox-color, var(--sky-active-primary));
169
- border-color: var(--checkbox-color, var(--sky-active-primary));
169
+ input[type='checkbox']:checked + .cbx span:first-child {
170
+ background: var(--checkbox-color, var(--sky-active-primary));
171
+ border-color: var(--checkbox-color, var(--sky-active-primary));
170
172
 
171
- transform: none; /* Ensure no transform applied */
172
- }
173
+ transform: none; /* Ensure no transform applied */
174
+ }
173
175
 
174
- input[type="checkbox"]:checked + .cbx span:first-child svg.checkmark {
176
+ input[type='checkbox']:checked + .cbx span:first-child svg.checkmark {
175
177
  stroke-dashoffset: 0;
176
- transition: stroke-dashoffset 0.2s ease-in-out 0.1s,
178
+ transition:
179
+ stroke-dashoffset 0.2s ease-in-out 0.1s,
177
180
  transform 0.2s ease-in-out 0.1s;
178
181
  }
179
182
 
180
- input[type="checkbox"]:not(:checked) + .cbx span:first-child svg.checkmark {
183
+ input[type='checkbox']:not(:checked) + .cbx span:first-child svg.checkmark {
181
184
  transition: opacity 0.2s ease-in-out;
182
185
  opacity: 0;
183
186
  }
184
187
 
185
- input[type="checkbox"]:checked + .cbx span:first-child:before {
188
+ input[type='checkbox']:checked + .cbx span:first-child:before {
186
189
  transform: scale(3.5);
187
190
  opacity: 0;
188
- transition: transform 0.2s ease-out, opacity 0.2s ease-out;
191
+ transition:
192
+ transform 0.2s ease-out,
193
+ opacity 0.2s ease-out;
189
194
  }
190
195
 
191
196
  .cbx.checked span:first-child {
192
- background: var(--checkbox-color, var(--sky-active-primary));
193
- border-color: var(--checkbox-color, var(--sky-active-primary));
194
-
195
- }
196
- .cbx.checked span:first-child svg.checkmark {
197
- stroke-dashoffset: 0;
198
- transition: stroke-dashoffset 0.2s ease-in-out 0.1s,
199
- transform 0.2s ease-in-out 0.1s;
200
- }
197
+ background: var(--checkbox-color, var(--sky-active-primary));
198
+ border-color: var(--checkbox-color, var(--sky-active-primary));
199
+ }
200
+ .cbx.checked span:first-child svg.checkmark {
201
+ stroke-dashoffset: 0;
202
+ transition:
203
+ stroke-dashoffset 0.2s ease-in-out 0.1s,
204
+ transform 0.2s ease-in-out 0.1s;
205
+ }
201
206
 
202
207
  .indeterminate-line {
203
208
  width: 10px;
204
209
  height: 2px;
205
- background-color: var(--sky-text-white);
210
+ background-color: var(
211
+ --sky-on-color-fallback-light,
212
+ var(--sky-text-white)
213
+ );
206
214
  position: absolute;
207
215
  border-radius: 1px;
208
- transition: opacity 0.2s ease, transform 0.2s ease;
216
+ transition:
217
+ opacity 0.2s ease,
218
+ transform 0.2s ease;
209
219
  opacity: 0;
210
220
  transform: scaleX(0);
211
221
  }
@@ -228,7 +238,6 @@ input[type="checkbox"]:checked + .cbx span:first-child {
228
238
  transform: scaleX(1);
229
239
  }
230
240
 
231
-
232
241
  .error-message {
233
242
  font-size: var(--sky-font-size-xs);
234
243
  color: var(--sky-danger-primary);
@@ -247,7 +256,6 @@ input[type="checkbox"]:checked + .cbx span:first-child {
247
256
  }
248
257
 
249
258
  :host([validationactive]:invalid) .cbx span:first-child {
250
-
251
259
  border-color: var(--sky-danger-primary);
252
260
  }
253
261
  :host([validationactive]:invalid) .cbx span:first-child svg.checkmark {
@@ -271,8 +279,8 @@ input[type="checkbox"]:checked + .cbx span:first-child {
271
279
  }
272
280
 
273
281
  .checkbox-wrapper.no-text {
274
- gap: 0;
275
- }
282
+ gap: 0;
283
+ }
276
284
 
277
285
  @media (prefers-reduced-motion: reduce) {
278
286
  .cbx,
@@ -283,5 +291,7 @@ input[type="checkbox"]:checked + .cbx span:first-child {
283
291
  transition: none;
284
292
  }
285
293
  }
286
- `,v([r({type:String})],y.prototype,"label",2),v([r({type:String})],y.prototype,"id",2),v([r({type:String})],y.prototype,"value",2),v([r({type:String})],y.prototype,"color",2),v([r({type:Boolean})],y.prototype,"defaultChecked",2),v([r({type:Boolean})],y.prototype,"showErrors",2),v([r({type:String})],y.prototype,"prefix",2),v([r({type:String})],y.prototype,"suffix",2),v([r({type:String})],y.prototype,"prefixColor",2),v([r({type:String})],y.prototype,"suffixColor",2),v([r({type:Boolean,reflect:!0})],y.prototype,"validationActive",2),v([r({type:Boolean,reflect:!0})],y.prototype,"invalid",2),v([a()],y.prototype,"_checked",2),v([a()],y.prototype,"_indeterminate",2),v([a()],y.prototype,"validationErrors",2),v([a()],y.prototype,"_hasMeaningfulSlot",2),v([r({type:Boolean,reflect:!0})],y.prototype,"checked",1),v([r({type:Boolean,reflect:!0})],y.prototype,"indeterminate",1),y=v([o("sky-checkbox")],y);export{y as SkyCheckbox};
294
+
295
+ ${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
+ `,k([o({type:String})],m.prototype,"label",2),k([o({type:String})],m.prototype,"id",2),k([o({type:String})],m.prototype,"value",2),k([o({type:String})],m.prototype,"color",2),k([o({type:Boolean})],m.prototype,"defaultChecked",2),k([o({type:Boolean})],m.prototype,"showErrors",2),k([o({type:String})],m.prototype,"prefix",2),k([o({type:String})],m.prototype,"suffix",2),k([o({type:String})],m.prototype,"prefixColor",2),k([o({type:String})],m.prototype,"suffixColor",2),k([o({type:Boolean,reflect:!0})],m.prototype,"validationActive",2),k([o({type:Boolean,reflect:!0})],m.prototype,"invalid",2),k([a()],m.prototype,"_checked",2),k([a()],m.prototype,"_indeterminate",2),k([a()],m.prototype,"validationErrors",2),k([a()],m.prototype,"_hasMeaningfulSlot",2),k([o({type:Boolean,reflect:!0})],m.prototype,"checked",1),k([o({type:Boolean,reflect:!0})],m.prototype,"indeterminate",1),m=k([n("sky-checkbox")],m);export{m as SkyCheckbox};
287
297
  //# 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 } from \"lit\";\r\nimport { property, customElement, state } from \"lit/decorators.js\";\r\nimport { when } from \"lit/directives/when.js\";\r\nimport { classMap } from \"lit/directives/class-map.js\";\r\nimport { styleMap } from \"lit/directives/style-map.js\";\r\nimport { resolveColor } from \"../helper/utils/color-resolver\";\r\nimport { FormControlBase, FormState } from \"../helper/internals/form-control-base\";\r\n\r\nexport interface CheckboxProperties {\r\n label: string;\r\n checked: boolean;\r\n disabled: boolean;\r\n indeterminate: boolean;\r\n id: string;\r\n value: string;\r\n color: string;\r\n required: boolean;\r\n validationErrors: string[];\r\n validationActive: boolean;\r\n defaultChecked: boolean;\r\n requiredMessage: string;\r\n showErrors: boolean;\r\n prefix: string;\r\n suffix: string;\r\n prefixColor: string;\r\n suffixColor: string;\r\n}\r\n/** `checked` is always the boolean model; `value` keeps form/legacy semantics (see `handleChange`). */\r\nexport type SkyCheckboxValueChangedDetail = {\r\n checked: boolean;\r\n value: string | boolean | undefined;\r\n};\r\nexport type SkyCheckboxValidationErrorDetail = { errors: string[] };\r\nexport type SkyCheckboxValueClearedDetail = { value: string; checked: boolean };\r\n\r\n/**\r\n * @element sky-checkbox\r\n *\r\n * @summary Form-associated checkbox with validation, indeterminate state, and customizable label/prefix/suffix rendering.\r\n *\r\n * @status stable\r\n * @since 1.0.0\r\n *\r\n * @documentation https://library.sky-ui.com/components/checkbox\r\n *\r\n * @uiVModel checked value-changed detail=checked\r\n *\r\n * @slot - Default slot for the checkbox label or other content.\r\n * @slot prefix - Optional prefix content that can be placed before the label.\r\n * @slot suffix - Optional suffix content that can be placed after the label.\r\n *\r\n * @csspart wrapper - The wrapper element for the checkbox.\r\n * @csspart input - The native input element used for the checkbox.\r\n * @csspart label - The label element for the checkbox, used for styling.\r\n * @csspart box - The visual box for the checkbox, which includes the checkmark and indeterminate state.\r\n * @csspart checkmark - The checkmark icon that appears when the checkbox is checked.\r\n * @csspart indeterminate-line - The line representing the indeterminate state of the checkbox.\r\n * @csspart error-message - The error message displayed if the checkbox is invalid.\r\n *\r\n * @property {string} label - The label for the checkbox. Default: `\"\"`.\r\n * @property {boolean} checked - Whether the checkbox is checked. Default: `false`.\r\n * @property {boolean} indeterminate - Whether the checkbox is in the indeterminate state. Default: `false`.\r\n * @property {string} color - The color used for the checkbox and its checkmark. Default: `\"primary\"`.\r\n * @property {string} value - The value of the checkbox, which gets submitted with the form. Default: `\"\"`.\r\n * @property {boolean} showErrors - Whether to display validation error messages. Default: `false`.\r\n * @property {string} prefix - Optional prefix text or content before the label. Default: `\"\"`.\r\n * @property {string} suffix - Optional suffix text or content after the label. Default: `\"\"`.\r\n * @property {string} prefixColor - The color for the prefix text. Default: `\"\"`.\r\n * @property {string} suffixColor - The color for the suffix text. Default: `\"\"`.\r\n * @property {boolean} defaultChecked - Default checked state for reset operations. Default: `false`.\r\n * @method check Sets checked state to `true`.\r\n * @method uncheck Sets checked state to `false`.\r\n * @method toggle Toggles checked state.\r\n * @method reset Resets checkbox state to defaults and clears UI validation state.\r\n *\r\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`.\r\n * @fires {CustomEvent<SkyCheckboxValidationErrorDetail>} validation-error - Fired when validation errors are updated.\r\n * @fires {CustomEvent<SkyCheckboxValueClearedDetail>} value-cleared - Fired when checkbox is reset programmatically.\r\n *\r\n * @example\r\n * ```html\r\n * <sky-checkbox label=\"Accept Terms\" required showerrors prefix=\"Legal\"></sky-checkbox>\r\n * ```\r\n * ```vue\r\n * <template>\r\n * <sky-checkbox label=\"Accept Terms\" required showerrors prefix=\"Legal\"></sky-checkbox>\r\n * </template>\r\n * ```\r\n * ```jsx\r\n * export default function Demo() {\r\n * return <sky-checkbox label=\"Accept Terms\" required showerrors prefix=\"Legal\"></sky-checkbox>;\r\n * }\r\n * ```\r\n */\r\n@customElement(\"sky-checkbox\")\r\nexport class SkyCheckbox extends FormControlBase {\r\n static override shadowRootOptions = {\r\n ...LitElement.shadowRootOptions,\r\n delegatesFocus: true,\r\n };\r\n\r\n @property({ type: String }) label = \"\";\r\n @property({ type: String }) override id = \"\";\r\n @property({ type: String }) value = \"\";\r\n @property({ type: String }) color = \"primary\";\r\n @property({ type: Boolean }) defaultChecked = false;\r\n @property({ type: Boolean }) showErrors = false;\r\n @property({ type: String }) override prefix = \"\";\r\n @property({ type: String }) suffix = \"\";\r\n @property({ type: String }) prefixColor = \"\";\r\n @property({ type: String }) suffixColor = \"\";\r\n @property({ type: Boolean, reflect: true }) validationActive: boolean = false;\r\n @property({ type: Boolean, reflect: true }) invalid: boolean = false;\r\n @state() private _checked = false;\r\n @state() private _indeterminate = false;\r\n @state() private validationErrors: string[] = [];\r\n @state() private _hasMeaningfulSlot = false;\r\n\r\n private _inputElement?: HTMLInputElement;\r\n private _inputId = `sky-cb-${Math.random().toString(36).slice(2)}`;\r\n\r\n @property({ type: Boolean, reflect: true })\r\n get checked() {\r\n return this._checked;\r\n }\r\n set checked(v: boolean) {\r\n const old = this._checked;\r\n this._checked = v;\r\n\r\n if (v && this.indeterminate) {\r\n this.indeterminate = false;\r\n if (this._inputElement) this._inputElement.indeterminate = false;\r\n }\r\n\r\n this.requestUpdate(\"checked\", old);\r\n\r\n if (this._inputElement) {\r\n this._inputElement.checked = v;\r\n this._inputElement.indeterminate = this.indeterminate;\r\n }\r\n\r\n this._updateVisualState();\r\n\r\n this.syncFormValue();\r\n this.syncValidity();\r\n }\r\n\r\n @property({ type: Boolean, reflect: true })\r\n get indeterminate() {\r\n return this._indeterminate;\r\n }\r\n set indeterminate(v: boolean) {\r\n const old = this._indeterminate;\r\n this._indeterminate = v;\r\n\r\n if (v && this.checked) this.checked = false;\r\n\r\n this.requestUpdate(\"indeterminate\", old);\r\n\r\n if (this._inputElement) this._inputElement.indeterminate = v;\r\n\r\n this._updateVisualState();\r\n\r\n this.syncValidity();\r\n }\r\n\r\n static override styles = css`\r\n :host {\r\n display: block;\r\n position: relative;\r\n font-family: var(--sky-font);\r\n }\r\n\r\n:host([readonly]) .cbx {\r\n cursor: default;\r\n}\r\n\r\n/* Show focus UI whenever anything inside is focused */\r\n:host(:focus-within) .cbx span:first-child,:host(:focus) .cbx span:first-child {\r\n box-shadow: var(--sky-focus-ring);\r\n border-color: var(--checkbox-color)!important;\r\n}\r\n\r\n .checkbox-wrapper {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n gap: var(--sky-space-1, 5px);\r\n }\r\n\r\n :host([disabled]) {\r\n pointer-events: none;\r\n opacity: var(--sky-opacity-disabled, 0.6);\r\n }\r\n\r\n .cbx {\r\n display: flex;\r\n align-items: center;\r\n cursor: pointer;\r\n user-select: none;\r\n gap: var(--sky-space-1, 5px);\r\n transition: color 0.2s ease;\r\n font-family: var(--sky-font);\r\n font-size: var(--sky-font-size-sm);\r\n line-height: var(--sky-line-height-snug, 1.25);\r\n color: var(--sky-text-primary);\r\n }\r\n\r\n .cbx span {\r\n display: inline-block;\r\n vertical-align: middle;\r\n }\r\n\r\n .cbx span:first-child {\r\n position: relative;\r\n box-sizing: border-box;\r\n width: 18px;\r\n height: 18px;\r\n flex-shrink: 0;\r\n border-radius: min(6px, var(--sky-radius-primary));\r\n vertical-align: middle;\r\n background: var(--sky-glass-solid);\r\n border: 2px solid var(--sky-text-tertiary);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n transform: translateZ(0);\r\n contain: layout;\r\n overflow: hidden;\r\n transition: background-color 0.2s ease, border-color 0.2s ease,\r\n box-shadow 0.2s ease;\r\n }\r\n\r\n .cbx span:first-child svg {\r\n position: absolute;\r\n width: 12px;\r\n height: 10px;\r\n fill: none;\r\n stroke: var(--sky-text-white);\r\n stroke-width: 2;\r\n stroke-linecap: round;\r\n stroke-linejoin: round;\r\n stroke-dasharray: 16px;\r\n stroke-dashoffset: 16px;\r\n transition: stroke-dashoffset 0.2s ease, transform 0.2s ease;\r\n transform: translate3d(0, 0, 0);\r\n }\r\n\r\n .cbx:hover span:first-child {\r\n background-color: var(--sky-hover-primary);\r\n border-color: var(--sky-text-tertiary);\r\n }\r\n\r\n input[type=\"checkbox\"]:checked + .cbx:hover span:first-child {\r\n box-shadow: var(--sky-box-shadow-hover);\r\n transition: box-shadow 0.2s ease;\r\n }\r\n\r\n .cbx span:first-child:before {\r\n content: \"\";\r\n inset: 0;\r\n width: auto;\r\n height: auto;\r\n background: var(--checkbox-color, var(--sky-active-primary));\r\n display: block;\r\n transform: scale(0);\r\n opacity: 0;\r\n border-radius: 50%;\r\n transition: transform 0.2s ease-out, opacity 0.2s ease-out;\r\n position: absolute;\r\n z-index: -1;\r\n pointer-events: none;\r\n }\r\n\r\ninput[type=\"checkbox\"] {\r\n position: absolute;\r\n opacity: 0;\r\n width: 1px;\r\n height: 1px;\r\n margin: 0;\r\n padding: 0;\r\n border: 0;\r\n\r\n}\r\n\r\n input[type=\"checkbox\"]:focus-visible + .cbx span:first-child,\r\n input[type=\"checkbox\"]:focus + .cbx span:first-child {\r\n border-color: var(--sky-text-tertiary);\r\n outline:none;\r\n }\r\n\r\ninput[type=\"checkbox\"]:checked + .cbx span:first-child {\r\n background: var(--checkbox-color, var(--sky-active-primary));\r\n border-color: var(--checkbox-color, var(--sky-active-primary));\r\n\r\n transform: none; /* Ensure no transform applied */\r\n}\r\n\r\n input[type=\"checkbox\"]:checked + .cbx span:first-child svg.checkmark {\r\n stroke-dashoffset: 0;\r\n transition: stroke-dashoffset 0.2s ease-in-out 0.1s,\r\n transform 0.2s ease-in-out 0.1s;\r\n }\r\n\r\n input[type=\"checkbox\"]:not(:checked) + .cbx span:first-child svg.checkmark {\r\n transition: opacity 0.2s ease-in-out;\r\n opacity: 0;\r\n }\r\n\r\n input[type=\"checkbox\"]:checked + .cbx span:first-child:before {\r\n transform: scale(3.5);\r\n opacity: 0;\r\n transition: transform 0.2s ease-out, opacity 0.2s ease-out;\r\n }\r\n\r\n .cbx.checked span:first-child {\r\n background: var(--checkbox-color, var(--sky-active-primary));\r\n border-color: var(--checkbox-color, var(--sky-active-primary));\r\n\r\n}\r\n.cbx.checked span:first-child svg.checkmark {\r\n stroke-dashoffset: 0;\r\n transition: stroke-dashoffset 0.2s ease-in-out 0.1s,\r\n transform 0.2s ease-in-out 0.1s;\r\n}\r\n\r\n .indeterminate-line {\r\n width: 10px;\r\n height: 2px;\r\n background-color: var(--sky-text-white);\r\n position: absolute;\r\n border-radius: 1px;\r\n transition: opacity 0.2s ease, transform 0.2s ease;\r\n opacity: 0;\r\n transform: scaleX(0);\r\n }\r\n\r\n .indeterminate-active {\r\n opacity: 1;\r\n transform: scaleX(1);\r\n }\r\n\r\n .checked .checkmark {\r\n stroke-dashoffset: 0;\r\n }\r\n\r\n .indeterminate .checkmark {\r\n display: none;\r\n }\r\n\r\n .indeterminate .indeterminate-line {\r\n opacity: 1;\r\n transform: scaleX(1);\r\n }\r\n\r\n\r\n .error-message {\r\n font-size: var(--sky-font-size-xs);\r\n color: var(--sky-danger-primary);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n pointer-events: none;\r\n margin-left: var(--sky-space-1, 5px);\r\n width: 100%;\r\n text-align: start;\r\n font-family: var(--sky-font);\r\n }\r\n :dir(rtl) .error-message {\r\n margin-right: var(--sky-space-1, 5px);\r\n margin-left: unset;\r\n }\r\n\r\n :host([validationactive]:invalid) .cbx span:first-child {\r\n\r\n border-color: var(--sky-danger-primary);\r\n }\r\n :host([validationactive]:invalid) .cbx span:first-child svg.checkmark {\r\n stroke-dashoffset: 0;\r\n }\r\n :host([validationactive]:invalid) .cbx span:first-child:before {\r\n transform: scale(3.5);\r\n opacity: 0;\r\n }\r\n :host([validationactive]:invalid) .error-message {\r\n display: block;\r\n }\r\n\r\n :host([indeterminate]) .indeterminate-line {\r\n opacity: 1;\r\n transform: scaleX(1);\r\n }\r\n :host([indeterminate]) .cbx span:first-child {\r\n background-color: var(--checkbox-color);\r\n border-color: var(--checkbox-color);\r\n }\r\n\r\n .checkbox-wrapper.no-text {\r\n gap: 0;\r\n}\r\n\r\n @media (prefers-reduced-motion: reduce) {\r\n .cbx,\r\n .cbx span:first-child,\r\n .cbx span:first-child svg,\r\n .cbx span:first-child:before,\r\n .indeterminate-line {\r\n transition: none;\r\n }\r\n }\r\n `;\r\n\r\n protected override getFormValue(): FormState {\r\n if (!this.name) return null;\r\n if (this.disabled) return null;\r\n\r\n if (!this.checked) return null;\r\n\r\n if (this.value && this.value.trim() !== \"\") return this.value;\r\n\r\n return \"on\";\r\n }\r\n\r\n protected override setValueFromFormState(state: FormState): void {\r\n if (state === null) {\r\n this.checked = false;\r\n this.indeterminate = false;\r\n return;\r\n }\r\n\r\n if (typeof state === \"string\") {\r\n if (this.value && this.value.trim() !== \"\") {\r\n this.checked = state === this.value;\r\n } else {\r\n this.checked = state === \"on\" || state === \"true\" || state === \"1\";\r\n }\r\n this.indeterminate = false;\r\n }\r\n }\r\n\r\n protected override getValidityAnchor(): HTMLElement | undefined {\r\n return (this.shadowRoot?.querySelector('input[type=\"checkbox\"]') as HTMLElement) ?? undefined;\r\n }\r\n\r\n protected override isEmpty(): boolean {\r\n return !this.checked;\r\n }\r\n\r\n protected override getNativeControl(): HTMLElement | null {\r\n return this.shadowRoot?.querySelector('input[type=\"checkbox\"]') as HTMLInputElement | null;\r\n }\r\n\r\n protected override onFormReset(): void {\r\n this.checked = this.defaultChecked;\r\n this.indeterminate = false;\r\n\r\n this.validationErrors = [];\r\n this.invalid = false;\r\n this.validationActive = false;\r\n }\r\n\r\n override willUpdate(changed: Map<string | number | symbol, unknown>): void {\r\n if (changed.has(\"color\")) {\r\n this.style.setProperty(\"--checkbox-color\", resolveColor(this.color));\r\n }\r\n }\r\n\r\n override updated(changed: Map<string, unknown>): void {\r\n super.updated(changed);\r\n\r\n if (!this._inputElement) {\r\n this._inputElement = this.shadowRoot?.querySelector(\r\n 'input[type=\"checkbox\"]'\r\n ) as HTMLInputElement;\r\n }\r\n\r\n if (this._inputElement) {\r\n this._inputElement.checked = this.checked;\r\n this._inputElement.indeterminate = this.indeterminate;\r\n this._inputElement.disabled = this.disabled || this.readonly;\r\n }\r\n\r\n this._updateVisualState();\r\n\r\n if (\r\n changed.has(\"checked\") ||\r\n changed.has(\"name\") ||\r\n changed.has(\"disabled\") ||\r\n changed.has(\"readonly\") ||\r\n changed.has(\"required\") ||\r\n changed.has(\"value\")\r\n ) {\r\n this.syncFormValue();\r\n this.syncValidity();\r\n }\r\n }\r\n\r\n private handleChange(event: Event): void {\r\n const target = event.target as HTMLInputElement;\r\n\r\n if (this.disabled || this.readonly) {\r\n if (this._inputElement) {\r\n this._inputElement.checked = this.checked;\r\n this._inputElement.indeterminate = this.indeterminate;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n\r\n this.checked = target.checked;\r\n\r\n // UI validation\r\n this.validateInput();\r\n\r\n const emittedValue =\r\n this.value && this.value.trim() !== \"\"\r\n ? this.checked ? this.value : undefined\r\n : this.checked;\r\n\r\n this.dispatchEvent(\r\n new CustomEvent<SkyCheckboxValueChangedDetail>(\"value-changed\", {\r\n detail: { checked: this.checked, value: emittedValue },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n private validateInput(): boolean {\r\n if (!this.validationActive) return true;\r\n\r\n this.validationErrors = [];\r\n if (this.required && !this.checked) {\r\n this.validationErrors = [this.requiredMessage]; // from base\r\n }\r\n\r\n this.dispatchEvent(\r\n new CustomEvent<SkyCheckboxValidationErrorDetail>(\"validation-error\", {\r\n detail: { errors: [...this.validationErrors] },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n\r\n const cbx = this.shadowRoot?.querySelector(\".cbx\") as HTMLElement | null;\r\n if (this.validationErrors.length) cbx?.classList.add(\"invalid\");\r\n else cbx?.classList.remove(\"invalid\");\r\n\r\n const isValid = this.validationErrors.length === 0;\r\n this.invalid = !isValid;\r\n\r\n return isValid;\r\n }\r\n\r\n /**\r\n * Sets checked state to `true`.\r\n *\r\n * @returns {void}\r\n */\r\n public check(): void {\r\n if (this.disabled || this.readonly) return;\r\n this.checked = true;\r\n this.indeterminate = false;\r\n }\r\n\r\n /**\r\n * Sets checked state to `false`.\r\n *\r\n * @returns {void}\r\n */\r\n public uncheck(): void {\r\n if (this.disabled || this.readonly) return;\r\n this.checked = false;\r\n this.indeterminate = false;\r\n }\r\n\r\n /**\r\n * Toggles checked state.\r\n *\r\n * @returns {void}\r\n */\r\n public toggle(): void {\r\n if (this.disabled || this.readonly) return;\r\n this.checked = !this.checked;\r\n this.indeterminate = false;\r\n }\r\n\r\n /**\r\n * Resets checkbox state to defaults and clears UI validation state.\r\n *\r\n * @returns {void}\r\n */\r\n public reset(): void {\r\n this.onFormReset();\r\n this.syncFormValue();\r\n this.syncValidity();\r\n\r\n this.dispatchEvent(\r\n new CustomEvent<SkyCheckboxValueClearedDetail>(\"value-cleared\", {\r\n detail: { value: this.value, checked: this.checked },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n private _updateVisualState(): void {\r\n const cbx = this.shadowRoot?.querySelector(\".cbx\");\r\n if (!cbx) return;\r\n\r\n if (this.checked) {\r\n cbx.classList.add(\"checked\");\r\n cbx.classList.remove(\"indeterminate\");\r\n } else if (this.indeterminate) {\r\n cbx.classList.add(\"indeterminate\");\r\n cbx.classList.remove(\"checked\");\r\n } else {\r\n cbx.classList.remove(\"checked\", \"indeterminate\");\r\n }\r\n }\r\n\r\n private _slotHasMeaningfulContent(slotEl: HTMLSlotElement): boolean {\r\n const nodes = slotEl.assignedNodes({ flatten: true });\r\n return nodes.some((n) =>\r\n n.nodeType === Node.ELEMENT_NODE\r\n ? true\r\n : (n.textContent ?? \"\").trim().length > 0\r\n );\r\n }\r\n\r\n private _onSlotChange = (e: Event) => {\r\n const slot = e.target as HTMLSlotElement;\r\n const next = this._slotHasMeaningfulContent(slot);\r\n if (next !== this._hasMeaningfulSlot) this._hasMeaningfulSlot = next;\r\n };\r\n\r\n private get _hasTextContent(): boolean {\r\n return !!this.prefix || !!this.suffix || !!this.label || this._hasMeaningfulSlot;\r\n }\r\n\r\n private handleBlur = (_e: FocusEvent): void => {\r\n this.validationActive = true;\r\n this.validateInput();\r\n\r\n const cbx = this.shadowRoot?.querySelector(\".cbx\");\r\n cbx?.classList.remove(\"active\");\r\n\r\n this.syncValidity();\r\n };\r\n private _onKeyDown = (e: KeyboardEvent): void => {\r\n if (this.disabled || this.readonly) return;\r\n\r\n if (e.key === \" \" || e.key === \"Enter\") {\r\n e.preventDefault();\r\n this._inputElement?.click();\r\n }\r\n };\r\n\r\n\r\n override render() {\r\n const hasText = this._hasTextContent;\r\n const wrapperClasses = classMap({\r\n \"checkbox-wrapper\": true,\r\n \"no-text\": !hasText,\r\n });\r\n const labelClasses = classMap({\r\n cbx: true,\r\n checked: this.checked,\r\n indeterminate: this.indeterminate,\r\n });\r\n const boxClasses = classMap({\r\n box: true,\r\n \"box--checked\": this.checked,\r\n \"box--indeterminate\": this.indeterminate,\r\n \"box--invalid\": this.validationErrors.length > 0,\r\n });\r\n const boxPart =\r\n \"box\" +\r\n (this.checked ? \" box--checked\" : \"\") +\r\n (this.indeterminate ? \" box--indeterminate\" : \"\") +\r\n (this.validationErrors.length ? \" box--invalid\" : \"\");\r\n\r\n return html`\r\n <div class=${wrapperClasses} part=\"wrapper\">\r\n <input\r\n type=\"checkbox\"\r\n id=\"${this._inputId}\"\r\n class=\"inp-cbx\"\r\n part=\"input\"\r\n .checked=\"${this.checked}\"\r\n @blur=${this.handleBlur}\r\n @keydown=${this._onKeyDown}\r\n .disabled=\"${this.disabled || this.readonly}\"\r\n .value=\"${this.value}\"\r\n @change=${this.handleChange}\r\n aria-checked=${this.indeterminate ? \"mixed\" : this.checked}\r\n aria-invalid=\"${this.validationErrors.length > 0}\"\r\n aria-readonly=\"${this.readonly}\"\r\n />\r\n <label class=${labelClasses} part=\"label\" for=\"${this._inputId}\">\r\n <span part=${boxPart} class=${boxClasses}>\r\n <svg viewBox=\"0 0 12 10\" class=\"checkmark\" part=\"checkmark\">\r\n <polyline points=\"1.5 6 4.5 9 10.5 1\"></polyline>\r\n </svg>\r\n <div class=\"indeterminate-line\" part=\"indeterminate-line\"></div>\r\n </span>\r\n <slot @slotchange=${this._onSlotChange}></slot>\r\n ${when(\r\n hasText,\r\n () => {\r\n const textStyle = styleMap({ textAlign: \"start\", color: \"var(--sky-text-primary)\" });\r\n const prefixStyle = styleMap({ color: this.prefixColor, display: \"inline-block\" });\r\n const suffixStyle = styleMap({ color: this.suffixColor, display: \"inline-block\" });\r\n return html`\r\n <span style=${textStyle} part=\"text\">\r\n <div style=${prefixStyle} part=\"prefix\">\r\n ${this.prefix}\r\n </div>\r\n ${this._hasMeaningfulSlot ? nothing : this.label}\r\n <div style=${suffixStyle} part=\"suffix\">\r\n ${this.suffix}\r\n </div>\r\n </span>\r\n `;\r\n },\r\n )}\r\n </label>\r\n </div>\r\n ${when(\r\n this.showErrors &&\r\n this.validationErrors.length > 0 &&\r\n this.validationActive,\r\n () => html`<div class=\"error-message\" part=\"error-message\">\r\n ${this.validationErrors[0]}\r\n </div>`,\r\n )}\r\n `;\r\n }\r\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","__decorateClass","property","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 {\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,5 +1,5 @@
1
- import { LitElement } from "lit";
2
- export type SkyChipVariant = "solid" | "flat" | "shadow" | "bordered" | "faded" | "light" | "dot";
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
  };
@@ -11,7 +11,7 @@ export type SkyChipRemovedEventDetail = {
11
11
  * @status stable
12
12
  * @since 1.0.0
13
13
  *
14
- * @documentation https://library.sky-ui.com/components/chip
14
+ * @documentation https://sky-ui.com/components/chip
15
15
  * @dependency sky-icon
16
16
  *
17
17
  * @slot - Default slot for the chip label or any other content.