import styled, { keyframes, css } from 'styled-components'; import Colors from '../Colors'; import Sizes from '../Sizes'; import TextHelper from '../TextHelper'; import { IProps } from './Checkbox'; const bounceUp = keyframes` 0%, 20%, 50%, 80%, 100% { transform: scale(1); } 40% { transform: scale(1.3); } 60% { transform: scale(1.1); } `; const check = keyframes` from { stroke-dashoffset: 31.26; } to { stroke-dashoffset: 0; } `; export const CheckBox = styled.input.attrs(() => ({ type: 'checkbox', }))` opacity: 0; position: absolute; & + label .check { position: absolute; stroke-width: 2px; stroke: #fff; fill: none; top: 5px; left: 2px; height: 16px; opacity: 0; transition: all .2s ease; stroke-dasharray: 31.26; stroke-dashoffset: 0; } &:checked + label .check { opacity: 1; animation: ${css`${check}`} 0.3s linear forwards; } &:checked + label::before { animation: ${css`${bounceUp}`} .5s forwards; background-color: ${Colors.mongeral}; border-color: ${Colors.mongeral}; } `; export const Label = styled.label<{htmlFor: string, css?: string}>` position: relative; display: flex; align-items: center; min-height: 30px; padding-left: ${Sizes.s4 + 8}px; font-family: ${TextHelper.fontVariant('medium')}; cursor: pointer; &:before, &:after { content: ''; display: inline-block; position: absolute; } &:before { width: ${Sizes.s4 - 3}px; height: ${Sizes.s4 - 3}px; border: 2px solid ${Colors.mongeral}; left: 0; top: 3px; } `;