@designbasekorea/figma-ui 0.1.43 → 0.1.45

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,6 @@
1
1
  import React, { useRef, useEffect, useState } from 'react';
2
- import { HeartFilledIcon, CoffeeFilledIcon, AppWindowIcon, YoutubeIcon, InstagramIcon, FigmaIcon, MailIcon, ExternalLinkIcon, StarIcon, KeyIcon, MoreHorizontalIcon, CloseIcon, CircleCheckFilledIcon, ExpandIcon, GripVerticalIcon } from '@designbasekorea/icons';
3
- import { SplitView, Button, Toggle, Logo, Spinner, Badge, Input, SegmentControl, Modal, Progressbar } from '@designbasekorea/ui';
2
+ import { HeartFilledIcon, CoffeeFilledIcon, StarIcon, KeyIcon, MoreHorizontalIcon, ExternalLinkIcon, CloseIcon, CircleCheckFilledIcon, ExpandIcon, GripVerticalIcon } from '@designbasekorea/icons';
3
+ import { SplitView, Button, Toggle, Spinner, Badge, Input, SegmentControl, Modal, Progressbar } from '@designbasekorea/ui';
4
4
  export * from '@designbasekorea/ui';
5
5
 
6
6
  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}
@@ -294,70 +294,6 @@ const FigmaSidebar = ({ categories, categoryGroups = {}, categoryLabels = {}, ac
294
294
  };
295
295
  FigmaSidebar.displayName = 'FigmaSidebar';
296
296
 
297
- const defaultLinks = [
298
- {
299
- name: 'officialWebsite',
300
- url: 'https://designbase.co.kr',
301
- icon: React.createElement(AppWindowIcon, { size: 20 }),
302
- },
303
- {
304
- name: 'youtube',
305
- url: 'https://youtube.com/designbase',
306
- icon: React.createElement(YoutubeIcon, { size: 20 }),
307
- },
308
- {
309
- name: 'instagram',
310
- url: 'https://instagram.com/designbase',
311
- icon: React.createElement(InstagramIcon, { size: 20 }),
312
- },
313
- {
314
- name: 'figmaCommunity',
315
- url: 'https://www.figma.com/@designbasekorea',
316
- icon: React.createElement(FigmaIcon, { size: 20 }),
317
- },
318
- {
319
- name: 'contact',
320
- url: 'mailto:designbasekorea@gmail.com',
321
- icon: React.createElement(MailIcon, { size: 20 }),
322
- },
323
- ];
324
- const defaultTranslations$1 = {
325
- officialWebsite: '공식 웹사이트',
326
- youtube: '유튜브',
327
- instagram: '인스타그램',
328
- figmaCommunity: '피그마 커뮤니티',
329
- contact: '문의하기',
330
- };
331
- const defaultT$1 = (key) => defaultTranslations$1[key] || key;
332
- const LogoDropdown = ({ logoSrc, logoAlt = 'DesignBase', logoType = 'designbase', logoSize = 'xs', links = defaultLinks, position = 'top-left', className, t = defaultT$1, }) => {
333
- const [isOpen, setIsOpen] = useState(false);
334
- const toggleDropdown = () => setIsOpen(!isOpen);
335
- const handleLinkClick = (url) => {
336
- if (url.startsWith('mailto:')) {
337
- return;
338
- }
339
- window.open(url, '_blank', 'noopener,noreferrer');
340
- };
341
- const classes = clsx('designbase-figma-logo-dropdown', `designbase-figma-logo-dropdown--${position}`, {
342
- 'designbase-figma-logo-dropdown--open': isOpen,
343
- }, className);
344
- const renderLogo = () => {
345
- if (logoSrc) {
346
- return (React.createElement("img", { className: "designbase-figma-logo-dropdown__logo", src: logoSrc, alt: logoAlt, onClick: toggleDropdown }));
347
- }
348
- return (React.createElement("div", { className: "designbase-figma-logo-dropdown__logo", onClick: toggleDropdown },
349
- React.createElement(Logo, { type: logoType, size: logoSize, variant: "default" })));
350
- };
351
- return (React.createElement("div", { className: classes },
352
- renderLogo(),
353
- isOpen && (React.createElement("ul", { className: "designbase-figma-logo-dropdown__menu" }, links.map((link, index) => (React.createElement("li", { key: index, className: "designbase-figma-logo-dropdown__item" },
354
- React.createElement("button", { type: "button", className: "designbase-figma-logo-dropdown__link", onClick: () => handleLinkClick(link.url) },
355
- link.icon && (React.createElement("span", { className: "designbase-figma-logo-dropdown__icon" }, link.icon)),
356
- React.createElement("span", { className: "designbase-figma-logo-dropdown__text" }, t(link.name)),
357
- React.createElement(ExternalLinkIcon, { size: 16, className: "designbase-figma-logo-dropdown__arrow" })))))))));
358
- };
359
- LogoDropdown.displayName = 'LogoDropdown';
360
-
361
297
  const PaymentBadge = ({ isActive, onClick, isLoading = false, text, t = (key) => key, className, }) => {
362
298
  const getBadgeText = () => {
363
299
  if (text)
@@ -397,7 +333,7 @@ const defaultTranslations = {
397
333
  donationPrompt: '이 플러그인이 유용했나요?',
398
334
  };
399
335
  const defaultT = (key) => defaultTranslations[key] || key;
400
- const FigmaFooter = ({ logoSrc, logoAlt = 'DesignBase', logoType = 'designbase', logoSize = 'xs', logoLinks, onLicensePageClick, paymentStatus = 'FREE', usageCount = 0, isLoading = false, showPaymentStatus = true, maxDailyUsage = 20, showDonation = true, donationUrl = 'https://buymeacoffee.com/designbase', donationText = 'Buy me a coffee', showDonationText = true, donationPromptText, showLanguageSelector = false, currentLanguage = 'ko', languages, onLanguageChange, className, t = defaultT, children, }) => {
336
+ const FigmaFooter = ({ onLicensePageClick, paymentStatus = 'FREE', usageCount = 0, isLoading = false, showPaymentStatus = true, maxDailyUsage = 20, showDonation = true, donationUrl = 'https://buymeacoffee.com/designbase', donationText = 'Buy me a coffee', showDonationText = true, donationPromptText, showLanguageSelector = false, currentLanguage = 'ko', languages, onLanguageChange, className, t = defaultT, children, }) => {
401
337
  const isActive = paymentStatus === 'PAID';
402
338
  const hasChildren = React.Children.count(children) > 0;
403
339
  const classes = clsx('designbase-figma-footer', {
@@ -405,9 +341,7 @@ const FigmaFooter = ({ logoSrc, logoAlt = 'DesignBase', logoType = 'designbase',
405
341
  }, className);
406
342
  return (React.createElement("footer", { className: classes },
407
343
  React.createElement("div", { className: "designbase-figma-footer__wrap" },
408
- React.createElement("div", { className: "designbase-figma-footer__left" },
409
- React.createElement(LogoDropdown, { logoSrc: logoSrc, logoAlt: logoAlt, logoType: logoType, logoSize: logoSize, links: logoLinks, position: "top-left", t: t }),
410
- showLanguageSelector && (React.createElement(LanguageSelector, { currentLanguage: currentLanguage, languages: languages, onLanguageChange: onLanguageChange, size: "s" }))),
344
+ React.createElement("div", { className: "designbase-figma-footer__left" }, showLanguageSelector && (React.createElement(LanguageSelector, { currentLanguage: currentLanguage, languages: languages, onLanguageChange: onLanguageChange, size: "s" }))),
411
345
  showPaymentStatus && (React.createElement("div", { className: "designbase-figma-footer__payment-states" },
412
346
  !isLoading && (React.createElement("div", { className: "designbase-figma-footer__usage-info" }, isActive ? (React.createElement("span", { className: "designbase-figma-footer__unlimited-usage" }, t('unlimitedUsage'))) : (React.createElement(React.Fragment, null,
413
347
  React.createElement("span", { className: "designbase-figma-footer__usage-count" }, usageCount),
@@ -466,31 +400,6 @@ const InteractionFeedback = ({ status = 'default', message, statusMessage, leftC
466
400
  };
467
401
  InteractionFeedback.displayName = 'InteractionFeedback';
468
402
 
469
- const PaymentStatusSection = ({ status, usageCount, activationLimit, activationUsage, licenseKey, onDeactivate, isDeactivating = false, showDetails = false, className, t }) => {
470
- const remainingActivations = activationLimit - activationUsage;
471
- return (React.createElement("div", { className: `designbase-figma-payment-status ${className || ''}` },
472
- React.createElement("div", { className: "designbase-figma-payment-status__license-key" },
473
- resolveText(t, { key: 'payment.license_key_label' }, '라이선스 키'),
474
- ": ",
475
- React.createElement("span", null, licenseKey)),
476
- showDetails && (React.createElement("div", { className: "designbase-figma-payment-status__details" },
477
- React.createElement("div", { className: "designbase-figma-payment-status__activation-info" },
478
- React.createElement("div", { className: "designbase-figma-payment-status__remaining" },
479
- remainingActivations,
480
- " ",
481
- resolveText(t, { key: 'payment.activations_remaining' }, '활성'),
482
- " ",
483
- resolveText(t, { key: 'payment.spots_remaining' }, '자리 남음')),
484
- React.createElement("div", { className: "designbase-figma-payment-status__usage" },
485
- activationUsage,
486
- "/",
487
- activationLimit)),
488
- React.createElement(Button, { onClick: onDeactivate, variant: "tertiary", size: "s", disabled: isDeactivating }, isDeactivating
489
- ? resolveText(t, { key: 'payment.deactivating' }, '비활성화중...')
490
- : resolveText(t, { key: 'payment.deactivate_license' }, '라이선스 비활성화'))))));
491
- };
492
- PaymentStatusSection.displayName = 'PaymentStatusSection';
493
-
494
403
  const defaultFeatures = [
495
404
  { name: '사용 제한', free: '일일 제한', pro: '무제한' },
496
405
  { name: '모든 주제 사용', free: false, pro: true },
@@ -553,7 +462,7 @@ const PricingComparison = ({ features = defaultFeatures, pricing = defaultPricin
553
462
  };
554
463
  PricingComparison.displayName = 'PricingComparison';
555
464
 
556
- const PageLicense = ({ status: initialStatus, onClose, usageCount: initialUsageCount = 0, onLicenseSubmit, licenseKey: initialLicenseKey = '', setPaymentStatus, setUsageCount, setShowLicensePage, paymentPageUrl, t = (key) => key, className, }) => {
465
+ const PageLicense = ({ status: initialStatus, onClose, usageCount: initialUsageCount = 0, onLicenseSubmit, licenseKey: initialLicenseKey = '', setPaymentStatus, setUsageCount, setShowLicensePage, paymentPageUrl, t, className, }) => {
557
466
  const [isSubmitting, setIsSubmitting] = useState(false);
558
467
  const [isDeactivating, setIsDeactivating] = useState(false);
559
468
  const [licenseKey, setLicenseKey] = useState(initialLicenseKey);
@@ -635,33 +544,74 @@ const PageLicense = ({ status: initialStatus, onClose, usageCount: initialUsageC
635
544
  React.createElement("div", { className: "designbase-figma-page-license__header" },
636
545
  React.createElement("div", { className: "designbase-figma-page-license__title" },
637
546
  isPaid ? React.createElement(StarIcon, { size: 24 }) : React.createElement(KeyIcon, { size: 24 }),
638
- React.createElement("h2", null, isPaid ? t('proAccount') || '프로 계정' : t('upgradeToPro') || '프로로 업그레이드')),
547
+ React.createElement("h2", null, isPaid ? resolveText(t, { key: 'license.pro_account' }, '프로 계정') : resolveText(t, { key: 'license.upgrade_to_pro' }, '프로로 업그레이드'))),
639
548
  React.createElement("p", { className: "designbase-figma-page-license__description" }, isPaid
640
- ? t('allFeaturesAvailable') || '모든 기능을 사용할 수 있습니다.'
641
- : t('purchaseForUnlimited') || '라이선스 구매 후 무제한 접근이 가능합니다.')),
549
+ ? resolveText(t, { key: 'license.all_features_available' }, '모든 기능을 사용할 수 있습니다.')
550
+ : resolveText(t, { key: 'license.purchase_for_unlimited' }, '라이선스 구매 후 무제한 접근이 가능합니다.'))),
642
551
  React.createElement(PricingComparison, { t: t }),
643
552
  isPaid && (React.createElement("div", { className: "designbase-figma-page-license__section" },
644
553
  React.createElement("div", { className: "designbase-figma-page-license__section-header" },
645
- React.createElement("h3", null, t('licenseActivated') || '라이선스 활성화됨'),
554
+ React.createElement("h3", null, resolveText(t, { key: 'license.activated' }, '라이선스 활성화됨')),
646
555
  React.createElement(Button, { onClick: () => setShowDetails(!showDetails), variant: "tertiary", size: "s", iconOnly: true },
647
556
  React.createElement(MoreHorizontalIcon, { size: 16 }))),
648
- React.createElement(PaymentStatusSection, { status: status, usageCount: usageCount, activationLimit: activationLimit, activationUsage: activationUsage, licenseKey: licenseKey, onDeactivate: handleDeactivateLicense, isDeactivating: isDeactivating, showDetails: showDetails }))),
649
- React.createElement("div", { className: "designbase-figma-page-license__section" },
557
+ React.createElement("div", { className: "designbase-figma-page-license__license-key" },
558
+ resolveText(t, { key: 'license.key_label' }, '라이선스 키'),
559
+ ": ",
560
+ React.createElement("span", null, licenseKey)),
561
+ showDetails && (React.createElement("div", { className: "designbase-figma-page-license__details" },
562
+ React.createElement("div", { className: "designbase-figma-page-license__activation-info" },
563
+ React.createElement("div", { className: "designbase-figma-page-license__remaining" },
564
+ activationLimit - activationUsage,
565
+ " ",
566
+ resolveText(t, { key: 'license.activations_remaining' }, '활성'),
567
+ " ",
568
+ resolveText(t, { key: 'license.spots_remaining' }, '자리 남음')),
569
+ React.createElement("div", { className: "designbase-figma-page-license__usage" },
570
+ activationUsage,
571
+ "/",
572
+ activationLimit)),
573
+ React.createElement(Button, { onClick: handleDeactivateLicense, variant: "tertiary", size: "s", disabled: isDeactivating }, isDeactivating
574
+ ? resolveText(t, { key: 'license.deactivating' }, '비활성화중...')
575
+ : resolveText(t, { key: 'license.deactivate' }, '라이선스 비활성화')))))),
576
+ !isPaid && (React.createElement("div", { className: "designbase-figma-page-license__section" },
650
577
  React.createElement("div", { className: "designbase-figma-page-license__section-header" },
651
- React.createElement("h3", null, t('enterLicenseKey') || '라이선스 키 입력'),
652
- !isPaid && paymentPageUrl && (React.createElement(Button, { onClick: () => window.open(paymentPageUrl, '_blank'), variant: "primary", size: "s" },
653
- React.createElement("span", null, t('purchaseLicense') || '라이선스 구매'),
578
+ React.createElement("h3", null, resolveText(t, { key: 'license.enter_key' }, '라이선스 키 입력')),
579
+ paymentPageUrl && (React.createElement(Button, { onClick: () => window.open(paymentPageUrl, '_blank'), variant: "primary", size: "s" },
580
+ React.createElement("span", null, resolveText(t, { key: 'license.purchase' }, '라이선스 구매')),
654
581
  React.createElement(ExternalLinkIcon, { size: 16 })))),
655
- React.createElement(FormWithSubmit, { onLicenseSubmit: handleLicenseSubmit, disabled: false, isSubmitting: isSubmitting, value: licenseKey, onValueChange: setLicenseKey, label: t('licenseKey') || 'License Key', submitText: t('submit') || 'Submit', submittingText: t('verifying') || 'Verifying...' }),
656
- React.createElement("p", { className: "designbase-figma-page-license__disclaimer" }, isPaid
657
- ? t('licenseActivatedSuccess') || '라이선스가 성공적으로 활성화되었습니다.'
658
- : t('enterLicenseFromEmail') || '구독 후 이메일로 받은 라이선스 키를 입력하세요.'))),
582
+ React.createElement(FormWithSubmit, { onLicenseSubmit: handleLicenseSubmit, disabled: false, isSubmitting: isSubmitting, value: licenseKey, onValueChange: setLicenseKey, label: { key: 'license.key' }, submitText: { key: 'license.submit' }, submittingText: { key: 'license.verifying' }, t: t }),
583
+ React.createElement("p", { className: "designbase-figma-page-license__disclaimer" }, resolveText(t, { key: 'license.enter_from_email' }, '구독 후 이메일로 받은 라이선스 키를 입력하세요.'))))),
659
584
  React.createElement(Button, { className: "designbase-figma-page-license__close", onPress: onClose, variant: "tertiary", size: "s", "aria-label": "Close" },
660
585
  React.createElement(CloseIcon, { size: 20 }))));
661
586
  };
662
587
  PageLicense.displayName = 'PageLicense';
663
588
 
664
- const ProgressModal = ({ isOpen, onClose, progress, title = '작업 중', completedMessage = '완료되었습니다', processingMessage = '처리 중...', stopButtonText = '중지', confirmButtonText = '확인', helpText, onStop, onComplete, loadingIcon, completeIcon, className, }) => {
589
+ const PaymentStatusSection = ({ status, usageCount, activationLimit, activationUsage, licenseKey, onDeactivate, isDeactivating = false, showDetails = false, className, t }) => {
590
+ const remainingActivations = activationLimit - activationUsage;
591
+ return (React.createElement("div", { className: `designbase-figma-payment-status ${className || ''}` },
592
+ React.createElement("div", { className: "designbase-figma-payment-status__license-key" },
593
+ resolveText(t, { key: 'payment.license_key_label' }, '라이선스 키'),
594
+ ": ",
595
+ React.createElement("span", null, licenseKey)),
596
+ showDetails && (React.createElement("div", { className: "designbase-figma-payment-status__details" },
597
+ React.createElement("div", { className: "designbase-figma-payment-status__activation-info" },
598
+ React.createElement("div", { className: "designbase-figma-payment-status__remaining" },
599
+ remainingActivations,
600
+ " ",
601
+ resolveText(t, { key: 'payment.activations_remaining' }, '활성'),
602
+ " ",
603
+ resolveText(t, { key: 'payment.spots_remaining' }, '자리 남음')),
604
+ React.createElement("div", { className: "designbase-figma-payment-status__usage" },
605
+ activationUsage,
606
+ "/",
607
+ activationLimit)),
608
+ React.createElement(Button, { onClick: onDeactivate, variant: "tertiary", size: "s", disabled: isDeactivating }, isDeactivating
609
+ ? resolveText(t, { key: 'payment.deactivating' }, '비활성화중...')
610
+ : resolveText(t, { key: 'payment.deactivate_license' }, '라이선스 비활성화'))))));
611
+ };
612
+ PaymentStatusSection.displayName = 'PaymentStatusSection';
613
+
614
+ const ProgressModal = ({ isOpen, onClose, progress, title = { key: 'progress.working' }, completedMessage = { key: 'progress.completed' }, processingMessage = { key: 'progress.processing' }, stopButtonText = { key: 'progress.stop' }, confirmButtonText = { key: 'progress.confirm' }, helpText, onStop, onComplete, loadingIcon, completeIcon, className, t }) => {
665
615
  const [isCompleted, setIsCompleted] = useState(false);
666
616
  const { processedNodes, totalNodes } = progress;
667
617
  const progressPercentage = totalNodes > 0 ? (processedNodes / totalNodes) * 100 : 0;
@@ -682,20 +632,25 @@ const ProgressModal = ({ isOpen, onClose, progress, title = '작업 중', comple
682
632
  onClose();
683
633
  };
684
634
  const modalClasses = clsx('designbase-figma-progress-modal', className);
685
- return (React.createElement(Modal, { isOpen: isOpen, onClose: isCompleted ? onClose : undefined, title: isCompleted ? completedMessage : title, size: "s", className: modalClasses, showCloseButton: false },
635
+ const displayTitle = resolveText(t, isCompleted ? completedMessage : title, isCompleted ? '완료되었습니다' : '작업 중');
636
+ const displayMessage = resolveText(t, isCompleted ? completedMessage : processingMessage, isCompleted ? '완료되었습니다' : '처리 중...');
637
+ const displayStopText = resolveText(t, stopButtonText, '중지');
638
+ const displayConfirmText = resolveText(t, confirmButtonText, '확인');
639
+ const displayHelpText = resolveText(t, helpText);
640
+ return (React.createElement(Modal, { isOpen: isOpen, onClose: isCompleted ? onClose : undefined, title: displayTitle, size: "s", className: modalClasses, showCloseButton: false },
686
641
  React.createElement("div", { className: "designbase-figma-progress-modal__content" },
687
642
  React.createElement("div", { className: "designbase-figma-progress-modal__icon", "aria-hidden": "true" }, isCompleted ? (completeIcon || (React.createElement("div", { className: "designbase-figma-progress-modal__icon-success" },
688
643
  React.createElement(CircleCheckFilledIcon, null)))) : (loadingIcon || (React.createElement("div", { className: "designbase-figma-progress-modal__icon-loading" },
689
644
  React.createElement(Spinner, { size: "m" }))))),
690
- React.createElement("p", { className: "designbase-figma-progress-modal__message" }, isCompleted ? completedMessage : processingMessage),
645
+ React.createElement("p", { className: "designbase-figma-progress-modal__message" }, displayMessage),
691
646
  React.createElement("div", { className: "designbase-figma-progress-modal__status" }, `${processedNodes} / ${totalNodes} (${progressPercentage.toFixed(1)}%)`),
692
647
  React.createElement(Progressbar, { value: progressPercentage, size: "m", variant: isCompleted ? 'success' : 'primary', style: "animated", fullWidth: true }),
693
- helpText && !isCompleted && (React.createElement("p", { className: "designbase-figma-progress-modal__help-text" }, helpText)),
694
- React.createElement("div", { className: "designbase-figma-progress-modal__actions" }, isCompleted ? (React.createElement(Button, { onPress: onClose, variant: "primary", size: "m", fullWidth: true }, confirmButtonText)) : (React.createElement(Button, { onPress: handleStop, variant: "secondary", size: "m", fullWidth: true }, stopButtonText))))));
648
+ displayHelpText && !isCompleted && (React.createElement("p", { className: "designbase-figma-progress-modal__help-text" }, displayHelpText)),
649
+ React.createElement("div", { className: "designbase-figma-progress-modal__actions" }, isCompleted ? (React.createElement(Button, { onPress: onClose, variant: "primary", size: "m", fullWidth: true }, displayConfirmText)) : (React.createElement(Button, { onPress: handleStop, variant: "secondary", size: "m", fullWidth: true }, displayStopText))))));
695
650
  };
696
651
  ProgressModal.displayName = 'ProgressModal';
697
652
 
698
- const ResizablePlugin = ({ children, minWidth = 360, maxWidth = 460, minHeight = 440, maxHeight = 700, icon, className, }) => {
653
+ const ResizablePlugin = ({ children, minWidth = 360, maxWidth = 460, minHeight = 440, maxHeight = 700, icon, ariaLabel = { key: 'plugin.resize' }, className, t }) => {
699
654
  const [isResizing, setIsResizing] = useState(false);
700
655
  const resizeHandleRef = useRef(null);
701
656
  useEffect(() => {
@@ -731,11 +686,11 @@ const ResizablePlugin = ({ children, minWidth = 360, maxWidth = 460, minHeight =
731
686
  React.createElement("div", { ref: resizeHandleRef, className: `designbase-figma-resizable-plugin__handle ${isResizing ? 'resizing' : ''}`, onMouseDown: (e) => {
732
687
  e.preventDefault();
733
688
  setIsResizing(true);
734
- }, role: "button", tabIndex: 0, "aria-label": "Resize plugin" }, icon || React.createElement(ExpandIcon, { size: 12 }))));
689
+ }, role: "button", tabIndex: 0, "aria-label": resolveText(t, ariaLabel, 'Resize plugin') }, icon || React.createElement(ExpandIcon, { size: 12 }))));
735
690
  };
736
691
  ResizablePlugin.displayName = 'ResizablePlugin';
737
692
 
738
- const SettingsModal = ({ isOpen, onClose, categories: initialCategories, categoryGroups, onSave, onReset, title = '목록 변경', description = '드래그하여 순서를 변경하거나, 토글하여 카테고리를 숨길 수 있습니다.', className, }) => {
693
+ const SettingsModal = ({ isOpen, onClose, categories: initialCategories, categoryGroups, onSave, onReset, title = { key: 'settings.modal_title' }, description = { key: 'settings.modal_description' }, className, t }) => {
739
694
  const [tempCategories, setTempCategories] = useState(initialCategories);
740
695
  const [draggedIndex, setDraggedIndex] = useState(null);
741
696
  useEffect(() => {
@@ -828,9 +783,11 @@ const SettingsModal = ({ isOpen, onClose, categories: initialCategories, categor
828
783
  }
829
784
  };
830
785
  const modalClasses = clsx('designbase-figma-settings-modal', className);
831
- return (React.createElement(Modal, { isOpen: isOpen, onClose: onClose, title: title, size: "m", className: modalClasses },
786
+ const displayTitle = resolveText(t, title, '목록 변경');
787
+ const displayDescription = resolveText(t, description, '드래그하여 순서를 변경하거나, 토글하여 카테고리를 숨길 수 있습니다.');
788
+ return (React.createElement(Modal, { isOpen: isOpen, onClose: onClose, title: displayTitle, size: "m", className: modalClasses },
832
789
  React.createElement("div", { className: "designbase-figma-settings-modal__content" },
833
- description && (React.createElement("p", { className: "designbase-figma-settings-modal__description" }, description)),
790
+ displayDescription && (React.createElement("p", { className: "designbase-figma-settings-modal__description" }, displayDescription)),
834
791
  React.createElement("ul", { className: "designbase-figma-settings-modal__list" }, tempCategories.map((category, index) => (React.createElement("li", { key: category.id, draggable: true, onDragStart: (e) => handleDragStart(e, index), onDragOver: handleDragOver, onDrop: (e) => handleDrop(e, index), onDragEnd: handleDragEnd, className: clsx('designbase-figma-settings-modal__item', {
835
792
  'designbase-figma-settings-modal__item--disabled': !category.enabled,
836
793
  'designbase-figma-settings-modal__item--dragging': draggedIndex === index,
@@ -839,13 +796,13 @@ const SettingsModal = ({ isOpen, onClose, categories: initialCategories, categor
839
796
  React.createElement("span", { className: "designbase-figma-settings-modal__drag-handle" },
840
797
  React.createElement(GripVerticalIcon, { size: 16 })),
841
798
  category.icon && (React.createElement("span", { className: "designbase-figma-settings-modal__category-icon" }, category.icon)),
842
- React.createElement("span", { className: "designbase-figma-settings-modal__category-title" }, category.title)),
799
+ React.createElement("span", { className: "designbase-figma-settings-modal__category-title" }, resolveText(t, category.title))),
843
800
  React.createElement(Toggle, { checked: category.enabled, onChange: () => handleToggle(category.id), size: "s" })))))),
844
801
  React.createElement("div", { className: "designbase-figma-settings-modal__footer" },
845
- onReset && (React.createElement(Button, { onPress: handleReset, variant: "tertiary", size: "s" }, "\uCD08\uAE30\uD654")),
802
+ onReset && (React.createElement(Button, { onPress: handleReset, variant: "tertiary", size: "s" }, resolveText(t, { key: 'settings.reset' }, '초기화'))),
846
803
  React.createElement("div", { className: "designbase-figma-settings-modal__footer-right" },
847
- React.createElement(Button, { onPress: handleCancel, variant: "tertiary", size: "s" }, "\uCDE8\uC18C"),
848
- React.createElement(Button, { onPress: handleSave, variant: "primary", size: "s" }, "\uC800\uC7A5")))));
804
+ React.createElement(Button, { onPress: handleCancel, variant: "tertiary", size: "s" }, resolveText(t, { key: 'settings.cancel' }, '취소')),
805
+ React.createElement(Button, { onPress: handleSave, variant: "primary", size: "s" }, resolveText(t, { key: 'settings.save' }, '저장'))))));
849
806
  };
850
807
  SettingsModal.displayName = 'SettingsModal';
851
808
 
@@ -888,23 +845,5 @@ const UpgradeBanner = ({ onClick, isLoading = false, title = { key: 'banner.upgr
888
845
  };
889
846
  UpgradeBanner.displayName = 'UpgradeBanner';
890
847
 
891
- const LicenseManager = ({ licenseStatus, licenseKey = '', activationLimit = 3, activationUsage = 0, usageCount = 0, onLicenseActivate, onLicenseDeactivate, isActivating = false, isDeactivating = false, className, t }) => {
892
- const [inputValue, setInputValue] = useState('');
893
- const handleLicenseSubmit = async (submittedKey) => {
894
- await onLicenseActivate(submittedKey);
895
- setInputValue('');
896
- };
897
- const handleDeactivate = async () => {
898
- await onLicenseDeactivate();
899
- };
900
- if (licenseStatus === 'ACTIVE' && licenseKey) {
901
- return (React.createElement("div", { className: `designbase-figma-license-manager ${className || ''}` },
902
- React.createElement(PaymentStatusSection, { status: "PAID", usageCount: usageCount, activationLimit: activationLimit, activationUsage: activationUsage, licenseKey: licenseKey, onDeactivate: handleDeactivate, isDeactivating: isDeactivating, showDetails: true, t: t })));
903
- }
904
- return (React.createElement("div", { className: `designbase-figma-license-manager ${className || ''}` },
905
- React.createElement(FormWithSubmit, { onLicenseSubmit: handleLicenseSubmit, value: inputValue, onValueChange: setInputValue, isSubmitting: isActivating, disabled: false, t: t })));
906
- };
907
- LicenseManager.displayName = 'LicenseManager';
908
-
909
- export { DonationBadge, FigmaContainer, FigmaFooter, FigmaHeader, FigmaSection, FigmaSidebar, FormWithSubmit, InteractionFeedback, LanguageSelector, LicenseManager, LogoDropdown, PageLicense, PaymentBadge, PaymentStatusSection, PricingComparison, ProgressModal, ResizablePlugin, SettingsModal, TitleDescription, UpgradeBanner, getActiveSection, resolveText, scrollToSection };
848
+ export { DonationBadge, FigmaContainer, FigmaFooter, FigmaHeader, FigmaSection, FigmaSidebar, FormWithSubmit, InteractionFeedback, LanguageSelector, PageLicense, PaymentBadge, PaymentStatusSection, PricingComparison, ProgressModal, ResizablePlugin, SettingsModal, TitleDescription, UpgradeBanner, getActiveSection, resolveText, scrollToSection };
910
849
  //# sourceMappingURL=index.esm.js.map