Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate Tooltip, Help component with scss #1862

Merged
merged 20 commits into from
Jan 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
fba5502
feat(help): migrate styled-components to scss
yangwooseong Dec 27, 2023
ac2ca30
chore(help): update snapshot
yangwooseong Dec 27, 2023
df7f6b7
feat(tooltip): migrate styled-components to scss
yangwooseong Dec 27, 2023
82ba50b
feat(tooltip): add ThemeProvider to test code, since InvertedThemePro…
yangwooseong Dec 27, 2023
2d1a3ba
feat(tooltip): move ellipsis
yangwooseong Dec 27, 2023
59bebee
refactor(tooltip): use css variable instead of magic number
yangwooseong Dec 27, 2023
c7cb6f7
feat(tooltip): change padding to margin of tooltip style
yangwooseong Dec 27, 2023
310b791
fix(tooltip): rm unnecessary interpolation
yangwooseong Dec 27, 2023
db69bbe
refactor(test): add AppProvider to TestProvider
yangwooseong Dec 28, 2023
f8217ab
feat(tooltip): add 1px margin to Icon in Tooltip
yangwooseong Dec 28, 2023
a4efab9
refactor(tooltip): change classname
yangwooseong Jan 2, 2024
7560dc4
feat(text): add multiline ellipsis option to text
yangwooseong Jan 2, 2024
c8f45ea
feat(tooltip): use multiline ellipsis of `Text` component
yangwooseong Jan 2, 2024
dda40e6
chore(tooltip): change classname to PascalCase
yangwooseong Jan 2, 2024
7f187db
feat(tooltip): use isNumber function, use truncated and multi-line-tr…
yangwooseong Jan 3, 2024
9c7491c
chore(tooltip): enhance JSDoc
yangwooseong Jan 3, 2024
7d066af
feat(tooltip): flat nested selector to lower specificity
yangwooseong Jan 3, 2024
ced024d
fix(tooltip): typo fix in classname
yangwooseong Jan 3, 2024
5151cbb
feat(tooltip): change styling of icon, margin to padding
yangwooseong Jan 3, 2024
80da6b1
refactor(text): resolve duplicate css style
yangwooseong Jan 3, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ import {
import type SliderProps from './Slider.types'

describe('Slider', () => {
const renderSlider = (props?: Partial<SliderProps>) => render(<Slider {...props} />)
const renderSlider = (props?: Partial<SliderProps>) => render(
<Slider {...props} />,
)

let user: ReturnType<typeof userEvent.setup>

Expand Down
11 changes: 11 additions & 0 deletions packages/bezier-react/src/components/Help/Help.module.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@layer components {
.Help {
line-height: 0;

&:not([data-state="closed"]) {
> .Icon {
Copy link
Contributor

@sungik-choi sungik-choi Dec 28, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

호버 스타일이 제대로 적용되지 않고 있어요

Suggested change
> .Icon {
& > .icon {

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Icon.styled.ts 에서 만들어진 color 스타일이 unlayered 라서, components 레이어 밑에 있는 tooltip 스타일이 오버라이딩 되고 있던 것이 원인인듯합니다. Icon 컴포넌트 적용사항 반영하니 잘 되네요!

(suggestion 주신 코드에서 & 쓰는 거랑 안쓰는 거랑 차이 없는 걸로 이해했습니다)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

  • 제안은 .icon 으로 드렸는데, 작성해주신대로 .Icon 이 좋을듯..!
  • 약간 컨텍스트가 다를 수도 있는데, 저도 SegmentedControl 작업하다보니 components layer 내부에 포함돼있다라도 스타일 우선순위가 일부 있네요. radix theme처럼 :where 수도 클래스 적극적으로 사용해서 우선순위를 최대한 낮추는게 중요할 거 같아요

color: var(--txt-black-darkest);
}
}
}
}
15 changes: 0 additions & 15 deletions packages/bezier-react/src/components/Help/Help.styled.ts

This file was deleted.

14 changes: 9 additions & 5 deletions packages/bezier-react/src/components/Help/Help.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@ import { HelpFilledIcon } from '@channel.io/bezier-icons'

import { isEmpty } from '~/src/utils/type'

import { IconSize } from '~/src/components/Icon'
import {
Icon,
IconSize,
} from '~/src/components/Icon'
import { Tooltip } from '~/src/components/Tooltip'

import type HelpProps from './Help.types'

import * as Styled from './Help.styled'
import styles from './Help.module.scss'

export const HELP_TEST_ID = 'bezier-react-help'
export const HELP_DISPLAY_NAME = 'Help'
Expand All @@ -26,14 +29,15 @@ const Help = forwardRef<HTMLDivElement, HelpProps>(function Help({
ref={forwardedRef}
content={children}
>
<Styled.Trigger>
<Styled.Icon
<div className={styles.Help}>
<Icon
className={styles.Icon}
testId={HELP_TEST_ID}
source={HelpFilledIcon}
size={IconSize.XS}
color="txt-black-dark"
/>
</Styled.Trigger>
</div>
</Tooltip>
)
})
Expand Down
4 changes: 2 additions & 2 deletions packages/bezier-react/src/components/Help/Help.types.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import {
type BezierComponentProps,
type AlphaBezierComponentProps,
type ChildrenProps,
} from '~/src/types/ComponentProps'

import { type TooltipProps } from '~/src/components/Tooltip'

export default interface HelpProps extends
BezierComponentProps,
AlphaBezierComponentProps,
ChildrenProps,
Omit<TooltipProps, 'content' | 'children'> {}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@

exports[`Help > Snapshot > 1`] = `
<svg
class="Icon margin "
class="Icon margin Icon"
data-testid="bezier-react-help"
fill="none"
foundation="[object Object]"
height="16"
style="--b-icon-color: var(--txt-black-dark);"
viewBox="0 0 24 24"
Expand Down
78 changes: 47 additions & 31 deletions packages/bezier-react/src/components/Text/Text.module.scss
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
@layer components {
.Text {
--b-text-color: inherit;
--b-text-line-clamp: 1;
--b-text-line-height: initial;
--b-text-font-size: initial;
--b-text-letter-spacing: initial;

color: var(--b-text-color);
font-style: normal;
font-weight: var(--font-weight-400);
font-size: var(--b-text-font-size);
line-height: var(--b-text-line-height);
letter-spacing: var(--b-text-letter-spacing);
transition: color var(--transition-s);

&:where(.bold) {
Expand All @@ -22,6 +29,15 @@
white-space: nowrap;
}

&:where(.multi-line-truncated) {
display: -webkit-box;
max-height: calc(var(--b-text-line-clamp) * var(--b-text-line-height));
overflow: hidden;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp: var(--b-text-line-clamp);
}

&:where(.align-left) {
text-align: left;
}
Expand All @@ -35,70 +51,70 @@
}

&:where(.typo-11) {
font-size: var(--typography-size-11-font-size);
line-height: var(--typography-size-11-line-height);
--b-text-font-size: var(--typography-size-11-font-size);
--b-text-line-height: var(--typography-size-11-line-height);
}

&:where(.typo-12) {
font-size: var(--typography-size-12-font-size);
line-height: var(--typography-size-12-line-height);
--b-text-font-size: var(--typography-size-12-font-size);
--b-text-line-height: var(--typography-size-12-line-height);
}

&:where(.typo-13) {
font-size: var(--typography-size-13-font-size);
line-height: var(--typography-size-13-line-height);
--b-text-font-size: var(--typography-size-13-font-size);
--b-text-line-height: var(--typography-size-13-line-height);
}

&:where(.typo-14) {
font-size: var(--typography-size-14-font-size);
line-height: var(--typography-size-14-line-height);
--b-text-font-size: var(--typography-size-14-font-size);
--b-text-line-height: var(--typography-size-14-line-height);
}

&:where(.typo-15) {
font-size: var(--typography-size-15-font-size);
line-height: var(--typography-size-15-line-height);
letter-spacing: var(--typography-size-15-letter-spacing);
--b-text-font-size: var(--typography-size-15-font-size);
--b-text-letter-spacing: var(--typography-size-15-letter-spacing);
--b-text-line-height: var(--typography-size-15-line-height);
}

&:where(.typo-16) {
font-size: var(--typography-size-16-font-size);
line-height: var(--typography-size-16-line-height);
letter-spacing: var(--typography-size-16-letter-spacing);
--b-text-font-size: var(--typography-size-16-font-size);
--b-text-letter-spacing: var(--typography-size-16-letter-spacing);
--b-text-line-height: var(--typography-size-16-line-height);
}

&:where(.typo-17) {
font-size: var(--typography-size-17-font-size);
line-height: var(--typography-size-17-line-height);
letter-spacing: var(--typography-size-17-letter-spacing);
--b-text-font-size: var(--typography-size-17-font-size);
--b-text-letter-spacing: var(--typography-size-17-letter-spacing);
--b-text-line-height: var(--typography-size-17-line-height);
}

&:where(.typo-18) {
font-size: var(--typography-size-18-font-size);
line-height: var(--typography-size-18-line-height);
--b-text-font-size: var(--typography-size-18-font-size);
--b-text-line-height: var(--typography-size-18-line-height);
}

&:where(.typo-22) {
font-size: var(--typography-size-22-font-size);
line-height: var(--typography-size-22-line-height);
letter-spacing: var(--typography-size-22-letter-spacing);
--b-text-font-size: var(--typography-size-22-font-size);
--b-text-letter-spacing: var(--typography-size-22-letter-spacing);
--b-text-line-height: var(--typography-size-22-line-height);
}

&:where(.typo-24) {
font-size: var(--typography-size-24-font-size);
line-height: var(--typography-size-24-line-height);
letter-spacing: var(--typography-size-24-letter-spacing);
--b-text-font-size: var(--typography-size-24-font-size);
--b-text-letter-spacing: var(--typography-size-24-letter-spacing);
--b-text-line-height: var(--typography-size-24-line-height);
}

&:where(.typo-30) {
font-size: var(--typography-size-30-font-size);
line-height: var(--typography-size-30-line-height);
letter-spacing: var(--typography-size-30-letter-spacing);
--b-text-font-size: var(--typography-size-30-font-size);
--b-text-letter-spacing: var(--typography-size-30-letter-spacing);
--b-text-line-height: var(--typography-size-30-line-height);
}

&:where(.typo-36) {
font-size: var(--typography-size-36-font-size);
line-height: var(--typography-size-36-line-height);
letter-spacing: var(--typography-size-36-letter-spacing);
--b-text-font-size: var(--typography-size-36-font-size);
--b-text-letter-spacing: var(--typography-size-36-letter-spacing);
--b-text-line-height: var(--typography-size-36-line-height);
}
}
}
6 changes: 5 additions & 1 deletion packages/bezier-react/src/components/Text/Text.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
splitByMarginProps,
} from '~/src/utils/props'
import { tokenCssVar } from '~/src/utils/style'
import { isNumber } from '~/src/utils/type'

import { type TextProps } from './Text.types'

Expand Down Expand Up @@ -47,11 +48,13 @@ export const Text = forwardRef<HTMLElement, TextProps>(function Text(props, forw
align,
...rest
} = marginRest
const isMultiLineTruncated = isNumber(truncated) && truncated >= 1

return createElement(as, {
ref: forwardedRef,
style: {
'--b-text-color': tokenCssVar(color),
'--b-text-line-clamp': isMultiLineTruncated ? truncated : undefined,
...marginStyle.style,
...style,
},
Expand All @@ -60,7 +63,8 @@ export const Text = forwardRef<HTMLElement, TextProps>(function Text(props, forw
styles[`typo-${typo}`],
bold && styles.bold,
italic && styles.italic,
truncated && styles.truncated,
truncated === true ? styles.truncated :
isMultiLineTruncated && styles['multi-line-truncated'],
align && styles[`align-${align}`],
marginStyle.className,
className,
Expand Down
3 changes: 2 additions & 1 deletion packages/bezier-react/src/components/Text/Text.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,10 @@ interface TextOwnProps {
italic?: boolean
/**
* Whether the text is truncated.
* If it is a positive integer, it means the maximum number of lines.
* @default false
*/
truncated?: boolean
truncated?: boolean | number
/**
* Horizontal alignment of the text.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
@layer components {
.Tooltip {
z-index: var(--z-index-tooltip);

box-sizing: border-box;
width: max-content;
max-width: 260px;
height: max-content;
padding: 5px 8px;
word-break: normal;
word-wrap: break-word;

background-color: var(--bg-white-low);
overflow: hidden;
border-radius: var(--radius-8);
box-shadow: var(--ev-3);
}

.TooltipContainer {
overflow: hidden;
}

.TooltipContent {
white-space: pre-wrap;
}

.Icon {
padding: 1px;
}
}
63 changes: 0 additions & 63 deletions packages/bezier-react/src/components/Tooltip/Tooltip.styled.ts

This file was deleted.

Loading