diff --git a/packages/components-vue/lib/components.ts b/packages/components-vue/lib/components.ts index 5c918bde01..bccdba3545 100644 --- a/packages/components-vue/lib/components.ts +++ b/packages/components-vue/lib/components.ts @@ -100,6 +100,7 @@ export const IfxCheckbox = /*@__PURE__*/ defineContainer('ifx-c 'value', 'error', 'name', + 'size', 'indeterminate', 'ifxChange' ]); diff --git a/packages/components/src/components/checkbox/checkbox.scss b/packages/components/src/components/checkbox/checkbox.scss index 529e7810ac..3feeab3732 100644 --- a/packages/components/src/components/checkbox/checkbox.scss +++ b/packages/components/src/components/checkbox/checkbox.scss @@ -6,7 +6,6 @@ } - .checkbox__container { box-sizing: border-box; display: inline-flex; @@ -29,6 +28,12 @@ order: 0; flex-grow: 0; + &.checkbox-m { + height: tokens.$ifxSize300; + width: tokens.$ifxSize300; + } + + &.error { border-color: #CD002F; } @@ -66,6 +71,10 @@ flex-grow: 0; color: tokens.$ifxColorBaseWhite; + &.error { + background-color: #CD002F; + } + &:focus-visible { border: 1px solid transparent; outline: 2px solid #0A8276; @@ -106,8 +115,8 @@ } & .label { - width: 25px; height: tokens.$ifxSize250; + font-family: tokens.$ifxFontFamilyBody; font-style: normal; font-weight: 400; font-size: tokens.$ifxFontSizeS; @@ -117,12 +126,14 @@ order: 1; flex-grow: 0; - &.disabled { - color: #BFBBBB; + &.label-m { + height: tokens.$ifxSize300; + font-size: tokens.$ifxFontSizeM; + line-height: tokens.$ifxLineHeightM; } - &.error { - color: #CD002F; + &.disabled { + color: #BFBBBB; } } diff --git a/packages/components/src/components/checkbox/checkbox.stories.ts b/packages/components/src/components/checkbox/checkbox.stories.ts index a38013940c..8ff393627a 100644 --- a/packages/components/src/components/checkbox/checkbox.stories.ts +++ b/packages/components/src/components/checkbox/checkbox.stories.ts @@ -8,10 +8,19 @@ export default { disabled: false, value: false, label: 'Text', + size: 's', indeterminate: false, }, - argTypes: { onIfxChange: { action: 'checked' } }, + argTypes: { + size: { + options: ['s', 'm'], + control: { type: 'radio' }, + }, + onIfxChange: { + action: 'ifxChange' + } + }, }; @@ -21,12 +30,14 @@ const DefaultTemplate = ({ disabled, value, indeterminate, + size, label }) => { const checkbox = document.createElement('ifx-checkbox'); checkbox.setAttribute('error', error); checkbox.setAttribute('disabled', disabled); checkbox.setAttribute('value', value); + checkbox.setAttribute('size', size); checkbox.setAttribute('indeterminate', indeterminate); checkbox.addEventListener('ifxChange', action('ifxChange')); diff --git a/packages/components/src/components/checkbox/checkbox.tsx b/packages/components/src/components/checkbox/checkbox.tsx index d1fb54fb0b..0867e40b53 100644 --- a/packages/components/src/components/checkbox/checkbox.tsx +++ b/packages/components/src/components/checkbox/checkbox.tsx @@ -14,6 +14,7 @@ export class Checkbox { @Prop() value: boolean = false; @Prop() error: boolean = false; @Prop() name: string = ''; + @Prop() size: string = 'm'; @State() internalValue: boolean; @Prop() indeterminate: boolean = false; @Event({ bubbles: true, composed: true }) ifxChange: EventEmitter; @@ -26,7 +27,7 @@ export class Checkbox { } else { this.internalValue = !this.internalValue; } - this.ifxChange.emit(this.el); + this.ifxChange.emit(this.internalValue); } } @@ -57,6 +58,18 @@ export class Checkbox { this.inputElement.indeterminate = this.indeterminate; } + getCheckedClassName() { + if (this.error) { + if (this.internalValue) { + return "checked error" + } else { + return "error" + } + } else if (this.internalValue) { + return "checked"; + } else return "" + } + render() { const slot = this.el.innerHTML; @@ -88,14 +101,15 @@ export class Checkbox { aria-disabled={this.disabled} aria-labelledby="label" class={`checkbox__wrapper - ${this.internalValue ? 'checked' : ""} + ${this.getCheckedClassName()} + ${this.size === "m" ? "checkbox-m" : ""} ${this.indeterminate ? 'indeterminate' : ""} - ${this.disabled ? 'disabled' : ""} - ${this.error ? 'error' : ""}`}> + ${this.disabled ? 'disabled' : ""}`} + > {this.internalValue && } {hasSlot && -
+
}
diff --git a/packages/components/src/components/checkbox/readme.md b/packages/components/src/components/checkbox/readme.md index 2ca906adbc..d95d7a2d86 100644 --- a/packages/components/src/components/checkbox/readme.md +++ b/packages/components/src/components/checkbox/readme.md @@ -13,6 +13,7 @@ | `error` | `error` | | `boolean` | `false` | | `indeterminate` | `indeterminate` | | `boolean` | `false` | | `name` | `name` | | `string` | `''` | +| `size` | `size` | | `string` | `'m'` | | `value` | `value` | | `boolean` | `false` | diff --git a/packages/components/src/components/select/multi-select/multiselect.stories.ts b/packages/components/src/components/select/multi-select/multiselect.stories.ts index 4effe787d7..140ce479ac 100644 --- a/packages/components/src/components/select/multi-select/multiselect.stories.ts +++ b/packages/components/src/components/select/multi-select/multiselect.stories.ts @@ -68,7 +68,9 @@ export default { label: { control: 'text' }, options: { description: 'Takes an array of objects in the following format', - } + }, + onIfxSelect: { action: 'ifxSelect' }, + } }; diff --git a/packages/components/src/components/select/single-select/select.stories.ts b/packages/components/src/components/select/single-select/select.stories.ts index a5f78fc11e..4ba8236e99 100644 --- a/packages/components/src/components/select/single-select/select.stories.ts +++ b/packages/components/src/components/select/single-select/select.stories.ts @@ -73,7 +73,7 @@ export default { control: { type: 'radio' }, }, searchPlaceholderValue: { control: { type: 'text' } }, - onChange: { action: 'change' }, + onIfxSelect: { action: 'ifxSelect' }, options: { description: 'Takes an array of objects in the following format', }