@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.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +17 -50
- package/dist/index.esm.css +1 -1
- package/dist/index.esm.css.map +1 -1
- package/dist/index.esm.js +81 -142
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +78 -141
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useRef, useEffect, useState } from 'react';
|
|
2
|
-
import { HeartFilledIcon, CoffeeFilledIcon,
|
|
3
|
-
import { SplitView, Button, Toggle,
|
|
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 = ({
|
|
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
|
|
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
|
|
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
|
|
641
|
-
: t
|
|
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
|
|
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(
|
|
649
|
-
|
|
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
|
|
652
|
-
|
|
653
|
-
React.createElement("span", null, t
|
|
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:
|
|
656
|
-
React.createElement("p", { className: "designbase-figma-page-license__disclaimer" },
|
|
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
|
|
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
|
-
|
|
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" },
|
|
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
|
-
|
|
694
|
-
React.createElement("div", { className: "designbase-figma-progress-modal__actions" }, isCompleted ? (React.createElement(Button, { onPress: onClose, variant: "primary", size: "m", fullWidth: true },
|
|
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":
|
|
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 = '
|
|
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
|
-
|
|
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
|
-
|
|
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" },
|
|
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" },
|
|
848
|
-
React.createElement(Button, { onPress: handleSave, variant: "primary", size: "s" },
|
|
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
|
-
|
|
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
|