@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.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 value = event.detail?.value;
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 value = event.detail?.value;
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 || state.paymentStatus === 'PAID';
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, isPaid
971
- ? resolveText(t, { key: 'license.pro_account' }, '프로 계정')
972
- : resolveText(t, { key: 'license.upgrade_to_pro' }, '프로로 업그레이드')),
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
- : resolveText(t, { key: 'license.purchase_for_unlimited' }, '디자인베이스 멤버십 또는 라이선스로 무제한 이용이 가능합니다.')),
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, { onClick: () => setShowDetails(!showDetails), variant: "tertiary", size: "s", iconOnly: true },
1071
+ React.createElement(Button, { onPress: () => setShowDetails(!showDetails), variant: "tertiary", size: "s", iconOnly: true },
984
1072
  React.createElement(MoreHorizontalIcon, { size: 16 }))),
985
- state.licenseKey && (React.createElement("div", { className: "designbase-figma-page-license__license-key" },
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, { onClick: deactivateLicense, variant: "tertiary", size: "s", disabled: isDeactivating }, isDeactivating
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
- (enableAccountAuth || links.purchaseUrl || links.accountUrl) && (React.createElement("div", { className: "designbase-figma-page-license__section" },
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, { onClick: startDesignbaseAuth, variant: "primary", size: "m", disabled: isStartingAuth || isVerifying, fullWidth: true }, isStartingAuth
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, { onClick: () => openExternalUrl(links.purchaseUrl), variant: "secondary", size: "m", fullWidth: true },
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, { onClick: () => openExternalUrl(links.accountUrl), variant: "tertiary", size: "s", fullWidth: true },
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, { onClick: onDeactivate, variant: "tertiary", size: "s", disabled: isDeactivating }, isDeactivating
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