@designbasekorea/figma-ui 0.7.1 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.esm.css +1 -1
- package/dist/index.esm.css.map +1 -1
- package/dist/index.esm.js +140 -34
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +140 -34
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -52,6 +52,22 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
52
52
|
'form.submit': '제출',
|
|
53
53
|
'form.verifying': '확인 중...',
|
|
54
54
|
'license.youtube_membership': 'YouTube 멤버십',
|
|
55
|
+
'license.unlock_unlimited': '무제한 사용 활성화',
|
|
56
|
+
'license.unlock_unlimited_description': '라이선스 키를 등록하면 모든 Designbase 플러그인의 프로 기능과 무제한 사용을 이용할 수 있습니다.',
|
|
57
|
+
'license.unlimited_benefit_title': '모든 플러그인 무제한 사용',
|
|
58
|
+
'license.unlimited_benefit_description': '사용 횟수 제한 없이 프로 기능과 프리미엄 콘텐츠를 이용할 수 있습니다.',
|
|
59
|
+
'license.get_key_title': '라이선스 키 받기',
|
|
60
|
+
'license.get_key_description': '멤버십 회원에게 매월 새 라이선스 키가 제공됩니다.',
|
|
61
|
+
'license.get_key_step_1_title': '멤버십 가입',
|
|
62
|
+
'license.get_key_step_1_description': 'Designbase YouTube 채널에서 멤버십에 가입합니다.',
|
|
63
|
+
'license.get_key_step_2_title': '이번 달 키 복사',
|
|
64
|
+
'license.get_key_step_2_description': '멤버 전용 커뮤니티 게시글에서 키를 확인합니다.',
|
|
65
|
+
'license.get_key_step_3_title': '키 등록',
|
|
66
|
+
'license.get_key_step_3_description': '아래 입력창에 붙여 넣으면 프로 기능이 열립니다.',
|
|
67
|
+
'license.get_key_cta': '멤버십 가입하고 키 받기',
|
|
68
|
+
'license.activate_key_title': '라이선스 키 등록',
|
|
69
|
+
'license.activate_key_description': '이미 키가 있다면 아래에 붙여 넣어 프로 기능을 활성화하세요.',
|
|
70
|
+
'license.unlock_pro_features': '프로 기능 활성화',
|
|
55
71
|
'license.current_plan': '현재 플랜',
|
|
56
72
|
'license.pro_plan': '프로 플랜',
|
|
57
73
|
'license.membership': '멤버십',
|
|
@@ -83,7 +99,7 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
83
99
|
'license.submit': '활성화',
|
|
84
100
|
'license.verifying': '확인 중...',
|
|
85
101
|
'license.enter_from_email': '이메일로 받은 라이선스 키를 입력하세요.',
|
|
86
|
-
'license.enter_from_youtube': '멤버 전용
|
|
102
|
+
'license.enter_from_youtube': '멤버 전용 게시글에서 복사한 이번 달 키를 입력하세요.',
|
|
87
103
|
'license.help_link': '라이선스·결제 도움말',
|
|
88
104
|
'license.youtube_membership_howto': '이용 방법',
|
|
89
105
|
'license.youtube_membership_step_1': 'Designbase YouTube 채널 멤버십에 가입합니다.',
|
|
@@ -190,6 +206,22 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
190
206
|
'form.submit': 'Activate',
|
|
191
207
|
'form.verifying': 'Verifying...',
|
|
192
208
|
'license.youtube_membership': 'YouTube Membership',
|
|
209
|
+
'license.unlock_unlimited': 'Unlock Unlimited Access',
|
|
210
|
+
'license.unlock_unlimited_description': 'Add a license key to unlock Pro features and unlimited use across Designbase plugins.',
|
|
211
|
+
'license.unlimited_benefit_title': 'Unlimited access to every plugin',
|
|
212
|
+
'license.unlimited_benefit_description': 'Use Pro features and premium content without usage limits.',
|
|
213
|
+
'license.get_key_title': 'Get a license key',
|
|
214
|
+
'license.get_key_description': 'Members receive a new license key every month.',
|
|
215
|
+
'license.get_key_step_1_title': 'Join the membership',
|
|
216
|
+
'license.get_key_step_1_description': 'Join the Designbase YouTube channel membership.',
|
|
217
|
+
'license.get_key_step_2_title': 'Copy this month’s key',
|
|
218
|
+
'license.get_key_step_2_description': 'Find the key in the members-only community post.',
|
|
219
|
+
'license.get_key_step_3_title': 'Activate the key',
|
|
220
|
+
'license.get_key_step_3_description': 'Paste it below to unlock Pro features.',
|
|
221
|
+
'license.get_key_cta': 'Join and get a license key',
|
|
222
|
+
'license.activate_key_title': 'Activate your license key',
|
|
223
|
+
'license.activate_key_description': 'Already have a key? Paste it below to unlock Pro features.',
|
|
224
|
+
'license.unlock_pro_features': 'Unlock Pro features',
|
|
193
225
|
'license.current_plan': 'Current plan',
|
|
194
226
|
'license.pro_plan': 'Pro plan',
|
|
195
227
|
'license.membership': 'Membership',
|
|
@@ -221,7 +253,7 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
221
253
|
'license.submit': 'Activate',
|
|
222
254
|
'license.verifying': 'Verifying...',
|
|
223
255
|
'license.enter_from_email': 'Enter the license key you received by email.',
|
|
224
|
-
'license.enter_from_youtube': 'Enter
|
|
256
|
+
'license.enter_from_youtube': 'Enter this month’s key copied from the members-only post.',
|
|
225
257
|
'license.help_link': 'License · payment help',
|
|
226
258
|
'license.youtube_membership_howto': 'How to use',
|
|
227
259
|
'license.youtube_membership_step_1': 'Join the Designbase YouTube channel membership.',
|
|
@@ -328,6 +360,22 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
328
360
|
'form.submit': '有効化',
|
|
329
361
|
'form.verifying': '確認中...',
|
|
330
362
|
'license.youtube_membership': 'YouTubeメンバーシップ',
|
|
363
|
+
'license.unlock_unlimited': '無制限アクセスを有効化',
|
|
364
|
+
'license.unlock_unlimited_description': 'ライセンスキーを登録すると、DesignbaseプラグインのPro機能を無制限で利用できます。',
|
|
365
|
+
'license.unlimited_benefit_title': 'すべてのプラグインを無制限で利用',
|
|
366
|
+
'license.unlimited_benefit_description': '回数制限なくPro機能とプレミアムコンテンツを利用できます。',
|
|
367
|
+
'license.get_key_title': 'ライセンスキーを取得',
|
|
368
|
+
'license.get_key_description': 'メンバーには毎月新しいライセンスキーが提供されます。',
|
|
369
|
+
'license.get_key_step_1_title': 'メンバーシップに参加',
|
|
370
|
+
'license.get_key_step_1_description': 'Designbase YouTubeチャンネルのメンバーシップに参加します。',
|
|
371
|
+
'license.get_key_step_2_title': '今月のキーをコピー',
|
|
372
|
+
'license.get_key_step_2_description': 'メンバー限定コミュニティの投稿でキーを確認します。',
|
|
373
|
+
'license.get_key_step_3_title': 'キーを登録',
|
|
374
|
+
'license.get_key_step_3_description': '下の入力欄に貼り付けるとPro機能が利用できます。',
|
|
375
|
+
'license.get_key_cta': '参加してライセンスキーを取得',
|
|
376
|
+
'license.activate_key_title': 'ライセンスキーを登録',
|
|
377
|
+
'license.activate_key_description': 'キーをお持ちの場合は、下に貼り付けてPro機能を有効化してください。',
|
|
378
|
+
'license.unlock_pro_features': 'Pro機能を有効化',
|
|
331
379
|
'license.current_plan': '現在のプラン',
|
|
332
380
|
'license.pro_plan': 'Proプラン',
|
|
333
381
|
'license.membership': 'メンバーシップ',
|
|
@@ -359,7 +407,7 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
359
407
|
'license.submit': '有効化',
|
|
360
408
|
'license.verifying': '確認中...',
|
|
361
409
|
'license.enter_from_email': 'メールで受け取ったライセンスキーを入力してください。',
|
|
362
|
-
'license.enter_from_youtube': '
|
|
410
|
+
'license.enter_from_youtube': 'メンバー限定投稿からコピーした今月のキーを入力してください。',
|
|
363
411
|
'license.help_link': 'ライセンス・支払いヘルプ',
|
|
364
412
|
'license.youtube_membership_howto': '利用方法',
|
|
365
413
|
'license.youtube_membership_step_1': 'Designbase YouTubeチャンネルのメンバーシップに参加します。',
|
|
@@ -1488,19 +1536,29 @@ const LicenseOffer = ({ joinUrl, guideUrl, membershipUrl, t, locale, className,
|
|
|
1488
1536
|
const titleId = `designbase-license-offer-title-${React.useId().replace(/:/g, '')}`;
|
|
1489
1537
|
const resolvedJoinUrl = joinUrl || membershipUrl;
|
|
1490
1538
|
const steps = [
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1539
|
+
{
|
|
1540
|
+
title: resolveText(translate, { key: 'license.get_key_step_1_title' }, '멤버십 가입'),
|
|
1541
|
+
description: resolveText(translate, { key: 'license.get_key_step_1_description' }, 'Designbase YouTube 채널에서 멤버십에 가입합니다.'),
|
|
1542
|
+
},
|
|
1543
|
+
{
|
|
1544
|
+
title: resolveText(translate, { key: 'license.get_key_step_2_title' }, '이번 달 키 복사'),
|
|
1545
|
+
description: resolveText(translate, { key: 'license.get_key_step_2_description' }, '멤버 전용 커뮤니티 게시글에서 키를 확인합니다.'),
|
|
1546
|
+
},
|
|
1494
1547
|
];
|
|
1495
1548
|
return (React.createElement("section", { className: `designbase-figma-license-offer ${className || ''}`, "aria-labelledby": titleId },
|
|
1496
|
-
React.createElement("
|
|
1549
|
+
React.createElement("header", { className: "designbase-figma-license-offer__header" },
|
|
1550
|
+
React.createElement("div", null,
|
|
1551
|
+
React.createElement("h3", { id: titleId, className: "designbase-figma-license-offer__title" }, resolveText(translate, { key: 'license.get_key_title' }, '라이선스 키 받기')),
|
|
1552
|
+
React.createElement("p", { className: "designbase-figma-license-offer__description" }, resolveText(translate, { key: 'license.get_key_description' }, '멤버십 회원에게 매월 새 라이선스 키가 제공됩니다.')))),
|
|
1497
1553
|
React.createElement("ol", { className: "designbase-figma-license-offer__steps" }, steps.map((step, index) => (React.createElement("li", { key: index },
|
|
1498
|
-
React.createElement("span", { className: "designbase-figma-license-offer__step-index", "aria-hidden": "true" },
|
|
1499
|
-
|
|
1500
|
-
".
|
|
1501
|
-
|
|
1554
|
+
React.createElement("span", { className: "designbase-figma-license-offer__step-index", "aria-hidden": "true" }, index + 1),
|
|
1555
|
+
React.createElement("span", { className: "designbase-figma-license-offer__step-copy" },
|
|
1556
|
+
React.createElement("strong", null, step.title),
|
|
1557
|
+
React.createElement("span", null, step.description)))))),
|
|
1502
1558
|
(resolvedJoinUrl || guideUrl) && (React.createElement("div", { className: "designbase-figma-license-offer__actions" },
|
|
1503
|
-
resolvedJoinUrl && (React.createElement(react.Button, { onPress: () => openExternalUrl(resolvedJoinUrl), variant: "primary", size: "m", fullWidth: true },
|
|
1559
|
+
resolvedJoinUrl && (React.createElement(react.Button, { onPress: () => openExternalUrl(resolvedJoinUrl), variant: "primary", size: "m", fullWidth: true },
|
|
1560
|
+
React.createElement("span", null, resolveText(translate, { key: 'license.get_key_cta' }, '멤버십 가입하고 키 받기')),
|
|
1561
|
+
React.createElement(icons.ExternalLinkIcon, { size: 16, "aria-hidden": "true" }))),
|
|
1504
1562
|
guideUrl && (React.createElement(react.Button, { onPress: () => openExternalUrl(guideUrl), variant: "secondary", size: "m", fullWidth: true },
|
|
1505
1563
|
React.createElement("span", null, resolveText(translate, { key: 'license.youtube_membership_guide' }, '안내보기')),
|
|
1506
1564
|
React.createElement(icons.ExternalLinkIcon, { size: 16, "aria-hidden": "true" })))))));
|
|
@@ -1932,9 +1990,11 @@ function useFigmaLicenseBridge(options = {}) {
|
|
|
1932
1990
|
function formatUsageLabel(state, t) {
|
|
1933
1991
|
const { remainingUsage, usageUsed, usageLimit, usageReset } = state;
|
|
1934
1992
|
if (usageLimit === 'unlimited') {
|
|
1935
|
-
return resolveText(t, { key: 'license.usage_unlimited' }, '사용 횟수 제한 없음') ?? '사용 횟수 제한 없음';
|
|
1993
|
+
return (resolveText(t, { key: 'license.usage_unlimited' }, '사용 횟수 제한 없음') ?? '사용 횟수 제한 없음');
|
|
1936
1994
|
}
|
|
1937
|
-
const limit = typeof usageLimit === 'number'
|
|
1995
|
+
const limit = typeof usageLimit === 'number'
|
|
1996
|
+
? usageLimit
|
|
1997
|
+
: remainingUsage + usageUsed;
|
|
1938
1998
|
const remaining = remainingUsage ?? Math.max(0, limit - usageUsed);
|
|
1939
1999
|
if (usageReset === 'daily') {
|
|
1940
2000
|
const fallback = `오늘 남은 횟수 ${remaining}/${limit}`;
|
|
@@ -1951,7 +2011,7 @@ function formatUsageLabel(state, t) {
|
|
|
1951
2011
|
const translated = resolveText(t, { key: 'license.usage_weekly', values: { remaining, limit } }, fallback) ?? fallback;
|
|
1952
2012
|
return translated.includes(String(remaining)) ? translated : fallback;
|
|
1953
2013
|
}
|
|
1954
|
-
return resolveText(t, { key: 'license.usage_generic', values: { remaining, limit } }, `남은 횟수 ${remaining}/${limit}`) ?? `남은 횟수 ${remaining}/${limit}
|
|
2014
|
+
return (resolveText(t, { key: 'license.usage_generic', values: { remaining, limit } }, `남은 횟수 ${remaining}/${limit}`) ?? `남은 횟수 ${remaining}/${limit}`);
|
|
1955
2015
|
}
|
|
1956
2016
|
const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicenseKey = '', licenseStatus: initialLicenseStatus, licenseSource: initialLicenseSource, accessScope: initialAccessScope, expiresAt: initialExpiresAt, lastVerifiedAt: initialLastVerifiedAt, wordpressLinks, paymentPageUrl, mode = 'pricing', membershipUrl, enableAccountAuth = true, showLicenseKeyInput = true, pricingFeatures, pricing, paymentType = 'subscription', messageTypes, onStateChange, setPaymentStatus, setUsageCount, onLicenseSubmit, usageCount: initialUsageCount = 0, t, locale, className, }) => {
|
|
1957
2017
|
const { t: translate } = useFigmaUiI18n(locale, t);
|
|
@@ -2000,20 +2060,29 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
|
|
|
2000
2060
|
React.createElement("div", { className: "designbase-figma-page-license__content" },
|
|
2001
2061
|
React.createElement("div", { className: "designbase-figma-page-license__header" },
|
|
2002
2062
|
React.createElement("div", { className: "designbase-figma-page-license__title" },
|
|
2003
|
-
React.createElement("h2", null,
|
|
2004
|
-
? resolveText(translate, { key: 'license.
|
|
2005
|
-
:
|
|
2006
|
-
? resolveText(translate, { key: 'license.
|
|
2063
|
+
React.createElement("h2", null, isPaid
|
|
2064
|
+
? resolveText(translate, { key: 'license.pro_account' }, '프로 계정')
|
|
2065
|
+
: isMembershipMode
|
|
2066
|
+
? resolveText(translate, { key: 'license.unlock_unlimited' }, '무제한 사용 활성화')
|
|
2007
2067
|
: resolveText(translate, { key: 'license.upgrade_to_pro' }, '프로로 업그레이드')),
|
|
2008
2068
|
isPaid && (React.createElement("span", { className: "designbase-figma-page-license__tier" }, resolveText(translate, { key: 'license.pro_plan' }, '프로 플랜')))),
|
|
2009
2069
|
React.createElement("p", { className: "designbase-figma-page-license__description" }, isPaid
|
|
2010
2070
|
? resolveText(translate, { key: 'license.all_features_available' }, '모든 기능을 사용할 수 있습니다.')
|
|
2011
2071
|
: isMembershipMode
|
|
2012
|
-
? resolveText(translate, {
|
|
2072
|
+
? resolveText(translate, {
|
|
2073
|
+
key: 'license.unlock_unlimited_description',
|
|
2074
|
+
}, '라이선스 키를 등록하면 모든 Designbase 플러그인의 프로 기능과 무제한 사용을 이용할 수 있습니다.')
|
|
2013
2075
|
: resolveText(translate, { key: 'license.purchase_for_unlimited' }, '디자인베이스 멤버십 또는 라이선스로 무제한 이용이 가능합니다.')),
|
|
2014
2076
|
!isPaid && !isMembershipMode && (React.createElement("p", { className: "designbase-figma-page-license__usage" }, usageLabel))),
|
|
2077
|
+
!isPaid && isMembershipMode && (React.createElement("div", { className: "designbase-figma-page-license__benefit" },
|
|
2078
|
+
React.createElement("span", { className: "designbase-figma-page-license__benefit-icon", "aria-hidden": "true" }, "\u221E"),
|
|
2079
|
+
React.createElement("div", null,
|
|
2080
|
+
React.createElement("strong", null, resolveText(translate, { key: 'license.unlimited_benefit_title' }, '모든 플러그인 무제한 사용')),
|
|
2081
|
+
React.createElement("p", null, resolveText(translate, { key: 'license.unlimited_benefit_description' }, '사용 횟수 제한 없이 프로 기능과 프리미엄 콘텐츠를 이용할 수 있습니다.'))))),
|
|
2015
2082
|
!isMembershipMode && (React.createElement(PricingComparison, { features: pricingFeatures, pricing: pricing, paymentType: paymentType, t: translate })),
|
|
2016
|
-
state.lastMessage &&
|
|
2083
|
+
state.lastMessage &&
|
|
2084
|
+
state.lastErrorCode &&
|
|
2085
|
+
!state.deactivateMessage && (React.createElement("p", { className: `designbase-figma-page-license__feedback ${state.lastErrorCode ? 'designbase-figma-page-license__feedback--error' : ''}`, "aria-live": "polite" }, state.lastMessage)),
|
|
2017
2086
|
isPaid && (React.createElement("div", { className: "designbase-figma-page-license__paid-summary" },
|
|
2018
2087
|
React.createElement("div", { className: "designbase-figma-page-license__paid-hero" },
|
|
2019
2088
|
React.createElement("span", { "aria-hidden": "true" }, "\u221E"),
|
|
@@ -2024,9 +2093,12 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
|
|
|
2024
2093
|
React.createElement("div", { className: "designbase-figma-page-license__paid-actions" },
|
|
2025
2094
|
state.activationLimit > 0 && (React.createElement("div", { className: "designbase-figma-page-license__activation-info" },
|
|
2026
2095
|
React.createElement("div", { className: "designbase-figma-page-license__remaining" },
|
|
2027
|
-
Math.max(0, state.activationLimit -
|
|
2096
|
+
Math.max(0, state.activationLimit -
|
|
2097
|
+
state.activationUsage),
|
|
2028
2098
|
' ',
|
|
2029
|
-
resolveText(translate, {
|
|
2099
|
+
resolveText(translate, {
|
|
2100
|
+
key: 'license.activations_remaining',
|
|
2101
|
+
}, '활성'),
|
|
2030
2102
|
' ',
|
|
2031
2103
|
resolveText(translate, { key: 'license.spots_remaining' }, '자리 남음')),
|
|
2032
2104
|
React.createElement("div", { className: "designbase-figma-page-license__usage-count" },
|
|
@@ -2036,30 +2108,64 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
|
|
|
2036
2108
|
React.createElement(react.Button, { onPress: deactivateLicense, variant: "secondary", size: "m", fullWidth: true, disabled: isDeactivating }, isDeactivating
|
|
2037
2109
|
? resolveText(translate, { key: 'license.deactivating' }, '비활성화 중...')
|
|
2038
2110
|
: resolveText(translate, { key: 'license.deactivate' }, '라이선스 비활성화')),
|
|
2039
|
-
state.deactivateMessage &&
|
|
2111
|
+
state.deactivateMessage &&
|
|
2112
|
+
state.deactivateErrorCode && (React.createElement("p", { className: `designbase-figma-page-license__action-feedback designbase-figma-page-license__action-feedback--${resolvePaymentFeedbackVariant(state.deactivateErrorCode)}`, role: "alert", "aria-live": "polite" }, state.deactivateMessage)),
|
|
2040
2113
|
React.createElement("p", { className: "designbase-figma-page-license__deactivate-hint" }, resolveText(translate, { key: 'license.deactivate_hint' }, '이 기기에서 라이선스 연결을 해제합니다.'))))),
|
|
2041
2114
|
!isPaid && (React.createElement(React.Fragment, null,
|
|
2042
2115
|
isMembershipMode && (React.createElement(LicenseOffer, { joinUrl: links.membershipUrl || links.purchaseUrl, guideUrl: links.helpUrl || links.purchaseUrl, t: translate })),
|
|
2043
|
-
!isMembershipMode &&
|
|
2116
|
+
!isMembershipMode &&
|
|
2117
|
+
(enableAccountAuth ||
|
|
2118
|
+
links.purchaseUrl ||
|
|
2119
|
+
links.accountUrl) && (React.createElement("div", { className: "designbase-figma-page-license__section" },
|
|
2044
2120
|
React.createElement("div", { className: "designbase-figma-page-license__section-header" },
|
|
2045
|
-
React.createElement("h3", null, resolveText(translate, {
|
|
2046
|
-
|
|
2121
|
+
React.createElement("h3", null, resolveText(translate, {
|
|
2122
|
+
key: 'license.designbase_account',
|
|
2123
|
+
}, '디자인베이스 계정'))),
|
|
2124
|
+
React.createElement("p", { className: "designbase-figma-page-license__hint" }, resolveText(translate, {
|
|
2125
|
+
key: 'license.designbase_account_hint',
|
|
2126
|
+
}, 'WordPress 계정으로 로그인하거나 멤버십을 구매하면 플러그인이 자동으로 활성화됩니다.')),
|
|
2047
2127
|
React.createElement("div", { className: "designbase-figma-page-license__actions" },
|
|
2048
|
-
enableAccountAuth && (React.createElement(react.Button, { onPress: startDesignbaseAuth, variant: "primary", size: "m", disabled: isStartingAuth ||
|
|
2049
|
-
|
|
2050
|
-
|
|
2128
|
+
enableAccountAuth && (React.createElement(react.Button, { onPress: startDesignbaseAuth, variant: "primary", size: "m", disabled: isStartingAuth ||
|
|
2129
|
+
isVerifying, fullWidth: true }, isStartingAuth
|
|
2130
|
+
? resolveText(translate, {
|
|
2131
|
+
key: 'license.authenticating',
|
|
2132
|
+
}, '인증 중...')
|
|
2133
|
+
: resolveText(translate, {
|
|
2134
|
+
key: 'license.login_with_designbase',
|
|
2135
|
+
}, '디자인베이스로 로그인'))),
|
|
2051
2136
|
links.purchaseUrl && (React.createElement(react.Button, { onPress: () => openExternalUrl(links.purchaseUrl), variant: "secondary", size: "m", fullWidth: true },
|
|
2052
|
-
React.createElement("span", null, resolveText(translate, {
|
|
2137
|
+
React.createElement("span", null, resolveText(translate, {
|
|
2138
|
+
key: 'license.purchase_membership',
|
|
2139
|
+
}, '멤버십 안내')),
|
|
2053
2140
|
React.createElement(icons.ExternalLinkIcon, { size: 16 }))),
|
|
2054
2141
|
links.accountUrl && (React.createElement(react.Button, { onPress: () => openExternalUrl(links.accountUrl), variant: "tertiary", size: "s", fullWidth: true },
|
|
2055
|
-
React.createElement("span", null, resolveText(translate, {
|
|
2142
|
+
React.createElement("span", null, resolveText(translate, {
|
|
2143
|
+
key: 'license.manage_account',
|
|
2144
|
+
}, '계정·멤버십 관리')),
|
|
2056
2145
|
React.createElement(icons.ExternalLinkIcon, { size: 16 })))))),
|
|
2057
2146
|
showLicenseKeyInput && (React.createElement("div", { className: isMembershipMode
|
|
2058
2147
|
? 'designbase-figma-page-license__key-form'
|
|
2059
2148
|
: 'designbase-figma-page-license__section' },
|
|
2060
2149
|
React.createElement("div", { className: "designbase-figma-page-license__section-header" },
|
|
2061
|
-
React.createElement("h3", null,
|
|
2062
|
-
|
|
2150
|
+
React.createElement("h3", null, isMembershipMode
|
|
2151
|
+
? resolveText(translate, {
|
|
2152
|
+
key: 'license.activate_key_title',
|
|
2153
|
+
}, '라이선스 키 등록')
|
|
2154
|
+
: resolveText(translate, { key: 'license.enter_key' }, '라이선스 키 입력'))),
|
|
2155
|
+
isMembershipMode && (React.createElement("p", { className: "designbase-figma-page-license__hint" }, resolveText(translate, {
|
|
2156
|
+
key: 'license.activate_key_description',
|
|
2157
|
+
}, '이미 키가 있다면 아래에 붙여 넣어 프로 기능을 활성화하세요.'))),
|
|
2158
|
+
React.createElement(FormWithSubmit, { onLicenseSubmit: handleLicenseSubmit, disabled: false, isSubmitting: isVerifying, value: licenseKeyDraft, onValueChange: handleLicenseKeyChange, label: { key: 'license.key' }, submitText: {
|
|
2159
|
+
key: isMembershipMode
|
|
2160
|
+
? 'license.unlock_pro_features'
|
|
2161
|
+
: 'license.submit',
|
|
2162
|
+
}, submittingText: {
|
|
2163
|
+
key: 'license.verifying',
|
|
2164
|
+
}, helperText: {
|
|
2165
|
+
key: isMembershipMode
|
|
2166
|
+
? 'license.enter_from_youtube'
|
|
2167
|
+
: 'license.enter_from_email',
|
|
2168
|
+
}, t: translate }))))),
|
|
2063
2169
|
links.helpUrl && !isMembershipMode && (React.createElement("p", { className: "designbase-figma-page-license__disclaimer" },
|
|
2064
2170
|
React.createElement("button", { type: "button", className: "designbase-figma-page-license__link", onClick: () => openExternalUrl(links.helpUrl) }, resolveText(translate, { key: 'license.help_link' }, '라이선스·결제 도움말'))))),
|
|
2065
2171
|
React.createElement(react.Button, { className: "designbase-figma-page-license__close", onPress: onClose, variant: "tertiary", size: "s", iconOnly: true, "aria-label": translate('close') },
|