@designbasekorea/figma-ui 0.7.3 → 0.8.1
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.d.ts +1 -0
- package/dist/index.esm.css +1 -1
- package/dist/index.esm.css.map +1 -1
- package/dist/index.esm.js +45 -22
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +45 -22
- package/dist/index.js.map +1 -1
- package/package.json +100 -100
package/dist/index.esm.js
CHANGED
|
@@ -71,6 +71,10 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
71
71
|
'license.unlock_pro_features': '프로 기능 활성화',
|
|
72
72
|
'license.current_plan': '현재 플랜',
|
|
73
73
|
'license.pro_plan': '프로 플랜',
|
|
74
|
+
'license.source_tabs_label': '라이선스 제공 방식',
|
|
75
|
+
'license.source_lemon_squeezy': 'Lemon Squeezy 라이선스',
|
|
76
|
+
'license.source_lemon_hint': '기존 Lemon Squeezy 구매 라이선스 키를 입력하세요.',
|
|
77
|
+
'license.source_youtube_hint': 'YouTube 멤버십 회원에게 제공되는 전용 키를 입력하세요.',
|
|
74
78
|
'license.membership': '멤버십',
|
|
75
79
|
'license.pro_account': '프로 계정',
|
|
76
80
|
'license.upgrade_to_pro': '프로로 업그레이드',
|
|
@@ -94,6 +98,7 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
94
98
|
'license.authenticating': '인증 중...',
|
|
95
99
|
'license.login_with_designbase': '디자인베이스로 로그인',
|
|
96
100
|
'license.purchase_membership': '멤버십 안내',
|
|
101
|
+
'license.purchase_license': '라이선스 구매하기',
|
|
97
102
|
'license.manage_account': '계정·멤버십 관리',
|
|
98
103
|
'license.enter_key': '라이선스 키 입력',
|
|
99
104
|
'license.key': '라이선스 키',
|
|
@@ -109,7 +114,7 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
109
114
|
'license.youtube_membership_join': '멤버십 가입',
|
|
110
115
|
'license.youtube_membership_guide': '안내보기',
|
|
111
116
|
'license.all_plugins': '모든 플러그인',
|
|
112
|
-
'license.source_youtube_membership': 'YouTube 멤버십',
|
|
117
|
+
'license.source_youtube_membership': 'YouTube 멤버십 전용',
|
|
113
118
|
'license.source_purchase': '구매 라이선스',
|
|
114
119
|
'license.status_active': '활성',
|
|
115
120
|
'license.status_inactive': '라이선스 확인 실패',
|
|
@@ -225,6 +230,10 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
225
230
|
'license.unlock_pro_features': 'Unlock Pro features',
|
|
226
231
|
'license.current_plan': 'Current plan',
|
|
227
232
|
'license.pro_plan': 'Pro plan',
|
|
233
|
+
'license.source_tabs_label': 'License type',
|
|
234
|
+
'license.source_lemon_squeezy': 'Lemon Squeezy license',
|
|
235
|
+
'license.source_lemon_hint': 'Enter the license key from your Lemon Squeezy purchase.',
|
|
236
|
+
'license.source_youtube_hint': 'Enter the key provided to YouTube channel members.',
|
|
228
237
|
'license.membership': 'Membership',
|
|
229
238
|
'license.pro_account': 'Pro account',
|
|
230
239
|
'license.upgrade_to_pro': 'Upgrade to Pro',
|
|
@@ -248,6 +257,7 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
248
257
|
'license.authenticating': 'Authenticating...',
|
|
249
258
|
'license.login_with_designbase': 'Sign in with Designbase',
|
|
250
259
|
'license.purchase_membership': 'Membership details',
|
|
260
|
+
'license.purchase_license': 'Buy a license',
|
|
251
261
|
'license.manage_account': 'Manage account · membership',
|
|
252
262
|
'license.enter_key': 'Enter license key',
|
|
253
263
|
'license.key': 'License key',
|
|
@@ -263,7 +273,7 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
263
273
|
'license.youtube_membership_join': 'Join membership',
|
|
264
274
|
'license.youtube_membership_guide': 'View guide',
|
|
265
275
|
'license.all_plugins': 'All plugins',
|
|
266
|
-
'license.source_youtube_membership': 'YouTube
|
|
276
|
+
'license.source_youtube_membership': 'YouTube membership only',
|
|
267
277
|
'license.source_purchase': 'Purchased license',
|
|
268
278
|
'license.status_active': 'Active',
|
|
269
279
|
'license.status_inactive': 'License check failed',
|
|
@@ -379,6 +389,10 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
379
389
|
'license.unlock_pro_features': 'Pro機能を有効化',
|
|
380
390
|
'license.current_plan': '現在のプラン',
|
|
381
391
|
'license.pro_plan': 'Proプラン',
|
|
392
|
+
'license.source_tabs_label': 'ライセンスの種類',
|
|
393
|
+
'license.source_lemon_squeezy': 'Lemon Squeezy ライセンス',
|
|
394
|
+
'license.source_lemon_hint': 'Lemon Squeezyで購入したライセンスキーを入力してください。',
|
|
395
|
+
'license.source_youtube_hint': 'YouTubeメンバー向けの専用キーを入力してください。',
|
|
382
396
|
'license.membership': 'メンバーシップ',
|
|
383
397
|
'license.pro_account': 'Proアカウント',
|
|
384
398
|
'license.upgrade_to_pro': 'Proにアップグレード',
|
|
@@ -402,6 +416,7 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
402
416
|
'license.authenticating': '認証中...',
|
|
403
417
|
'license.login_with_designbase': 'Designbaseでサインイン',
|
|
404
418
|
'license.purchase_membership': 'メンバーシップの詳細',
|
|
419
|
+
'license.purchase_license': 'ライセンスを購入',
|
|
405
420
|
'license.manage_account': 'アカウント・メンバーシップを管理',
|
|
406
421
|
'license.enter_key': 'ライセンスキーを入力',
|
|
407
422
|
'license.key': 'ライセンスキー',
|
|
@@ -417,7 +432,7 @@ const FIGMA_UI_TRANSLATIONS = {
|
|
|
417
432
|
'license.youtube_membership_join': 'メンバーシップに参加',
|
|
418
433
|
'license.youtube_membership_guide': 'ガイドを見る',
|
|
419
434
|
'license.all_plugins': 'すべてのプラグイン',
|
|
420
|
-
'license.source_youtube_membership': 'YouTube
|
|
435
|
+
'license.source_youtube_membership': 'YouTubeメンバーシップ専用',
|
|
421
436
|
'license.source_purchase': '購入ライセンス',
|
|
422
437
|
'license.status_active': '有効',
|
|
423
438
|
'license.status_inactive': 'ライセンス確認に失敗しました',
|
|
@@ -2014,7 +2029,7 @@ function formatUsageLabel(state, t) {
|
|
|
2014
2029
|
}
|
|
2015
2030
|
return (resolveText(t, { key: 'license.usage_generic', values: { remaining, limit } }, `남은 횟수 ${remaining}/${limit}`) ?? `남은 횟수 ${remaining}/${limit}`);
|
|
2016
2031
|
}
|
|
2017
|
-
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, }) => {
|
|
2032
|
+
const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicenseKey = '', licenseStatus: initialLicenseStatus, licenseSource: initialLicenseSource, accessScope: initialAccessScope, expiresAt: initialExpiresAt, lastVerifiedAt: initialLastVerifiedAt, wordpressLinks, paymentPageUrl, mode = 'pricing', showYoutubeMembershipTab = false, membershipUrl, enableAccountAuth = true, showLicenseKeyInput = true, pricingFeatures, pricing, paymentType = 'subscription', messageTypes, onStateChange, setPaymentStatus, setUsageCount, onLicenseSubmit, usageCount: initialUsageCount = 0, t, locale, className, }) => {
|
|
2018
2033
|
const { t: translate } = useFigmaUiI18n(locale, t);
|
|
2019
2034
|
const links = useMemo(() => ({
|
|
2020
2035
|
purchaseUrl: wordpressLinks?.purchaseUrl ?? paymentPageUrl,
|
|
@@ -2043,8 +2058,10 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
|
|
|
2043
2058
|
onUsageCountChange: setUsageCount,
|
|
2044
2059
|
});
|
|
2045
2060
|
const [licenseKeyDraft, setLicenseKeyDraft] = useState(initialLicenseKey);
|
|
2061
|
+
const [activeLicenseMode, setActiveLicenseMode] = useState(mode);
|
|
2046
2062
|
const isPaid = state.isLicenseRegistered && state.paymentStatus === 'PAID';
|
|
2047
|
-
const isMembershipMode =
|
|
2063
|
+
const isMembershipMode = activeLicenseMode === 'youtube-membership';
|
|
2064
|
+
const hasSourceTabs = showYoutubeMembershipTab && !isPaid;
|
|
2048
2065
|
const usageLabel = formatUsageLabel(state, translate);
|
|
2049
2066
|
const handleLicenseSubmit = async (submittedLicenseKey) => {
|
|
2050
2067
|
if (onLicenseSubmit) {
|
|
@@ -2057,30 +2074,33 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
|
|
|
2057
2074
|
setLicenseKeyDraft(value);
|
|
2058
2075
|
setLicenseKeyInput(value);
|
|
2059
2076
|
};
|
|
2060
|
-
return (React.createElement("div", { className: `designbase-figma-page-license designbase-figma-page-license--${
|
|
2077
|
+
return (React.createElement("div", { className: `designbase-figma-page-license designbase-figma-page-license--${activeLicenseMode} ${hasSourceTabs ? 'designbase-figma-page-license--source-switching' : ''} ${className || ''}`, "data-license-mode": activeLicenseMode },
|
|
2061
2078
|
React.createElement("div", { className: "designbase-figma-page-license__content" },
|
|
2062
2079
|
React.createElement("div", { className: "designbase-figma-page-license__header" },
|
|
2063
2080
|
React.createElement("div", { className: "designbase-figma-page-license__title" },
|
|
2064
2081
|
React.createElement("h2", null, isPaid
|
|
2065
2082
|
? resolveText(translate, { key: 'license.pro_account' }, '프로 계정')
|
|
2066
|
-
:
|
|
2067
|
-
? resolveText(translate, { key: 'license.unlock_unlimited' }, '
|
|
2083
|
+
: showYoutubeMembershipTab
|
|
2084
|
+
? resolveText(translate, { key: 'license.unlock_unlimited' }, 'Unlock Unlimited Access')
|
|
2068
2085
|
: resolveText(translate, { key: 'license.upgrade_to_pro' }, '프로로 업그레이드')),
|
|
2069
2086
|
isPaid && (React.createElement("span", { className: "designbase-figma-page-license__tier" }, resolveText(translate, { key: 'license.pro_plan' }, '프로 플랜')))),
|
|
2070
2087
|
React.createElement("p", { className: "designbase-figma-page-license__description" }, isPaid
|
|
2071
2088
|
? resolveText(translate, { key: 'license.all_features_available' }, '모든 기능을 사용할 수 있습니다.')
|
|
2072
|
-
:
|
|
2089
|
+
: showYoutubeMembershipTab
|
|
2073
2090
|
? resolveText(translate, {
|
|
2074
2091
|
key: 'license.unlock_unlimited_description',
|
|
2075
|
-
}, '
|
|
2092
|
+
}, 'Add a license key to unlock Pro features and unlimited use across Designbase plugins.')
|
|
2076
2093
|
: resolveText(translate, { key: 'license.purchase_for_unlimited' }, '디자인베이스 멤버십 또는 라이선스로 무제한 이용이 가능합니다.')),
|
|
2077
|
-
!isPaid && !isMembershipMode && (React.createElement("p", { className: "designbase-figma-page-license__usage" }, usageLabel))),
|
|
2078
|
-
!isPaid &&
|
|
2094
|
+
!isPaid && !showYoutubeMembershipTab && !isMembershipMode && (React.createElement("p", { className: "designbase-figma-page-license__usage" }, usageLabel))),
|
|
2095
|
+
!isPaid && showYoutubeMembershipTab && (React.createElement("div", { className: "designbase-figma-page-license__benefit" },
|
|
2079
2096
|
React.createElement("span", { className: "designbase-figma-page-license__benefit-icon", "aria-hidden": "true" }, "\u221E"),
|
|
2080
2097
|
React.createElement("div", null,
|
|
2081
2098
|
React.createElement("strong", null, resolveText(translate, { key: 'license.unlimited_benefit_title' }, '모든 플러그인 무제한 사용')),
|
|
2082
2099
|
React.createElement("p", null, resolveText(translate, { key: 'license.unlimited_benefit_description' }, '사용 횟수 제한 없이 프로 기능과 프리미엄 콘텐츠를 이용할 수 있습니다.'))))),
|
|
2083
|
-
|
|
2100
|
+
hasSourceTabs && (React.createElement("div", { className: "designbase-figma-page-license__source-tabs", role: "tablist", "aria-label": resolveText(translate, { key: 'license.source_tabs_label' }, 'License type') },
|
|
2101
|
+
React.createElement("button", { type: "button", role: "tab", "aria-selected": !isMembershipMode, onClick: () => setActiveLicenseMode('pricing') }, resolveText(translate, { key: 'license.source_lemon_squeezy' }, 'Lemon Squeezy license')),
|
|
2102
|
+
React.createElement("button", { type: "button", role: "tab", "aria-selected": isMembershipMode, onClick: () => setActiveLicenseMode('youtube-membership') }, resolveText(translate, { key: 'license.source_youtube_membership' }, 'YouTube membership')))),
|
|
2103
|
+
!isMembershipMode && !showYoutubeMembershipTab && (React.createElement(PricingComparison, { features: pricingFeatures, pricing: pricing, paymentType: paymentType, t: translate })),
|
|
2084
2104
|
state.lastMessage &&
|
|
2085
2105
|
state.lastErrorCode &&
|
|
2086
2106
|
!state.deactivateMessage && (React.createElement("p", { className: `designbase-figma-page-license__feedback ${state.lastErrorCode ? 'designbase-figma-page-license__feedback--error' : ''}`, "aria-live": "polite" }, state.lastMessage)),
|
|
@@ -2113,8 +2133,8 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
|
|
|
2113
2133
|
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)),
|
|
2114
2134
|
React.createElement("p", { className: "designbase-figma-page-license__deactivate-hint" }, resolveText(translate, { key: 'license.deactivate_hint' }, '이 기기에서 라이선스 연결을 해제합니다.'))))),
|
|
2115
2135
|
!isPaid && (React.createElement(React.Fragment, null,
|
|
2116
|
-
isMembershipMode && (React.createElement(LicenseOffer, { joinUrl: links.membershipUrl || links.purchaseUrl, guideUrl: links.helpUrl || links.purchaseUrl, t: translate })),
|
|
2117
|
-
!isMembershipMode &&
|
|
2136
|
+
isMembershipMode && !showYoutubeMembershipTab && (React.createElement(LicenseOffer, { joinUrl: links.membershipUrl || links.purchaseUrl, guideUrl: links.helpUrl || links.purchaseUrl, t: translate })),
|
|
2137
|
+
!isMembershipMode && !showYoutubeMembershipTab &&
|
|
2118
2138
|
(enableAccountAuth ||
|
|
2119
2139
|
links.purchaseUrl ||
|
|
2120
2140
|
links.accountUrl) && (React.createElement("div", { className: "designbase-figma-page-license__section" },
|
|
@@ -2144,20 +2164,23 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
|
|
|
2144
2164
|
key: 'license.manage_account',
|
|
2145
2165
|
}, '계정·멤버십 관리')),
|
|
2146
2166
|
React.createElement(ExternalLinkIcon, { size: 16 })))))),
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2167
|
+
showYoutubeMembershipTab && (React.createElement("div", { "aria-live": "polite" }, isMembershipMode ? (React.createElement(LicenseOffer, { joinUrl: links.membershipUrl || links.purchaseUrl, guideUrl: links.helpUrl || links.purchaseUrl, t: translate })) : (React.createElement(React.Fragment, null,
|
|
2168
|
+
React.createElement(PricingComparison, { features: pricingFeatures, pricing: pricing, paymentType: paymentType, t: translate }),
|
|
2169
|
+
links.purchaseUrl && (React.createElement(Button, { onPress: () => openExternalUrl(links.purchaseUrl), variant: "primary", size: "m", fullWidth: true },
|
|
2170
|
+
React.createElement("span", null, resolveText(translate, { key: 'license.purchase_license' }, 'Buy a license')),
|
|
2171
|
+
React.createElement(ExternalLinkIcon, { size: 16, "aria-hidden": "true" }))))))),
|
|
2172
|
+
showLicenseKeyInput && (React.createElement("div", { className: isMembershipMode && !showYoutubeMembershipTab ? 'designbase-figma-page-license__key-form' : 'designbase-figma-page-license__section' },
|
|
2150
2173
|
React.createElement("div", { className: "designbase-figma-page-license__section-header" },
|
|
2151
|
-
React.createElement("h3", null, isMembershipMode
|
|
2174
|
+
React.createElement("h3", null, isMembershipMode || showYoutubeMembershipTab
|
|
2152
2175
|
? resolveText(translate, {
|
|
2153
2176
|
key: 'license.activate_key_title',
|
|
2154
2177
|
}, '라이선스 키 등록')
|
|
2155
2178
|
: resolveText(translate, { key: 'license.enter_key' }, '라이선스 키 입력'))),
|
|
2156
|
-
isMembershipMode && (React.createElement("p", { className: "designbase-figma-page-license__hint" }, resolveText(translate, {
|
|
2179
|
+
(isMembershipMode || showYoutubeMembershipTab) && (React.createElement("p", { className: "designbase-figma-page-license__hint" }, resolveText(translate, {
|
|
2157
2180
|
key: 'license.activate_key_description',
|
|
2158
2181
|
}, '이미 키가 있다면 아래에 붙여 넣어 프로 기능을 활성화하세요.'))),
|
|
2159
2182
|
React.createElement(FormWithSubmit, { onLicenseSubmit: handleLicenseSubmit, disabled: false, isSubmitting: isVerifying, value: licenseKeyDraft, onValueChange: handleLicenseKeyChange, label: { key: 'license.key' }, submitText: {
|
|
2160
|
-
key: isMembershipMode
|
|
2183
|
+
key: isMembershipMode || showYoutubeMembershipTab
|
|
2161
2184
|
? 'license.unlock_pro_features'
|
|
2162
2185
|
: 'license.submit',
|
|
2163
2186
|
}, submittingText: {
|
|
@@ -2167,7 +2190,7 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
|
|
|
2167
2190
|
? 'license.enter_from_youtube'
|
|
2168
2191
|
: 'license.enter_from_email',
|
|
2169
2192
|
}, t: translate }))))),
|
|
2170
|
-
links.helpUrl && !isMembershipMode && (React.createElement("p", { className: "designbase-figma-page-license__disclaimer" },
|
|
2193
|
+
links.helpUrl && (!isMembershipMode || showYoutubeMembershipTab) && (React.createElement("p", { className: "designbase-figma-page-license__disclaimer" },
|
|
2171
2194
|
React.createElement("button", { type: "button", className: "designbase-figma-page-license__link", onClick: () => openExternalUrl(links.helpUrl) }, resolveText(translate, { key: 'license.help_link' }, '라이선스·결제 도움말'))))),
|
|
2172
2195
|
React.createElement(Button, { className: "designbase-figma-page-license__close", onPress: onClose, variant: "tertiary", size: "s", iconOnly: true, "aria-label": translate('close') },
|
|
2173
2196
|
React.createElement(CloseIcon, { size: 16 }))));
|