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