@designbasekorea/figma-ui 0.6.4 → 0.6.6
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 +34 -2
- package/dist/index.esm.css +1 -1
- package/dist/index.esm.css.map +1 -1
- package/dist/index.esm.js +127 -41
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +659 -40
- package/dist/index.js.map +1 -1
- package/package.json +18 -18
package/dist/index.esm.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { useRef, useState, useLayoutEffect, useEffect, createContext, useContext, useCallback, useMemo } from 'react';
|
|
2
2
|
import { Button, Dropdown, Badge, Toggle, Spinner, SegmentControl, Logo, Toast, Input, Modal, Progressbar, RandomGradient } from '@designbasekorea/ui-wc/react';
|
|
3
3
|
export * from '@designbasekorea/ui-wc/react';
|
|
4
|
+
export { Accordion, ActivityHeatmap, AdBanner, AiChat, AiChatList, Alert, AnimationBackground, AnimationText, AppBadge, AudioPlayer, Avatar, Backdrop, Badge, Banner, BottomNavigation, BottomSheet, Breadcrumbs, Button, Calendar, Card, Carousel, ChatComposer, ChatList, ChatMessage, ChatOrb, ChatRoom, ChatSuggestions, ChatTyping, ChatWelcome, ChatWidget, Checkbox, Chip, CodeBlock, ColorPicker, ColorSwatch, Confirm, Container, ContextMenu, CookieBanner, Countdown, CursorFollower, DatePicker, Divider, DownloadProgress, Drawer, Dropdown, Dropzone, EmailVerify, EmptyState, FileUploader, FloatingActionButton, Footer, Form, Gantt, Gradient, Grid, GridBackground, GridItem, Image, ImageList, ImagePlaceholder, Indicator, Input, Kanban, Label, Lightbox, List, Logo, MarkdownEditor, Marquee, Masonry, MenuItem, Modal, ModalBody, ModalFooter, ModalHeader, Navbar, OnboardingModal, OtpInput, PageHeader, Pagination, PhoneVerify, Popover, Progress, ProgressStep, Progressbar, Radio, RandomGradient, RangeSlider, Rating, Reorder, ResizablePanels, ScrollArea, SearchBar, Section, SectionAppDownload, SectionContact, SectionCta, SectionFaq, SectionFeature, SectionFeatureGrid, SectionHero, SectionLogoCloud, SectionPricing, SectionStats, SectionTestimonials, SegmentControl, Select, Share, Sidebar, Signature, Skeleton, Spinner, SplitView, Stack, Stat, Stepper, Table, Tabs, Testimonial, Textarea, TimePicker, Timeline, Toast, Toggle, Toolbar, Tooltip, TopBanner, Tutorial, TwoFactor, VideoPlayer, YouTubePlayer, useContextMenu } from '@designbasekorea/ui-wc/react';
|
|
4
5
|
import { ChevronDownIcon, AppWindowIcon, YoutubeIcon, InstagramIcon, FigmaIcon, MailIcon, ExternalLinkIcon, MoreHorizontalIcon, CloseIcon, CircleCheckFilledIcon, ResizableIcon, GripVerticalIcon, ChevronRightIcon } from '@designbasekorea/icons';
|
|
5
6
|
|
|
6
7
|
function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}
|
|
@@ -427,7 +428,11 @@ const LanguageSelector = ({ currentLanguage, languages = DEFAULT_LANGUAGES, onLa
|
|
|
427
428
|
}));
|
|
428
429
|
return (React.createElement("div", { className: `designbase-figma-language-selector ${className || ''}` },
|
|
429
430
|
React.createElement(SegmentControl, { options: segmentOptions, value: activeLanguage, onChange: (event) => {
|
|
430
|
-
const
|
|
431
|
+
const detail = event.detail;
|
|
432
|
+
const value = typeof detail === 'object' && detail !== null && 'value' in detail &&
|
|
433
|
+
typeof detail.value === 'string'
|
|
434
|
+
? detail.value
|
|
435
|
+
: undefined;
|
|
431
436
|
if (value) {
|
|
432
437
|
handleLanguageChange(value);
|
|
433
438
|
}
|
|
@@ -653,6 +658,88 @@ const InteractionFeedback = ({ status = 'default', message, statusMessage, leftC
|
|
|
653
658
|
};
|
|
654
659
|
InteractionFeedback.displayName = 'InteractionFeedback';
|
|
655
660
|
|
|
661
|
+
function postPluginMessage(message) {
|
|
662
|
+
if (typeof parent === 'undefined') {
|
|
663
|
+
return;
|
|
664
|
+
}
|
|
665
|
+
parent.postMessage({ pluginMessage: message }, '*');
|
|
666
|
+
}
|
|
667
|
+
function openExternalUrl(url) {
|
|
668
|
+
if (!url)
|
|
669
|
+
return;
|
|
670
|
+
postPluginMessage({ type: 'open-external-url', url });
|
|
671
|
+
if (typeof window !== 'undefined') {
|
|
672
|
+
window.open(url, '_blank', 'noopener,noreferrer');
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
const LicenseOffer = ({ membershipUrl, t, className }) => (React.createElement("section", { className: `designbase-figma-license-offer ${className || ''}`, "aria-labelledby": "designbase-license-offer-title" },
|
|
677
|
+
React.createElement("div", { className: "designbase-figma-license-offer__eyebrow" }, "YouTube Membership"),
|
|
678
|
+
React.createElement("h3", { id: "designbase-license-offer-title" }, resolveText(t, { key: 'license.youtube_membership_title' }, 'YouTube 멤버십으로 전체 플러그인 이용')),
|
|
679
|
+
React.createElement("p", null, resolveText(t, { key: 'license.youtube_membership_description' }, 'YouTube 멤버십에 가입하면 Designbase 플러그인을 무제한으로 사용할 수 있습니다.')),
|
|
680
|
+
React.createElement("ol", null,
|
|
681
|
+
React.createElement("li", null, "Designbase YouTube \uCC44\uB110\uC758 \uBA64\uBC84\uC2ED\uC5D0 \uAC00\uC785\uD569\uB2C8\uB2E4."),
|
|
682
|
+
React.createElement("li", null, "\uBA64\uBC84 \uC804\uC6A9 \uCEE4\uBBA4\uB2C8\uD2F0 \uAC8C\uC2DC\uAE00\uC5D0\uC11C \uC774\uBC88 \uB2EC \uB77C\uC774\uC120\uC2A4 \uD0A4\uB97C \uD655\uC778\uD569\uB2C8\uB2E4."),
|
|
683
|
+
React.createElement("li", null, "\uC544\uB798 \uC785\uB825\uCC3D\uC5D0 \uD0A4\uB97C \uBD99\uC5EC \uB123\uACE0 \uD65C\uC131\uD654\uD569\uB2C8\uB2E4.")),
|
|
684
|
+
membershipUrl && (React.createElement(Button, { onPress: () => openExternalUrl(membershipUrl), variant: "secondary", size: "m", fullWidth: true },
|
|
685
|
+
React.createElement("span", null, resolveText(t, { key: 'license.youtube_membership_cta' }, '멤버십 안내 보기')),
|
|
686
|
+
React.createElement(ExternalLinkIcon, { size: 16 })))));
|
|
687
|
+
LicenseOffer.displayName = 'LicenseOffer';
|
|
688
|
+
|
|
689
|
+
function maskLicenseKey(value) {
|
|
690
|
+
if (value.length <= 8)
|
|
691
|
+
return '••••••••';
|
|
692
|
+
return `${value.slice(0, 4)}••••${value.slice(-4)}`;
|
|
693
|
+
}
|
|
694
|
+
function formatDate(value) {
|
|
695
|
+
if (!value)
|
|
696
|
+
return undefined;
|
|
697
|
+
const date = new Date(value);
|
|
698
|
+
if (Number.isNaN(date.getTime()))
|
|
699
|
+
return value;
|
|
700
|
+
return new Intl.DateTimeFormat(undefined, { dateStyle: 'medium' }).format(date);
|
|
701
|
+
}
|
|
702
|
+
function formatScope(value) {
|
|
703
|
+
if (!value)
|
|
704
|
+
return undefined;
|
|
705
|
+
if (value === 'all-products' || value === 'all_products')
|
|
706
|
+
return '전체 제품';
|
|
707
|
+
return value;
|
|
708
|
+
}
|
|
709
|
+
const LicenseStatusCard = ({ status, licenseKey = '', licenseStatus, licenseSource, accessScope, expiresAt, lastVerifiedAt, validationMessage, allowRevealKey = true, t, className, }) => {
|
|
710
|
+
const [isKeyRevealed, setIsKeyRevealed] = useState(false);
|
|
711
|
+
const isActive = status === 'PAID';
|
|
712
|
+
const statusText = isActive
|
|
713
|
+
? resolveText(t, { key: 'license.status_active' }, 'Active')
|
|
714
|
+
: resolveText(t, { key: 'license.status_inactive' }, 'License check failed');
|
|
715
|
+
const statusClass = isActive ? 'active' : 'inactive';
|
|
716
|
+
return (React.createElement("section", { className: `designbase-figma-license-status-card designbase-figma-license-status-card--${statusClass} ${className || ''}`, "aria-label": statusText },
|
|
717
|
+
React.createElement("div", { className: "designbase-figma-license-status-card__header" },
|
|
718
|
+
React.createElement("div", null,
|
|
719
|
+
React.createElement("div", { className: "designbase-figma-license-status-card__eyebrow" }, isActive ? 'License Activated' : 'License Status'),
|
|
720
|
+
React.createElement("h3", null, statusText)),
|
|
721
|
+
React.createElement("span", { className: "designbase-figma-license-status-card__badge" }, licenseStatus || (isActive ? 'active' : 'inactive'))),
|
|
722
|
+
validationMessage && !isActive && (React.createElement("p", { className: "designbase-figma-license-status-card__message" }, validationMessage)),
|
|
723
|
+
licenseKey && (React.createElement("div", { className: "designbase-figma-license-status-card__key-row" },
|
|
724
|
+
React.createElement("span", null, resolveText(t, { key: 'license.key_label' }, '라이선스 키')),
|
|
725
|
+
React.createElement("code", null, allowRevealKey && isKeyRevealed ? licenseKey : maskLicenseKey(licenseKey)),
|
|
726
|
+
allowRevealKey && (React.createElement(Button, { type: "button", onPress: () => setIsKeyRevealed((value) => !value), variant: "tertiary", size: "s" }, isKeyRevealed ? '숨기기' : '보기')))),
|
|
727
|
+
(licenseSource || accessScope || expiresAt || lastVerifiedAt) && (React.createElement("dl", { className: "designbase-figma-license-status-card__meta" },
|
|
728
|
+
licenseSource && React.createElement(React.Fragment, null,
|
|
729
|
+
React.createElement("dt", null, "Source"),
|
|
730
|
+
React.createElement("dd", null, licenseSource)),
|
|
731
|
+
formatScope(accessScope) && React.createElement(React.Fragment, null,
|
|
732
|
+
React.createElement("dt", null, "Access"),
|
|
733
|
+
React.createElement("dd", null, formatScope(accessScope))),
|
|
734
|
+
expiresAt && React.createElement(React.Fragment, null,
|
|
735
|
+
React.createElement("dt", null, "Expires"),
|
|
736
|
+
React.createElement("dd", null, formatDate(expiresAt) || expiresAt)),
|
|
737
|
+
lastVerifiedAt && React.createElement(React.Fragment, null,
|
|
738
|
+
React.createElement("dt", null, "Last checked"),
|
|
739
|
+
React.createElement("dd", null, formatDate(lastVerifiedAt) || lastVerifiedAt))))));
|
|
740
|
+
};
|
|
741
|
+
LicenseStatusCard.displayName = 'LicenseStatusCard';
|
|
742
|
+
|
|
656
743
|
const defaultFeatures = [
|
|
657
744
|
{ name: '사용 제한', free: '일일 제한', pro: '무제한' },
|
|
658
745
|
{ name: '모든 주제 사용', free: false, pro: true },
|
|
@@ -686,7 +773,11 @@ const PricingComparison = ({ features = defaultFeatures, pricing = defaultPricin
|
|
|
686
773
|
return (React.createElement("div", { className: `designbase-figma-pricing-comparison ${className || ''}` },
|
|
687
774
|
paymentType === 'subscription' && (React.createElement("div", { className: "designbase-figma-pricing-comparison__billing-toggle" },
|
|
688
775
|
React.createElement(SegmentControl, { value: isYearly ? 'yearly' : 'monthly', onChange: (event) => {
|
|
689
|
-
const
|
|
776
|
+
const detail = event.detail;
|
|
777
|
+
const value = typeof detail === 'object' && detail !== null && 'value' in detail &&
|
|
778
|
+
typeof detail.value === 'string'
|
|
779
|
+
? detail.value
|
|
780
|
+
: undefined;
|
|
690
781
|
setIsYearly(value === 'yearly');
|
|
691
782
|
}, options: [
|
|
692
783
|
{
|
|
@@ -723,21 +814,6 @@ const PricingComparison = ({ features = defaultFeatures, pricing = defaultPricin
|
|
|
723
814
|
};
|
|
724
815
|
PricingComparison.displayName = 'PricingComparison';
|
|
725
816
|
|
|
726
|
-
function postPluginMessage(message) {
|
|
727
|
-
if (typeof parent === 'undefined') {
|
|
728
|
-
return;
|
|
729
|
-
}
|
|
730
|
-
parent.postMessage({ pluginMessage: message }, '*');
|
|
731
|
-
}
|
|
732
|
-
function openExternalUrl(url) {
|
|
733
|
-
if (!url)
|
|
734
|
-
return;
|
|
735
|
-
postPluginMessage({ type: 'open-external-url', url });
|
|
736
|
-
if (typeof window !== 'undefined') {
|
|
737
|
-
window.open(url, '_blank', 'noopener,noreferrer');
|
|
738
|
-
}
|
|
739
|
-
}
|
|
740
|
-
|
|
741
817
|
const DEFAULT_LICENSE_MESSAGE_TYPES = {
|
|
742
818
|
initialize: 'initialize',
|
|
743
819
|
verifyLicense: 'verify-license',
|
|
@@ -810,6 +886,12 @@ function parseLicenseMessage(data) {
|
|
|
810
886
|
usageReason: readString(data, ['usageReason']) || undefined,
|
|
811
887
|
lastMessage: readString(data, ['message']) || undefined,
|
|
812
888
|
lastErrorCode: readString(data, ['errorCode']) || undefined,
|
|
889
|
+
licenseStatus: readString(data, ['licenseStatus', 'license_status']) || undefined,
|
|
890
|
+
licenseSource: readString(data, ['licenseSource', 'license_source', 'source']) || undefined,
|
|
891
|
+
accessScope: readString(data, ['accessScope', 'access_scope', 'scope']) || undefined,
|
|
892
|
+
expiresAt: readString(data, ['expiresAt', 'expires_at']) || undefined,
|
|
893
|
+
lastVerifiedAt: readString(data, ['lastVerifiedAt', 'last_verified_at']) || undefined,
|
|
894
|
+
validationMessage: readString(data, ['validationMessage', 'validation_message']) || undefined,
|
|
813
895
|
};
|
|
814
896
|
}
|
|
815
897
|
function useFigmaLicenseBridge(options = {}) {
|
|
@@ -915,28 +997,29 @@ function useFigmaLicenseBridge(options = {}) {
|
|
|
915
997
|
function formatUsageLabel(state, t) {
|
|
916
998
|
const { remainingUsage, usageUsed, usageLimit, usageReset } = state;
|
|
917
999
|
if (usageLimit === 'unlimited') {
|
|
918
|
-
return resolveText(t, { key: 'license.usage_unlimited' }, '사용 횟수 제한 없음');
|
|
1000
|
+
return resolveText(t, { key: 'license.usage_unlimited' }, '사용 횟수 제한 없음') ?? '사용 횟수 제한 없음';
|
|
919
1001
|
}
|
|
920
1002
|
const limit = typeof usageLimit === 'number' ? usageLimit : remainingUsage + usageUsed;
|
|
921
1003
|
const remaining = remainingUsage ?? Math.max(0, limit - usageUsed);
|
|
922
1004
|
if (usageReset === 'daily') {
|
|
923
1005
|
const fallback = `오늘 남은 횟수 ${remaining}/${limit}`;
|
|
924
|
-
const translated = resolveText(t, { key: 'license.usage_daily' }, fallback);
|
|
1006
|
+
const translated = resolveText(t, { key: 'license.usage_daily' }, fallback) ?? fallback;
|
|
925
1007
|
return translated.includes(String(remaining)) ? translated : fallback;
|
|
926
1008
|
}
|
|
927
1009
|
if (usageReset === 'monthly') {
|
|
928
1010
|
const fallback = `이번 달 남은 횟수 ${remaining}/${limit}`;
|
|
929
|
-
const translated = resolveText(t, { key: 'license.usage_monthly' }, fallback);
|
|
1011
|
+
const translated = resolveText(t, { key: 'license.usage_monthly' }, fallback) ?? fallback;
|
|
930
1012
|
return translated.includes(String(remaining)) ? translated : fallback;
|
|
931
1013
|
}
|
|
932
1014
|
return `남은 횟수 ${remaining}/${limit}`;
|
|
933
1015
|
}
|
|
934
|
-
const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicenseKey = '', wordpressLinks, paymentPageUrl, enableAccountAuth = true, showLicenseKeyInput = true, pricingFeatures, pricing, paymentType = 'subscription', messageTypes, onStateChange, setPaymentStatus, setUsageCount, onLicenseSubmit, usageCount: initialUsageCount = 0, t, className, }) => {
|
|
1016
|
+
const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicenseKey = '', wordpressLinks, paymentPageUrl, mode = 'pricing', membershipUrl, enableAccountAuth = true, showLicenseKeyInput = true, pricingFeatures, pricing, paymentType = 'subscription', messageTypes, onStateChange, setPaymentStatus, setUsageCount, onLicenseSubmit, usageCount: initialUsageCount = 0, t, className, }) => {
|
|
935
1017
|
const links = useMemo(() => ({
|
|
936
1018
|
purchaseUrl: wordpressLinks?.purchaseUrl ?? paymentPageUrl,
|
|
1019
|
+
membershipUrl: membershipUrl ?? wordpressLinks?.membershipUrl,
|
|
937
1020
|
accountUrl: wordpressLinks?.accountUrl,
|
|
938
1021
|
helpUrl: wordpressLinks?.helpUrl,
|
|
939
|
-
}), [wordpressLinks, paymentPageUrl]);
|
|
1022
|
+
}), [wordpressLinks, paymentPageUrl, membershipUrl]);
|
|
940
1023
|
const { state, isVerifying, isDeactivating, isStartingAuth, verifyLicense, deactivateLicense, startDesignbaseAuth, setLicenseKeyInput, } = useFigmaLicenseBridge({
|
|
941
1024
|
messageTypes,
|
|
942
1025
|
initialState: {
|
|
@@ -950,7 +1033,8 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
|
|
|
950
1033
|
});
|
|
951
1034
|
const [showDetails, setShowDetails] = useState(false);
|
|
952
1035
|
const [licenseKeyDraft, setLicenseKeyDraft] = useState(initialLicenseKey);
|
|
953
|
-
const isPaid = state.isLicenseRegistered
|
|
1036
|
+
const isPaid = state.isLicenseRegistered && state.paymentStatus === 'PAID';
|
|
1037
|
+
const isMembershipMode = mode === 'youtube-membership';
|
|
954
1038
|
const usageLabel = formatUsageLabel(state, t);
|
|
955
1039
|
const handleLicenseSubmit = async (submittedLicenseKey) => {
|
|
956
1040
|
if (onLicenseSubmit) {
|
|
@@ -967,25 +1051,26 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
|
|
|
967
1051
|
React.createElement("div", { className: "designbase-figma-page-license__content" },
|
|
968
1052
|
React.createElement("div", { className: "designbase-figma-page-license__header" },
|
|
969
1053
|
React.createElement("div", { className: "designbase-figma-page-license__title" },
|
|
970
|
-
React.createElement("h2", null,
|
|
971
|
-
? resolveText(t, { key: 'license.
|
|
972
|
-
:
|
|
1054
|
+
React.createElement("h2", null, isMembershipMode
|
|
1055
|
+
? resolveText(t, { key: 'license.youtube_membership' }, 'YouTube 멤버십')
|
|
1056
|
+
: isPaid
|
|
1057
|
+
? resolveText(t, { key: 'license.pro_account' }, '프로 계정')
|
|
1058
|
+
: resolveText(t, { key: 'license.upgrade_to_pro' }, '프로로 업그레이드')),
|
|
973
1059
|
state.planTier && state.planTier !== 'FREE' && (React.createElement("span", { className: "designbase-figma-page-license__tier" }, state.planTier))),
|
|
974
1060
|
React.createElement("p", { className: "designbase-figma-page-license__description" }, isPaid
|
|
975
1061
|
? resolveText(t, { key: 'license.all_features_available' }, '모든 기능을 사용할 수 있습니다.')
|
|
976
|
-
:
|
|
1062
|
+
: isMembershipMode
|
|
1063
|
+
? resolveText(t, { key: 'license.youtube_membership_description' }, 'YouTube 멤버십에 가입하면 Designbase 플러그인을 무제한으로 사용할 수 있습니다.')
|
|
1064
|
+
: resolveText(t, { key: 'license.purchase_for_unlimited' }, '디자인베이스 멤버십 또는 라이선스로 무제한 이용이 가능합니다.')),
|
|
977
1065
|
!isPaid && (React.createElement("p", { className: "designbase-figma-page-license__usage" }, usageLabel))),
|
|
978
|
-
React.createElement(PricingComparison, { features: pricingFeatures, pricing: pricing, paymentType: paymentType, t: t }),
|
|
1066
|
+
!isMembershipMode && (React.createElement(PricingComparison, { features: pricingFeatures, pricing: pricing, paymentType: paymentType, t: t })),
|
|
979
1067
|
state.lastMessage && (React.createElement("p", { className: `designbase-figma-page-license__feedback ${state.lastErrorCode ? 'designbase-figma-page-license__feedback--error' : ''}` }, state.lastMessage)),
|
|
980
1068
|
isPaid && (React.createElement("div", { className: "designbase-figma-page-license__section" },
|
|
981
1069
|
React.createElement("div", { className: "designbase-figma-page-license__section-header" },
|
|
982
1070
|
React.createElement("h3", null, resolveText(t, { key: 'license.activated' }, '라이선스 활성화됨')),
|
|
983
|
-
React.createElement(Button, {
|
|
1071
|
+
React.createElement(Button, { onPress: () => setShowDetails(!showDetails), variant: "tertiary", size: "s", iconOnly: true },
|
|
984
1072
|
React.createElement(MoreHorizontalIcon, { size: 16 }))),
|
|
985
|
-
state.licenseKey
|
|
986
|
-
resolveText(t, { key: 'license.key_label' }, '라이선스 키'),
|
|
987
|
-
": ",
|
|
988
|
-
React.createElement("span", null, state.licenseKey))),
|
|
1073
|
+
React.createElement(LicenseStatusCard, { status: state.paymentStatus, licenseKey: state.licenseKey, licenseStatus: state.licenseStatus, licenseSource: state.licenseSource, accessScope: state.accessScope, expiresAt: state.expiresAt, lastVerifiedAt: state.lastVerifiedAt, validationMessage: state.validationMessage, t: t }),
|
|
989
1074
|
React.createElement("p", { className: "designbase-figma-page-license__usage" }, usageLabel),
|
|
990
1075
|
showDetails && (React.createElement("div", { className: "designbase-figma-page-license__details" },
|
|
991
1076
|
React.createElement("div", { className: "designbase-figma-page-license__activation-info" },
|
|
@@ -999,22 +1084,23 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
|
|
|
999
1084
|
state.activationUsage,
|
|
1000
1085
|
"/",
|
|
1001
1086
|
state.activationLimit)),
|
|
1002
|
-
React.createElement(Button, {
|
|
1087
|
+
React.createElement(Button, { onPress: deactivateLicense, variant: "tertiary", size: "s", disabled: isDeactivating }, isDeactivating
|
|
1003
1088
|
? resolveText(t, { key: 'license.deactivating' }, '비활성화 중...')
|
|
1004
1089
|
: resolveText(t, { key: 'license.deactivate' }, '라이선스 비활성화')))))),
|
|
1005
1090
|
!isPaid && (React.createElement(React.Fragment, null,
|
|
1006
|
-
|
|
1091
|
+
isMembershipMode && (React.createElement(LicenseOffer, { membershipUrl: links.membershipUrl || links.purchaseUrl, t: t })),
|
|
1092
|
+
!isMembershipMode && (enableAccountAuth || links.purchaseUrl || links.accountUrl) && (React.createElement("div", { className: "designbase-figma-page-license__section" },
|
|
1007
1093
|
React.createElement("div", { className: "designbase-figma-page-license__section-header" },
|
|
1008
1094
|
React.createElement("h3", null, resolveText(t, { key: 'license.designbase_account' }, '디자인베이스 계정'))),
|
|
1009
1095
|
React.createElement("p", { className: "designbase-figma-page-license__hint" }, resolveText(t, { key: 'license.designbase_account_hint' }, 'WordPress 계정으로 로그인하거나 멤버십을 구매하면 플러그인이 자동으로 활성화됩니다.')),
|
|
1010
1096
|
React.createElement("div", { className: "designbase-figma-page-license__actions" },
|
|
1011
|
-
enableAccountAuth && (React.createElement(Button, {
|
|
1097
|
+
enableAccountAuth && (React.createElement(Button, { onPress: startDesignbaseAuth, variant: "primary", size: "m", disabled: isStartingAuth || isVerifying, fullWidth: true }, isStartingAuth
|
|
1012
1098
|
? resolveText(t, { key: 'license.authenticating' }, '인증 중...')
|
|
1013
1099
|
: resolveText(t, { key: 'license.login_with_designbase' }, '디자인베이스로 로그인'))),
|
|
1014
|
-
links.purchaseUrl && (React.createElement(Button, {
|
|
1015
|
-
React.createElement("span", null, resolveText(t, { key: 'license.purchase_membership' }, '멤버십
|
|
1100
|
+
links.purchaseUrl && (React.createElement(Button, { onPress: () => openExternalUrl(links.purchaseUrl), variant: "secondary", size: "m", fullWidth: true },
|
|
1101
|
+
React.createElement("span", null, resolveText(t, { key: 'license.purchase_membership' }, '멤버십 안내')),
|
|
1016
1102
|
React.createElement(ExternalLinkIcon, { size: 16 }))),
|
|
1017
|
-
links.accountUrl && (React.createElement(Button, {
|
|
1103
|
+
links.accountUrl && (React.createElement(Button, { onPress: () => openExternalUrl(links.accountUrl), variant: "tertiary", size: "s", fullWidth: true },
|
|
1018
1104
|
React.createElement("span", null, resolveText(t, { key: 'license.manage_account' }, '계정·멤버십 관리')),
|
|
1019
1105
|
React.createElement(ExternalLinkIcon, { size: 16 })))))),
|
|
1020
1106
|
showLicenseKeyInput && (React.createElement("div", { className: "designbase-figma-page-license__section" },
|
|
@@ -1047,7 +1133,7 @@ const PaymentStatusSection = ({ status, usageCount, activationLimit, activationU
|
|
|
1047
1133
|
activationUsage,
|
|
1048
1134
|
"/",
|
|
1049
1135
|
activationLimit)),
|
|
1050
|
-
React.createElement(Button, {
|
|
1136
|
+
React.createElement(Button, { onPress: onDeactivate, variant: "tertiary", size: "s", disabled: isDeactivating }, isDeactivating
|
|
1051
1137
|
? resolveText(t, { key: 'payment.deactivating' }, '비활성화중...')
|
|
1052
1138
|
: resolveText(t, { key: 'payment.deactivate_license' }, '라이선스 비활성화'))))));
|
|
1053
1139
|
};
|
|
@@ -1302,5 +1388,5 @@ const UpgradeBanner = ({ onClick, variant = 'button', isLoading = false, title =
|
|
|
1302
1388
|
};
|
|
1303
1389
|
UpgradeBanner.displayName = 'UpgradeBanner';
|
|
1304
1390
|
|
|
1305
|
-
export { DEFAULT_LICENSE_MESSAGE_TYPES, DonationBadge, FigmaContainer, FigmaFooter, FigmaHeader, FigmaPageHead, FigmaSection, FigmaSidebar, FigmaToast, FigmaToastProvider, FormWithSubmit, InteractionFeedback, LanguageSelector, LogoDropdown, PageLicense, PaymentBadge, PaymentStatusSection, PricingComparison, ProgressModal, ResizablePlugin, START_DESIGNBASE_AUTH_MESSAGE, SettingsModal, TitleDescription, UpgradeBanner, getActiveSection, resolveText, scrollToSection, useFigmaLicenseBridge, useFigmaToast, useToast };
|
|
1391
|
+
export { DEFAULT_LICENSE_MESSAGE_TYPES, DonationBadge, FigmaContainer, FigmaFooter, FigmaHeader, FigmaPageHead, FigmaSection, FigmaSidebar, FigmaToast, FigmaToastProvider, FormWithSubmit, InteractionFeedback, LanguageSelector, LicenseOffer, LicenseStatusCard, LogoDropdown, PageLicense, PaymentBadge, PaymentStatusSection, PricingComparison, ProgressModal, ResizablePlugin, START_DESIGNBASE_AUTH_MESSAGE, SettingsModal, TitleDescription, UpgradeBanner, getActiveSection, resolveText, scrollToSection, useFigmaLicenseBridge, useFigmaToast, useToast };
|
|
1306
1392
|
//# sourceMappingURL=index.esm.js.map
|