Skip to content

Commit 63cbabf

Browse files
authored
v0.2.18
2 parents dd6d143 + b1f8cda commit 63cbabf

File tree

14 files changed

+92
-49
lines changed

14 files changed

+92
-49
lines changed

package-lock.json

Lines changed: 6 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@channel.io/design-system",
3-
"version": "0.2.17",
3+
"version": "0.2.18",
44
"description": "Design System by Channel",
55
"repository": {
66
"type": "git",
@@ -147,6 +147,7 @@
147147
"prosemirror-model": "^1.12.0",
148148
"prosemirror-state": "^1.3.3",
149149
"prosemirror-view": "^1.16.0",
150+
"ssr-window": "^2.0.0",
150151
"uuid": "^8.3.1"
151152
}
152153
}

src/components/Checkbox/Checkbox.styled.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
/* Internal dependencies */
22
import { styled } from '../../styling/Theme'
33
import { absoluteCenter } from '../../styling/Mixins'
4-
import Palette from '../../styling/Palette'
54
import { StyledWrapperProps, StyledCheckerProps, StyledContentProps } from './Checkbox.types'
65
import CheckType from './CheckType'
76

@@ -27,18 +26,18 @@ const checkerBase = (props: StyledCheckerProps) => `
2726
height: 9px;
2827
border-right: solid ${CHECKER_ICON_THICKNESS}px transparent;
2928
border-bottom: solid ${CHECKER_ICON_THICKNESS}px transparent;
30-
border-color: ${Palette.white};
29+
border-color: ${props.theme?.colors?.border0};
3130
content: '';
3231
transition: ${props.theme?.transition?.BorderTransition};
3332
}
3433
3534
${(props.checkStatus === CheckType.True || props.checkStatus === CheckType.Partial) ? `
36-
background-color: ${Palette.green400};
35+
background-color: ${props.theme?.colors?.success1};
3736
border-color: transparent;
3837
3938
${!props.disabled ? `
4039
&:hover {
41-
background-color: ${Palette.green500};
40+
background-color: ${props.theme?.colors.success1Hover};
4241
}
4342
` : ''}
4443
` : ''}
@@ -49,7 +48,7 @@ const partialChecked = (props: StyledCheckerProps) => ((props.checkStatus === Ch
4948
${absoluteCenter`translateY(-36%) rotate(0)`}
5049
width: 10px;
5150
border-right: none;
52-
border-bottom: solid 2px ${Palette.white};
51+
border-bottom: solid 2px ${props.theme?.colors?.border0};
5352
}
5453
` : '')
5554

@@ -62,7 +61,7 @@ const disabled = (props: StyledCheckerProps) => ((props.disabled) ? `
6261
}
6362
` : `
6463
&::after {
65-
border-color: ${Palette.grey500};
64+
border-color: ${props.theme?.colors?.border5}
6665
}
6766
`}
6867
` : '')
@@ -79,15 +78,15 @@ export const Checker = styled.div<StyledCheckerProps>`
7978
min-height: ${CHECKER_BOX_SIZE}px;
8079
font-size: 10px;
8180
color: transparent;
82-
background-color: ${Palette.white};
81+
background-color: ${props => props.theme?.colors?.background0};
8382
border: ${CHECKER_BORDER_THICKNESS}px solid ${props => props.theme?.colors?.border3};
8483
border-radius: 4px;
8584
transition: ${props => props.theme?.transition?.BackgroundTransition}, ${props => props.theme?.transition?.ColorTransition};
8685
8786
${props => (!props.disabled ? `
8887
&:hover {
8988
&::after {
90-
border-color: ${Palette.grey200};
89+
border-color: ${props.theme?.colors?.border2};
9190
}
9291
}
9392
` : '')}

src/components/Editor/Editor.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import React, {
1010
} from 'react'
1111
import { DOMParser, ResolvedPos } from 'prosemirror-model'
1212
import { isEmpty, noop } from 'lodash-es'
13+
import { window, document } from 'ssr-window'
1314

1415
/* Internal dependencies */
1516
import useMergeRefs from '../../hooks/useMergeRefs'
@@ -112,16 +113,16 @@ function Editor(
112113
* 따라서 newline 을 지켜주는 parser 를 새로 구성함.
113114
* 참조: https://prosemirror.net/docs/ref/#view.EditorProps.clipboardTextParser
114115
*/
115-
const dom = window.document.createElement('div')
116+
const dom = window.document!.createElement('div')
116117

117118
pastedText
118119
.trim()
119120
.split('\n')
120121
.forEach(block => {
121122
if (isEmpty(block)) {
122-
dom.appendChild(document.createElement('p'))
123+
dom.appendChild(document.createElement!('p'))
123124
} else {
124-
dom.appendChild(document.createElement('p')).textContent = block
125+
dom.appendChild(document.createElement!('p')).textContent = block
125126
}
126127
})
127128

src/components/Editor/utils/ReactNodeView/ReactNodeView.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import { ReactElement } from 'react'
33
import { NodeView } from 'prosemirror-view'
44
import { Node as ProsemirrorNode } from 'prosemirror-model'
5+
import { window } from 'ssr-window'
56

67
/* Internal dependencies */
78
import ReactNodeViewProvider from './ReactNodeViewProvider'
@@ -15,7 +16,7 @@ abstract class ReactNodeView implements NodeView {
1516

1617
constructor(node: ProsemirrorNode, provider: ReactNodeViewProvider) {
1718
this.provider = provider
18-
this.dom = window.document.createElement('span')
19+
this.dom = window.document!.createElement('span')
1920
this.node = node
2021
this.update()
2122
}

src/components/List/ListItem/ListItem.styled.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
/* Internal dependencies */
22
import { css, styled } from '../../../styling/Theme'
3-
import Palette from '../../../styling/Palette'
43
import { StyledWrapperProps } from './ListItem.types'
54

65
const ActiveItemStyle = css<StyledWrapperProps>`
7-
color: ${Palette.blue500};
8-
background-color: ${Palette.blue100};
6+
color: ${props => props.theme?.colors?.focus5};
7+
background-color: ${props => props.theme?.colors?.focus1};
98
`
109

1110
export const Wrapper = styled.div<StyledWrapperProps>`

src/components/List/ListMenuGroup/ListMenuGroup.styled.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { isNil } from 'lodash-es'
33

44
/* Internal dependencies */
55
import { styled } from '../../../styling/Theme'
6+
import { Icon } from '../../Icon'
67
import { StyledWrapperProps } from './ListMenuGroup.types'
78

89
export const GroupItemWrapper = styled.div<StyledWrapperProps>`
@@ -20,7 +21,7 @@ export const GroupItemWrapper = styled.div<StyledWrapperProps>`
2021
border-radius: 6px;
2122
2223
&:hover {
23-
background-color: ${props => props.theme?.colors?.background3};
24+
background-color: ${props => (props.open ? 'initial' : props.theme?.colors?.background3)};
2425
}
2526
2627
${props => !isNil(props.currentMenuItemIndex) && `
@@ -29,6 +30,10 @@ export const GroupItemWrapper = styled.div<StyledWrapperProps>`
2930
`}
3031
`
3132

33+
export const StyledIcon = styled(Icon)`
34+
color: ${props => props.theme?.colors?.text5};
35+
`
36+
3237
export const GroupItemContentWrapper = styled.div`
3338
display: flex;
3439
flex: 1;

src/components/List/ListMenuGroup/ListMenuGroup.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,14 @@ import { noop, isNil, isEmpty } from 'lodash-es'
44

55
/* Internal dependencies */
66
import { isListItem } from '../ListItem/ListItem'
7-
import { Icon, IconSize } from '../../Icon'
7+
import { IconSize } from '../../Icon'
88
import ListMenuGroupProps from './ListMenuGroup.types'
9-
import { GroupItemWrapper, ChildrenWrapper, GroupItemContentWrapper } from './ListMenuGroup.styled'
9+
import {
10+
GroupItemWrapper,
11+
ChildrenWrapper,
12+
GroupItemContentWrapper,
13+
StyledIcon,
14+
} from './ListMenuGroup.styled'
1015

1116
export const SIDEBAR_MENU_GROUP_TEST_ID = 'ch-design-system-sidebar-menu-group'
1217

@@ -83,7 +88,7 @@ forwardedRef: React.Ref<HTMLElement>,
8388
<>
8489
<GroupItemContentWrapper>
8590
{ !isNil(leftIcon) && (
86-
<Icon
91+
<StyledIcon
8792
name={leftIcon}
8893
size={IconSize.S}
8994
marginRight={10}
@@ -93,7 +98,7 @@ forwardedRef: React.Ref<HTMLElement>,
9398
</GroupItemContentWrapper>
9499
{
95100
!isEmpty(children) && !rightContent ? (
96-
<Icon
101+
<StyledIcon
97102
className={arrowClassName}
98103
name={open ? 'chevron-up' : 'chevron-down'}
99104
size={IconSize.XS}
@@ -139,6 +144,7 @@ forwardedRef: React.Ref<HTMLElement>,
139144
ref={forwardedRef}
140145
name={name}
141146
className={className}
147+
open={open}
142148
currentMenuItemIndex={currentMenuItemIndex}
143149
onClick={handleClickGroup}
144150
data-testid={testId}

src/components/Overlay/Overlay.stories.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { base } from 'paths.macro'
55
/* Internal dependencies */
66
import { getTitle } from '../../utils/utils'
77
import { styled } from '../../styling/Theme'
8-
import Palette from '../../styling/Palette'
98
import Overlay from './Overlay'
109
import { OverlayPosition } from './Overlay.types'
1110

@@ -55,7 +54,7 @@ const Container = styled.div`
5554
width: 600px;
5655
height: 500px;
5756
overflow: scroll;
58-
border: 1px solid ${Palette.grey700};
57+
border: 1px solid ${props => props.theme?.colors?.border7};
5958
`
6059

6160
const Wrapper = styled.div`
@@ -72,15 +71,15 @@ const Target = styled.div`
7271
align-items: center;
7372
width: 70px;
7473
height: 40px;
75-
background-color: ${Palette.grey300};
74+
background-color: ${props => props.theme?.colors?.background3};
7675
border-radius: 4px;
7776
`
7877

7978
const Children = styled.div`
8079
width: 250px;
8180
height: 150px;
8281
overflow-y: scroll;
83-
background-color: ${Palette.grey500};
82+
background-color: ${props => props.theme?.colors?.background5};
8483
border-radius: 4px;
8584
`
8685

@@ -132,4 +131,5 @@ Primary.args = {
132131
placement: OverlayPosition.BottomCenter,
133132
marginX: 0,
134133
marginY: 0,
134+
keepInContainer: false,
135135
}

src/components/Overlay/Overlay.tsx

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import React, {
1010
} from 'react'
1111
import ReactDOM from 'react-dom'
1212
import { noop } from 'lodash-es'
13+
import { document } from 'ssr-window'
1314

1415
/* Internal dependencies */
1516
import useMergeRefs from '../../hooks/useMergeRefs'
@@ -28,9 +29,9 @@ export const OVERLAY_TEST_ID = 'ch-design-system-overlay'
2829

2930
const ESCAPE_KEY = 'Escape'
3031
const rootElement =
31-
document.getElementById('main') ||
32-
document.getElementById('root') ||
33-
document.getElementsByTagName('body')[0] as HTMLElement
32+
document.getElementById!('main') ||
33+
document.getElementById!('root') ||
34+
document.getElementById!('__next') as HTMLElement
3435

3536
function listen<K extends keyof HTMLElementEventMap>(element: any, eventName: K, handler: EventHandler<K>) {
3637
if (!element) return noop
@@ -59,6 +60,7 @@ function getOverlayTranslation({
5960
placement,
6061
marginX,
6162
marginY,
63+
keepInContainer,
6264
}: GetOverlayTranslatationProps): React.CSSProperties {
6365
if (target) {
6466
const {
@@ -120,16 +122,18 @@ function getOverlayTranslation({
120122
break
121123
}
122124

123-
const isOverTop = targetTop + translateY < rootTop
124-
const isOverBottom = targetTop + translateY + overlayHeight > rootTop + rootHeight
125-
const isOverLeft = targetLeft + translateX < rootLeft
126-
const isOverRight = targetLeft + translateX + overlayWidth > rootLeft + rootWidth
125+
if (keepInContainer) {
126+
const isOverTop = targetTop + translateY < rootTop
127+
const isOverBottom = targetTop + translateY + overlayHeight > rootTop + rootHeight
128+
const isOverLeft = targetLeft + translateX < rootLeft
129+
const isOverRight = targetLeft + translateX + overlayWidth > rootLeft + rootWidth
127130

128-
if (isOverTop || isOverBottom) {
129-
translateY = targetHeight - translateY - overlayHeight
130-
}
131-
if (isOverLeft || isOverRight) {
132-
translateX = targetWidth - translateX - overlayWidth
131+
if (isOverTop || isOverBottom) {
132+
translateY = targetHeight - translateY - overlayHeight
133+
}
134+
if (isOverLeft || isOverRight) {
135+
translateX = targetWidth - translateX - overlayWidth
136+
}
133137
}
134138

135139
const transform = `translate(${translateX}px, ${translateY}px)`
@@ -144,10 +148,11 @@ function getOverlayStyle({
144148
placement,
145149
marginX,
146150
marginY,
151+
keepInContainer,
147152
}: GetOverlayStyleProps): React.CSSProperties {
148153
if (target) {
149154
const overlayPositionStyle = getOverlayPosition({ target })
150-
const overlayTranslateStyle = getOverlayTranslation({ target, overlay, placement, marginX, marginY })
155+
const overlayTranslateStyle = getOverlayTranslation({ target, overlay, placement, marginX, marginY, keepInContainer })
151156

152157
const combinedStyle = {
153158
...overlayPositionStyle,
@@ -175,6 +180,7 @@ function Overlay(
175180
placement = OverlayPosition.LeftCenter,
176181
marginX = 0,
177182
marginY = 0,
183+
keepInContainer = false,
178184
children,
179185
onHide = noop,
180186
...otherProps
@@ -273,6 +279,7 @@ function Overlay(
273279
placement,
274280
marginX,
275281
marginY,
282+
keepInContainer,
276283
})
277284
setOverlayStyle(tempOverlayStyle)
278285
setIsHidden(false)
@@ -283,7 +290,7 @@ function Overlay(
283290
}
284291
}
285292
return noop
286-
}, [show, marginX, marginY, placement, target])
293+
}, [show, marginX, marginY, placement, target, keepInContainer])
287294

288295
if (!show) return null
289296

0 commit comments

Comments
 (0)