@designbasekorea/figma-ui 0.7.1 → 0.7.2
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 +95 -23
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +95 -23
- package/dist/index.js.map +1 -1
- package/package.json +100 -100
package/dist/index.esm.js
CHANGED
|
@@ -53,6 +53,20 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
53
53
|
'form.submit': '제출',
|
|
54
54
|
'form.verifying': '확인 중...',
|
|
55
55
|
'license.youtube_membership': 'YouTube 멤버십',
|
|
56
|
+
'license.unlock_unlimited': '무제한 사용 활성화',
|
|
57
|
+
'license.unlock_unlimited_description': '라이선스 키를 등록하면 모든 Designbase 플러그인의 프로 기능과 무제한 사용을 이용할 수 있습니다.',
|
|
58
|
+
'license.get_key_title': '라이선스 키 받기',
|
|
59
|
+
'license.get_key_description': '멤버십 회원에게 매월 새 라이선스 키가 제공됩니다.',
|
|
60
|
+
'license.get_key_step_1_title': '멤버십 가입',
|
|
61
|
+
'license.get_key_step_1_description': 'Designbase YouTube 채널에서 멤버십에 가입합니다.',
|
|
62
|
+
'license.get_key_step_2_title': '이번 달 키 복사',
|
|
63
|
+
'license.get_key_step_2_description': '멤버 전용 커뮤니티 게시글에서 키를 확인합니다.',
|
|
64
|
+
'license.get_key_step_3_title': '키 등록',
|
|
65
|
+
'license.get_key_step_3_description': '아래 입력창에 붙여 넣으면 프로 기능이 열립니다.',
|
|
66
|
+
'license.get_key_cta': '멤버십 가입하고 키 받기',
|
|
67
|
+
'license.activate_key_title': '라이선스 키 등록',
|
|
68
|
+
'license.activate_key_description': '이미 키가 있다면 아래에 붙여 넣어 프로 기능을 활성화하세요.',
|
|
69
|
+
'license.unlock_pro_features': '프로 기능 활성화',
|
|
56
70
|
'license.current_plan': '현재 플랜',
|
|
57
71
|
'license.pro_plan': '프로 플랜',
|
|
58
72
|
'license.membership': '멤버십',
|
|
@@ -84,7 +98,7 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
84
98
|
'license.submit': '활성화',
|
|
85
99
|
'license.verifying': '확인 중...',
|
|
86
100
|
'license.enter_from_email': '이메일로 받은 라이선스 키를 입력하세요.',
|
|
87
|
-
'license.enter_from_youtube': '멤버 전용
|
|
101
|
+
'license.enter_from_youtube': '멤버 전용 게시글에서 복사한 이번 달 키를 입력하세요.',
|
|
88
102
|
'license.help_link': '라이선스·결제 도움말',
|
|
89
103
|
'license.youtube_membership_howto': '이용 방법',
|
|
90
104
|
'license.youtube_membership_step_1': 'Designbase YouTube 채널 멤버십에 가입합니다.',
|
|
@@ -191,6 +205,20 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
191
205
|
'form.submit': 'Activate',
|
|
192
206
|
'form.verifying': 'Verifying...',
|
|
193
207
|
'license.youtube_membership': 'YouTube Membership',
|
|
208
|
+
'license.unlock_unlimited': 'Unlock Unlimited Access',
|
|
209
|
+
'license.unlock_unlimited_description': 'Add a license key to unlock Pro features and unlimited use across Designbase plugins.',
|
|
210
|
+
'license.get_key_title': 'Get a license key',
|
|
211
|
+
'license.get_key_description': 'Members receive a new license key every month.',
|
|
212
|
+
'license.get_key_step_1_title': 'Join the membership',
|
|
213
|
+
'license.get_key_step_1_description': 'Join the Designbase YouTube channel membership.',
|
|
214
|
+
'license.get_key_step_2_title': 'Copy this month’s key',
|
|
215
|
+
'license.get_key_step_2_description': 'Find the key in the members-only community post.',
|
|
216
|
+
'license.get_key_step_3_title': 'Activate the key',
|
|
217
|
+
'license.get_key_step_3_description': 'Paste it below to unlock Pro features.',
|
|
218
|
+
'license.get_key_cta': 'Join and get a license key',
|
|
219
|
+
'license.activate_key_title': 'Activate your license key',
|
|
220
|
+
'license.activate_key_description': 'Already have a key? Paste it below to unlock Pro features.',
|
|
221
|
+
'license.unlock_pro_features': 'Unlock Pro features',
|
|
194
222
|
'license.current_plan': 'Current plan',
|
|
195
223
|
'license.pro_plan': 'Pro plan',
|
|
196
224
|
'license.membership': 'Membership',
|
|
@@ -222,7 +250,7 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
222
250
|
'license.submit': 'Activate',
|
|
223
251
|
'license.verifying': 'Verifying...',
|
|
224
252
|
'license.enter_from_email': 'Enter the license key you received by email.',
|
|
225
|
-
'license.enter_from_youtube': 'Enter
|
|
253
|
+
'license.enter_from_youtube': 'Enter this month’s key copied from the members-only post.',
|
|
226
254
|
'license.help_link': 'License · payment help',
|
|
227
255
|
'license.youtube_membership_howto': 'How to use',
|
|
228
256
|
'license.youtube_membership_step_1': 'Join the Designbase YouTube channel membership.',
|
|
@@ -329,6 +357,20 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
329
357
|
'form.submit': '有効化',
|
|
330
358
|
'form.verifying': '確認中...',
|
|
331
359
|
'license.youtube_membership': 'YouTubeメンバーシップ',
|
|
360
|
+
'license.unlock_unlimited': '無制限アクセスを有効化',
|
|
361
|
+
'license.unlock_unlimited_description': 'ライセンスキーを登録すると、DesignbaseプラグインのPro機能を無制限で利用できます。',
|
|
362
|
+
'license.get_key_title': 'ライセンスキーを取得',
|
|
363
|
+
'license.get_key_description': 'メンバーには毎月新しいライセンスキーが提供されます。',
|
|
364
|
+
'license.get_key_step_1_title': 'メンバーシップに参加',
|
|
365
|
+
'license.get_key_step_1_description': 'Designbase YouTubeチャンネルのメンバーシップに参加します。',
|
|
366
|
+
'license.get_key_step_2_title': '今月のキーをコピー',
|
|
367
|
+
'license.get_key_step_2_description': 'メンバー限定コミュニティの投稿でキーを確認します。',
|
|
368
|
+
'license.get_key_step_3_title': 'キーを登録',
|
|
369
|
+
'license.get_key_step_3_description': '下の入力欄に貼り付けるとPro機能が利用できます。',
|
|
370
|
+
'license.get_key_cta': '参加してライセンスキーを取得',
|
|
371
|
+
'license.activate_key_title': 'ライセンスキーを登録',
|
|
372
|
+
'license.activate_key_description': 'キーをお持ちの場合は、下に貼り付けてPro機能を有効化してください。',
|
|
373
|
+
'license.unlock_pro_features': 'Pro機能を有効化',
|
|
332
374
|
'license.current_plan': '現在のプラン',
|
|
333
375
|
'license.pro_plan': 'Proプラン',
|
|
334
376
|
'license.membership': 'メンバーシップ',
|
|
@@ -360,7 +402,7 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
360
402
|
'license.submit': '有効化',
|
|
361
403
|
'license.verifying': '確認中...',
|
|
362
404
|
'license.enter_from_email': 'メールで受け取ったライセンスキーを入力してください。',
|
|
363
|
-
'license.enter_from_youtube': '
|
|
405
|
+
'license.enter_from_youtube': 'メンバー限定投稿からコピーした今月のキーを入力してください。',
|
|
364
406
|
'license.help_link': 'ライセンス・支払いヘルプ',
|
|
365
407
|
'license.youtube_membership_howto': '利用方法',
|
|
366
408
|
'license.youtube_membership_step_1': 'Designbase YouTubeチャンネルのメンバーシップに参加します。',
|
|
@@ -1489,19 +1531,34 @@ const LicenseOffer = ({ joinUrl, guideUrl, membershipUrl, t, locale, className,
|
|
|
1489
1531
|
const titleId = `designbase-license-offer-title-${useId().replace(/:/g, '')}`;
|
|
1490
1532
|
const resolvedJoinUrl = joinUrl || membershipUrl;
|
|
1491
1533
|
const steps = [
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1534
|
+
{
|
|
1535
|
+
title: resolveText(translate, { key: 'license.get_key_step_1_title' }, '멤버십 가입'),
|
|
1536
|
+
description: resolveText(translate, { key: 'license.get_key_step_1_description' }, 'Designbase YouTube 채널에서 멤버십에 가입합니다.'),
|
|
1537
|
+
},
|
|
1538
|
+
{
|
|
1539
|
+
title: resolveText(translate, { key: 'license.get_key_step_2_title' }, '이번 달 키 복사'),
|
|
1540
|
+
description: resolveText(translate, { key: 'license.get_key_step_2_description' }, '멤버 전용 커뮤니티 게시글에서 키를 확인합니다.'),
|
|
1541
|
+
},
|
|
1542
|
+
{
|
|
1543
|
+
title: resolveText(translate, { key: 'license.get_key_step_3_title' }, '키 등록'),
|
|
1544
|
+
description: resolveText(translate, { key: 'license.get_key_step_3_description' }, '아래 입력창에 붙여 넣으면 프로 기능이 열립니다.'),
|
|
1545
|
+
},
|
|
1495
1546
|
];
|
|
1496
1547
|
return (React.createElement("section", { className: `designbase-figma-license-offer ${className || ''}`, "aria-labelledby": titleId },
|
|
1497
|
-
React.createElement("
|
|
1548
|
+
React.createElement("header", { className: "designbase-figma-license-offer__header" },
|
|
1549
|
+
React.createElement("span", { className: "designbase-figma-license-offer__section-index", "aria-hidden": "true" }, "1"),
|
|
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' }, '멤버십 회원에게 매월 새 라이선스 키가 제공됩니다.')))),
|
|
1498
1553
|
React.createElement("ol", { className: "designbase-figma-license-offer__steps" }, steps.map((step, index) => (React.createElement("li", { key: index },
|
|
1499
|
-
React.createElement("span", { className: "designbase-figma-license-offer__step-index", "aria-hidden": "true" },
|
|
1500
|
-
|
|
1501
|
-
".
|
|
1502
|
-
|
|
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)))))),
|
|
1503
1558
|
(resolvedJoinUrl || guideUrl) && (React.createElement("div", { className: "designbase-figma-license-offer__actions" },
|
|
1504
|
-
resolvedJoinUrl && (React.createElement(Button, { onPress: () => openExternalUrl(resolvedJoinUrl), variant: "primary", size: "m", fullWidth: true },
|
|
1559
|
+
resolvedJoinUrl && (React.createElement(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(ExternalLinkIcon, { size: 16, "aria-hidden": "true" }))),
|
|
1505
1562
|
guideUrl && (React.createElement(Button, { onPress: () => openExternalUrl(guideUrl), variant: "secondary", size: "m", fullWidth: true },
|
|
1506
1563
|
React.createElement("span", null, resolveText(translate, { key: 'license.youtube_membership_guide' }, '안내보기')),
|
|
1507
1564
|
React.createElement(ExternalLinkIcon, { size: 16, "aria-hidden": "true" })))))));
|
|
@@ -1933,7 +1990,7 @@ function useFigmaLicenseBridge(options = {}) {
|
|
|
1933
1990
|
function formatUsageLabel(state, t) {
|
|
1934
1991
|
const { remainingUsage, usageUsed, usageLimit, usageReset } = state;
|
|
1935
1992
|
if (usageLimit === 'unlimited') {
|
|
1936
|
-
return resolveText(t, { key: 'license.usage_unlimited' }, '사용 횟수 제한 없음') ?? '사용 횟수 제한 없음';
|
|
1993
|
+
return (resolveText(t, { key: 'license.usage_unlimited' }, '사용 횟수 제한 없음') ?? '사용 횟수 제한 없음');
|
|
1937
1994
|
}
|
|
1938
1995
|
const limit = typeof usageLimit === 'number' ? usageLimit : remainingUsage + usageUsed;
|
|
1939
1996
|
const remaining = remainingUsage ?? Math.max(0, limit - usageUsed);
|
|
@@ -1952,7 +2009,7 @@ function formatUsageLabel(state, t) {
|
|
|
1952
2009
|
const translated = resolveText(t, { key: 'license.usage_weekly', values: { remaining, limit } }, fallback) ?? fallback;
|
|
1953
2010
|
return translated.includes(String(remaining)) ? translated : fallback;
|
|
1954
2011
|
}
|
|
1955
|
-
return resolveText(t, { key: 'license.usage_generic', values: { remaining, limit } }, `남은 횟수 ${remaining}/${limit}`) ?? `남은 횟수 ${remaining}/${limit}
|
|
2012
|
+
return (resolveText(t, { key: 'license.usage_generic', values: { remaining, limit } }, `남은 횟수 ${remaining}/${limit}`) ?? `남은 횟수 ${remaining}/${limit}`);
|
|
1956
2013
|
}
|
|
1957
2014
|
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, }) => {
|
|
1958
2015
|
const { t: translate } = useFigmaUiI18n(locale, t);
|
|
@@ -2001,20 +2058,22 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
|
|
|
2001
2058
|
React.createElement("div", { className: "designbase-figma-page-license__content" },
|
|
2002
2059
|
React.createElement("div", { className: "designbase-figma-page-license__header" },
|
|
2003
2060
|
React.createElement("div", { className: "designbase-figma-page-license__title" },
|
|
2004
|
-
React.createElement("h2", null,
|
|
2005
|
-
? resolveText(translate, { key: 'license.
|
|
2006
|
-
:
|
|
2007
|
-
? resolveText(translate, { key: 'license.
|
|
2061
|
+
React.createElement("h2", null, isPaid
|
|
2062
|
+
? resolveText(translate, { key: 'license.pro_account' }, '프로 계정')
|
|
2063
|
+
: isMembershipMode
|
|
2064
|
+
? resolveText(translate, { key: 'license.unlock_unlimited' }, '무제한 사용 활성화')
|
|
2008
2065
|
: resolveText(translate, { key: 'license.upgrade_to_pro' }, '프로로 업그레이드')),
|
|
2009
2066
|
isPaid && (React.createElement("span", { className: "designbase-figma-page-license__tier" }, resolveText(translate, { key: 'license.pro_plan' }, '프로 플랜')))),
|
|
2010
2067
|
React.createElement("p", { className: "designbase-figma-page-license__description" }, isPaid
|
|
2011
2068
|
? resolveText(translate, { key: 'license.all_features_available' }, '모든 기능을 사용할 수 있습니다.')
|
|
2012
2069
|
: isMembershipMode
|
|
2013
|
-
? resolveText(translate, { key: 'license.
|
|
2070
|
+
? resolveText(translate, { key: 'license.unlock_unlimited_description' }, '라이선스 키를 등록하면 모든 Designbase 플러그인의 프로 기능과 무제한 사용을 이용할 수 있습니다.')
|
|
2014
2071
|
: resolveText(translate, { key: 'license.purchase_for_unlimited' }, '디자인베이스 멤버십 또는 라이선스로 무제한 이용이 가능합니다.')),
|
|
2015
2072
|
!isPaid && !isMembershipMode && (React.createElement("p", { className: "designbase-figma-page-license__usage" }, usageLabel))),
|
|
2016
2073
|
!isMembershipMode && (React.createElement(PricingComparison, { features: pricingFeatures, pricing: pricing, paymentType: paymentType, t: translate })),
|
|
2017
|
-
state.lastMessage &&
|
|
2074
|
+
state.lastMessage &&
|
|
2075
|
+
state.lastErrorCode &&
|
|
2076
|
+
!state.deactivateMessage && (React.createElement("p", { className: `designbase-figma-page-license__feedback ${state.lastErrorCode ? 'designbase-figma-page-license__feedback--error' : ''}`, "aria-live": "polite" }, state.lastMessage)),
|
|
2018
2077
|
isPaid && (React.createElement("div", { className: "designbase-figma-page-license__paid-summary" },
|
|
2019
2078
|
React.createElement("div", { className: "designbase-figma-page-license__paid-hero" },
|
|
2020
2079
|
React.createElement("span", { "aria-hidden": "true" }, "\u221E"),
|
|
@@ -2041,7 +2100,8 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
|
|
|
2041
2100
|
React.createElement("p", { className: "designbase-figma-page-license__deactivate-hint" }, resolveText(translate, { key: 'license.deactivate_hint' }, '이 기기에서 라이선스 연결을 해제합니다.'))))),
|
|
2042
2101
|
!isPaid && (React.createElement(React.Fragment, null,
|
|
2043
2102
|
isMembershipMode && (React.createElement(LicenseOffer, { joinUrl: links.membershipUrl || links.purchaseUrl, guideUrl: links.helpUrl || links.purchaseUrl, t: translate })),
|
|
2044
|
-
!isMembershipMode &&
|
|
2103
|
+
!isMembershipMode &&
|
|
2104
|
+
(enableAccountAuth || links.purchaseUrl || links.accountUrl) && (React.createElement("div", { className: "designbase-figma-page-license__section" },
|
|
2045
2105
|
React.createElement("div", { className: "designbase-figma-page-license__section-header" },
|
|
2046
2106
|
React.createElement("h3", null, resolveText(translate, { key: 'license.designbase_account' }, '디자인베이스 계정'))),
|
|
2047
2107
|
React.createElement("p", { className: "designbase-figma-page-license__hint" }, resolveText(translate, { key: 'license.designbase_account_hint' }, 'WordPress 계정으로 로그인하거나 멤버십을 구매하면 플러그인이 자동으로 활성화됩니다.')),
|
|
@@ -2059,8 +2119,20 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
|
|
|
2059
2119
|
? 'designbase-figma-page-license__key-form'
|
|
2060
2120
|
: 'designbase-figma-page-license__section' },
|
|
2061
2121
|
React.createElement("div", { className: "designbase-figma-page-license__section-header" },
|
|
2062
|
-
React.createElement("
|
|
2063
|
-
|
|
2122
|
+
isMembershipMode && (React.createElement("span", { className: "designbase-figma-page-license__section-index", "aria-hidden": "true" }, "2")),
|
|
2123
|
+
React.createElement("h3", null, isMembershipMode
|
|
2124
|
+
? resolveText(translate, { key: 'license.activate_key_title' }, '라이선스 키 등록')
|
|
2125
|
+
: resolveText(translate, { key: 'license.enter_key' }, '라이선스 키 입력'))),
|
|
2126
|
+
isMembershipMode && (React.createElement("p", { className: "designbase-figma-page-license__hint" }, resolveText(translate, { key: 'license.activate_key_description' }, '이미 키가 있다면 아래에 붙여 넣어 프로 기능을 활성화하세요.'))),
|
|
2127
|
+
React.createElement(FormWithSubmit, { onLicenseSubmit: handleLicenseSubmit, disabled: false, isSubmitting: isVerifying, value: licenseKeyDraft, onValueChange: handleLicenseKeyChange, label: { key: 'license.key' }, submitText: {
|
|
2128
|
+
key: isMembershipMode
|
|
2129
|
+
? 'license.unlock_pro_features'
|
|
2130
|
+
: 'license.submit',
|
|
2131
|
+
}, submittingText: { key: 'license.verifying' }, helperText: {
|
|
2132
|
+
key: isMembershipMode
|
|
2133
|
+
? 'license.enter_from_youtube'
|
|
2134
|
+
: 'license.enter_from_email',
|
|
2135
|
+
}, t: translate }))))),
|
|
2064
2136
|
links.helpUrl && !isMembershipMode && (React.createElement("p", { className: "designbase-figma-page-license__disclaimer" },
|
|
2065
2137
|
React.createElement("button", { type: "button", className: "designbase-figma-page-license__link", onClick: () => openExternalUrl(links.helpUrl) }, resolveText(translate, { key: 'license.help_link' }, '라이선스·결제 도움말'))))),
|
|
2066
2138
|
React.createElement(Button, { className: "designbase-figma-page-license__close", onPress: onClose, variant: "tertiary", size: "s", iconOnly: true, "aria-label": translate('close') },
|