|
1 | 1 | 'use client' |
2 | 2 |
|
3 | | -import styled from '@emotion/styled' |
4 | 3 | import * as Icon from '@ultraviolet/icons' |
| 4 | +import type { RefObject } from 'react' |
5 | 5 | import { useContext } from 'react' |
6 | 6 | import type { PascalToCamelCaseWithoutSuffix } from 'src/types' |
7 | 7 | import { ChipContext } from './ChipContext' |
8 | | - |
9 | | -const Container = styled.button` |
10 | | - background: none; |
11 | | - border: none; |
12 | | - cursor: pointer; |
13 | | - padding: 0; |
14 | | - border-radius: ${({ theme }) => theme.radii.default}; |
15 | | -
|
16 | | - &[data-has-onclick="true"][data-active="false"]:hover{ |
17 | | - background-color: ${({ theme }) => theme.colors.neutral.backgroundStrongHover}; |
18 | | - } |
19 | | -
|
20 | | - &[data-has-onclick="true"][data-active="true"]:hover{ |
21 | | - background-color: ${({ theme }) => theme.colors.primary.backgroundStrong}; |
22 | | - } |
23 | | -
|
24 | | - &[data-disabled="true"]{ |
25 | | - cursor: not-allowed; |
26 | | - } |
27 | | -` |
| 8 | +import { buttonContainer } from './styles.css' |
28 | 9 |
|
29 | 10 | type IconType = PascalToCamelCaseWithoutSuffix<keyof typeof Icon, 'Icon'> |
30 | 11 |
|
@@ -57,27 +38,46 @@ export const ChipIcon = ({ |
57 | 38 | }Icon` as keyof typeof Icon |
58 | 39 | ] |
59 | 40 |
|
| 41 | + if (onClick) { |
| 42 | + return ( |
| 43 | + <button |
| 44 | + className={buttonContainer} |
| 45 | + data-active={isActive} |
| 46 | + data-disabled={disabled} |
| 47 | + data-has-onclick={!!onClick && !disabled} |
| 48 | + data-testid={dataTestId} |
| 49 | + onClick={event => { |
| 50 | + if (!disabled && onClick) { |
| 51 | + event.stopPropagation() |
| 52 | + onClick() |
| 53 | + } |
| 54 | + }} |
| 55 | + ref={iconRef as RefObject<HTMLButtonElement | null>} |
| 56 | + > |
| 57 | + <IconUsed |
| 58 | + disabled={disabled} |
| 59 | + prominence={isActive ? 'stronger' : 'default'} |
| 60 | + sentiment="neutral" |
| 61 | + size="small" |
| 62 | + /> |
| 63 | + </button> |
| 64 | + ) |
| 65 | + } |
| 66 | + |
60 | 67 | return ( |
61 | | - <Container |
62 | | - as={onClick ? 'button' : 'div'} |
| 68 | + <div |
| 69 | + className={buttonContainer} |
63 | 70 | data-active={isActive} |
64 | 71 | data-disabled={disabled} |
65 | | - data-has-onclick={!!onClick && !disabled} |
66 | 72 | data-testid={dataTestId} |
67 | | - onClick={event => { |
68 | | - if (!disabled && onClick) { |
69 | | - event.stopPropagation() |
70 | | - onClick() |
71 | | - } |
72 | | - }} |
73 | | - ref={iconRef} |
| 73 | + ref={iconRef as RefObject<HTMLDivElement | null>} |
74 | 74 | > |
75 | 75 | <IconUsed |
76 | 76 | disabled={disabled} |
77 | 77 | prominence={isActive ? 'stronger' : 'default'} |
78 | 78 | sentiment="neutral" |
79 | 79 | size="small" |
80 | 80 | /> |
81 | | - </Container> |
| 81 | + </div> |
82 | 82 | ) |
83 | 83 | } |
0 commit comments