Skip to content

Commit 835e326

Browse files
committed
Fix keep-all issue
1 parent 714a339 commit 835e326

File tree

4 files changed

+90
-4
lines changed

4 files changed

+90
-4
lines changed

bunfig.toml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
[test]
2-
coverage = true
3-
coverageSkipTestFiles = true
4-
coveragePathIgnorePatterns = ["dist/**"]
1+
[test]
2+
coverage = true
3+
coverageSkipTestFiles = true
4+
coveragePathIgnorePatterns = ["dist/**"]
5+
coverageThreshold = 0.9999

src/codegen/__tests__/__snapshots__/codegen.test.ts.snap

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1129,6 +1129,7 @@ exports[`render real world component real world $ 19`] = `
11291129
fontWeight="700"
11301130
letterSpacing="-0.04em"
11311131
lineHeight="1.6"
1132+
wordBreak="keep-all"
11321133
>
11331134
더 자세히 알아보기
11341135
</Text>
@@ -1152,6 +1153,7 @@ exports[`render real world component real world $ 20`] = `
11521153
fontWeight="800"
11531154
letterSpacing="-0.04em"
11541155
lineHeight="1.4"
1156+
wordBreak="keep-all"
11551157
>
11561158
<Text color="$primary">
11571159
자사 솔루션과의 연계
@@ -1165,6 +1167,7 @@ exports[`render real world component real world $ 20`] = `
11651167
fontWeight="500"
11661168
letterSpacing="-0.06em"
11671169
lineHeight="1.6"
1170+
wordBreak="keep-all"
11681171
>
11691172
웹앱팩토리와 Presskit 등 자체 운영 중인 <br />솔루션과의 연계를 통해 프로젝트의 서비스 범위 확장, <br />운영 효율화, 성장 기회까지 제안드립니다.
11701173
</Text>
@@ -1458,6 +1461,7 @@ exports[`render real world component real world $ 46`] = `
14581461
fontWeight="600"
14591462
letterSpacing="-0.04em"
14601463
lineHeight="1.6"
1464+
wordBreak="keep-all"
14611465
>
14621466
지금 시작할 수 있어요
14631467
</Text>
@@ -1468,6 +1472,7 @@ exports[`render real world component real world $ 46`] = `
14681472
fontWeight="700"
14691473
letterSpacing="-0.04em"
14701474
lineHeight="1.2"
1475+
wordBreak="keep-all"
14711476
>
14721477
내 삶을 더 잘 이해하는 첫 걸음
14731478
</Text>
@@ -1479,6 +1484,7 @@ exports[`render real world component real world $ 46`] = `
14791484
fontWeight="400"
14801485
letterSpacing="-0.04em"
14811486
lineHeight="1.6"
1487+
wordBreak="keep-all"
14821488
>
14831489
자꾸 미뤄졌던 나에 대한 고민, <br />퍼즐핏에서 구체적인 답을 찾아보세요.
14841490
</Text>
@@ -1492,6 +1498,7 @@ exports[`render real world component real world $ 46`] = `
14921498
letterSpacing="-0.04em"
14931499
lineHeight="1.6"
14941500
opacity="0.5"
1501+
wordBreak="keep-all"
14951502
>
14961503
회원가입 후, 유료로 진행됩니다
14971504
</Text>
@@ -1939,6 +1946,7 @@ exports[`render real world component real world $ 68`] = `
19391946
fontWeight="600"
19401947
letterSpacing="-1px"
19411948
lineHeight="1.5"
1949+
wordBreak="keep-all"
19421950
>
19431951
플레이 제목
19441952
</Text>
@@ -1994,6 +2002,7 @@ exports[`render real world component real world $ 68`] = `
19942002
fontWeight="400"
19952003
letterSpacing="-1px"
19962004
lineHeight="1.5"
2005+
wordBreak="keep-all"
19972006
>
19982007
댓글 내용 출력 댓글 내용 출력 댓글 내용 출력 댓글 내용 출력 댓글 내용 출력
19992008
</Text>
@@ -2063,6 +2072,7 @@ exports[`render real world component real world $ 77`] = `
20632072
letterSpacing="-0.05em"
20642073
lineHeight="1.4"
20652074
mixBlendMode="darken"
2075+
wordBreak="keep-all"
20662076
>
20672077
데브파이브
20682078
</Text>"
@@ -2084,6 +2094,7 @@ exports[`render real world component real world $ 78`] = `
20842094
fontWeight="700"
20852095
letterSpacing="-1px"
20862096
lineHeight="1.5"
2097+
wordBreak="keep-all"
20872098
>
20882099
간편 로그인 연동
20892100
</Text>
@@ -2103,6 +2114,7 @@ exports[`render real world component real world $ 78`] = `
21032114
fontWeight="600"
21042115
letterSpacing="-1px"
21052116
lineHeight="1.5"
2117+
wordBreak="keep-all"
21062118
>
21072119
카카오
21082120
</Text>
@@ -2113,6 +2125,7 @@ exports[`render real world component real world $ 78`] = `
21132125
fontWeight="400"
21142126
letterSpacing="-0.5px"
21152127
lineHeight="1.5"
2128+
wordBreak="keep-all"
21162129
>
21172130
연결 전
21182131
</Text>
@@ -2130,6 +2143,7 @@ exports[`render real world component real world $ 78`] = `
21302143
fontWeight="500"
21312144
letterSpacing="0px"
21322145
lineHeight="16px"
2146+
wordBreak="keep-all"
21332147
>
21342148
인증하기
21352149
</Text>
@@ -2150,6 +2164,7 @@ exports[`render real world component real world $ 78`] = `
21502164
fontWeight="600"
21512165
letterSpacing="-1px"
21522166
lineHeight="1.5"
2167+
wordBreak="keep-all"
21532168
>
21542169
구글
21552170
</Text>
@@ -2177,6 +2192,7 @@ exports[`render real world component real world $ 78`] = `
21772192
fontWeight="500"
21782193
letterSpacing="0px"
21792194
lineHeight="16px"
2195+
wordBreak="keep-all"
21802196
>
21812197
인증하기
21822198
</Text>
@@ -2200,6 +2216,7 @@ exports[`render real world component real world $ 78`] = `
22002216
fontWeight="600"
22012217
letterSpacing="-1px"
22022218
lineHeight="1.5"
2219+
wordBreak="keep-all"
22032220
>
22042221
서비스 이용약관
22052222
</Text>
@@ -2227,6 +2244,7 @@ exports[`render real world component real world $ 78`] = `
22272244
fontWeight="600"
22282245
letterSpacing="-1px"
22292246
lineHeight="1.5"
2247+
wordBreak="keep-all"
22302248
>
22312249
개인정보 처리방침
22322250
</Text>
@@ -2254,6 +2272,7 @@ exports[`render real world component real world $ 78`] = `
22542272
fontWeight="600"
22552273
letterSpacing="-1px"
22562274
lineHeight="1.5"
2275+
wordBreak="keep-all"
22572276
>
22582277
회원 탈퇴
22592278
</Text>
@@ -2408,6 +2427,7 @@ exports[`render real world component real world $ 99`] = `
24082427
lineHeight="normal"
24092428
paintOrder="stroke fill"
24102429
textShadow="0 0 12px #7C70FF"
2430+
wordBreak="keep-all"
24112431
>
24122432
홈페이지와 앱 제작
24132433
</Text>"
@@ -2421,6 +2441,7 @@ exports[`render real world component real world $ 100`] = `
24212441
fontWeight="500"
24222442
letterSpacing="-0.05em"
24232443
lineHeight="1.4"
2444+
wordBreak="keep-all"
24242445
>
24252446
<Text color="$primary" fontSize="42px" fontWeight="800">
24262447
온글
@@ -2439,6 +2460,7 @@ exports[`render real world component real world $ 101`] = `
24392460
fontWeight="400"
24402461
letterSpacing="-0.05em"
24412462
lineHeight="1.4"
2463+
wordBreak="keep-all"
24422464
>
24432465
데브파이브
24442466
</Text>"
@@ -2456,6 +2478,7 @@ exports[`render real world component real world $ 102`] = `
24562478
lineHeight="1.4"
24572479
paintOrder="stroke fill"
24582480
textShadow="0 0 12px #7C70FF, 0 10px 24px #FFC9FE66"
2481+
wordBreak="keep-all"
24592482
>
24602483
데브파이브
24612484
</Text>"
@@ -2472,6 +2495,7 @@ exports[`render real world component real world $ 103`] = `
24722495
lineHeight="2"
24732496
my="0px"
24742497
pl="1.5em"
2498+
wordBreak="keep-all"
24752499
>
24762500
<li>
24772501
어떤 증상이 가장 힘들고 일상생활에 영향을 주나요?
@@ -2519,6 +2543,7 @@ exports[`render real world component real world $ 104`] = `
25192543
fontWeight="700"
25202544
letterSpacing="-0.04em"
25212545
lineHeight="1.4"
2546+
wordBreak="keep-all"
25222547
>
25232548
자세히 알아보기 →
25242549
</Text>
@@ -2581,6 +2606,7 @@ export function Button({ size, variant }: ButtonProps) {
25812606
fontWeight="500"
25822607
letterSpacing="-0.04em"
25832608
lineHeight="normal"
2609+
wordBreak="keep-all"
25842610
>
25852611
참가 신청하기
25862612
</Text>
@@ -2630,6 +2656,7 @@ exports[`render real world component real world $ 106`] = `
26302656
fontWeight="700"
26312657
letterSpacing="-0.02em"
26322658
lineHeight="normal"
2659+
wordBreak="keep-all"
26332660
>
26342661
제주국제관악제 리뉴얼 알림
26352662
</Text>
@@ -2643,6 +2670,7 @@ exports[`render real world component real world $ 106`] = `
26432670
letterSpacing="-0.03em"
26442671
lineHeight="2"
26452672
textAlign="center"
2673+
wordBreak="keep-all"
26462674
>
26472675
더 나은 서비스 제공을 위해 시스템 점검 및 리뉴얼을 진행 중입니다.<br />이용에 불편을 드려 죄송하며, 빠른 시일 내에 다시 찾아뵙겠습니다.
26482676
</Text>
@@ -2667,6 +2695,7 @@ exports[`render real world component real world $ 106`] = `
26672695
fontWeight="700"
26682696
letterSpacing="-0.02em"
26692697
lineHeight="1.7"
2698+
wordBreak="keep-all"
26702699
>
26712700
제주국제관악제 최신 소식 확인하기
26722701
</Text>
@@ -2698,6 +2727,7 @@ exports[`render real world component real world $ 106`] = `
26982727
fontWeight="500"
26992728
letterSpacing="-0.02em"
27002729
lineHeight="1.7"
2730+
wordBreak="keep-all"
27012731
>
27022732
문의 : 064-722-8704 / bandfestival@hanmail.net
27032733
</Text>
@@ -2756,6 +2786,7 @@ exports[`render real world component real world $ 107`] = `
27562786
lineHeight="1.5"
27572787
textAlign="center"
27582788
w="100%"
2789+
wordBreak="keep-all"
27592790
>
27602791
제주국제관악제 <br />리뉴얼 알림
27612792
</Text>
@@ -2770,6 +2801,7 @@ exports[`render real world component real world $ 107`] = `
27702801
lineHeight="2"
27712802
textAlign="center"
27722803
w="100%"
2804+
wordBreak="keep-all"
27732805
>
27742806
더 나은 서비스 제공을 위해 <br />시스템 점검 및 리뉴얼을 진행 중입니다.<br />이용에 불편을 드려 죄송하며, <br />빠른 시일 내에 다시 찾아뵙겠습니다.
27752807
</Text>
@@ -2795,6 +2827,7 @@ exports[`render real world component real world $ 107`] = `
27952827
fontWeight="700"
27962828
letterSpacing="-0.02em"
27972829
lineHeight="1.7"
2830+
wordBreak="keep-all"
27982831
>
27992832
제주국제관악제 최신 소식 확인하기
28002833
</Text>
@@ -2828,6 +2861,7 @@ exports[`render real world component real world $ 107`] = `
28282861
letterSpacing="-0.02em"
28292862
lineHeight="1.7"
28302863
textAlign="center"
2864+
wordBreak="keep-all"
28312865
>
28322866
문의 : 064-722-8704 / <br />bandfestival@hanmail.net
28332867
</Text>

src/codegen/render/text.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@ import { fixTextChild } from '../utils/fix-text-child'
44
import { paintToCSS } from '../utils/paint-to-css'
55
import { renderNode } from '.'
66

7+
/**
8+
* Check if text contains Korean characters (Hangul).
9+
*/
10+
function containsKorean(text: string): boolean {
11+
// Hangul Unicode ranges:
12+
// - Hangul Syllables: U+AC00 to U+D7AF
13+
// - Hangul Jamo: U+1100 to U+11FF
14+
// - Hangul Compatibility Jamo: U+3130 to U+318F
15+
return /[\uAC00-\uD7AF\u1100-\u11FF\u3130-\u318F]/.test(text)
16+
}
17+
718
const SEGMENT_TYPE = [
819
'fontName',
920
'fontWeight',
@@ -58,6 +69,9 @@ export async function renderText(node: TextNode): Promise<{
5869
let defaultTypographyCount = 0
5970
let defaultProps: Record<string, string> = {}
6071

72+
// Check if any segment contains Korean text
73+
const hasKorean = segs.some((seg) => containsKorean(seg.characters))
74+
6175
propsArray.forEach((props) => {
6276
if (props.characters.length >= defaultTypographyCount) {
6377
defaultProps = { ...props }
@@ -66,6 +80,11 @@ export async function renderText(node: TextNode): Promise<{
6680
}
6781
})
6882

83+
// Add wordBreak: keep-all for Korean text
84+
if (hasKorean) {
85+
defaultProps.wordBreak = 'keep-all'
86+
}
87+
6988
const children = await Promise.all(
7089
segs.map(
7190
async (

src/codegen/responsive/__tests__/ResponsiveCodegen.test.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1573,5 +1573,37 @@ describe('ResponsiveCodegen', () => {
15731573

15741574
expect(result).toEqual(['Hello World'])
15751575
})
1576+
1577+
it('generates responsive br display when only some breakpoints have line breaks', () => {
1578+
// Test buildResponsiveTextChildren directly
1579+
const codegen = new ResponsiveCodegen(null)
1580+
1581+
// Normalized texts: Mobile has \n, PC does not
1582+
const normalizedTexts = new Map<import('../index').BreakpointKey, string>(
1583+
[
1584+
['pc', 'HelloWorld'],
1585+
['mobile', 'Hello\nWorld'],
1586+
],
1587+
)
1588+
const breakpoints: import('../index').BreakpointKey[] = ['pc', 'mobile']
1589+
1590+
const result = (
1591+
codegen as unknown as {
1592+
buildResponsiveTextChildren: (
1593+
texts: Map<import('../index').BreakpointKey, string>,
1594+
bps: import('../index').BreakpointKey[],
1595+
) => string[]
1596+
}
1597+
).buildResponsiveTextChildren(normalizedTexts, breakpoints)
1598+
1599+
// Should generate responsive br with display array
1600+
expect(result.length).toBe(1)
1601+
expect(result[0]).toContain('Hello')
1602+
expect(result[0]).toContain('World')
1603+
// Should have Box with as="br" and display prop
1604+
expect(result[0]).toContain('Box')
1605+
expect(result[0]).toContain('as="br"')
1606+
expect(result[0]).toContain('display')
1607+
})
15761608
})
15771609
})

0 commit comments

Comments
 (0)